文章目录
- statsmodels:Python 统计推断的实用工具库
- 覆盖哪些统计场景
- 和 sklearn 的区别在哪
- 安装和使用
- 适合谁用
- 一点看法
statsmodels:Python 统计推断的实用工具库
在 Python 数据科学生态里,statsmodels 是一个老面孔。这个项目目前在 GitHub 上有 11,455 个 Star,作为一个专注于统计建模和推断的库,它和 scipy、sklearn 形成了互补关系。
statsmodels 的定位很清晰:提供统计计算中的描述统计、模型估计和统计推断功能。如果你的工作涉及回归分析、时间序列建模或者假设检验,这个库值得了解。
覆盖哪些统计场景
statsmodels 的功能模块分得比较细。回归模型方面,支持普通最小二乘、广义最小二乘、加权最小二乘、分位数回归和递归最小二乘。广义线性模型覆盖了单参数指数族分布。离散模型包括 Logit、Probit、多项 Logit、泊松回归、负二项回归和零膨胀计数模型。
时间序列分析是 statsmodels 的一个强项。它提供了完整的状态空间建模框架,支持季节 ARIMA、VARMA、动态因子模型和未观测成分模型。此外还有马尔可夫切换模型、向量误差修正模型、指数平滑和 Holt Winters 方法。假设检验方面涵盖了单位根检验和协整检验。
生存分析模块支持 Cox 比例风险回归、Kaplan-Meier 生存函数估计和累积发生率函数估计。多元统计部分有主成分分析、因子分析、MANOVA 和典型相关分析。非参数统计方面提供了单变量和多变量核密度估计器。
和 sklearn 的区别在哪
很多人会把 statsmodels 和 sklearn 搞混。两者都能做回归,但设计目标不同。
sklearn 偏向预测。它追求模型在测试集上的表现,评价指标是准确率、R² 这些。statsmodels 则偏向解释。它会给 p 值、置信区间、标准误,让你判断某个变量是否真的对结果有影响。
做学术研究或者业务分析时,经常需要回答「X 对 Y 的影响是否显著」这种问题。statsmodels 的 summary 输出直接给出这些统计量,不需要自己额外计算。
安装和使用
statsmodels 可以通过 pip 或 conda 安装,支持 Python 3.9 及以上版本。和 pandas、numpy 的兼容性很好,数据结构可以直接对接。
使用方式也很直接。以线性回归为例,用公式接口可以写成类似 R 语言的语法:smf.ols('y ~ x1 + x2', data=df).fit()。拟合后调用.summary()就能看到完整的回归诊断报告。
时间序列模型的 API 设计得也比较统一。ARIMA、SARIMAX、VAR 这些模型都遵循类似的拟合流程,学习成本不高。
适合谁用
statsmodels 的用户群体相对明确。社会科学、经济学、生物医学领域的研究人员会用到它的假设检验和回归诊断功能。金融行业的分析师用它做时间序列预测和波动率建模。数据科学家在需要解释模型结果时,也会把它和 sklearn 搭配使用。
项目文档比较完善,有稳定版和开发版两个站点。社区活跃度中等,issue 区和邮件列表都能得到回应。
一点看法
statsmodels 不是那种会上热榜的网红项目。它解决的是基础但重要的问题:在 Python 里做严谨的统计分析。11,455 个 Star 对它来说已经是一个合理的体量。
如果你平时做数据建模只关注预测准确率,可能用不上它。但当你需要写论文、做报告、向老板解释「为什么这个因素重要」的时候,statsmodels 的统计输出能帮你省很多事。
这个项目已经持续维护了很多年,API 相对稳定。对于统计建模有刚性需求的 Python 用户来说,它是一个可靠的选择。
多年,API 相对稳定。对于统计建模有刚性需求的 Python 用户来说,它是一个可靠的选择。