获得预测线性回归的置信区间

数据挖掘 Python scikit-学习 熊猫 线性回归
2021-10-03 18:01:28

我正在使用的数据被用来预测两点之间的旅行持续时间。数据中有大约 100 次不同的行程和大约 9 万次观测。

我正在使用标准模式:

feature_cols = df_features.columns.drop( [ 'log_duration' ] )
X            = df_features[ feature_cols ]
y            = df_features.log_duration

X_train, X_test, y_train, y_test = train_test_split( X, y, random_state = 42 )
linreg = LinearRegression()
linreg.fit( X_train, y_train )
linreg.score( X_test, y_test )

执行回归并获得我的分数(~.74)。

但是,假设它预测两点之间的行程需要 40 分钟。显然,它不会完全花费 40 分钟。我正在寻找的是一种报告旅行需要 40 分钟 +/- C 分钟数的方法。

使用 Pandas 和 SciKit,我如何获得 C?

2个回答

您可以估计预测的标准差:

stdev = np.sqrt(sum((linreg.predict(X_train) - y_train)**2) / (len(y_train) - 2))

然后,对于您想要的任何显着性水平,您应该检查相应的高斯临界值(例如,对于显着性水平 95%,它是 1.96)。

最后,置信区间为(预测 - 1.96*stdev,预测 + 1.96*stdev)(或对于任何其他置信水平类似)。

另一种方法是使用statsmodels包。

由于您使用的是线性回归,因此您可以使用此处描述的方法。+-标准偏差要复杂得多,但会更准确。