Python里怎么对非平稳时间序列做差分_使用Statsmodels库进行ADF检验与ARIMA建模

雨伟君_3735

雨伟君_3735

2026-04-14

188人浏览

原创

ADF检验中p值小于0.05且ADF统计量小于临界值(如-3.43)才可判定序列平稳;若p值大于0.05或存在明显趋势/季节性,需差分,通常一至二阶即可,超过二阶易导致过差分。

python里怎么对非平稳时间序列做差分_使用statsmodels库进行adf检验与arima建模

怎么判断一个序列是否需要差分

看 adfuller 返回的 p-value —— 小于 0.05 才算平稳;大于 0.05 就得差分。但别只盯 p 值,还要看 adf 统计量是否小于临界值(比如 -3.43),否则可能误判。常见陷阱是:原始序列带明显趋势或季节性,adfuller 却返回 p=0.07,这时不能硬扛,该差分还得差分。

实操建议:

macOS UI 自动化技能包 —— 用 Python 控制你的 Mac
macOS UI 自动化技能包 —— 用 Python 控制你的 Mac

让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限

下载
  • 先画 plot() 看趋势和方差是否随时间变化;突增、缓升、周期震荡都是非平稳信号
  • 用 adfuller(series, autolag="AIC"),别省掉 autolag 参数,否则滞后阶数选得不准,检验效力下降
  • 如果一阶差分后仍不平稳(p > 0.05),再试二阶,但超过二阶要警惕——可能过差分导致噪声放大、模型失真

Statsmodels里怎么正确做ADF检验

adfuller 默认只检验无常数项、无趋势项的单位根,但现实数据大多带漂移或趋势,直接调用容易漏检。必须根据序列形态手动指定 regression 参数。

实操建议:

  • 纯随机游走(均值不变、无趋势)→ 用默认 regression="c"(含截距)
  • 有线性趋势(如逐年增长)→ 改成 regression="ct"(含截距 + 时间趋势项)
  • 季节性强的数据(如月度销售)→ 先用 seasonal_decompose 拆解,再对残差做 ADF,别直接对原序列硬上
  • 检验前务必 drop 掉 NaN:差分后头几个值是 NaN,adfuller 遇到会报 ValueError: array must not contain infs or NaNs

ARIMA建模时d参数怎么定,和差分操作怎么对齐

ARIMA(p, d, q) 中的 d 必须等于你实际做的差分阶数,且差分操作必须在拟合前完成——Statsmodels 不会在内部自动帮你差分原始序列。很多人把 d=1 和原始序列直接喂给 ARIMA,结果模型拟合的是差分后序列,但预测时却反向还原错位,导致结果全偏。

实操建议:

  • 先用 series.diff(d).dropna() 得到平稳序列,再用它跑 adfuller 验证
  • d 取值后,建模时传入原始序列 + d 参数:ARIMA(series, order=(p, d, q)),内部会按需差分
  • 预测后用 model.forecast(steps=10) 得到的是差分域结果;要还原到原始尺度,得用 model.get_forecast().predicted_mean 配合 series.iloc[-1] 手动累加(尤其 d=1 时)
  • 别用 diff().diff() 做二阶差分——它会把索引搞乱,改用 series.diff(2)

差分后建模效果差,可能是这几点没注意

差分只是手段,不是万能解。很多情况下,差分完 ADF 过了,但 ARIMA 拟合残差仍有自相关,说明差分没解决根本问题——比如季节性未剥离、外生变量缺失、或波动率时变(需 GARCH)。

实操建议:

  • 画 plot_acf/plot_pacf 看差分后序列:如果滞后 12 处还有显著峰,大概率是残留季节性,得考虑 SARIMAX 而非普通 ARIMA
  • 检查残差是否异方差:用 plot(series.diff().std()) 看标准差是否随时间跳变,跳变明显就别硬上 ARIMA,试试对数变换或 ARCH 类模型
  • 差分会丢失首部信息,样本量变少,小数据集(
差分不是黑箱开关,它改变的是序列的生成机制。同一个 d 值,在不同数据上意义可能完全不同——关键是你差分之后,是否还相信这个序列的未来是由它的过去线性决定的。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1811

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4784

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1769

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

28497

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3427

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3427

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1223

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

616

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2663

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习