【本記事の内容】重回帰分析を簡単解説(理論+実装)
回帰分析、特に重回帰分析は統計解析の中で最も広く応用されている手法の1つです。
また、最近の流行りであるAI・機械学習を勉強するうえで必要不可欠な分野です。
本記事はそんな重回帰分析についてサクッと解説します。
目次
【想定読者】
想定読者は
「重回帰分析がいまいちわからない方」「重回帰分析をざっくりと知りたい方」
です。
「重回帰分析についてじっくり知りたい」という方にはもの足りないかと思います。
【概要】重回帰分析とは?
重回帰分析とは、
「2つ以上の説明変数と(1つの)目的変数の関係を定量的に表す式(モデル)を目的とした回帰分析」
を指します。
もっとかみ砕いていえば、
「2つ以上の数を使って1つの数を予測する分析」
です。
【例】
- ある人の身長、腹囲、胸囲から体重を予測する
- 家の築年数、広さ、最寄駅までの距離から家の価格を予測する
- 気温、降水量、日照時間、日射量、 風速、蒸気圧、 相対湿度,、気圧、雲量から天気を予測する
※天気予測は、厳密には回帰分析ではなく、多値分類問題っぽい(?)ですが
【理論】重回帰分析の基本知識・モデル
【基本知識】
【用語】
- 説明変数 : 予測に使うための変数。
- 目的変数 : 予測したい変数。
- (偏)回帰係数 : モデル式の係数。
- 最小二乗法 : 真の値と予測値の差(残差)の二乗和(残差平方和)が最小になるようにパラメータ(回帰係数)を求める方法。
【目標】
- 良い予測をする「回帰係数」を求めること
※よく「説明変数x」を求めたい変数だと勘違いする方がいますが、xには具体的な数値が入ってきます。(xは定数のようなもの)
【例】
- ある人の身長(cm)、腹囲(cm)、胸囲(cm)から体重(kg)を予測する
この場合、「身長」「腹囲」「胸囲」が説明変数で、「体重」が目的変数です。
予測のモデル式が
「体重」 = -5.0 + 0.3×「身長」+0.1×「腹囲」+0.1×「胸囲」
と求まった場合、切片項、「身長」「腹囲」「胸囲」の係数、-5.0, 0.3, 0.1, 0.1が (偏)回帰係数です。
※この式を利用すると、例えば身長170cm、腹囲70cm、胸囲90cmの人は
「体重(予測)」= -5.0 + 0.3×170+0.1×70+0.1×90 = 63(kg)
と求まります。
※文献によっては、切片項(上でいうと0.2)を回帰係数に含めたり含めなかったりするそうです。
【モデル】
【モデル式】
重回帰係数のモデル式は以下で表せます。
$$\hat{y}=\beta_0+\beta_1 x_1 +…+ \beta_p x_p$$
ただし、
- \(\hat{y}\) : 目的変数(の予測値)
- \(x_1, … ,x_p\) : 説明変数
- \(p\) : 説明変数の個数
- \(\beta_0, … ,\beta_p\) : 回帰係数
【補足】
モデル式を上の例に置き換えると以下のようになります。
- 説明変数の個数 \(p\)=3
- \(y\) =「体重」
- \(x_1\) =「身長」
- \(x_2\) =「腹囲」
- \(x_3\) =「胸囲」
- \( \boldsymbol{\beta}=(\beta_0,\beta_1,\beta_2,\beta_3) = (-5.0 ,0.3 ,0.1 ,0.1) \)
【理論】最小二乗法を用いた回帰係数の導出
ここまではできるだけ丁寧かつ簡単に説明したつもりですが、
ここからはコンセプト上、「簡単に(簡潔に)」説明していきます。
【回帰係数】
結論を先に書くと回帰係数は以下の式で求まります。
$$\boldsymbol{\beta} = (\boldsymbol{X}^T \boldsymbol{X})^{-1} \boldsymbol{X}^T \boldsymbol{y}$$
ただし、
- \( \boldsymbol{\beta}=(\beta_0,\beta_1, … ,\beta_p)^T \) : 回帰係数ベクトル
- \(\boldsymbol{y}=(y_1, … ,y_n)^T\) : 目的変数ベクトル
- \(y_iはi番目のサンプルにおける目的変数の値\)
- \(\boldsymbol{X}=\begin{pmatrix} 1 & x_{11} & … & x_{p1}\\ 1 & x_{12} & … & x_{p2} \\ … & … & … & … \\ 1 & x_{1n} & … & x_{pn} \end{pmatrix}\) : 説明変数行列
- \(x_{ji}はi番目のサンプルにおけるj番目の説明変数の値\)
- \(p\) : 説明変数の個数
- \(n\) : サンプルの個数
【補足】
いきなり数学的な設定をたくさんしたので、最初は全然理解できないとは思います。
その際は、下記の「【具体例+実装】重回帰分析の実装・実行結果」を参照してください。
具体例を用いて、X,y について説明しています。
【最小二乗法による回帰係数の導出(概要)】
ここでは最小二乗法の概要だけを載せます。
基本方針は以下の通りです。
- 残差平方和(目的変数の真の値と予測値の差(誤差)の二乗和)を回帰係数を用いて表す
残差平方和$$~~ S_e = \displaystyle \sum_{ i = 1 }^{ n } ~(y_i ~-~ \hat{y_i})^2$$
- 残差平方和を回帰係数で偏微分したものを0とおく(連立方程式の導出)
$$\frac{ \partial S_e }{ \partial \beta_j } = 0 ~~( ~j ~ =~ 0,1 , … , p)$$
- 上記の連立方程式を解いて、回帰係数を求める
これにより残差平方和の最小化を実現する回帰係数を求めることができます。
ただし、
- \(\hat{y_i} = \beta_0 + \beta_1 x_{1i} + … + \beta_p x_{pi}\) : i番目のサンプルにおける目的変数の予測値
- \(\beta_j\) : j番目の説明変数の回帰係数
※余裕があれば、きちんとしたここの導出過程の記事を書きたいと思います。以下に記事リンク(まだ作成してません)を貼っておきます。
・重回帰分析における最小二乗法による回帰係数の導出
【具体例+実装】重回帰分析の実装・実行結果
【例題】中古マンションの価格予測
重回帰分析を実装して実際に、東京のある駅の徒歩圏内における中古マンションの「価格(千万円)」を「広さ(\(m^2\))」「築年数(年)」から予測することを考えます。
【データセット】
※参考 : 多変量解析法入門のデータを改変して使用
サンプルNo | 広さx1 (m2) | 築年数x2 (年) | 価格y (千万円) |
1 | 52 | 16 | 3.1 |
2 | 39 | 4 | 3.3 |
3 | 58 | 16 | 3.4 |
4 | 52 | 11 | 4.0 |
5 | 54 | 4 | 4.5 |
6 | 78 | 22 | 4.6 |
7 | 64 | 5 | 4.6 |
8 | 70 | 5 | 5.5 |
9 | 73 | 2 | 5.5 |
10 | 74 | 1 | 6.1 |
【説明変数行列、目的変数ベクトル】
この例題において、上記の「【回帰係数】」の節で述べていた説明変数用列X, 目的変数ベクトルyは以下のようになります。
- 説明変数の個数 p = 3
- サンプル数 n = 10
- 説明変数行列 X
$$\boldsymbol{X}=\begin{pmatrix} 1 & 52 &16 \\ 1 & 39 & 4 \\ … & … & … \\ 1 & 74 & 1\end{pmatrix}$$
- 目的変数ベクトル y
$$\boldsymbol{y}=(3.1 ,3.3 , … ,6.1)^T$$
【補足】上記【回帰係数】における\(x_{ji}\)の説明
例えば、\(x_{13} \) : 3番目のサンプルにおける1番目の説明変数の値は「サンプルNo: 3」「広さx1」の58を指します。
【ソースコード】
import numpy as np
#重回帰分析
def Multiple_regression(X,y):
#偏回帰係数ベクトル
A = np.dot(X.T,X) #X^T*X
A_inv = np.linalg.inv(A) #(X^T*X)^(-1)
B = np.dot(X.T,y) #X^T*y
beta = np.dot(A_inv,B)
return beta
#説明変数行列
X = np.array([[1,52,16],[1,39,4],[1,58,16],[1,52,11],[1,54,4],[1,78,22],[1,64,5],[1,70,5],[1,73,2],[1,74,1]])
#目的変数ベクトル
y = np.array([[3.1],[3.3],[3.4],[4.0],[4.5],[4.6],[4.6],[5.5],[5.5],[6.1]])
#偏回帰係数ベクトル
beta = Multiple_regression(X,y)
print(beta)
【実行結果・価格予測】
【実行結果】
beta =
[[ 1.05332478] [ 0.06680477] [-0.08082993]]
【モデル式】
$$\hat{y}= 1.053+0.067 x_1 -0.081 x_2$$
【価格予測】
同じ地域の「広さ\((m^2)~x1=50\)」「築年数(年)\(x2=20\)」の中古マンションの予測価格(千万円)は、
$$\hat{y}= 1.053+0.067×50 -0.081×20 ≒ 2.8$$
となります。
※きちんと内部を理解するために実装しましたが、実用上はscikit-learnのライブラリを使った方が良いです。
【おまけ】演習問題
演習問題として、統計検定準一級で実際に出題された問題の改題(手計算+簡易電卓で可)を別記事にて解説しています。
・演習問題および演習問題の解答・解説

