決定係数とは?説明変数の確らしさを図る指標の一つ。
作った回帰モデルはどの程度データと当てはまっているのか調べる方法の一つです。
決定係数(coefficient of determination)とは
決定係数とは、回帰モデルの説明力を表す指標の一つです。
もっと厳密にいうと、予測値と観測データの相関係数のことを重相関係数と呼びますが、決定係数は重相関係数の2乗に当たります。
これは、重回帰分析であろうが、単回帰分析であろうが変わりません。
$$R^2 = {\frac{\sum_{t}({\hat{y}_t}-{\overline{y}})^2}{\sum_{t}(y_{t}-{\overline{y}})^2}}=(corr(y,{\hat{y}}))^2$$
算出と評価の手順は以下のとおりです。
①予測値と実際のデータとの相関係数を求めます。
②この相関係数を2乗したものを決定係数(R^2)とします。
③1に近いほどモデルの当てはまりが良いと判断する。モデル間の比較に使います。
CODE|R
統計ソフトのRを使って、決定係数を見てみましょう。
x <- 1:100+runif(1000,0,300)
#xに一様分布から乱数を発生させたものを代入
1:100というのは、1から100までの整数を含むベクトルを作成しています。
runifは離散型の一様分布から乱数を発生させます。(乱数の数、最小値、最大値)です。
y <- 1:100 + runif(1000,0,300)
#同じようにyに代入します。
plot(x,y,pch=".")
#プロットします。これを書かなければ、図が出ません。plotは散布図を書くコマンドです。
↑こんな図が出来上がりました。次は線を引いてみましょう。
lm.ob <- lm(y~x)
#lm()は線形回帰分析を行う関数です。lm(目的変数~説明変数)という構成になります。
abline(lm.ob ,col=2)
#ablineは一次元の直線を描く関数です。式は先ほどのlm.objを使い、色(color)が赤色の直線を引きます。
text(0,0,substitute(paste(R^2,"=",x),list(x=round(summary(lm.obj)$r.squared,digits=5))),col=2,adj=0)
#pasteでテキストとして出すものを設定します。
r.squaredは決定係数のことです。
substitute()の部分は、指数を上付き文字にするためにそうしています。
digit=5というのは、小数点は5桁まで表示するということです。
下の方に決定係数が出てきました。1に近い方が良いので0.12139となると、あまり良い回帰直線とは言えませんね。
ちなみにsummary(lm.obj)の結果は以下になります。summaryにデータフレームを入れると、全ての記述統計を見ることができます。
数学的な説明
まず、この図を見てください。
図は、先ほどの散布図をズームしたものと考えていただければ良いです。
実際にプロットされた点(xi,yi)から、x軸に向かって垂線を引いてみましょう。回帰直線とぶつかる点があるはずです。
この点は、先ほどの点(xi,yi)と「x座標は同じでも、y座標は異なる」点です。このy座標は、「推定値」です。
2つの点のy座標の差(図では②)を「残差変動」と呼びます。
また、実際のデータ\(x\)と\(y\)の平均値をとった点と\(y\)座標での差(図では①)を「回帰変動」と呼びます。
この残差変動と回帰変動の和を、「全変動」と呼びます。\(y_i\)の分散を\(n\)倍したものと一致します。
$$\sum_{i=1}^N(y_{i}-{\overline{y}})^2$$
以上は全変動です。
$$\sum_{i=1}^N(\hat{y}_i-{\overline{y}})^2$$
以上は回帰変動です。
$$\sum_{i=1}^N(y_{I}-{\hat{y}})^2$$
以上は残差変動です。
数式に直すと上のようになります。では、この式から決定係数を出してみましょう。
まず、回帰変動を左辺に、全変動を右辺に持っていきましょう。
回帰変動 = 全変動 – 残差変動 となりました。
次に、全変動で両辺を割ってみましょう。
$$R^2 = {\frac{回帰変動}{全変動}}=1-{\frac{残差変動}{回帰変動}}$$
上のようになったと思います。
1から残差変動と全変動の商を引いています。
また、決定係数とは、回帰変動を全変動で割った値のことを言います。
\(\frac{回帰変動}{全変動}\)の分母と分子をn-1で割ることで、決定係数は予測値の分散を目的変数の観測データの分散で割ったものだと判断できます。
決定係数とは、「回帰直線はどの程度データを説明できているかを図る指標の一つ」でした。
回帰変動がどれだけ全変動を説明できているかが、モデルの信用度に関わるということになります。
逆に言えば「推定量と実際のデータの差」である残差変動が大きいほど、予測という面に関しては残念なモデルと言わざるを得ないということです。
決定係数が1に近すぎる場合
サンプルデータが少ない場合に過学習を起こし、決定係数がほぼ1になってしまうことは一般的な問題です。以下の方法を試すことで過学習を防ぐことができます。
正則化
正則化は、過学習を防ぐために使用されます。正則化は、モデルの複雑度を制限することで、過学習を防ぎます。例えば、L1正則化やL2正則化などがあります。
【python】Ridge(リッジ)回帰で多重共線性を解決する話
【python】Lasso(ラッソ)回帰で疎なデータに対応しよう|機械学習
交差検証
交差検証は、過学習を検出するために使用されます。交差検証は、トレーニングデータとテストデータの両方でモデルを評価し、過学習が起きていないかを確認します。
データ拡張
データ拡張は、サンプルデータの数を増やすために使用されます。
データ拡張は、既存のデータを変形、回転、反転などして新しいデータを生成することで、サンプルデータの数を増やします。
アンサンブル学習
アンサンブル学習は、複数のモデルを組み合わせることで、過学習を防ぐために使用されます。
アンサンブル学習は、バギング、ブースティングなどの方法があります。
新しいデータを収集する
サンプルデータが少ない場合に新しいデータを収集することで、モデルの汎化性能を上げることができます。
追記:残差と誤差項の違いは?
残差と誤差項の違いは、数式を見ると明らかでしょう。
$$Y_{i}-{\hat{Y}_{i}}$$
こちらは残差です。
残差は、実際の観測データから推定量を引いたものです。
$$Y_{i}=β_{0}+β_{1}X_{i}+ε_{i}$$
こちらは誤差項です。
誤差項は、統計モデルにおける説明変数と定数項以外の部分です。
正規分布に従うと仮定されることが多いです。
自由度調整済み決定係数(adjusted R^2)
決定係数は、その性質上「説明変数を増やせば増やすほど」値が高くなります。
このため、多変量になった時にover fittingされたモデルが「良いモデル」として評価されてしまうことになります。
1980年代や1990年代では、説明変数を増やしまくって「データとの当てはまりが良いと」評価されるモデルが疑問視されたという経緯があったりします。
決定係数は、モデルを評価する指標の一つであると理解しておきましょう。
そこで、導入された指標が「自由度調整済み決定係数」です。
特徴量(次元d)が増えれば増えるほど、ペナルティを受けるという設計になっています。
以下のように、分母を(n-1)でわり、分子を(n-d-1)で割っています。
$$adjustedR^2 = 1-{\frac{\frac{\sum_{i=1}^{N}(y_{i}- \hat{y}_{i})^2}{n-d-1}}{\frac{\sum_{i=1}^{N}(y_{i}-{\overline{y}})^2}{n-1}}}$$
これは回帰変動と総変動、残差変動の自由度をそれぞれ使っているだけです。
総変動の自由度は、サンプル数-1
回帰変動の自由度は、説明変数の数
残差変動の自由度は総変動の自由度-回帰変動の自由度で求められます。
$$adjusted R^2=1-(\frac{\frac{残差変動}{残差変動の自由度}}{\frac{総変動}{総変動の自由度}})=1-(1-R^2)×\frac{総変動の自由度}{残差変動の自由度}$$
調整してない決定係数を使って、こんなふうに表すこともできます。
決定係数を使って調整済み決定係数を算出する問題は統計検定準一級でも出ています。
決定係数を評価指標に入れるときは、「被説明変数の予測精度を重視するとき」だと考えてください。
これに対して、「説明変数の影響を正しく知る」ことを目的にしたとき、欠落変数のバイアスを避けるために、説明変数をできるだけ入れようとします。
これによって、自由度調整済み決定係数が下がったとしても、特に問題はありません。
目的に応じて機械学習の評価指標は使いましょう。
欠落変数のバイアスについては、以下のコンテンツをご覧ください。
【例題つき】固定効果推定と固定効果モデルについて解説|ランダム効果も添えて
統計検定のチートシートは以下をクリック!
【最短合格】統計検定準一級のチートシート|難易度や出題範囲について
【最短】統計検定2級合格ロードマップとチートシート|おすすめの本について
自由度調整済み決定係数が負?
決定係数は2乗のイメージがあるため、負にはならないのではないかというイメージがありますが、自由度調整済み決定係数だと負の数にはなり得ます。
残差の変動が大きく、自由度で調整した結果負になることもあり得ます。