3 Statsmodels Tricks for Time Series Analysis & Forecasting
TL;DR · AI 摘要
statsmodels库的三个时间序列分析技巧可提升预测效率,包含区间获取、动态数据追加和参数自适应模型。
核心要点
- 使用get_forecast()可同时获取预测值和置信区间,避免手动计算
- append()方法可追加新数据而不重新拟合模型,节省计算资源
- 动态模型(Dynamic Model)能自动适应参数变化,提升长期预测准确性
结构提纲
按章节快速跳转。
- §引言
介绍statsmodels库在时间序列分析中的三个实用技巧
通过get_forecast()方法同时获取预测值和置信区间
使用append()方法在不重新拟合模型的情况下追加新数据
动态模型可自动适应参数变化,提升预测灵活性
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- statsmodels时间序列技巧
- 预测区间获取
- get_forecast()方法
- 数据追加优化
- append()方法
- 动态模型应用
- 参数自适应调整
金句 / Highlights
值得收藏与分享的关键句。
res.get_forecast(12)返回的PredictionResults对象包含预测均值和置信区间
append()方法在refit=False时可复用已有参数,避免重复拟合
动态模型通过时间变量调整参数,适合处理非平稳时间序列
3 个 Statsmodels 技巧:时间序列分析与预测 - KDnuggets
publ: 2026年10月5日
- 博客热门文章
- 主题 AI 职业建议 计算机视觉 数据工程 数据科学 语言模型 机器学习 MLOps NLP 编程 Python SQL
- 数据集
- 活动
- 资源 快速参考指南 推荐 技术简报
- 广告
订阅电子报
#header end
/ad_wrapper
3 个 Statsmodels 技巧:时间序列分析与预测
拟合的 statsmodels 模型计算的不仅仅是大多数代码从中提取的数字数组。
作者:
Matthew Mayo,KDnuggets 主编,2026年10月5日于 Python
<div class="addthis_native_toolbox"></div>
拟合的 statsmodels 模型计算的不仅仅是大多数代码从中提取的数字数组。点预测是它能执行的最简单任务。每个技巧都源于向结果对象请求它已经计算出的内容,而不是手动重新构建这些内容。一个数据集、一个模型、三种人们经常重新实现的方法。所有三种方法都针对相同的月度序列和相同的拟合模型运行,因此它们之间唯一的变化是哪个方法被调用在拟合返回的对象上。
以下所有内容均在 statsmodels 0.15.0 版本中验证过。
首先安装 statsmodels:
pip install statsmodels技巧 1:获取区间而非仅数字
res.forecast(12) 会返回12个数字。res.get_forecast(12) 会返回一个 PredictionResults 对象,该对象还包含模型已估算的不确定性。有 predicted_mean 表示预测值,conf_int 表示置信区间,summary_frame() 可同时显示两者。这些区间甚至不是额外工作;它们是相同计算的结果,而较短的方法只是丢弃了它们:
import statsmodels.api as sm
from statsmodels.tsa.arima.model import ARIMA
co2 = sm.datasets.co2.load_pandas().data["co2"]
co2 = co2.resample("MS").mean().ffill()
train, recent = co2[:-12], co2[-12:]
res = ARIMA(train, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12)).fit()
print(res.get_forecast(12).summary_frame().head())输出:
co2 mean mean_se mean_ci_lower mean_ci_upper
2001-01-01 370.523929 0.322722 369.891406 371.156452
2001-02-01 371.253673 0.388214 370.492787 372.014559
2001-03-01 372.200726 0.429518 371.358887 373.042566
2001-04-01 373.468351 0.463501 372.559905 374.376797
2001-05-01 373.856957 0.494157 372.888427 374.825487发布预测时不包含区间是一个选择。如果你想获取历史拟合值而不是未来路径,可以使用 get_prediction,这个方法同样适用于包含样本内时期的范围。
技巧 2:无需重新拟合添加新数据
12个月的观测数据到达时,本能反应是将它们连接到训练数据并再次调用 .fit(),这会从头开始重新估计所有参数。append 方法更高效:它在合并数据上重新创建结果对象,并通过设置 refit=False 保留已估算的参数:
updated = res.append(recent, refit=False)
print(updated.get_forecast(6).summary_frame().head())co2 均值 均值标准误 均值置信区间下限 均值置信区间上限
2002-01-01 371.969954 0.322722 371.337432 372.602477
2002-02-01 372.750021 0.388214 371.989135 373.510907
2002-03-01 373.654908 0.429518 372.813068 374.496748
2002-04-01 374.834276 0.463501 373.925830 375.742722
2002-05-01 375.328719 0.494157 374.360189 376.297248默认值为 refit=False,此时会复用已有的估计结果。当积累足够多的新数据需要重新计算时,应传递 refit=True。
共有三种方法可供选择:
append会重新在原始数据和新数据上运行滤波器extend仅处理新观测值,当历史数据较长时速度更快apply用于不同数据集而非延续当前数据集的场景
技巧 3:让 STL 处理季节性
该过程的手动实现包含三个步骤:
- 对序列进行分解
- 预测季节性调整后的部分
- 将季节性成分重新叠加到预测结果上
问题通常出现在第三步,此时会出现符号错误和索引错位。STLForecast 将整个流程封装为一个对象。文档描述其为"首先使用 STL 估计季节性并将其减去,然后使用时间序列模型(例如 ARIMA)对去季节化数据进行预测":
from statsmodels.tsa.forecasting.stl import STLForecast
stlf = STLForecast(train, ARIMA, model_kwargs={"order": (1, 1, 1), "trend": "t"})
print(stlf.fit().forecast(12).head())2001-01-01 370.529117
2001-02-01 370.963627
2001-03-01 371.921080
2001-04-01 373.137720
2001-05-01 373.144192
Freq: MS, dtype: float64注意传递参数的方式:传递的是 ARIMA 类本身而非已拟合实例,模型参数通过 model_kwargs 单独传递。这是该 API 中真正令人意外的设计,而使用 ARIMA(...) 的写法则是大多数人在此处最容易犯的第一个错误。
总结
此处所有技巧都是对已有对象已有的方法的调用。手动实现方式更长、更慢且更容易出错,因此在这种情况下偏离内置方法并不值得。通常出现这种手动实现是因为没有人查看过 .fit() 返回的结果对象。请阅读结果对象;然后停止重复定义它。
Matthew Mayo(@mattmayo13)拥有计算机科学硕士学位和数据挖掘研究生文凭。作为 KDnuggets & Statology 的总编辑以及 Machine Learning Mastery 的特约编辑,Matthew 致力于使复杂的数据科学概念变得易懂。他的专业兴趣包括自然语言处理、语言模型、机器学习算法以及探索新兴人工智能技术。他致力于推动数据科学社区的知识民主化。Matthew 从6岁起就开始编程。
更多相关内容
- 《懒人数据科学家的时间序列预测指南》
- 《掌握Python时间序列分析的7个步骤》
- 《5个实用Python脚本用于时间序列分析》
- 《受真实世界数据集启发的时间序列与趋势分析挑战》
- 《如何使用Dask进行并行时间序列分析》
- 《如何在R中进行时间序列分析》
<hr class="grey-line"><br> <div><h3>我们推荐的5门免费课程</h3><br> </div>
Mailchimp for WordPress v4.14.1 - https://wordpress.org/plugins/mailchimp-for-wp/
/ Mailchimp for WordPress 插件
您可以从这里开始编辑。
如果评论已关闭。
<= 上一篇
#content end
<script type="text/javascript">kda_sid_write(kda_sid_n);</script>
最新文章
- 时间序列分析与预测的3个Statsmodels技巧 Python工程基础:KDnuggets速查表 前端部署工程师:AI领域最热门的新职业,还是拥有更好头衔的咨询?5种经验证明的标记压缩和提示优化技术 2026年BrowserAct AI网络爬虫:从杂乱文档到结构化数据的Docling工具
热门文章
- Python工程基础:KDnuggets速查表
- 学习AI工程的5门免费课程
- SuperWhisper s1-mini:专为转录打造的6亿参数模型
- 使用Ollama管理本地语言模型:KDnuggets速查表
- 使代码更简洁更快的10个Python单行语句
- 如何使用Marimo进行交互式数据分析
- 2026年可使用的5个免费LLM API提供商
- 5分钟了解MCP
- 从杂乱文档到结构化数据的Docling工具
- 如何利用AI将Excel数据转换为PowerPoint演示文稿
#content_wrapper end
© 2026
Guiding Tech Media
|
关于
联系我们
广告合作
隐私政策
服务条款
2026年10月5日由
blank
不,谢谢!
/.main_wrapper
<script defer type="text/javascript" src="https://s7.addthis.com/js/300/addthis_widget.js#pubid=gpsaddthis"></script>
noptimize
/noptimize