)
从杂志印刷量到股票价格手把手教你用ADF检验判断时间序列平稳性附Excel/SPSSPRO/Python三种工具操作当运营部门的同事拿着最近三年的月度销量数据来咨询为什么预测模型总是不准或是炒股的朋友盯着K线图问这只股票的价格波动有没有规律时时间序列平稳性这个概念就会突然变得无比重要。ADF检验Augmented Dickey-Fuller test就像一位严谨的统计学法官能客观裁决我们的数据究竟是在规律波动还是随波逐流——而今天我们将用最接地气的方式带你在Excel、SPSSPRO和Python三种工具中玩转这个关键检验。1. 为什么平稳性检验是时间分析的基石想象你正在观察两个不同的钟摆一个在无风环境中规律摆动另一个被随机吹来的气流干扰。前者就是平稳序列的物理体现——它的统计特性如摆动幅度、周期不随时间改变而后者则是典型的非平稳过程。在数据分析中约90%的传统时间序列模型如ARIMA都要求输入数据满足平稳性条件否则就会产生虚假回归——就像用天气预报模型预测股票走势一样荒谬。平稳性的三个核心特征均值不随时间变化没有整体上升/下降趋势方差保持恒定波动幅度稳定自相关系数只与时间间隔有关周期规律稳定以杂志印刷量数据为例原始序列图显示1995-2019年间有明显的增长趋势均值随时间上升这直接违反了第一条特征。而经过一阶差分即用本年数据减去年数据处理后新序列围绕固定值波动此时ADF检验的p值小于0.01我们才能放心地说现在可以建模了注意差分阶数并非越高越好。过度差分会导致序列失去经济意义就像把音乐过度降噪后会损失细节。2. ADF检验的数学直觉与结果解读ADF检验本质上是在检验时间序列是否存在单位根——这个数学术语可以通俗理解为记忆残留效应。原假设H₀认为序列存在单位根即非平稳而备择假设H₁则主张序列平稳。检验统计量ADF值越负p值越小我们越有底气拒绝原假设。关键输出指标解读指南指标名称判断标准典型值范围ADF统计量绝对值越大越倾向于平稳-1至-4常见p值0.05时拒绝原假设认为平稳0.01-0.99临界值(1%)ADF统计量比其更负则显著平稳-3.43左右滞后阶数自动选择时参考AIC/BIC准则0-12依频率定在股票价格案例中某科技股日收盘价的ADF检验结果可能显示ADF Statistic: -1.893 p-value: 0.335 Critical Values: 1%: -3.439 5%: -2.865 10%: -2.569此时p值0.05且ADF值大于所有临界值我们必须接受序列非平稳的结论——这与金融学中股价遵循随机游走的经典理论一致。3. Excel实战无需编程的平稳性检验对于习惯电子表格的商务人士Excel提供了两种ADF检验路径方法A数据分析工具库需安装文件→选项→加载项→勾选分析工具库数据选项卡点击数据分析选择回归在Y值区域输入差分后序列添加X变量滞后的原序列通常1-3期方法BRealStats插件更专业下载安装RealStats免费版足够选择菜单Time Series→Unit Root Test设置参数Time series range: B2:B50数据区域Lags: 3建议用BIC自动选择Include trend: ☑多数情况需要操作技巧在分析月度销量数据时建议先制作折线图观察趋势。若存在明显季节性还需进行季节性差分如12期差分这在Excel中可通过B14-B2等公式实现。4. SPSSPRO在线工具的极简之道对于追求效率的非技术用户SPSSPRO的在线ADF检验堪称傻瓜式操作典范上传数据支持Excel/CSV在时间序列模块选择单位根检验关键参数配置检验类型包含常数项和趋势项最常用最大滞后系统默认基于SIC准则差分阶数从0开始尝试优势对比自动生成带注释的结果报告可视化差分前后序列对比图一键导出Word格式分析结论某快消品运营数据在SPSSPRO中的典型输出包括检验结论在0.05显著性水平下原始序列p值0.782非平稳一阶差分p值0.003平稳建议使用ARIMA(1,1,1)模型进行预测。5. Python全流程代码解析对于数据科学家用Python实现ADF检验既能灵活控制细节又能无缝接入后续建模流程# 环境准备 import pandas as pd from statsmodels.tsa.stattools import adfuller import matplotlib.pyplot as plt # 数据加载假设是股价数据 df pd.read_csv(stock_price.csv, parse_dates[Date], index_colDate) # 可视化原始序列 df[Close].plot(titleDaily Closing Price) plt.show() # 执行ADF检验 result adfuller(df[Close], regressionct, autolagBIC) print(fADF Statistic: {result[0]:.3f}) print(fp-value: {result[1]:.3f}) print(Critical Values:) for k, v in result[4].items(): print(f {k}: {v:.3f}) # 自动差分直到平稳实用函数 def make_stationary(series, max_diff3): for d in range(max_diff 1): adf_result adfuller(series.diff(d).dropna()) if adf_result[1] 0.05: return d, series.diff(d) return None optimal_diff, stationary_data make_stationary(df[Close])参数选择经验regressionct包含常数项和趋势项适用于大多数经济数据autolagBIC用贝叶斯信息准则自动选择最优滞后阶数对季度数据可设置max_diff4以捕捉季节性6. 跨领域数据的检验策略差异不同性质的时间序列需要调整检验策略缓慢增长的运营数据如杂志印刷量典型特征确定性趋势主导检验配置包含趋势项regressionct处理方案一阶差分通常足够剧烈波动的金融数据如股价典型特征随机游走特性明显检验配置可能只需常数项regressionc特殊处理对数转换收益率计算可能更有效季节性明显的销售数据关键步骤先进行季节性差分Python实现diff(12)后再做ADF检验注意事项结合ACF/PACF图判断季节性周期某电商平台在分析年度促销数据时发现原始序列ADF检验p值0.62普通差分后p值0.08而经过12步季节性差分后p值0.003——这揭示了隐藏在年度周期下的真实平稳模式。