我正在构建一个回归模型来预测给定一组其他特征的值。
根据领域的知识,这些其他特征中的一个,比如说成反比。成正比。我尝试了很多不同的模型来验证是否可以获得更好的解释,例如 OLS、线性回归和逻辑回归,但我尝试的每个模型都未能解释系数。
我可以做些什么来获得更好地反映该系数的实际行为的回归?
我正在构建一个回归模型来预测给定一组其他特征的值。
根据领域的知识,这些其他特征中的一个,比如说成反比。成正比。我尝试了很多不同的模型来验证是否可以获得更好的解释,例如 OLS、线性回归和逻辑回归,但我尝试的每个模型都未能解释系数。
我可以做些什么来获得更好地反映该系数的实际行为的回归?
除非您的代码有错误,或者上的系数不显着,否则我倾向于相信模型输出。
数据以这种方式表现并不罕见。仅仅因为和的边际分布成反比,正如可以从两个变量的散点图中得出的结论,并不意味着这种关系以其他变量为条件。
这是一个示例,其中负相关,但正相关取决于另一个值。(该示例是使用 R 生成的——您已经标记了 python,但这个概念与语言无关):
library(tidyverse)
library(broom)
set.seed(1)
N <- 100
dat <- tibble(
x2 = sample(1:4, size = N, replace = TRUE),
x1 = x2 + rnorm(N) / 3,
y = x1 - 2 * x2 + rnorm(N) / 5
)
ggplot(dat, aes(x1, y)) +
geom_point(aes(colour = factor(x2))) +
theme_bw() +
scale_colour_discrete("x2")

这是线性回归模型的输出。您会注意到,不涉及上的系数为负时为正。这是因为回归系数的解释是给定其他协变量的关系。
lm(y ~ x1, data = dat) %>%
tidy()
#> # A tibble: 2 x 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) -0.492 0.154 -3.20 1.83e- 3
#> 2 x1 -0.809 0.0549 -14.7 1.33e-26
lm(y ~ x1 + x2, data = dat) %>%
tidy()
#> # A tibble: 3 x 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 0.0189 0.0540 0.349 7.28e- 1
#> 2 x1 1.04 0.0681 15.3 1.42e-27
#> 3 x2 -2.05 0.0726 -28.2 1.60e-48
由reprex 包(v0.3.0)于 2020-04-27 创建
这个概念扩展到两个以上的协变量,以及连续的协变量。
模型只能看到为训练提供的数据。不是领域真理。
1.你的 Y 是否与 X1 成反比
- 用简单的散点图检查
- 另外,尝试用相关矩阵查看相关强度(与 Y)
2.如果否,
- 检查数据源并了解冲突
3.如果是,
可能的原因可能是任何其他变量的影响(在接受的答案中指出),您可以尝试这些
--前向选择,用X1建立模型并查看coef_,必须是-ve然后添加其他变量一一查看哪个变量执行此操作
- 检查与其他变量的相关性,X1 可能是一个不太重要的特征。这可能会给你一个新的洞察力来研究你的数据和领域