目录
1. 假设检验基础
核心概念
术语 | 定义 | 时序分析中的应用场景 |
---|---|---|
原假设(H₀) | 默认成立的假设(如"序列是白噪声") | 白噪声检验、平稳性检验 |
备择假设(H₁) | 希望证明的假设(如"序列不是白噪声") | 验证序列存在有效模式 |
P值 | 当H₀为真时,观察到当前统计量或更极端值的概率 | 判断检验结果的显著性 |
显著性水平(α) | 拒绝H₀的阈值(通常取0.05) | 确定检验标准 |
置信区间 | 参数真实值可能落入的范围(通常95%置信度) | 估计模型参数的可信范围 |
2. 白噪声检验
定义与特性
-
定义:均值为0、方差恒定、无自相关的完全随机序列
-
数学表达:$X_t \sim WN(0,\sigma^2)$,且$Cov(X_t,X_{t+k})=0$(当$k \neq 0$)
检验方法
ACF检验(自相关函数)
from statsmodels.graphics.tsaplots import plot_acf
# 绘制ACF图(白噪声应95%的点在置信区间内)
plot_acf(series, lags=40, alpha=0.05) # alpha为显著性水平
plt.title("Autocorrelation Function")
plt.show()
Ljung-Box检验
from statsmodels.stats.diagnostic import acorr_ljungbox
# Q统计量检验(p>0.05不能拒绝白噪声假设)
lb_test = acorr_ljungbox(series, lags=10, return_df=True)
print(lb_test)
PACF检验(偏自相关)
from statsmodels.graphics.tsaplots import plot_pacf
# 偏自相关检验(识别AR模型阶数)
plot_pacf(series, lags=40, alpha=0.05, method='ols')
plt.title("Partial Autocorrelation Function")
plt.show()
3. 平稳性检验
定义与类型
平稳类型 | 要求条件 |
---|---|
严格平稳 | 任意时间段的联合概率分布不变 |
弱平稳 | 均值恒定、方差恒定、自协方差只与时间间隔有关(通常检验这种) |
ADF检验(单位根检验)
from statsmodels.tsa.stattools import adfuller
# Augmented Dickey-Fuller检验
result = adfuller(series, autolag='AIC')
print(f'ADF Statistic: {result[0]:.4f}')
print(f'p-value: {result[1]:.4f}')
print('Critical Values:')
for key, value in result[4].items():
print(f'\t{key}: {value:.4f}')
# 判断标准:p<0.05且ADF统计量<临界值 → 拒绝非平稳假设
4. 季节性检验
ACF季节性识别
# 观察固定间隔的显著自相关(如月度数据看lag=12,24,...)
plot_acf(series, lags=48) # 展示4年周期(假设为月度数据)
时序分解法
from statsmodels.tsa.seasonal import seasonal_decompose
# 加法模型分解
result = seasonal_decompose(series, model='additive', period=12) # period为周期长度
result.plot()
plt.tight_layout()
plt.show()
# 乘法模型(适用于波动随水平变化的序列)
# result = seasonal_decompose(series, model='multiplicative', period=12)
检验流程总结
-
平稳性检验(ADF检验)
-
不平稳 → 差分/变换 → 重新检验
-
-
白噪声检验(Ljung-Box)
-
是白噪声 → 无建模价值
-
-
季节性检测(ACF/分解)
-
存在季节性 → 引入季节差分或季节因子
-
-
ARIMA定阶(ACF/PACF)
-
ACF拖尾 → MA成分
-
PACF截尾 → AR成分
-
实战案例:销售数据检验
import pandas as pd
# 加载示例数据
sales = pd.read_csv('sales.csv', parse_dates=['date'], index_col='date')
# 1. 平稳性检验
print("原始序列ADF检验:")
adf_test(sales['volume'])
# 一阶差分后检验
print("\n一阶差分后ADF检验:")
adf_test(sales['volume'].diff().dropna())
# 2. 白噪声检验
print("\n白噪声检验:")
print(acorr_ljungbox(sales['volume'].diff().dropna(), lags=12))
# 3. 季节性分析
plt.figure(figsize=(12,8))
seasonal_decompose(sales['volume'], model='additive', period=12).plot()
plt.show()
# 4. ACF/PACF联合分析
fig, (ax1, ax2) = plt.subplots(2,1, figsize=(12,8))
plot_acf(sales['volume'].diff().dropna(), lags=24, ax=ax1)
plot_pacf(sales['volume'].diff().dropna(), lags=24, ax=ax2, method='ols')
plt.tight_layout()
plt.show()
关键结论
-
检验顺序:平稳性 → 白噪声 → 季节性 → 模型定阶
-
结果解读:
-
ADF检验:统计量越负越可能平稳
-
Ljung-Box:p<0.05表明非白噪声
-
ACF/PACF:截尾/拖尾特征决定ARMA参数
-
-
业务意义:
-
白噪声序列不可预测
-
非平稳序列需差分处理
-
季节性需专门建模处理
-