自由度調整済み決定係数 (Adjusted R²)

Eval

自由度調整済み決定係数 (Adjusted R²)

作成日: 最終更新: 読了時間: 1 分
まとめ
  • 調整済み R² は説明変数の数に応じて過学習を補正した適合度指標です。
  • 変数数を増やしたときに R² と調整済み R² がどう変化するかを Python で確認します。
  • サンプル数が少ない場合の注意点や、他指標との使い分けを整理します。

1. 定義 #

$$ \mathrm{Adjusted};R^2 = 1 - (1 - R^2)\frac{n - 1}{n - p - 1} $$

ここで \(n\) はサンプル数、\(p\) は説明変数(特徴量)の数です。\(p\) が増えると分母 \(n - p - 1\) が小さくなるため、改善しない変数を追加すると値が下がります。


2. Python で計算する #

scikit-learn の LinearRegression は決定係数を返すため、調整済み R² は自分で計算します。

import numpy as np
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

X, y = make_regression(
    n_samples=1_000,
    n_features=10,
    n_informative=6,
    noise=5.0,
    random_state=0,
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=0
)

model = LinearRegression()
model.fit(X_train, y_train)

r2 = model.score(X_test, y_test)
n, p = X_test.shape
adj_r2 = 1 - (1 - r2) * (n - 1) / (n - p - 1)

print(f"R2 = {r2:.3f}")
print(f"Adjusted R2 = {adj_r2:.3f}")

n - p - 1 が 0 にならないよう、検証用データのサンプル数には十分な余裕を持たせましょう。


3. 直感と使いどころ #

  • 特徴量が増えると厳しくなる
    不要な特徴量を追加すると調整済み R² は低下し、モデルの複雑さに対するペナルティが働きます。
  • サンプルが少ない場合に注意
    \(n\) が小さいと値が不安定になります。サンプル数が乏しい場合は交差検証と併用して確認します。
  • モデル比較に便利
    同じデータセットでより少ない変数で高い調整済み R² を達成できるモデルは、より汎化性能が高いと考えられます。

4. 他指標との使い分け #

指標特徴注意点
直感的で広く知られる指標説明変数を追加すると必ず上昇する
Adjusted R²変数数を考慮し公平に比較できるサンプルが少ないと不安定
AIC / BIC損失関数 + ペナルティで最小化するモデルが仮定を大きく外れると解釈が難しい

5. 実務での活用 #

  • 特徴量選択:ステップワイズ法などで特徴量を増減させる際、調整済み R² の向上を目安にします。
  • 説明責任:R² だけでなく調整済み R² も提示すると、過学習を抑えていることを示しやすくなります。
  • 比較検証:正規化やスケーリングの異なるモデルを比べる際、調整済み R² が改善していれば実質的な性能向上と判断しやすいです。

まとめ #

  • 調整済み R² は決定係数に特徴量のペナルティを掛けた指標で、モデル改善が本当に有効だったかを確認できます。
  • サンプル数と特徴量のバランスに注意しながら、R² と併用してモデル評価に活用しましょう。
  • AIC / BIC など他の情報量規準とも組み合わせると、より頑健なモデル選択が可能になります。