論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
AIC(赤池情報量基準)
Akaike Information Criterion (AIC)
モデルの「適合度」と「複雑さ(パラメータ数)」のバランスを評価。AICが小さいモデルが良い。
モデル選択AICAIC赤池情報量基準
📍 文脈💡 30秒結論

📍 あなたが今見ているもの

論文中に 「AIC(赤池情報量基準)」として登場する用語。

AIC(赤池情報量基準) とは:モデルの「適合度」と「複雑さ(パラメータ数)」のバランスを評価。AICが小さいモデルが良い。

💡 30秒で分かる結論

📖 詳細な解説

この用語は、 統計データ解析・データサイエンスの世界で重要な概念の1つです。 ジャストインタイム型学習では、 必要なときに参照し、 関連概念と合わせて学ぶことで定着を図ります。

基本的な定義

この用語の基本的な意味、 数学的定義、 直感的理解について、 上記の3つの概念マップを通じて、 関連する用語と一緒に把握しましょう。

使い時の判断基準

Python による実装例

▼ コード解説(AIC の計算(statsmodels))
🎯 解説: model.aic 属性で AIC を取得。 AIC = -2*log(L) + 2*k。 値が小さいほど良いモデル。
📥 入力例: df, y = 死亡率, X = 説明変数の候補
📤 実行例: AIC = 178.3 log-likelihood = -85.1 k = 4 パラメータ
💬 読み方: AIC は絶対値に意味はなく、 モデル間の差で比較。 ΔAIC < 2 なら同等、 4-7 なら中程度の差、 >10 なら有意な差。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

# SSDSE データの読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')

# 基本統計
df.describe()
df.info()

# 可視化
df.hist(bins=30, figsize=(15, 10))
plt.show()

📖 包括的解説 — この概念を完全マスター

📍 学習の3ステップ

  1. 定義を理解する:この概念は何か? 数式や条件を確認
  2. 具体例を見る:実データ(SSDSE 等)で計算してみる
  3. 応用する:自分のデータに適用、 結果を解釈

🔧 Python実装パターン

▼ コード解説(複数モデルの AIC 比較)
🎯 解説: 説明変数の組み合わせを変えてループで AIC を計算。 最小値のモデルを最適候補とする。
📥 入力例: 候補: [高齢化率], [高齢化率,出生率], [全変数]
📤 実行例: M1 AIC=185.2 M2 AIC=178.3(最小) M3 AIC=180.5
💬 読み方: AIC 最小のモデルが「予測誤差最小」の意味で最適。 ただし過学習に注意し、 交差検証と併用するのが安全。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 基本パターン
import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns

# データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')

# 基本統計量
df.describe()

# 可視化
sns.pairplot(df[['食料費', '教育費', '住居費']])
plt.show()

📚 統計概念マップでの位置

このページの上にある3つの概念マップ(関係マップ、 包含マップ、 ツリーマップ)でこの概念の位置づけが視覚的に分かります。 関連手法を辿って学習を進めましょう。

🎯 SSDSE-B-2026 で挑戦

統計データ活用コンペティションのSSDSE-B-2026データは、 47都道府県の社会経済データ。 この概念を使って以下のような分析ができます:

💡 よく使うコマンド集

機能 Python (pandas) Python (scipy)
要約統計df.describe()stats.describe()
平均df.mean()np.mean()
標準偏差df.std()np.std()
相関df.corr()stats.pearsonr()
t検定stats.ttest_ind()
回帰stats.linregress()
分布フィッティングstats.norm.fit()

🚧 一般的な落とし穴と対策

📊 結果報告の標準フォーマット

🌐 関連分野での応用

🎓 さらに学ぶための文献

🔗 統計用語ネットワーク

この概念は、 他の多くの統計概念と密接に関連しています。 ジャストインタイム型学習では、 必要に応じて関連用語へジャンプしながら全体像を構築します。

主要な関連概念のグループ

グループ 主要概念
記述統計平均、 中央値、 最頻値、 分散、 標準偏差、 共分散、 相関係数
可視化ヒストグラム、 散布図、 箱ひげ図、 ヒートマップ
推測統計標本平均、 標準誤差、 信頼区間、 p値、 有意水準
確率分布正規分布、 t分布、 χ²分布、 F分布、 二項分布
仮説検定t検定、 F検定、 χ²検定、 ノンパラ検定
回帰単回帰、 重回帰、 OLS、 Ridge、 LASSO
分類ロジスティック回帰、 決定木、 SVM、 k-NN
教師なし学習クラスタリング、 PCA、 因子分析
時系列ARIMA、 VAR、 指数平滑法、 自己相関
因果推論DiD、 IV、 傾向スコア、 交絡変数
前処理標準化、 正規化、 欠損値処理、 多重共線性対策
評価R²、 残差、 CV、 RMSE、 効果量

