网易首页 > 网易号 > 正文 申请入驻

3个Statsmodels技巧:预测区间、增量更新与STL自动化

0
分享至

一个已经拟合好的statsmodels模型,能算出的东西远不止大多数代码从里面取出的那串数字。点预测只是它能完成的最小任务。下面这三个技巧,本质上都是向结果对象索取它已经算好的东西,而不是自己动手重建一遍。

同一份数据集、同一个模型、三个经常被人重新实现的方法。三个技巧都跑在同一份月度序列和同一个拟合模型上,唯一的区别是调用了结果对象上的哪个方法。以下内容均基于statsmodels 0.15.0验证。


先安装statsmodels:

pip install statsmodels

技巧一:要区间,不只要数字

res.forecast(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就是同一个思路应用在可以包含样本内区间的范围上。

技巧二:不重新拟合就加入新数据

十二个月的新观测到了。条件反射是把它们拼接到训练数据上再调用一次.fit(),这会从头重新估计每一个参数。append做的事情更便宜:它在合并后的数据上重建结果对象,并且在refit=False时保留你已经估计出的参数:

updated = res.append(recent, refit=False)
print(updated.get_forecast(6).summary_frame().head())

输出:

co2 mean mean_se mean_ci_lower mean_ci_upper
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:用于另一份数据集,而不是当前数据的延续

技巧三:让STL处理季节性

手动版本的流程分三步:

  1. 分解序列
  2. 预测季节性调整后的部分
  3. 再把季节成分加回到预测上

符号错误和索引错位就发生在第三步。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()返回了什么。读一读结果对象,然后别再重写它了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
第二季还没播,Netflix就续订了第三季

第二季还没播,Netflix就续订了第三季

赴一场山海啊
2026-10-08 00:04:02
韩媒:国足不敌塔吉克斯坦后,多重问题爆发导致球队危机加剧

韩媒:国足不敌塔吉克斯坦后,多重问题爆发导致球队危机加剧

懂球帝
2026-10-08 01:13:09
青岛某公立中学违规收集学生中考敏感信息?青岛市教育局:班主任个人留存用于了解学生升学情况

青岛某公立中学违规收集学生中考敏感信息?青岛市教育局:班主任个人留存用于了解学生升学情况

琴岛热搜君
2026-10-07 14:44:07
国庆去了趟西安,让我惊掉了下巴,西安人,你也太牛逼了!

国庆去了趟西安,让我惊掉了下巴,西安人,你也太牛逼了!

夜深爱杂谈
2026-10-07 21:14:34
全员预判失败!国庆首批提前返程车主集体翻车,自嘲大聪明又失算

全员预判失败!国庆首批提前返程车主集体翻车,自嘲大聪明又失算

小虎新车推荐员
2026-10-07 09:38:01
演都不演了!张本智和被曝丑闻后,首次大胆表态,和陈梦是一种人

演都不演了!张本智和被曝丑闻后,首次大胆表态,和陈梦是一种人

林轻吟
2026-10-06 16:53:04
演员贾乃亮已多年没作品,本人回应:因为无戏可拍,而且面临一个尴尬的问题……

演员贾乃亮已多年没作品,本人回应:因为无戏可拍,而且面临一个尴尬的问题……

美芽
2026-10-07 18:43:37
乐基儿年轻时真漂亮,看曾志伟的眼神就知道了

乐基儿年轻时真漂亮,看曾志伟的眼神就知道了

娱你同欢
2026-09-13 20:22:17
港媒当年爆猛料:郭富城为追藤原纪香,砸6400万买飞机

港媒当年爆猛料:郭富城为追藤原纪香,砸6400万买飞机

动物奇奇怪怪
2026-10-07 02:05:56
程序员男友帮女友挂专家号,写出“抢号软件”,后帮人收费“抢号”,搞瘫医院挂号系统,法院判了

程序员男友帮女友挂专家号,写出“抢号软件”,后帮人收费“抢号”,搞瘫医院挂号系统,法院判了

环球网资讯
2026-10-07 13:28:10
王思聪女友懒懒游欧洲,五套妆造全在审美点上,老外回头率200%

王思聪女友懒懒游欧洲,五套妆造全在审美点上,老外回头率200%

孤芳自赏的小李
2026-10-05 19:56:18
私会美方被抓包!伊朗外长遭弹劾,穆杰塔巴对此竟毫不知情?

私会美方被抓包!伊朗外长遭弹劾,穆杰塔巴对此竟毫不知情?

涵豆说娱
2026-10-08 05:50:11
不想进国家队了?热刺中场M费给C罗声明点赞

不想进国家队了?热刺中场M费给C罗声明点赞

懂球帝
2026-10-07 14:25:09
真香!勇士两大弃将彻底打疯!怀斯曼高效爆发,库明加首秀惊艳,低价合同赚翻了

真香!勇士两大弃将彻底打疯!怀斯曼高效爆发,库明加首秀惊艳,低价合同赚翻了

晚雾空青
2026-10-07 14:01:42
真敢说!穆帅+瓜帅+伊布,齐齐点评梅西!这些话听着就离谱!

真敢说!穆帅+瓜帅+伊布,齐齐点评梅西!这些话听着就离谱!

桃叶渡春
2026-10-08 04:55:31
谁的白月光

谁的白月光

草莓解说体育
2026-10-07 00:30:44
开拓者不给续约也不交易!探花麻了,球队不培养,还被莫兰特取代

开拓者不给续约也不交易!探花麻了,球队不培养,还被莫兰特取代

你的篮球频道
2026-10-07 08:36:02
“我们自愿有何罪”?三男三女聚众淫乱,三亚高知换妻游戏案始末

“我们自愿有何罪”?三男三女聚众淫乱,三亚高知换妻游戏案始末

易玄
2026-09-13 11:43:30
真相揭开!上海音乐教师平安回国,险落高薪电诈圈套,评论炸锅:上海平均工资是1.2万元,泰国平均工资是多少?正常人一想就明白了

真相揭开!上海音乐教师平安回国,险落高薪电诈圈套,评论炸锅:上海平均工资是1.2万元,泰国平均工资是多少?正常人一想就明白了

火山詩话
2026-10-08 05:32:45
格陵兰岛本就不属于丹麦!真正归属早有定论,只是条约安排的结果

格陵兰岛本就不属于丹麦!真正归属早有定论,只是条约安排的结果

犀利强哥
2026-10-07 16:42:09
2026-10-08 06:44:49
我是一个粉刷匠2
我是一个粉刷匠2
有态度网友ytd
121文章数 170关注度
往期回顾 全部

科技要闻

诺贝尔化学奖揭晓,两位科学家摘得大奖

头条要闻

中国新婚夫妇在马尔代夫度假溺亡 有人1天目睹2起溺水

头条要闻

中国新婚夫妇在马尔代夫度假溺亡 有人1天目睹2起溺水

体育要闻

从骑马舞到开口全中文 德约在北京不止七冠

娱乐要闻

蔡康永风波再升级!这次谁也救不了他

财经要闻

谷歌签下科技史上最大核能协议

汽车要闻

智能化再提升 2027款东风标致、东风雪铁龙新车更人性化了

态度原创

教育
房产
数码
本地
公开课

教育要闻

走进上海一年花费30万的私立学校

房产要闻

保利大爆发,冲到榜一!海南楼市前三季度,热销榜出炉!

数码要闻

微软Surface Laptop Ultra笔记本、Surface RTX Spark Dev Box开发机价格公布:2599美元/5999美元

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版