【初心者脱出】statsmodelsによる重回帰分析結果の見方

【初心者脱出】statsmodelsによる重回帰分析結果の見方 プログラミング

Pythonで回帰分析を行う方法は、数多くの記事が書かれています。
実際、私もそのような記事を書いています。

しかし、それはあくまで回帰分析を行うやり方です。
回帰分析結果の見方やモデル改善の方法については、グッと記事数が減ります。

ただ、本当にやりたいのはデータ分析のはずです。
実際に、重回帰分析をつかいこなせたら、かなり役立ちそうですよね。

そこで、この記事ではそのための第一歩としての情報をまとめています。
重回帰分析結果の見方が、メインの内容です。

見方がわからないと、分析の精度を上げるなどは夢物語となります。
つまり、現状分析ができないと改善などできないということです。

本記事の内容

  • 実際に行った重回帰分析の説明
  • statsmodelsによる重回帰分析結果の見方
  • statsmodelsによる重回帰分析結果の見方のまとめ

実際に行った重回帰分析の説明

今回、見ていく重回帰分析の結果は以下。

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                      y   R-squared:                       0.728
Model:                            OLS   Adj. R-squared:                  0.726
Method:                 Least Squares   F-statistic:                     359.7
Date:                Tue, 23 Jun 2020   Prob (F-statistic):          2.85e-224
Time:                        12:05:25   Log-Likelihood:                -626.47
No. Observations:                 815   AIC:                             1267.
Df Residuals:                     808   BIC:                             1300.
Df Model:                           6                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const      -1.735e-16      0.018  -9.45e-15      1.000      -0.036       0.036
x1             0.0777      0.019      4.039      0.000       0.040       0.115
x2             1.2535      0.101     12.373      0.000       1.055       1.452
x3             0.1405      0.022      6.292      0.000       0.097       0.184
x4             0.2791      0.023     12.365      0.000       0.235       0.323
x5             0.2963      0.023     13.106      0.000       0.252       0.341
x6            -0.7372      0.098     -7.538      0.000      -0.929      -0.545
==============================================================================
Omnibus:                      101.361   Durbin-Watson:                   1.043
Prob(Omnibus):                  0.000   Jarque-Bera (JB):              947.359
Skew:                          -0.001   Prob(JB):                    1.92e-206
Kurtosis:                       8.282   Cond. No.                         11.7
==============================================================================

上記の結果は、次の記事で行った重回帰分析のサマリーレポートです。
詳細は、記事をご覧ください。

重回帰分析の内容について、簡単に説明しておきます。
議員報酬を目的変数として、次の項目を説明変数(レポート上ではX1、X2・・・)にしています。

  • 都道府県
  • 財政力指数
  • 歳入
  • 人口
  • 面積
  • 人口密度

レコード件数では、815件あります。
これは実際のデータをもとにしています。

「市区の議員報酬にある程度の条件があるのか?」
「議員報酬に規則性があるのか?」

これらを求めるために、Pythonで重回帰分析を行いました。
この分析結果が適切であれば、議員報酬の妥当性チェックもできるはずです。

高い精度で予測を見積もることができれば、ある程度の水準を決めることができます。
その水準をベースにすれば、議員報酬が他と比べて高いのか、安いのかが判断可能です。

以上が、実際に行った重回帰分析の内容となります。
次は、この分析結果を各項目毎に確認していきます。

statsmodelsによる重回帰分析結果の見方

上で載せた重回帰分析のサマリーレポートは、statsmodelsによって作成しています。
これの項目を一つづつ見ていきましょう。
明らかに説明不要のものは、スルーします。

Dep. Variable

目的変数

dependent variableの略ですね。
yが目的変数だと表しています。
今回の分析で言えば、「議員報酬」となります。

Model

回帰モデル

以下から選択可能です。

回帰モデル正式名称日本語
OLSOrdinary Least Squares最小二乗法
GLSGeneralized Least Squares一般化最小二乗法
GLSARGeneralized Least Squares with AR covariance structure空間共分散一般化最小二乗法
WLSWeighted Least Squares重み付き最小二乗法
RecursiveLSRecursive least squares再帰的最小二乗法
RollingOLSRolling Ordinary Least Squares逐次最小二乗法
RollingWLSRolling Weighted Least Squaress逐次重み付き最小二乗法

No. Observations

観測数

データの行数です。
CSVの行数815件と一致していますね。(ヘッダー除く)

Df Residuals

残差の自由度

全体の自由度から要因の自由度を引いたものが、残差の自由度です。
全体の自由度とは、データの個数から1を引いたものです。

データの個数は「No. Observations」です。
よって、今回の分析では、全体の自由度は814となります。

では、要因の自由度は?
これが、次の「Df Model」になります。
要因の自由度は、6です。

814 – 6 = 808
レポートの値と一致します。