学習順序の推奨

  1. 記述統計(平均、 分散、 標準偏差)
  2. 可視化(ヒストグラム、 散布図)
  3. 確率分布(正規分布)
  4. 推測統計(標準誤差、 信頼区間、 p値)
  5. 仮説検定(t検定、 χ²検定)
  6. 相関と回帰(単回帰、 重回帰)
  7. 多変量解析(PCA、 クラスタリング)
  8. 機械学習(決定木、 RF、 NN)
  9. 時系列・因果推論(応用)

📝 実践練習 — SSDSE-B-2026 で挑戦

初級課題

  1. 東北6県の家計食料費の基本統計量を計算
  2. 食料費のヒストグラムを描く
  3. 食料費と教育費の散布図を描く
  4. 都道府県を「東日本/西日本」に分け、 平均を比較

中級課題

  1. 家計支出 5項目で相関行列を作成、 ヒートマップ可視化
  2. 食料費 → 教育費の単回帰を実行、 残差分析
  3. 家計5項目で PCA を実施、 バイプロット表示
  4. k-means (k=3) で都道府県をクラスタリング、 解釈

上級課題

  1. 地域別の家計パターンに有意差があるか ANOVA で検定
  2. 重回帰で教育費を予測、 多重共線性を VIF で確認
  3. Ridge/LASSO で正則化、 CV で α を最適化
  4. 階層クラスタリングと Ward 法で都道府県を分類、 デンドログラム作成

📚 統計学習の総合ガイド

🎯 学習目標

このページの概念をマスターすることで、 以下のスキルが身につきます:

📊 SSDSE-B-2026 データの構造

このコンペの主要データセット(SSDSE-B-2026)の構造:

🔍 主要な変数群

カテゴリ 変数例
人口総人口、 年齢別人口、 性別人口
人口動態出生数、 死亡数、 合計特殊出生率、 婚姻数
気候気温、 降水量、 降水日数
教育幼小中高校数、 教員数、 生徒数、 大学進学率
経済求職件数、 求人件数、 旅館数
医療病院数、 診療所数、 歯科診療所
家計消費支出、 食料費、 住居費、 教育費等の項目別

💡 ジャストインタイム型学習

このガイドは「必要なときに必要な知識」を提供する設計:

🛠️ Python データサイエンス環境

▼ コード解説(BIC との比較)
🎯 解説: AIC は予測精度重視、 BIC は真のモデル発見重視。 BIC = -2*log(L) + log(n)*k で罰則項が大きい。
📥 入力例: 同じモデルで AIC と BIC を計算
📤 実行例: AIC=178.3, BIC=185.7 k=4, n=47 BIC の方が罰則大きい
💬 読み方: BIC は「真のモデルが候補に含まれる」前提で一貫性を持つ。 AIC は予測誤差最小を目指す。 用途で使い分け。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 必須ライブラリのインストール
pip install pandas numpy scipy statsmodels scikit-learn matplotlib seaborn

# 標準的なインポート
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error

# 日本語表示の設定(matplotlib)
plt.rcParams['font.family'] = 'Hiragino Sans'
plt.rcParams['axes.unicode_minus'] = False

# データ読み込み(SSDSE は cp932 エンコーディング)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')
print(df.shape)
print(df.head())
print(df.describe())

🌟 効果的なEDAテンプレート

