KDnuggets

3 Statsmodels Tricks for Time Series Analysis & Forecasting

8.5内容质量

TL;DR · AI 摘要

statsmodels库的三个时间序列分析技巧可提升预测效率,包含区间获取、动态数据追加和参数自适应模型。

核心要点

  • 使用get_forecast()可同时获取预测值和置信区间,避免手动计算
  • append()方法可追加新数据而不重新拟合模型,节省计算资源
  • 动态模型(Dynamic Model)能自动适应参数变化,提升长期预测准确性

结构提纲

按章节快速跳转。

  1. 介绍statsmodels库在时间序列分析中的三个实用技巧

  2. 通过get_forecast()方法同时获取预测值和置信区间

  3. 使用append()方法在不重新拟合模型的情况下追加新数据

  4. 动态模型可自动适应参数变化,提升预测灵活性

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • statsmodels时间序列技巧
    • 预测区间获取
      • get_forecast()方法
    • 数据追加优化
      • append()方法
    • 动态模型应用
      • 参数自适应调整

金句 / Highlights

值得收藏与分享的关键句。

#Python#statsmodels#时间序列分析#机器学习
打开原文

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:

code
pip install statsmodels

技巧 1:获取区间而非仅数字

res.forecast(12) 会返回12个数字。res.get_forecast(12) 会返回一个 PredictionResults 对象,该对象还包含模型已估算的不确定性。有 predicted_mean 表示预测值,conf_int 表示置信区间,summary_frame() 可同时显示两者。这些区间甚至不是额外工作;它们是相同计算的结果,而较短的方法只是丢弃了它们:

code
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())

输出:

code
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 保留已估算的参数:

code
updated = res.append(recent, refit=False)

print(updated.get_forecast(6).summary_frame().head())
code
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)对去季节化数据进行预测":

code
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())
code
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