【まとめ】重回帰分析
重回帰分析とは
「2つ以上の説明変数と(1つの)目的変数の関係を定量的に表す式(モデル)を目的とした回帰分析」
重回帰分析のモデル
$$\hat{y}=\beta_0+\beta_1 x_1 +…+ \beta_p x_p$$
回帰係数
$$\boldsymbol{\beta} = (\boldsymbol{X}^T \boldsymbol{X})^{-1} \boldsymbol{X}^T \boldsymbol{y}$$
【補足】本格的な重回帰分析
この記事では、重回帰分析について簡単な例を交えながらサラッと説明しました。
一方で、本格的に重回帰分析をやろうとすると、
決定係数によるモデル評価、変数選択、標準化(スケーリング)、外れ値の除去、正則化、多重共線性の検討…etc
が必要になってきます。
ここら辺についても今後まとめていけたらなと思っています。
【参考文献】
参考文献
- 多変量解析法入門(サイエンス社)
- 自分の脳みそ
・多変量解析法入門(サイエンス社)
https://images-na.ssl-images-amazon.com/images/I/41VuCyhVaEL._SX347_BO1,204,203,200_.jpg から引用
何冊か勉強してましたが、多変量解析を勉強したいなら一番おすすめです。(特に、統計検定準1級の出題範囲の多変量解析をほぼカバーしてます。)
内容は、「統計の基礎知識」「数学的準備」「回帰分析」「数量化1類、2類、3類」「判別分析」「主成分分析」「多次元尺度構成法」「クラスター分析」「その他の解析法」です。
個人的におすすめポイントとしては、
- 理論的な説明が丁寧かつわかりやすい点
- 例題・演習題がしっかりとついている点
特に、こういう専門書では演習問題がついていることが稀なので非常にありがたいです。
大学生なら図書館とかにおいてあると思うので、そこで借りてみるのも良いと思います。
・自分の脳みそ
※わりと昔に勉強したので、上記の参考書以外はどこの参考書・Webサイトを参考したかは正確に覚えていないです。
【次回予告】
次回の勉強記録ネタは、
「決定木・ランダムフォレスト」か「正則化」らへん
を勉強して解説していきたいと思います。
何か意見・指摘・質問等があればコメント欄にてお待ちしております。
コメント