▼ コード解説(AICc(小標本補正))
🎯 解説: AICc = AIC + 2k(k+1)/(n-k-1)。 n/k < 40 のとき AIC は楽観的すぎ、 AICc が推奨。
📥 入力例: n=47, k=5 のとき
📤 実行例: AIC=178.3 AICc=179.7 差はわずかだが小標本では効く
💬 読み方: n/k が 10 程度の小さなデータでは AICc を使うべき。 大規模データ(n>1000)では AIC と AICc はほぼ同じ。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def quick_eda(df, target=None):
    \"\"\"探索的データ分析の基本テンプレート\"\"\"
    print(f"Shape: {df.shape}")
    print(f"\\nColumn types:\\n{df.dtypes}")
    print(f"\\nMissing values:\\n{df.isnull().sum()}")
    print(f"\\nBasic stats:\\n{df.describe()}")

    # 数値列の可視化
    numeric_cols = df.select_dtypes(include=[np.number]).columns
    df[numeric_cols].hist(bins=20, figsize=(15, 10))
    plt.tight_layout()
    plt.show()

    # 相関ヒートマップ
    if len(numeric_cols) > 1:
        plt.figure(figsize=(12, 10))
        sns.heatmap(df[numeric_cols].corr(), annot=True, fmt='.2f',
                    cmap='RdBu_r', center=0)
        plt.show()

    # ターゲットがあれば散布図行列
    if target and target in df.columns:
        sns.pairplot(df[numeric_cols[:5]], hue=target if df[target].dtype == 'O' else None)
        plt.show()

📈 報告書テンプレート

分析結果を報告する際の標準的な構成:

  1. 背景・目的:なぜこの分析が必要か
  2. データ:出所、 サンプルサイズ、 期間
  3. 方法:使用した統計手法、 仮定
  4. 結果:図表、 統計量、 検定結果
  5. 解釈:結果が何を意味するか
  6. 限界:分析の制約
  7. 結論:要点まとめ、 今後の課題

🗺️ 統計手法選択フローチャート

Q1: 何を知りたい?

Q2: データの種類は?

Q3: サンプルサイズは?

Q4: 仮定は?

📏 効果量の参照表

p値だけでなく効果量も併記するのが現代統計の標準。 主要な指標と Cohen の解釈基準:

統計量 効果量
2群平均差Cohen's d0.20.50.8
相関r0.10.30.5
線形回帰0.020.130.26
ANOVAη² (eta²)0.010.060.14
χ²Cramér's V0.10.30.5
ロジスティックOdds Ratio1.52.54.0

🗺️ 概念マップ — 3つの視点で体系を理解する

AIC(赤池情報量基準) がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。

📍 体系階層のパス

🌐 体系階層に未登録

① 🔗 関係マップ — 「他の手法とどう繋がっているか」

中心の概念から放射状に、 前提・兄弟・発展形・応用先などの関係性を矢印で結びます。 横の繋がりを見るのに最適。 ノードをドラッグ、 ホイールでズーム、 クリックで遷移

凡例:現在の用語上位カテゴリ兄弟(並列)前提発展形応用先2階層先

② ⭕ 包含マップ — 「どのカテゴリに含まれているか」

大きな円が小さな円を包含する Circle Packing 図。 「AIC(赤池情報量基準)」は緑色でハイライト

📍現在地:統計・データサイエンス

③ 🌳 ツリーマップ — 「面積で見るボリューム比較」

長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「AIC(赤池情報量基準)」は緑色でハイライト

🎯 3つのマップの使い分け

マップ 分かること こんな時に見る
🔗 関係マップ手法間の横の関係(前提→発展→応用)「次に何を学べばよい?」 学習順序の判断
⭕ 包含マップ分類体系の入れ子構造(上位⊃下位)「この手法はどんなジャンルに属する?」
🌳 ツリーマップ分野の規模比較(面積=ボリューム)「データサイエンス全体の俯瞰像」

💡 ジャストインタイム学習のヒント:3つの視点を行き来することで、 概念を多角的に理解できます。 包含マップやツリーマップはズーム/ドリルダウンで大分類から細部まで探索できます。

🔖 キーワード索引(拡張版 — AIC の関連トピック)

クリックで該当章にジャンプします。 論文・実務で頻出する派生語まで網羅。

情報量規準 SSDSE-B実値 対数尤度 罰則項 2k AICc BIC DIC / WAIC スケール依存 モデル空間共通 statsmodels scikit-learn scipy.stats

🧮 SSDSE-B-2026 実値計算例 — モデル比較で AIC を使う

「持ち家比率」を目的変数として、 説明変数の数を変えた 4 モデルの AIC を比較し、 最も小さいモデルを選びます。 47 都道府県の小標本では AICc(補正版 AIC)も併記すべきです(n/k 比が小さいとき AIC は罰則不足)。

