この前、共分散ってのはデータの傾向を表した数値だよーってお話をしました。で、傾向を見るだけではどの程度の関連性なのかが不明なので、関連度合いを見るためには相関係数って数値を計算してやるといいよーってお話もしました。
確かに、それでもデータの傾向を読み取ることは可能なんですが、じゃあ、他のデータはどうなってるの?みたいな予測をするとなると難しいところがあるんです。
つまり、共分散なり相関係数なりを計算しただけでは、取れたデータがどうなってるかを説明するだけで終わっちゃう。だから、取れたデータ以外のことについては予測しにくいってことになるんですな。例えば、100人分の身長と体重のデータを取って、そこから相関係数を計算したとします。その場合、取った100人分のデータについては説明できるでしょうが、101人目のデータがどうなるか?って質問には答えにくいっていうような話ですな。
ってことで、得られたデータから、他のデータはこんな値になりそうだっていう予測をしようってことで編み出された手法が単回帰分析って手法になります。
単回帰分析は2項目間の関係から関数を導く
概要はなんとなくつかんでもらえたかと思うので、もっと具体的に単回帰分析って一体なんぞやってお話をしていきます。
そもそも回帰分析ってのは、複数ある項目の内、どれか一つを「主」、それ以外を「従」と考えて、従の項目を主の項目の足し算で表してやろう、で、主の項目にはどんな係数が適切かな?もともとのバイアスとして適切な数値はどれくらいかな?ってのを求めてやる手法のことです。
従の項目を主の項目の足し算でデータを表した場合、どんな関数にしてやればデータを上手く表現できてるかな?ってのを考え出すのが回帰分析って手法になります。
で、その中でも特に1つの従に対して1つの主で表してやろうとするのが単回帰分析になります。
日常生活でも、例えば読みたい本を選ぶとき、この著者の本はいつも面白いから、おそらくこの新刊も面白いだろうなみたいに、面白いと思った本っていう「過去(データ)」からおそらく面白いだろうっていう「予想」をするってことがあるかと思います。それの数学版が、回帰分析って感じです。で、「著者」という一つの項目だけから「面白さ」という従の項目を予想するのが単回帰分析になります。
※この記事では線形の単回帰分析だけを扱うので、上のような説明にしています。分からない人は、とりあえず何か一つの項目をもう片方の項目で表せる足し算の式を考えようとしてるんだなってことだけ抑えておいてもらえればよろしいかと思います~
最終目標は\( y = a + bx \)
ここまでで、単回帰分析の目標は今までのデータから次のデータを予測できる数式を導くってことだってのは理解していただけたかと思います。ここから、じゃあその数式は具体的にはどうやって求めればいいのよ?ってお話に入っていきます。が、まずは問題設定を明確にするところから。
まずは、データをグラフに書いてみて、大体どんな感じに分布しているのかを見てやります。今回は、大体直線状になっていそうだってことにしておきます。つまり、多少の誤差はあっても、どのデータも大体\( y = a + bx \)という中学校で習った一次関数の形で表せそうだと予測するわけです。つまり、データがなんとなく直線状に並んでいそうに見えたってことですな。
最終目標はその式を完成させること、つまりは最適な\( a \)と\( b \)を求めてやることになります。
数式が出てきたので、少し文字の話をしておきます。普通、\( x \)と\( y \)は実際のデータを表しています。なので、データが\( y = a + bx \)と表せそうだとしても、定義を厳密にすることで成り立っている数学では、この文字式をそのまま使うわけにはいきません。なぜなら、実際に取れたデータとしての\( y \)と予測をした結果としての\( y \)は、奇跡でも起こらない限りまったく違う数値になるからです。
そこで、実際に取れたデータはそのまま\( y \)と表し、予測した結果は\( \hat{y} \)として表すことにします。違う数値に同じ文字が使われているというのは問題があるのですが、どちらも表している項目としては変わらないので、「同じ項目である」ということを同じ文字を使って表し、「けれども本質的には異なる値である」ということを上に\( \hat{} \)(ハットと読みます\( \hat{y} \)なら「ワイハット」です)という記号を付けることで表しています。
今までのことをまとめると、データをグラフで表した結果、\( \hat{y} = a + bx \) という式が成り立っていそうに見えたので、最終目標は、最もデータにフィットするような直線を求める(\( a \)と\( b \)を求める)ことになります。
で、データにフィットする直線を求める手法がこれから説明する最小二乗法になります。
全体的なズレを最小化する
\( y \)と\( \hat{y} \)は見かけは似てても、本質的にはまったく違った数値だってお話をしました。つまり、実測値と予測値が違っているわけです。その違いは実測による誤差のせいだと考えます。本来の値としてはこうなっててほしいんだけど、誤差のせいでちょっとズレた数値になっちゃったって考えるわけです。まぁ、妥当な考え方っすよね~。
そう考えた場合、全データの誤差の総和が最小になるような直線を求めてやるのが妥当でしょう。つまりは、個々のデータを見てやると予測値とかなりズレてたり、そんなにズレてなかったりするけど、全体的に見てやるとズレは小さくなってるよね~っていうような直線を求めればいいってことですな。
ちなみに、その数式の公式の中で共分散が使われますので、共分散がどんなものかよく分かってないよ~って方は以下の記事を参照していただければと思います。
共分散についてざっくりと説明すると、データが右肩上がりなのか、右肩下がりなのかを表した指標で、計算方法はこんな感じになります。
$$ s_{xy} = \frac{1}{n} \displaystyle \sum_{i = 1}^n {(x_i – \overline{x})(y_{i} – \overline{y})} $$
ここからは数式を使った説明になるので、数式アレルギーの方はとりあえずそんなもんか~って感じで次の項目読み飛ばしてもらって大丈夫です。(共分散の数式はもう出てたけど)
上の方で書いた「全データの誤差の総和が最小になるような直線を求める」というのを数式を使って説明するとこうなります。(誤差の総和が\( Q_e \)で、実際に取れたデータの内、従と考える項目の数値が\( y \)、\( y \)の予測値が\( \hat{y} \)、データ数が\( n \)として表されています)
$$ Q_e = \sum_{i = 1}^n {(y_i – \hat{y_i} ) ^ 2} $$
と表される\( Q_e \)を最小にするようなパラメータ\( a \)、\( b \)を式変形により決定する。
この手順を説明すると、まず従としたデータから予測値を引きます(\( y_i – \hat{y_i} \)のことを残差と呼びます)。つまりは、データ\( y \)から予測式\( \hat{y} = a + bx \)を引くわけです。全てのデータから引き終えたら、すべての残差を足し合わせます。最後に、そうして求められた数式が最小になるような\( a \)と\( b \)を式変形で求めます。
※\( Q_e \)は残差平方和と呼ばれます。(残差→2乗(平方)→総和って順に計算するので)
以上が数式の意味と、計算手順の説明でした。
ただ、毎回この手順で計算を進めていくというのはちょっと大変だってことで、もっと簡単にしたやり方があるんですな。それが次に紹介する共分散を使った方法になります。上の式から導かれる計算方法なので、やってることは本質的には上と同じですが、直接的に求められる分こちらの方が計算しやすいかと思います(証明も可能ではあるんですが、面倒なのでやりません)。
では、その式を。(\( s_{xy} \)は\( x \)と\( y \)の共分散、\( \overline{x} \)と\( \overline{y} \)はそれぞれ\( x \)と\( y \)の平均値、\( s_{xx} \)は\( x \)の分散を表しています)
$$ b = \frac{ s_{ xy } } { {s_{xx}} ^2 } \ ,\ \ a = \overline{y} – b \overline{x} $$
一応説明しておきます。まず、\( x \)と\( y \)の共分散を\( x \)の分散で割ります。その数値が\( b \)になります。次に、\( y \)の平均値から\( b \)と\( x \)の平均値をかけた値を引きます。それが\( a \)になります。
これは難しい式変形がない上に直接求められるので便利っすな~。
で、ここで使った考え方(誤差の総和を最小にする)で予測式\( \hat{y} = a + bx \)のパラメータ\( a \)と\( b \)を求める方法を最小二乗法って呼びます。
まとめ
単回帰分析は、データに2項目があったとき、片方からもう片方を予測できる関数を導き出すってことでした。今回はデータが直線状に並んでるって仮定して、直線の方程式を求めてやりました。最終的なゴールをデータに一番よく合う直線を見つけることにしたわけですな。
じゃあどうやってその「一番よく合う直線」ってのを見つければいいのよ?ってことで最小二乗法って手法が出てきました。最小二乗法は、全データの誤差を足し合わせたとき、それが最小になってれば、妥当な直線と言えるんじゃない?っていう考え方で直線のパラメータを求めてやる手法のことでした。で、数式としては上に挙げた通りと。
今度、時間があれば具体的にこの数式を使った計算なんかも記事にできたらな~と思っております(いつになるかは分かりませんが)。なので、具体例の方はGoogle先生に聞くか、もうしばらく待つかしていただければ幸いです~。ではでは~。
2019/09/12(木)訂正
訂正前まで、\( a \)と\( b \)を求める式が逆になっていたので、\( \hat{y} = ax + b \)を\( \hat{y} = a + bx \)に変えました。