Df Model

要因の自由度

因子の水準の個数から1を引いたものです。
因子とは、説明変数のことですね。

以下の6個でした。

  • 都道府県
  • 財政力指数
  • 歳入
  • 人口
  • 面積
  • 人口密度

6は、レポートの記述と同じです。

Covariance Type

共分散の種類

共分散は、変数間のデータの関係を示す指標です。
相関関係と言った方が、わかりやすいかもしれませんね。

各説明変数間同士の相関関係を総じて表現したモノと言えます。
そして、その相関関係のレベルが、「nonrobust」だと判定されています。

「nonrobust」は、「強」の否定ですね。
つまり、各変数間の相関関係は、弱いという判定になります。

R-squared

決定係数

説明変数が、目的変数のどれくらいを説明できるかを表す値です。
求めたモデルの精度を表す場合に利用されます。

精度を表す目安は、以下。

決定係数精度
0.9以上非常によい
0.7以上0.9未満よい
0.5以上0.7未満あまりよくない
0.5未満悪い

目安に関しては、いろいろな意見があるようです。
とりあえず、0.7以上あれば、使えるモデルだと言えるでしょう。

Adj. R-squared

自由度調整済み決定係数

決定係数をより辛めに判定したモノです。
決定係数の弱点を補ったモノとも言えますね。

決定係数は、説明変数の数が増えるほど1に近づくという性質を持っています。
そのため、説明変数が多いと実際の評価に関わらず、1に近づいた値になります。

つまり、適切に精度を判定できないのです。
その弱点を補うために、自由度調整済み決定係数が存在すると考えればよいでしょう。

今回の分析では、決定係数が0.728、自由度調整済み決定係数が0.726です。
説明変数の数は6個のため、その弱点も出なかったと言えるのでしょう。

また、自由度調整済み決定係数も0.7以上です。
よって、今回の分析結果のモデルは、そこそこ使えると言えます。

F-statistic

F値

F値とは、分散分析手法に使用する検定統計量のことを言います。
F値は、「すべての係数がゼロである」という仮説を検定する場合に使われます。

なお、この値は大きいほどよいそうです。
大きいほどよい、と言われても判断に困りませんか?

今回の分析では、359.7です。
果たして、これが大きいのか少ないのか、よくわかりません。
もっと具体的な判断基準が欲しいですよね。

そこで、次の「Prob (F-statistic)」です。

Prob (F-statistic)

F値の現れる確率

0.05%以下が、望ましいと言われています。
そうであれば、2.85e-224は限りなく0に近い値です。

楽勝で望ましい結果ということになります。

Log-Likelihood

対数尤度

細かいことは説明しません。
この値が、大きいほどモデルの精度は高いと言えます。

なお、値がマイナスでも問題ありません。
値は、絶対値で考えるべきでしょうね。

ただ、この値もイマイチ基準がわかりません。
そこで、次のAICとBICです。

AIC

赤池情報量規準

AICは、Akaike’s Information Criterionの略称です。
元統計数理研究所所長の赤池弘次が、1971年に考案し1973年に発表したそうです。
ここで日本人の名前を見るのは、新鮮ですね。

値が小さいほどあてはまりが良いとされています。
しかし、AICは相対的な評価として用いられるモノです。
そのため、「〇以下であることが望ましい」というような基準はないとのことです。

BIC

ベイズ情報量規準

ベイズという名前は、統計関連では良く目にしますね。
もちろん、ここでも詳細はなしです。

AICとBICは、よく一緒に語られるモノです。
比較して、小さい方を選べばよいようです。

今回の分析おいては、AICといいうことになります。

coef

回帰係数

回帰係数は、回帰分析モデルにおいて傾きを示す係数のことです。
値が、大きいほど目的変数へ影響力があると言えます。


col_namestatsmodels
X1prefecture_id0.0777
X2population1.2535
X3area0.1405
X4population_density0.2791
X5fiscal_index0.2963
X6revenue-0.7372

population(人口)が最も目的変数へ影響していると言えそうです。
このような判断で行う上で、重要な項目となります。

なお、今回は予め読み取ったデータを標準化しています。
そのため、今回の回帰係数は、標準偏回帰係数と呼びます。

std err

標準誤差

小さい値であるほど、ばらつきが小さく精度の高い推定量という評価になります。
標準誤差が小さいほど、推定値の精度が高くなります。

この標準誤差と関係があるのが、次のt値です。

t

t値

係数を標準誤差で割ったものが、t値です。
x1(prefecture_id)の場合、係数は0.777、標準誤差が0.019です。

0.777 ÷ 0.019 = 4.089473684210526
t値は、4.039ですが、ほぼ同じです。

おそらく、係数や標準誤差は表示する際に、小数点以下5以下を四捨五入しています。
それの影響にり、若干の差異が出ているのだと思います。