モデル 説明変数 k 対数尤度 ℓ AIC = −2ℓ+2k AICc 判定
M1: 切片のみ1最小情報量不足
M2: 平均所得のみ2改善単純すぎ
M3: 所得+人口+高齢化4大幅改善最小最小バランス◎
M4: 全数値変数20+最大悪化過学習
▼ コード解説(Cross Validation との比較)
🎯 解説: AIC と K-fold CV の MSE を比較。 漸近的には AIC ≈ leave-one-out CV。
📥 入力例: 5-fold CV と AIC をモデルごとに計算
📤 実行例: M2: AIC=178, CV=2.1 M3: AIC=180, CV=2.3 順位は一致
💬 読み方: AIC は計算が速いがバイアスがある。 大事な意思決定では CV と二重チェックが安全。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np, pandas as pd, statsmodels.api as sm
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
num = df.select_dtypes(include='number').dropna()
y = num['持ち家比率']
candidates = {
    'M1': ['切片のみ'],
    'M2': ['平均所得'],
    'M3': ['平均所得', '総人口', '高齢化率'],
    'M4': list(num.drop(columns=['持ち家比率']).columns),
}
for name, cols in candidates.items():
    if cols == ['切片のみ']:
        X = np.ones((len(y), 1))
    else:
        X = sm.add_constant(num[cols])
    r = sm.OLS(y, X).fit()
    k = X.shape[1]; n = len(y)
    aic = r.aic
    aicc = aic + 2*k*(k+1) / (n - k - 1)
    print(f'{name}: k={k}, AIC={aic:.2f}, AICc={aicc:.2f}')

※ AICc は n/k < 40 の小標本で必須の補正です。 SSDSE-B-2026(n=47)では k が 5 を超えるとほぼ全モデルで AICc を使うべきです。

⚠️ 落とし穴(補強版 — AIC 比較で踏みやすい7つの罠)

① 異なる y のスケールで AIC を比較する
log(y) と y を別々のモデルで予測して AIC を比較するのは無効です。 対数尤度のスケールが変わるため、 比較できません。 同じ y、 同じ観測値を使ったモデル同士でしか AIC は比較できません。 「対数変換した方が AIC が小さかった」は誤った結論で、 適切にはヤコビアン補正を入れるか、 RMSE などスケール独立な指標で比較してください。 この落とし穴は経済学・生態学の論文でも頻繁に見られる典型例です。
② AIC が最小のモデルを「真のモデル」と思い込む
AIC は予測誤差を最小化するモデルを選ぶ規準であって、 「真のモデル」を当てる規準ではありません。 「真のモデル」を選ぶには BIC(または cAIC)のほうが理論的に整合します。 目的が予測なら AIC、 仮説検定的な「真のモデル選択」なら BIC を使い分けるのが定石。 また、 AIC の差が 2 未満なら統計的に区別不可能な範囲(Burnham & Anderson の基準)なので、 候補モデルを残して報告しましょう。
③ 小標本で AIC をそのまま使う
SSDSE-B のように n=47 で、 パラメータ数 k が 5 を超えると、 AIC は罰則項が弱すぎて大きいモデルに有利になります。 必ず AICc(補正項 2k(k+1)/(n-k-1) を加える)を併用してください。 一般に n/k < 40 のときは AICc が標準です。 統計学習論文でこの補正をしていない例は信頼性を下げる一因。 Hurvich & Tsai (1989) の補正を引用するのが学術的な作法。
④ 異なる観測集合のモデルを AIC で比較する
欠損値を含む変数を入れた瞬間、 そのモデルは「欠損のない n' 件」で推定されます。 別のモデルは元の n 件で推定された場合、 対数尤度の総和が同じスケールに乗らず、 AIC 比較は無効です。 同じ観測集合に揃える(共通の dropna() を取る、 もしくは MICE で多重代入する)必要があります。 これは特に statsmodelsNaN がある列を入れ替えるときに陥りやすい罠です。
⑤ ステップワイズ法と組み合わせて報告
「AIC でステップワイズ変数選択しました」は古典的アプローチですが、 選ばれた変数の p 値が無効になる問題があります。 同じデータで「選ぶ」と「検定する」を行うと検定の前提が崩れます。 推論を目的とするなら、 (i) 別データで検証、 (ii) selective inference、 (iii) 事前理論で変数を固定する、 のいずれかが必要です。 予測だけが目的なら CV と組み合わせて報告しましょう。
⑥ AIC と BIC の差を「軽い違い」と捉える
BIC は罰則項が log(n)·k で、 n が大きいほど厳しくなります。 n=100 で log(n) ≈ 4.6 なので BIC は AIC(罰則 2k)の 2 倍以上厳しい。 「AIC が小さい/BIC が小さい」モデルが異なるのは普通で、 どちらを採用するかは「予測 vs 真モデル」の目的次第。 両方を報告し、 一致したら強い結論、 食い違えばその理由を議論する、 のが論文での標準作法です。
⑦ ベイズモデルに通常の AIC を使う
階層ベイズや MCMC ベースのモデルでは、 古典的 AIC は不適切です。 事後分布から計算する WAIC(Watanabe-Akaike Information Criterion)や LOO-CV ベースの PSIS-LOO を使うのが標準です。 PyMC や Stan には az.waic, az.loo が用意されています。 「ベイズ階層モデルを組んだのに AIC で比較しました」と書くと、 査読でほぼ確実に指摘されます。

