はじめに
今回は統計検定2級を勉強する中で、コレログラムという単語が出てきたので、学んでいきます!
🔍 コレログラム(correlogram)とは?
📝 一言でいうと?
「相関関係を見える化した図」です!
🧭 コレログラムの2つのタイプ
① 時系列のコレログラム
「過去のデータ」と「今のデータ」の関係(相関)を調べる図。
たとえば…
- 「昨日の気温」と「今日の気温」が似ていたら → 相関が強い ✅
- こういう関係を棒グラフで見える化するのが「時系列コレログラム」
✅ こんなときに使う
- データに**繰り返しパターン(周期性)**があるかを知りたいとき
- ARIMAなどの時系列モデルを作るときの事前チェック
📌 よく使う関数
-
acf()
(自己相関) -
pacf()
(偏自己相関)
② 多変量のコレログラム(相関行列ヒートマップ)
いろんな変数同士の相関をまとめて見られる図。
たとえば、次のような関係を調べたいとき:
変数A | 変数B | 相関 |
---|---|---|
身長 | 体重 | 強い |
血液型 | 身長 | 弱い |
📊 こういった相関を色で見せる図がコレログラム(ヒートマップ)です。
✅ こんなときに使う
- 変数同士の関係をざっくり把握したいとき
- モデルに使う変数を選びたいとき
- 多重共線性のチェック
✅ サンプル問題①:基本的な意味の理解
問題:
ある商品の1週間分の売上データが次のように与えられています(単位:個):[20, 22, 21, 19, 24, 25, 20]
このデータの自己相関(lag=1)を求めたところ、正の値となりました。
この結果から言えることとして、最も適切なのはどれか。
選択肢:
A. 毎日の売上は完全に独立である
B. 前日の売上が高いと、今日の売上も高くなる傾向がある
C. 売上は季節的要因で動いている
D. 売上は週の後半に向けて必ず増加している
正解:
👉 B
解説:
「lag=1 の自己相関が正」=「前日と今日で似た動きをしている」という意味です。
つまり、「前日が高いと今日も高い」傾向があるといえます。
# 📌 Google Colab専用:日本語フォントのインストール(初回のみ必要)
!apt-get -y install fonts-ipafont-gothic > /dev/null
# 📦 ライブラリのインポート
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf
from matplotlib.font_manager import FontProperties
# 🎌 日本語フォントの設定(Colab用)
jp_font = FontProperties(fname="/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf")
plt.rcParams['font.family'] = jp_font.get_name()
# 📊 1問目のサンプルデータ(売上データ)
sales = [20, 22, 21, 19, 24, 25, 20]
ts = pd.Series(sales)
# 📈 ACFプロット
plt.figure(figsize=(8, 4))
plot_acf(ts, lags=5, zero=False)
plt.title("自己相関関数(ACF) - 売上データ", fontproperties=jp_font)
plt.xlabel("ラグ(遅れ)", fontproperties=jp_font)
plt.ylabel("相関係数", fontproperties=jp_font)
plt.grid(True)
plt.tight_layout()
plt.show()
✅ サンプル問題②:ACF・PACFの解釈
問題:
ある時系列データについて ACF と PACF を調べたところ、以下のような結果となった:
- ACF:lag=1 で大きな正の相関、それ以降は急激に減衰
- PACF:lag=1 でのみ有意、lag=2 以降はほぼ 0
このとき、適したモデルとして最も適切なのはどれか。
選択肢:
A. MA(1) モデル
B. AR(1) モデル
C. AR(2) モデル
D. ランダムウォークモデル
正解:
👉 B
解説:
PACF が lag=1 で急に0になる(= 有意なのは1だけ)ときは、AR(1) モデルの特徴です。
📊 ACFとPACFの違いまとめ(表)
項目 | ACF(自己相関関数) | PACF(偏自己相関関数) |
---|---|---|
日本語名 | 自己相関関数 | 偏自己相関関数 |
意味 | 今と過去の相関(全体的な関係) | 今と過去の直接的な相関(他のラグの影響を除く) |
例(lag=2) | 今日と一昨日の相関をそのまま見る | 昨日を除いた上で、今日と一昨日の関係だけを見る |
主な用途 | MAモデル(移動平均)の次数推定 | ARモデル(自己回帰)の次数推定 |
グラフの特徴 | ゆるやかに減衰することが多い | 特定のlagで急に0になることが多い |
見た目 | 棒グラフ(lagが進むごとに高さが変わる) | 同様だが、意味合いが異なる |
関数例(Python) | plot_acf() |
plot_pacf() |
よくある使い方 | 時系列に周期性があるか調べる | ARモデルのラグ数を決める |
# 📌 Google Colab専用:日本語フォントのインストール
!apt-get -y install fonts-ipafont-gothic > /dev/null
# 📦 ライブラリ
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from matplotlib.font_manager import FontProperties
# 🎌 日本語フォント設定
jp_font = FontProperties(fname="/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf")
plt.rcParams['font.family'] = jp_font.get_name()
# 📊 AR(1)モデルっぽい時系列データ(手作業で作成)
data = [10, 12, 13, 14, 15, 15, 16, 17, 18, 18, 17, 18, 19]
ts = pd.Series(data)
# 🎨 ACFプロット(lags=6に設定)
plt.figure(figsize=(8, 4))
plot_acf(ts, lags=6, zero=False)
plt.title("自己相関関数(ACF)", fontproperties=jp_font)
plt.xlabel("ラグ(遅れ)", fontproperties=jp_font)
plt.ylabel("相関係数", fontproperties=jp_font)
plt.grid(True)
plt.tight_layout()
plt.show()
# 🎨 PACFプロット(lags=5に修正してエラー回避)
plt.figure(figsize=(8, 4))
plot_pacf(ts, lags=5, zero=False, method="ywm")
plt.title("偏自己相関関数(PACF)", fontproperties=jp_font)
plt.xlabel("ラグ(遅れ)", fontproperties=jp_font)
plt.ylabel("偏相関係数", fontproperties=jp_font)
plt.grid(True)
plt.tight_layout()
plt.show()