Kaggle Kernel中导入statsmodels.api失败及OLS替代方案咨询
嘿,我来帮你搞定这个Kaggle里的statsmodels问题!你遇到的ImportError: cannot import name 'factorial'是因为statsmodels 0.10.0和新版本scipy的兼容性冲突——scipy后续版本调整了factorial的导入路径,而旧版statsmodels还在依赖老路径。下面给你两种思路解决:
一、修复statsmodels的导入错误
1. 安装和statsmodels 0.10.0兼容的scipy版本
在Kaggle Kernel的代码单元格里执行这条命令,锁定scipy到1.2.1版本(这个版本和statsmodels 0.10.0完美兼容):
!pip install scipy==1.2.1
安装完成后重启Kernel(Kaggle里点右上角的"Restart Session"),再执行import statsmodels.api as sm应该就能正常导入了,之后你就可以用sm.OLS(y, X)来做回归分析,生成标准的统计摘要。
2. 降级statsmodels到更稳定的版本
如果上面的方法没奏效,你可以把statsmodels降到0.9.0,这个版本在Kaggle的默认环境里几乎不会出现依赖问题:
!pip install statsmodels==0.9.0
同样重启Kernel后就能正常导入使用了。
二、如果无法修复,替代的OLS回归工具
要是折腾半天还是搞不定,这里有两个好用的替代方案,都能生成你需要的回归统计摘要:
1. 使用pingouin库(推荐)
pingouin是一个专门做统计分析的轻量库,API友好,能直接输出详细的回归结果。步骤如下:
- 先安装pingouin:
!pip install pingouin
- 然后用它做OLS回归(假设你的自变量存在DataFrame
X,因变量是Seriesy):
import pingouin as pg # 拟合模型并生成摘要 reg_results = pg.linear_regression(X, y) # 打印完整的统计结果 print(reg_results)
它会输出包含系数、p值、R²、F值、置信区间等所有你需要的指标,完全满足回归分析的需求。
2. sklearn+scipy手动生成关键指标
如果不想安装新库,你可以用sklearn的线性回归模型配合scipy计算统计量:
from sklearn.linear_model import LinearRegression import scipy.stats as stats import numpy as np # 拟合模型 lr = LinearRegression() lr.fit(X, y) # 计算关键统计指标 n = len(y) p = X.shape[1] y_pred = lr.predict(X) residuals = y - y_pred df_residual = n - p - 1 mse = np.sum(residuals**2) / df_residual se = np.sqrt(mse * np.diag(np.linalg.inv(X.T @ X))) t_values = lr.coef_ / se p_values = 2 * (1 - stats.t.cdf(np.abs(t_values), df_residual)) # 输出结果 print(f"回归系数: {lr.coef_}") print(f"截距项: {lr.intercept_}") print(f"系数p值: {p_values}") print(f"模型R²: {lr.score(X, y)}")
这个方法需要自己手动整理结果,但胜在不需要额外安装库,适合简单的回归场景。
内容的提问来源于stack exchange,提问作者Leks