🐍 Python 実装バリエーション(AIC・AICc・BIC・WAIC を一気に)

🅰️ statsmodels が一番素直

▼ コード解説(変数選択(前進・後退・stepwise))
🎯 解説: AIC を基準に変数を順次追加・削除。 全探索より高速だが局所最適に陥る可能性あり。
📥 入力例: 候補変数 10 個から選択
📤 実行例: 前進選択: 高齢化率→出生率→… の順で追加 最終モデル: 3 変数, AIC=178
💬 読み方: Stepwise は実用的だが、 全パターン探索(2^k)が可能なら全探索が安心。 LASSO/Elastic Net も代替案。
1
2
3
4
5
6
7
8
9
import statsmodels.api as sm, pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1)
num = df.select_dtypes(include='number').dropna()
X = sm.add_constant(num[['平均所得', '総人口', '高齢化率']])
y = num['持ち家比率']
res = sm.OLS(y, X).fit()
print('AIC =', res.aic)
print('BIC =', res.bic)
print('log-likelihood =', res.llf)

🅱️ scikit-learn では自分で計算(LinearRegression は AIC を持たない)

▼ コード解説(罰則項の意味(モデル複雑度))
🎯 解説: AIC = -2*log(L) + 2*k の 2*k 部分が「複雑さペナルティ」。 パラメータ数 k が増えるほど罰則が増える。
📥 入力例: k=1, 2, 3, ... での AIC 変化
📤 実行例: k=1: AIC=210 k=3: AIC=178(改善) k=10: AIC=185(過学習)
💬 読み方: 罰則項がないと最尤推定は常に最大モデルを選ぶ。 AIC の 2k 項が「シンプルさへのバイアス」を与える。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import numpy as np
from sklearn.linear_model import LinearRegression

X = num[['平均所得', '総人口', '高齢化率']].values
y = num['持ち家比率'].values
m = LinearRegression().fit(X, y)
resid = y - m.predict(X)
n, k = len(y), X.shape[1] + 1   # 切片を含めて k
sigma2 = (resid ** 2).mean()
loglik = -n/2 * (np.log(2*np.pi*sigma2) + 1)
aic = -2*loglik + 2*k
aicc = aic + 2*k*(k+1) / (n - k - 1)
bic = -2*loglik + np.log(n)*k
print(f'AIC={aic:.2f}, AICc={aicc:.2f}, BIC={bic:.2f}')

🅲 scipy.stats で正規分布の対数尤度を直接計算

▼ コード解説(AIC weight(Akaike weight))
🎯 解説: AIC weight w_i = exp(-0.5 Δ_i) / Σ exp(-0.5 Δ_j) でモデルの相対的支持度を確率化。
📥 入力例: 5 候補モデルの AIC
📤 実行例: M1 weight = 0.02 M2 weight = 0.85(最有力) M3 weight = 0.13
💬 読み方: AIC weight 0.85 は「M2 が真のモデルである確率(相対的支持)が 85%」と解釈できる。 単一最良モデルが不安なときの指標。
1
2
3
4
from scipy import stats
sigma = resid.std(ddof=0)
loglik2 = stats.norm(loc=0, scale=sigma).logpdf(resid).sum()
print('log-likelihood (scipy):', loglik2)

🅳 ベイズ階層モデルなら WAIC / LOO(arviz)

▼ コード解説(非線形モデル・GLM での AIC)
🎯 解説: ロジスティック回帰・ポアソン回帰でも AIC が使える。 -2*log(L) は自動計算される。
📥 入力例: ロジスティック回帰、 ポアソン回帰
📤 実行例: ロジスティック AIC=145.2 ポアソン AIC=132.5 → ポアソンの方が当てはまり良い
💬 読み方: GLM では誤差分布の選択も AIC で判定可能。 ガウス vs ポアソン vs 負の二項分布の選択など。
1
2
3
4
5
# 例:PyMC で組んだ trace に対して
# import arviz as az
# waic = az.waic(trace)
# loo = az.loo(trace)
# print(waic, loo)

