K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

偏自己相関 (PACF) のプロット

入門

04.2.2

偏自己相関 (PACF) のプロット

最終更新 2020-08-12 読了時間 2 分
まとめ
偏自己相関(PACF)は、ラグ \(k\) の自己相関から「ラグ 1〜\(k-1\) を経由して伝わった分」を取り除き、\(k\) 日前が今日に直接どれだけ効いているかだけを残した値です。このページでは、前日の値を 0.5 倍だけ引き継ぐ AR(1) 成分と周期 24 日の正弦波を混ぜた 200 日の人工系列を作り、statsmodels.graphics.tsaplots.plot_pacf に method="ywm" を指定してラグ 30 までを描きます。読み終えると、有意な棒が途切れるラグ数を AR モデルの次数 \(p\) の目安として読み、ACF と並べて AR と MA を切り分けられるようになります。

自己相関関数 (ACF) で「棒がゆっくり減衰する」形と 95 % 信頼区間の帯の読み方を押さえておくと、PACF でなぜ棒が急に消えるのかが対比で分かります。

PACF は中間ラグ経由の影響を取り除いた「直接の相関」だけを棒にするので、有意な棒が消えるラグが AR モデルの次数 \(p\) の目安になります。

直感 #

AR(1) の系列では、今日の値は昨日の値の 0.5 倍を引き継ぎ、昨日は一昨日の 0.5 倍を引き継いでいます。すると一昨日と今日の相関は \(0.5^2 = 0.25\) になりますが、これは「一昨日 → 昨日 → 今日」と伝わっただけで、一昨日が今日に直接効いているわけではありません。ACF はこの間接的な相関もそのまま棒にするので、AR(1) でもラグ 2、3、4 の棒がゆっくり小さくなりながら残ります。PACF は昨日の値で説明できる分を先に差し引いてから一昨日との相関を測るので、AR(1) ならラグ 1 の棒だけが立ち、ラグ 2 以降は信頼区間の中へ消えます。この「どこで消えるか」がそのまま、過去何日分を回帰に入れればよいかの答えになります。

何が起きているか(ステップで見る) #

コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。

見るポイント:ずらした自分自身との相関が自己相関。周期と同じラグで相関が高くなる。

Python で描く #

次のコードは、前日の値を 0.5 倍だけ引き継ぐ AR(1) 成分と周期 24 日の正弦波、標準偏差 1 のノイズを足した 200 日の系列を作り、plot_pacf でラグ 30 までの偏自己相関を描きます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_pacf

rng = np.random.default_rng(30)
dates = pd.date_range("2020-01-01", periods=200, freq="D")
values = []
prev = 0.0
for t in range(len(dates)):
    seasonal = 1.0 * np.sin(2 * np.pi * t / 24)
    prev = 0.5 * prev + seasonal + rng.normal(0, 1)
    values.append(prev)

series = pd.Series(values, index=dates)

fig, ax = plt.subplots(figsize=(7, 4))
plot_pacf(series, lags=30, ax=ax, color="#f97316", method="ywm")
ax.set_title("偏自己相関関数 (PACF)")
ax.set_xlabel("ラグ")
ax.set_ylabel("偏自己相関")
ax.grid(alpha=0.3)

fig.tight_layout()
fig.savefig("static/images/timeseries/pacf.svg")

偏自己相関 (PACF) のプロットの図

実行結果の読み方 #

ラグ 1 の棒が 0.5 前後まで立ち、ラグ 2 の棒は信頼区間の帯の近くまで一気に下がります。ACF のページでは同じ AR(1) 成分がゆっくり減衰する棒の列になっていたのに対し、PACF では「ラグ 1 の 1 本で説明が終わる」形に変わるのがいちばん大きな違いです。これが AR(1) を示すサインで、有意な棒が 2 本で途切れれば AR(2) を疑います。周期 24 日の波があるので、ラグ 2 以降にも帯をわずかに超える棒がいくつか残ります。これは季節成分の分で、純粋な AR の次数とは別に季節項(SARIMA の \(P\) や周期 24 の差分)で扱う対象です。

使いどころと落とし穴 #

ACF と PACF は必ずペアで読みます。ACF がゆっくり減衰し PACF が \(p\) 本で切れるなら AR(\(p\))、ACF が \(q\) 本で切れ PACF がゆっくり減衰するなら MA(\(q\))、どちらもゆっくり減衰するなら ARMA を候補にします。落とし穴は、分布が大きく歪んでいる系列や非線形な依存を持つ系列で、ピアソン相関を土台にする PACF では直接効果を取り逃します。その場合は PACF の棒だけで次数を決めず、ARIMA(series, order=(p, 0, 0)) を \(p = 1, 2, 3\) で当てはめて AIC を比べるほうが確実です。また、トレンドを含む系列ではまず series.diff() で定常化してから描かないと、ラグ 1 の棒が 1 に張り付いて次数の判別ができません。