python打卡 DAY56 时序数据的检验

目录

1. 假设检验基础

核心概念

2. 白噪声检验

定义与特性

检验方法

ACF检验(自相关函数)

Ljung-Box检验

PACF检验(偏自相关)

3. 平稳性检验

定义与类型

ADF检验(单位根检验)

4. 季节性检验

ACF季节性识别

时序分解法

检验流程总结

实战案例:销售数据检验

关键结论


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)

检验流程总结

  1. 平稳性检验(ADF检验)

    • 不平稳 → 差分/变换 → 重新检验

  2. 白噪声检验(Ljung-Box)

    • 是白噪声 → 无建模价值

  3. 季节性检测(ACF/分解)

    • 存在季节性 → 引入季节差分或季节因子

  4. 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()

关键结论

  1. 检验顺序:平稳性 → 白噪声 → 季节性 → 模型定阶

  2. 结果解读

    • ADF检验:统计量越负越可能平稳

    • Ljung-Box:p<0.05表明非白噪声

    • ACF/PACF:截尾/拖尾特征决定ARMA参数

  3. 业务意义

    • 白噪声序列不可预测

    • 非平稳序列需差分处理

    • 季节性需专门建模处理

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值