本ページは BIC(Bayesian Information Criterion)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
BIC(Bayesian Information Criterion, ベイズ情報量規準)は、 1978 年に Schwarz が提案した モデル選択の標準ツール。 回帰、 時系列、 混合分布、 隠れマルコフモデル等の比較で広く使われます。 AIC と並ぶ二大選択基準で、 BIC は真のモデル選択、 AIC は予測性能と棲み分けるのが一般的理解です。
モデル選択の原理:
BIC は −2 log L(尤度の指標、 小さいほど適合度が良い)に、 k log n(パラメータ数 × log(サンプル数) のペナルティ)を足します。 これを 最小化するモデルを選ぶ。
AIC のペナルティは 2k で、 BIC の k log n よりも軽い。 サンプル数 n=100 なら log(100)≈4.6 で、 BIC は AIC の 2.3 倍厳しいことになります。
AIC との比較:
例:3 つの回帰モデルを n=100 のデータで比較:
| モデル | 変数数 k | −2 log L | BIC | 選択 |
|---|---|---|---|---|
| 単回帰(k=2) | 2 | 180 | 180 + 2×4.6 = 189.2 | |
| 重回帰(k=5) | 5 | 150 | 150 + 5×4.6 = 173.0 | ✅ |
| 重回帰(k=10) | 10 | 140 | 140 + 10×4.6 = 186.0 |
k=10 は適合度は最高だが、 ペナルティで負ける。 k=5 が BIC 最小で 選択される。
最小コードで動かしてみる例:
1 2 3 4 5 6 7 8 9 10 | import statsmodels.api as sm import pandas as pd df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='utf-8', skiprows=1) X = sm.add_constant(df[['高齢化率', '人口密度']]) y = df['死亡率'] model = sm.OLS(y, X).fit() print(f'AIC = {model.aic:.2f}') print(f'BIC = {model.bic:.2f}') |