2つ以上の説明変数で目的変数を予測する重回帰分析。 AIC/BIC によるモデル選択は DS検定で頻出。
単純な線形回帰だと変数1つだけど、現実は複数の要因が絡むよね?
その通り。 複数の説明変数を扱うのが重回帰(多変量解析の代表)。 y = β₀ + β₁x₁ + β₂x₂ + ... + βₚxₚ + ε で表されるわ。
問題は『どの変数を使うべきか』。 説明変数を増やすほどR²は上がるけれど、過学習しやすくなる。 そこでAICとBICでモデルを比較するの。
AIC・BICって、何の略ですかぁ?
AIC=Akaike Information Criterion(赤池情報量基準)、BIC=Bayesian Information Criterion(ベイズ情報量基準)。 両方とも『小さいほど良いモデル』を示す指標。
計算式ってどうなってるの?
AIC = -2·log(尤度) + 2·(パラメータ数)、 BIC = -2·log(尤度) + log(n)·(パラメータ数)。 どちらも『当てはまりの良さ』と『モデルの複雑さ』のバランスで評価するの。
BIC は罰則項に log(n) が入るので、サンプルサイズが大きいほどパラメータ数に対するペナルティが厳しくなる。 AIC より変数選択が保守的になる傾向ね。
どっちを使えばいいんですかぁ?
予測精度重視ならAIC、 真のモデルに近づけたいならBIC、 という使い分けが目安ね。 実務ではAICがよく使われるのよ。
変数選択って自動でやれるの?
ステップワイズ法が有名。 (1)前進選択、(2)後退削除、(3)前進後退の3パターンで、AIC/BICが最小になる組み合わせを探す。 ただし多重共線性には別途注意。
重回帰の注意点ありますかぁ?
(1)説明変数同士の{kw('多重共線性')}、(2){kw('外れ値')}、(3)残差の正規性・等分散性、(4)サンプルサイズの目安(変数1つにつき10サンプル以上)、を意識して。
DS検定★では『AICとBICの違い』『AICの罰則項はパラメータ数の2倍』が頻出よ。
import statsmodels.api as sm
X = sm.add_constant(df[['x1', 'x2', 'x3']]) # 切片を追加
y = df['y']
model = sm.OLS(y, X).fit()
print(model.summary())
print(f'AIC: {model.aic:.2f}')
print(f'BIC: {model.bic:.2f}')
print(f'Adjusted R²: {model.rsquared_adj:.3f}')
確認クイズ
AIC と BIC の違いとして正しいのはどれか。
- 両者は同じ式
- AIC は罰則項に log(n) を含み、BIC は 2 倍を含む
- BIC の罰則項に log(n) が入るため、サンプルサイズが大きいと変数選択が保守的になる
- AIC は分類専用、BIC は回帰専用
こたえを見る
正解: 3. BIC の罰則項に log(n) が入るため、サンプルサイズが大きいと変数選択が保守的になる
BIC の罰則項に log(n) が入るため、サンプルサイズが大きいと変数選択が保守的になる。 AIC は 2k のシンプルな罰則、BIC は log(n)·k で n が大きいほど罰則が大きくなり、結果的により少ない変数を選ぶ傾向があります。