Python 数学、統計、機械学習:重回帰分析
1.重回帰分析
Bostonデータセットの各項目の内容を説明変数として、scikit-learn を用いて線形回帰モデルを作成、重回帰分析を行ってみる。
- from sklearn import datasets
- import pandas as pd
- import statsmodels.formula.api as smf
- import matplotlib.pyplot as plt
- import numpy as np
- def multi_regression(*feature_index):
- """
- 重回帰分析
- https://pythondatascience.plavox.info/scikit-learn/%E7%B7%9A%E5%BD%A2%E5%9B%9E%E5%B8%B0
- https://pythondatascience.plavox.info/matplotlib/%E6%A3%92%E3%82%B0%E3%83%A9%E3%83%95
- :return:
- """
- boston = datasets.load_boston()
- df = pd.DataFrame(boston.data)
- df.columns = boston.feature_names
- df['PRICE'] = pd.DataFrame(boston.target)
- x = df.loc[:, ['{0}'.format(x) for x in feature_index]]
- y = df['PRICE']
- model = smf.OLS(y, x)
- result = model.fit()
- print(result.summary())
- # numpy sort
- # https://qiita.com/supersaiakujin/items/c580f2aae90818150b35
- desc_idx = np.argsort(result.tvalues.values)[::-1]
- labels = []
- values = []
- for idx in desc_idx:
- labels.append(feature_index[idx])
- values.append(result.tvalues.values[idx])
- plt.bar(labels, values)
- plt.legend(title="r^2(adj) = {0:.6}".format(result.rsquared_adj))
- plt.show()
- if __name__ == "__main__":
- multi_regression('CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT')
- # multi_regression('RM', 'AGE', 'TAX', 'B')
分析結果について、summary() メソッドを呼び出すことで、以下の結果表が得られる。
- OLS Regression Results
- ==============================================================================
- Dep. Variable: PRICE R-squared: 0.959
- Model: OLS Adj. R-squared: 0.958
- Method: Least Squares F-statistic: 891.1
- Date: Mon, 04 Jun 2018 Prob (F-statistic): 0.00
- Time: 22:53:10 Log-Likelihood: -1523.8
- No. Observations: 506 AIC: 3074.
- Df Residuals: 493 BIC: 3129.
- Df Model: 13
- Covariance Type: nonrobust
- ==============================================================================
- coef std err t P>|t| [0.025 0.975]
- ------------------------------------------------------------------------------
- CRIM -0.0916 0.034 -2.675 0.008 -0.159 -0.024
- ZN 0.0487 0.014 3.379 0.001 0.020 0.077
- INDUS -0.0038 0.064 -0.059 0.953 -0.130 0.123
- CHAS 2.8564 0.904 3.160 0.002 1.080 4.633
- NOX -2.8808 3.359 -0.858 0.392 -9.481 3.720
- RM 5.9252 0.309 19.168 0.000 5.318 6.533
- AGE -0.0072 0.014 -0.523 0.601 -0.034 0.020
- DIS -0.9680 0.196 -4.947 0.000 -1.352 -0.584
- RAD 0.1704 0.067 2.554 0.011 0.039 0.302
- TAX -0.0094 0.004 -2.393 0.017 -0.017 -0.002
- PTRATIO -0.3924 0.110 -3.571 0.000 -0.608 -0.177
- B 0.0150 0.003 5.561 0.000 0.010 0.020
- LSTAT -0.4170 0.051 -8.214 0.000 -0.517 -0.317
- ==============================================================================
- Omnibus: 204.050 Durbin-Watson: 0.999
- Prob(Omnibus): 0.000 Jarque-Bera (JB): 1372.527
- Skew: 1.609 Prob(JB): 9.11e-299
- Kurtosis: 10.399 Cond. No. 8.50e+03
- ==============================================================================
- Warnings:
- [1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
- [2] The condition number is large, 8.5e+03. This might indicate that there are
- strong multicollinearity or other numerical problems.
- No handles with labels found to put in legend.
いろいろ警告が出ていますが、結果の見方を知りたい。
説明変数の各項目については、Bostonデータセットを引き続き使用
項目 | 内容 |
最小二乗回帰(OLS : Ordinary Least Squares regression) | 分析モデルとして最小二乗法を使用 |
回帰係数(ceof) | 回帰係数は単位の影響を受けるため、影響度の指標としては利用できない |
標準誤差(std err) | 平均からのバラツキを示す指標、分散の正の平方根 |
t値(t) | 目的変数に対するそれぞれの説明変数の影響度を表す。回帰係数は単位の影響を受け、影響度の指標に利用できないため、回帰係数を標準誤差で除し単位の影響を受けないt値を利用する。t値の絶対値が大きいほど、影響度の強い説明変数といえる |
P-値 | p値 は、全く効果がない場合(係数=0)に、分析結果として出る係数の値が、A以上になる確率を表す。 |
下限97.5% | 97.5%の信頼区間下限。 |
上限97.5% | 97.5%の信頼区間上限 |
重決定 R2(R-squared) | 寄与率または決定係数と呼ばれ、回帰式全体の精度を表す。1に近いほど制度が高いといえる。 |
補正 R2(Adj R-squared) | 自由度調整済み決定係数 |
t値を降順にソートして棒グラフにプロット。
住宅価格に影響を与えている変数を分析できる。