そして、このt値は、これ自体では特に意味はありません。
t値をp値に変換してこそ、意味のある値となるのです。

P>|t|

P値(有意確率)

P値についての説明はしません。
多くの専門家が、詳しく説明してくれています。

ここでは、P値の使い方だけ説明します。
P値は、小さければ小さいほどベターです。

とりあえず、0.05以下なら、「有意性が高い」と言えそうです。
今回の分析結果では、「0.000」ばかりです。

よって、単純には「有意性が高い」と言えます。
「0.000」は表示だけであり、実際にP値が「0」になることはありません。

[0.025      0.975]

母分散の95%信頼区間

95%のデータがこの区間に存在していると言うことです。
例えば、x2は「1.055 1.452」が母分散の信頼区間となります。

x2のデータの95%が、「1.055 1.452」の区間に属していることを示しています。

Omnibus

オムニバス検定統計量

標本データの正規性の確認を行う検定の一つに、オムニバス検定があります。
その検定で算出される、統計量ということですね。

この値だけでは、意味がわかりにくいです。
そのため、次のProb(Omnibus)が用意されています。

Prob(Omnibus)

オムニバス検定統計量のP値

P値と言えば、0.05ですね。
今回の結果は、限りなく「0」に近いです。
そのため、正規分布にかなり近いと言えるでしょう。

Skew

歪度

歪度とは、分布の歪み度合いを示すものです。

歪度<0:左に裾が長い(右に偏った)分布
歪度=0:正規分布と同じ
歪度>0:右に裾が長い(左に偏った)分布

今回の分析では、-0.001です。
ほぼ正規分布であるが、若干だけ左に裾が長い(右に偏った)分布になります。

Kurtosis

尖度

尖度とは、分布が正規分布からどれだけ逸脱しているかを表す統計量のことです。
大きければ分布は尖っており、小さければ緩やかな分布となります。

8.282という値は、結構尖っているということですね。
今回の分析では、Skewの数値と合わせると、尖っている正規分布と言えそうです。

Durbin-Watson

ダービン・ワトソン比

ダービン・ワトソン比とは、誤差項(実測値と理論値の差)間に自己相関(系列相関)があるかないかを判別するための指標です。
ダービン・ワトソン比は、0から4の値をとります。

基準は以下。

  • DWの値が2前後のとき、自己相関なし
  • DWが2より十分に小さいとき、正の自己相関
  • DWが2より十分に大きいとき、負の自己相関

今回の分析結果では、1.043です。
正の自己相関と判定されます。

なお、時系列データを用いた回帰分析で自己相関が問題になります。
今回の分析では、時系列データは存在しません。

Jarque-Bera (JB)

ジャック・ベラ検定統計量のP値

P値と言えば、0.05ですね。
今回の結果は、限りなく「0」に近いです。
そのため、正規分布にかなり近いと言えるでしょう。

Cond. No.

条件数

条件数とは、コンピュータでの数値解析しやすさの尺度です。
分析対象(問題)が、どれだけ数値解析に適しているかを表します。

判定基準は以下。

  • 条件数が小さい問題は「良条件 (well-conditioned)」
  • 条件数が大きい問題は「悪条件 (ill-conditioned)」

乗件数が1に近いほど、多重共線性は弱くなります。
多重共線性とは、説明変数間で相関係数が高いときに、それが原因で発生する現象です。
英語で「マルチコ」と呼ばれるモノです。

多重共線性は、害でしかありません。

  • 係数の標準誤差が大きくなる
  • t値が小さくなる⇒P値にも影響を及ぼす
  • 決定係数が大きな値となる

回帰係数や決定係数に悪影響を及ぼします。
つまり、適切な分析ができないようになります。

多重共線性の強弱を判定する意味で、条件数は重要と言えます。

statsmodelsによる重回帰分析結果の見方のまとめ

どうでしたでしょうか?
なかなか、大変だったと思います。

私自身よく理解していない部分もありました。
これを機に、かなり調べました。
そのおかげでstatsmodelsのサマリーレポートは詳しくなりました。

と言っても、まだまだ意味がわかっただけです。
それでも、かなり前進ですけどね。

レポートのどの数値を意識すればよいのか?
これを重要視して、説明をしてきました。

その代わり、理論や計算式は完全無視です。
プログラミングで統計を行う際には、これぐらい割り切った方がよいかもしれません。
計算なんて数行のコードで終わりですから。

今後は、理解した項目をもとにモデルの改善を行っていきます。
今回の重回帰分析の結果であるモデルは、もう少し改善できそうです。

決定係数が0.7以上で、そこそこの精度でした。
しかし、ほとんどチューニングらしいことはしていません。
だから、まだ改善の余地があると考えています。

決定係数を0.8以上にすることができた際には、その過程についてまとめたいと思います。

タイトルとURLをコピーしました