エンジニアの備忘録

学んだ事をアウトプットしていきます

python (jupyter)で単回帰分析

①分析に必要なライブラリをインポート

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
import seaborn as sns
sns.set()

csvデータを読み込み

date = pd.read_csv("フルパス入力")

date

 

 

データフレームをフルで表示したい場合↓ 

pd.set_option ('display.max_rows', 行数指定)

pd.set_option ('display.max_columns', 列数指定)

 

③要約統計量を取得

date.describe ( )

各列ごとに平均や標準偏差、最大値、最小値、最頻値などの要約統計量を取得できる。

 

(例:値段と床面積)

   price size
count 100.000000 100.000000
mean 292289.470160 853.024200
std 77051.727525 297.941951
min 154282.128000 479.750000
25% 234280.148000 643.330000
50% 280590.716000 696.405000
75% 335723.696000 1029.322500
max 500681.128000 1842.510000
  • count: 要素の個数
  • mean: 算術平均
  • std: 標準偏差
  • min: 最小値
  • max: 最大値
  • 50%: 中央値(median)
  • 25%75%: 1/4分位数、3/4分位数

 

 

④散布図を作成

従属変数と独立変数を定義する

従属: y  = date["Price"]
独立: x1 = date["Size"]

 

散布図を表示

plt.scatter(x1,y)
plt.xlabel('Size',fontsize=20)
plt.ylabel('Price',fontsize=20)
plt.show()

↓出力結果

f:id:pmpmcherry:20211210020649p:plain

plt.scatter( )の引数の種類

x, y グラフに出力するデータ
s サイズ (デフォルト値: 20)
c 色、または、連続した色の値
marker マーカーの形 (デフォルト値: ‘o’= 円)
cmap カラーマップ。c が float 型の場合のみ利用可能です。
norm c を float 型の配列を指定した場合のみ有効。正規化を行う場合の Normalize インスタンスを指定。
vmin, vmax 正規化時の最大、最小値。 指定しない場合、データの最大・最小値となります。norm にインスタンスを指定した場合、vmin, vmax の指定は無視されます。
alpha 透明度。0(透明)~1(不透明)の間の数値を指定。
linewidths 線の太さ。
edgecolors 線の色。

 

 

⑤回帰の実行(最小二乗法)

x = sm.add_constant(x1)  //statmodelでの変数追加
results = sm.OLS(y,x).fit()    //最小二乗回帰式の計算結果が代入

              //fit( )は特定のモデルにおいて一番適合した結果を得る
results.summary()       //結果を表示

↓出力結果

OLS Regression Results

(モデルの要約に関する表)
Dep. Variable: price R-squared: 0.745
Model: OLS Adj. R-squared: 0.742
Method: Least Squares F-statistic: 285.9
Date: Fri, 10 Dec 2021 Prob (F-statistic): 8.13e-31
Time: 02:08:09 Log-Likelihood: -1198.3
No. Observations: 100 AIC: 2401.
Df Residuals: 98 BIC: 2406.
Df Model: 1    
Covariance Type: nonrobust    

OLS(最小二乗):残差の合計が最小になるような直線を決める

        =全てのデータに対して最も近くなるような直線を引く  

R²(決定係数):1に近い程、回帰のばらつきについて説明可能

F値F検定に使う数値、0に近いほどそのモデルは有意ではない

    

          

(係数に関する表)

  coef std err t P>|t| [0.025 0.975]
const 1.019e+05 1.19e+04 8.550 0.000 7.83e+04 1.26e+05
size 223.1787 13.199 16.909 0.000 196.986 249.371

左2行は切片で回帰式の a(1019)とb(223.1787)に当たる

最小二乗法 y^(ハット) = 223.1787 + 101900x₁

std(SSE):標準誤差(ばらつき)が小さいほど正しく予測がされている良い回帰

 

(検定などに使える表)

Omnibus: 6.262 Durbin-Watson: 2.267
Prob(Omnibus): 0.044 Jarque-Bera (JB): 2.938
Skew: 0.117 Prob(JB): 0.230
Kurtosis: 2.194 Cond. No. 2.75e+03

 

回帰直線を散布図の上に表示する

plt.scatter(x1,y)
yhat = x1*223.1787 + 101900
fig = plt.plot(x1, yhat, lw=4, c="orange", label="regression line" )
plt.xlabel('Size', fontsize = 20)
plt.ylabel('Price', fontsize = 20)
plt.show()

↓出力結果

f:id:pmpmcherry:20211210021744p:plain

 

補足

最小二乗法が求めている値とは、残差の二乗の合計の値を最小にしたもの。