決定係数(R²)の計算方法(公式・入力・限界)
直接の答え:R squared とは何ですか?
決定係数(R squared、しばしば R² と表記)は、観測された目的変数(従属変数)の変動が、当てはめた予測(モデルの出力)によってどれくらい説明されているかを表す数値です。最も一般的な形では、R² は次の2つの量から計算されます:
- 観測データにおける総変動
- 当てはめた予測を使った後に残る残差(未説明)の変動
平易に言うと、残差の変動が総変動に比べて小さければ R² は高くなり、大きければ R² は低くなります。
メカニズム:公式と、必要なすべての入力
1) データを定義する
R² を計算するには、観測値の集合と、それに対応する当てはめ(予測)値が必要です。
- 観測値:(y_1, y_2, \dots, y_n)
- 当てはめ(予測)値:(\hat{y}_1, \hat{y}_2, \dots, \hat{y}_n)
- 観測値の標本平均:(\bar{y} = \frac{1}{n}\sum_{i=1}^{n} y_i)
ここで (n) は、評価しているデータ点の数です。
2) 平方和を計算する
R² は、平均からの差や、当てはめ予測からの差に基づく平方和を使います。
-
全平方和(平均の周りの変動): [ \mathrm{SST} = \sum_{i=1}^{n} (y_i - \bar{y})^2 ]
-
残差平方和(当てはめ後に残る変動): [ \mathrm{SSE} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 ]
3) 決定係数(R squared)を計算する
最も一般的な定義では: [ R^2 = 1 - \frac{\mathrm{SSE}}{\mathrm{SST}} ]
これには (\mathrm{SST} > 0) が必要です。もしすべての観測 (y_i) が同一なら、(\mathrm{SST}=0) となり、この形では R² は意味のある形で定義されません。
4) 重要な実務上の選択:(\hat{y}) はどのデータで計算される?
この公式自体は、(\hat{y}) がどこから来るかを指定しません。つまり:
- モデルを当てはめるのに使った同じデータ(学習データ内、in-sample)、または
- 当てはめの際に使わなかった別データ(学習データ外、out-of-sample)
学習データ内の当てはめ値を使うと、柔軟なモデルでは性能が過大評価されがちです。学習データ外の予測を使うと、関係がどれくらい一般化するかをより現実的に示せますが、モデルが方向性として有用でも R² が下がることがあります。
証拠または例:具体的な計算(明示的な前提つき)
(n=3) の観測値 (y) があり、同じ3点に対して当てはめ値 (\hat{y}) を出すモデルがあるとします。
次のようにします:
- (y = [2,\ 4,\ 6])
- (\hat{y} = [2,\ 5,\ 5])
手順 1:平均を計算する [ \bar{y} = (2+4+6)/3 = 4 ]
手順 2:(\mathrm{SST}) を計算する [ \mathrm{SST} = (2-4)^2 + (4-4)^2 + (6-4)^2 = 4 + 0 + 4 = 8 ]
手順 3:(\mathrm{SSE}) を計算する [ \mathrm{SSE} = (2-2)^2 + (4-5)^2 + (6-5)^2 = 0 + 1 + 1 = 2 ]
手順 4:R² を計算する [ R^2 = 1 - 2/8 = 1 - 0.25 = 0.75 ]
この計算では、0.75 は残差の変動が総変動の4分の1であることを(この評価設定において)示しています。
限界と失敗パターン:R² が間違える可能性があること
R² は広く使われていますが、有用性の保証ではありません。いくつかの重要な制限によって誤解を招くことがあります。
1) 学習データ内で評価すると過学習になる
モデルが柔軟で、学習に使った同じデータセット上で当てはめ値を使って R² を計算すると、残差誤差が不自然に小さくなることがあります。これにより、モデルが安定した関係を捉えていない場合でも高い R² が出ることがあります。
2) 非線形性の不一致
R² は、残差を通じて予測値が観測値にどれだけ合っているかを測ります。モデリング手法がその構造(たとえば線形性)を強制しない限り、基礎となる関係が特定の構造を持つことは保証しません。
データ範囲を超えた外挿に対して不適切でも、R² が中程度または高い値になることがあります。なぜなら R² は普遍的な法則ではなく、評価用データセットに対する記述だからです。
3) スケールと前処理の影響
SST と SSE は (y) のスケールに依存するため、前処理(差分化、正規化、変換など)によって R² が変わり得ます。異なる変換を行う2人のアナリストは、「当てはまりの質」が同程度でも、異なる R² 値にたどり着く可能性があります。
4) R² は未定義になったり直感に反したりすることがある
- (\mathrm{SST}=0) なら、式が破綻します。
- 予測がどのように作られるか、また調整済みのような代替定義を使うかによって、「説明された割合」よりも直感的でない値になることがあります。
5) 関係 vs. 因果
R² は、予測が観測にどれだけ密接に追随するかを定量化します。なぜその関係が存在するのかは示しません。R² が高くても、その関連は共通の要因、データ上のアーティファクト、あるいは偶然のパターンを反映している可能性があります。
確認と次の質問:報告された R squared を独立にチェックする方法
報告された R² を見た場合、将来の性能に関する主張に頼らずに、次の事実を確認することで計算を検証できます:
- 評価データセットのサイズ (n) を確認する。
- 観測値 (y_i) を入手する。
- 残差誤差を計算するために使われた当てはめ/予測値 (\hat{y}_i) を特定する。
- (\bar{y})、SST、SSE を再計算し、その後 (R^2 = 1 - \mathrm{SSE}/\mathrm{SST}) を計算する。
提供者や計算者が、どの (\hat{y}) を使ったか(学習データ内 vs 学習データ外)や、どの前処理が適用されたかを述べていない場合、報告された R² はそれでも数学的には定義されていますが、セットアップ間での比較は不確実になります。
有用なフォローアップの質問は、関連する概念(たとえば異なる評価分割やモデリング形式を使うなど)で計算したときに R² がどう違うかです。これらの選択によって、R² が実際に測っているものが変わるからです。
DOCUMENT END