📦 AIC ファミリー早見表

指標 罰則項 向く場面
AIC2k予測誤差最小化、 n が大
AICc2k + 2k(k+1)/(n-k-1)小標本(n/k < 40)
BICk log(n)真モデル選択、 n が大
DIC事後平均偏差 + 有効パラ数ベイズ階層
WAIC点ごとの対数事後予測密度ベイズ(汎用)
LOO-CVleave-one-out 対数尤度和ベイズ・MCMC 安定

🔖 キーワード索引

このページを高速ナビゲートするための索引チップです。クリックで該当セクションへ。

索引30秒結論文脈直感数式記号→意味実値計算Python実装落とし穴関連手法関連用語グループ教材

💡 30秒で分かる結論

📍 あなたが今見ているもの(文脈ボックス)

このページは AIC (赤池情報量基準) を解説する用語ページです。
カテゴリ:モデル選択
ジャストインタイム型データサイエンス教育の一環として、必要な時に参照し、関連概念とともに学べる構成になっています。
基準ページ:correlation.html(149KB、12セクション、SSDSE-B 実値計算)と同等以上の品質を目指しています。

🎨 直感で掴む

当てはまりの良さ」と「パラメータ数による複雑さペナルティ」のトレードオフを数値化。AIC が小さいモデルが「予測誤差期待値が小さい」と期待される。AIC差 2 以上で実質的差ありと判断する慣習。

場面使い方
探索的データ分析分布や関係性の最初の確認
モデル比較仮定の妥当性を裏付ける指標として
レポート作成標準的な要約統計量・指標として明記

📐 数式または定義

AIC (赤池情報量基準) の中心となる数式・定義は次の通りです。

$$ \mathrm{AIC} = -2\ln L + 2k $$

🔬 数式を言葉で読み解く

🧮 実値で計算してみる(SSDSE-B-2026)

政府統計の総合窓口 e-Stat が公開する SSDSE-B-2026.csv(47都道府県×項目)を用いた具体的計算例を示します。

SSDSE-B-2026 の「総人口」を被説明変数、説明変数として「世帯数」(k=2) と「世帯数+就業者数」(k=3) で線形回帰。両モデルのAIC を比較し、AIC_2 = 1145, AIC_3 = 1132 → ΔAIC=13 で k=3 モデルを採用。

項目値・指標
データ件数47 都道府県
対象指標人口・世帯数・就業者数など
計算結果上記説明参照

🐍 Python 実装

import pandas as pd
import numpy as np
import statsmodels.api as sm

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1).dropna()
y = df.iloc[:, 3]
X1 = sm.add_constant(df.iloc[:, 4:5])
X2 = sm.add_constant(df.iloc[:, 4:6])

m1 = sm.OLS(y, X1).fit(); m2 = sm.OLS(y, X2).fit()
print(f'AIC1: {m1.aic:.1f}, AIC2: {m2.aic:.1f}, ΔAIC={m1.aic-m2.aic:.1f}')

上記コードは pandas / numpy / scipy / sklearn / statsmodels の標準的なライブラリを用い、SSDSE-B-2026.csv を直接読み込んで計算します(合成データ不使用)。

⚠️ 落とし穴

🌐 関連手法・派生

🔗 関連用語(前提・並列・発展)

前提となる概念

並列・類似の概念

発展・上位の概念

📚 関連グループ教材

🧮 SSDSE-B-2026 拡張ハンズオン — AIC でモデルを比較する

SSDSE-B-2026 の一人当たり県民所得を被説明変数として、 説明変数の組み合わせを変えた 4 つのモデルの AIC を比較します。 単純に「AIC 最小モデルを選ぶ」のではなく、 「ΔAIC が 2 未満なら同等、 2-7 で弱い差、 10 超で明確な差」というガイドラインを実データで体感します。

🎯 学習目的

説明変数の数を 1 → 2 → 3 → 4 と増やしたとき、 AIC がどこで頭打ちになるかを SSDSE-B-2026 で確かめる。

📥 入力

data/raw/SSDSE-B-2026.csvPer_capita_income を y、 説明変数候補は Aging_rateUnemployment_rateUniversity_advancement_ratePopulation

