時間系列データの統計的検定手法

時系列解析では、データの特性を評価するために以下の3つの主要な統計検定が用いられます:

  1. 無相関性検定(ホワイトノイズ検定)
  2. 定常性検定
  3. 自己相関関数(ACF)と偏自己相関関数(PACF)の解析

データ生成と可視化

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns

# 乱数シード設定
np.random.seed(2023)
n_obs = 120

# トレンド成分を持つ系列
trend_coeff = 0.15
base_value = 12
trend_series = trend_coeff * np.arange(n_obs) + base_value
data_trend = trend_series + np.random.randn(n_obs)

# ランダム系列
random_series = np.random.randn(n_obs) + 18

# データフレーム作成
time_index = pd.date_range('2023-01-01', periods=n_obs, freq='D')
ts_df = pd.DataFrame({
    'date': time_index,
    'trend_data': data_trend,
    'random_data': random_series
}).set_index('date')

# 可視化
fig, ax = plt.subplots(figsize=(12, 7))
ts_df.plot(ax=ax)
ax.set_title('生成された時系列データ')
ax.grid(True)
plt.tight_layout()
plt.show()

無相関性検定(Ljung-Box検定)

時系列が無相関(ホワイトノイズ)であるかどうかを判定します:

from statsmodels.stats.diagnostic import acorr_ljungbox

lag_values = [5, 10, 20, 40]

# トレンドデータ検定
lb_result_trend = acorr_ljungbox(ts_df['trend_data'], lags=lag_values, return_df=True)

# ランダムデータ検定
lb_result_random = acorr_ljungbox(ts_df['random_data'], lags=lag_values, return_df=True)

print(f"トレンドデータ検定結果:\n{lb_result_trend}")
print(f"ランダムデータ検定結果:\n{lb_result_random}")

定常性検定

ADF検定

from statsmodels.tsa.stattools import adfuller

# ADF検定実施
adf_test_trend = adfuller(ts_df['trend_data'])
adf_test_random = adfuller(ts_df['random_data'])

# 差分系列の検定
diff_trend = ts_df['trend_data'].diff().dropna()
adf_test_diff = adfuller(diff_trend)

KPSS検定

from statsmodels.tsa.stattools import kpss

kpss_test_trend = kpss(ts_df['trend_data'])
kpss_test_random = kpss(ts_df['random_data'])
kpss_test_diff = kpss(diff_trend)

ARIMAモデルパラメータ推定

from pmdarima.arima import ndiffs

d_param_trend = ndiffs(ts_df['trend_data'], test='kpss')
d_param_random = ndiffs(ts_df['random_data'], test='kpss')
d_param_diff = ndiffs(diff_trend, test='kpss')

print(f"トレンド系列の推奨d値: {d_param_trend}")
print(f"ランダム系列の推奨d値: {d_param_random}")
print(f"差分系列の推奨d値: {d_param_diff}")

タグ: 時系列解析 統計検定 LB検定 ADF検定 KPSS検定

7月25日 17:51 投稿