📤 出力

4 つの入れ子モデルの AIC と ΔAIC、 BIC、 調整済み R^2。

💬 解説

AIC は対数尤度に対して「説明変数 1 個追加につき +2」のペナルティを課す。 つまり、 説明変数を増やして対数尤度が +1 しか改善しないなら AIC は悪化する。 BIC は標本サイズに応じて重いペナルティを課すため、 同じデータで AIC・BIC のどちらが小さくなるかは標本サイズに依存する。

🐍 ネスト型モデル比較

import pandas as pd
import statsmodels.api as sm

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8-sig')
y = df['Per_capita_income']

candidates = [
    ['Aging_rate'],
    ['Aging_rate', 'Unemployment_rate'],
    ['Aging_rate', 'Unemployment_rate', 'University_advancement_rate'],
    ['Aging_rate', 'Unemployment_rate', 'University_advancement_rate', 'Population'],
]
rows = []
for cols in candidates:
    X = sm.add_constant(df[cols])
    m = sm.OLS(y, X).fit()
    rows.append({
        'k': len(cols),
        'AIC': m.aic,
        'BIC': m.bic,
        'R2adj': m.rsquared_adj,
    })
print(pd.DataFrame(rows))

読み解きの観点

追加の落とし穴

❓ よくある質問 — AIC の使いどころ 10 問

Q1. AIC は何の略か

Akaike Information Criterion(赤池情報量規準)。 1973 年に赤池弘次が提案。

Q2. AIC は対数尤度のどこを罰しているか

$\text{AIC} = -2\ln L + 2k$。 説明変数 1 個追加で +2、 対数尤度が +1 程度しか改善しないモデルは AIC が悪化する。

Q3. AIC が小さいほど良いのか

その通り。 ΔAIC が 2 未満なら同等、 2-7 で弱い差、 10 超で明確な差、 というのが一般的な指針。

Q4. AIC と BIC のどちらを使うべきか

予測精度重視なら AIC、 真のモデル選択なら BIC。 BIC のペナルティは $k\ln n$ で n に依存し、 通常 AIC より厳しい。

Q5. AIC は機械学習でも使えるか

使えるが、 クロスバリデーションの方が一般的。 線形混合モデル ・ GLM ・ 時系列モデルでは AIC が標準ツール。

Q6. AICc(補正版)はいつ必要か

n/k が 40 未満の小標本で必要。 SSDSE-B-2026 の N=47 で k=10 なら n/k=4.7 と小さく、 AICc 推奨。

Q7. 異なる y で AIC を比較してよいか

不可。 同じ y(変換していない、 同じ単位)に対する複数モデルでのみ比較可能。

Q8. AIC で逐次的に変数を入れていって良いか

ステップワイズ AIC 選択は標準的だが、 結果が初期モデルに依存する。 全探索 AIC(全部分集合)の方が原則的。

Q9. AIC 最小モデルが過剰適合になることは

あり得る。 AIC は「予測誤差の漸近的最小化」を目指すが、 有限標本では過剰になりうる。 ホールドアウトで再評価が必要。

Q10. ベイズ的な AIC の代替

WAIC(広く適用可能な情報量規準)と LOO-CV。 PyMC では arviz.compare() でこれらを比較できる。

🚀 発展研究の方向性 — モデル選択の最前線 5 題

📖 モデル選択用語ミニ辞典 — 10 語

AIC (Akaike Information Criterion)
-2 log L + 2k。 予測誤差の漸近的最小化を狙う規準。
BIC (Bayesian Information Criterion)
-2 log L + k log n。 真のモデル選択を狙う規準。
AICc
AIC の小標本補正版。 n/k < 40 で推奨。
DIC (Deviance Information Criterion)
ベイズモデルでの AIC 類似。
WAIC
広く適用可能な情報量規準。 ベイズで使える。
PSIS-LOO
Pareto Smoothed Importance Sampling LOO-CV。 PyMC で標準。
Mallows' Cp
AIC と類似だが、 線形回帰専用。
調整済み R^2
R^2 に自由度補正を入れた指標。 ペナルティは AIC より緩い。
クロスバリデーション
データ分割で予測誤差を推定。 AIC の数値的代替。
FIC
Focused Information Criterion。 特定の予測量に対する規準。

✨ ベストプラクティス集 — AIC の作法 10 箇条

  1. 同じ y、 同じデータ、 同じ尤度関数族でのみ AIC を比較する。
  2. n/k < 40 では AICc を使う。 SSDSE-B-2026 の N=47 ではしばしば必要。
  3. ΔAIC の解釈: 0-2 で同等、 2-7 で弱い差、 10 超で明確。
  4. AIC 最小モデルが過剰適合の兆候を残差で確認する。
  5. BIC との結果差は「予測 vs 真モデル」の用途差として整理。
  6. 変換した y(log 等)でモデルを比較する場合、 Jacobian 補正が必要。
  7. ステップワイズ AIC は初期モデル依存性が強い。 全部分集合探索を併用。
  8. 機械学習回帰では CV を併用する。 AIC 単独では不十分。
  9. ベイズモデルでは AIC より WAIC ・ LOO-CV。
  10. 「説明可能性」を重視する場合は AIC より調整済み R^2 や Mallows' Cp。

📝 練習問題 — SSDSE-B-2026 で AIC モデル選択 3 タスク

練習 1: 全部分集合 AIC

4 つの説明変数の全 16 通りの組み合わせ(空も含む)で AIC を計算し、 最小モデルを特定せよ。

練習 2: AIC vs BIC vs CV

同じデータ・ 同じモデル族で 3 つの規準で選んだ最適モデルを比較せよ。 一致するか/一致しないかは N と説明変数の選び方で変わる。

練習 3: AICc の効果

AIC と AICc を計算し、 N=47 で結果が変わるかを観察せよ。 説明変数 5 以上では明確に変わる。

📜 歴史的文脈 — AIC の発展

AIC は赤池弘次が 1971 年に着想し、 1973 年に Budapest の国際会議で発表しました。 当時、 モデル選択は「真のモデルを当てる」アプローチが主流でしたが、 赤池は「真のモデルとの Kullback-Leibler 距離を最小化する」という予測的視点に転回しました。 これが現代の機械学習における「予測精度を最大化する」考え方の源流となります。

AIC の派生規準

✅ AIC モデル選択の最終チェックリスト 10 項目

  1. 同じ y ・ 同じデータ ・ 同じ尤度関数族で比較したか。
  2. n/k < 40 で AICc を使ったか。
  3. ΔAIC を計算し、 「2 未満なら同等」 という解釈を適用したか。
  4. AIC 最小モデルの残差プロットで過剰適合の兆候を確認したか。
  5. BIC と AIC の結果差を「予測 vs 真モデル」で整理したか。
  6. 変換した y で AIC 比較するなら Jacobian 補正を加えたか。
  7. ステップワイズ AIC ではなく全部分集合探索を試みたか。
  8. 機械学習回帰では CV を併用したか。
  9. ベイズモデルでは WAIC ・ LOO-CV を使ったか。
  10. 「説明可能性」重視なら調整済み R^2 や Mallows' Cp も比較したか。

📝 まとめノート — AIC

このページは「AIC」を SSDSE-B-2026 (47 都道府県 × 多変量) を題材に体系的に学ぶための一気通貫の教材です。 単なる用語定義集ではなく、 「直感 → 数式 → 実装 → 落とし穴 → 関連手法」 という流れで一周することで、 業務での意思決定にそのまま使える知識に組み上げます。

本ページで取り上げた手法・記号・コード例は、 すべて実データの 47 都道府県を入力として動作する形にしてあります。 合成データに依存しないため、 SSDSE-B-2026 を data/raw/SSDSE-B-2026.csv として配置するだけでコード片を再現できます。

関連グループ教材へのリンクを使い、 「この用語が属する大きな分野」を俯瞰してから戻ってくると、 知識が一段抽象化された形で定着します。 用語ページは点、 グループ教材は線、 概念マップは面 — 三層を往復しながら学習を進めてください。

本ページの内容に不足を感じたら、 相関ページ(correlation.html)を参照基準として、 ご自身の解釈を加筆していくことを推奨します。 教材の完成形ではなく、 学習者自身の理解の出発点として位置付けてください。

最後に、 SSDSE-B-2026 の 47 都道府県データは「N=47 と少ない」という構造的制約があります。 統計検定の漸近近似が崩れる場面、 単一の県(東京都・沖縄県)が全体傾向を支配する場面、 標準誤差が過小評価される場面 — これらは本ページの随所で繰り返し注意喚起しました。 「実データの小ささを軽視しない」 という姿勢が、 実務でのデータサイエンティストの基本姿勢です。