Python の線形回帰の完全ガイド


線形回帰は、1 つ以上の予測変数と応答変数の間の関係を理解するために使用できる方法です。

このチュートリアルでは、Python で線形回帰を実行する方法について説明します。

例: Python での線形回帰

勉強に費やした時間数と受けた模擬試験の数が、学生が特定の試験で受け取る成績に影響するかどうかを知りたいとします。

この関係を調査するには、Python で次の手順を実行して重線形回帰を実行します。

ステップ 1: データを入力します。

まず、データセットを保持するパンダ DataFrame を作成します。

 import pandas as pd

#create data
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]})

#view data 
df

        hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96
13 5 4 90
14 3 4 82
15 4 4 85
16 6 5 99
17 2 1 83
18 1 0 62
19 2 1 76

ステップ 2: 線形回帰を実行します。

次に、statsmodels ライブラリのOLS() 関数を使用して、「時間」と「試験」を予測変数として、「スコア」を応答変数として使用して、通常の最小二乗回帰を実行します。

 import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
x = df[['hours', 'exams']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

#view model summary
print(model.summary())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.734
Model: OLS Adj. R-squared: 0.703
Method: Least Squares F-statistic: 23.46
Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05
Time: 13:20:31 Log-Likelihood: -60.354
No. Observations: 20 AIC: 126.7
Df Residuals: 17 BIC: 129.7
Df Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 67.6735 2.816 24.033 0.000 61.733 73.614
hours 5.5557 0.899 6.179 0.000 3.659 7.453
exams -0.6017 0.914 -0.658 0.519 -2.531 1.327
==================================================== ============================
Omnibus: 0.341 Durbin-Watson: 1.506
Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196
Skew: -0.216 Prob(JB): 0.907
Kurtosis: 2,782 Cond. No. 10.8
==================================================== ============================

ステップ 3: 結果を解釈します。

結果内の最も関連性の高い数値を解釈する方法は次のとおりです。

R の 2 乗: 0.734 。これを決定係数といいます。これは、予測変数によって説明できる応答変数の分散の割合です。この例では、試験得点の変動の 73.4% は、勉強時間数と受験した予備試験の数によって説明されます。

F 統計: 23.46 。これは回帰モデルの全体的な F 統計量です。

確率 (F 統計量): 1.29e-05。これは、全体的な F 統計量に関連付けられた p 値です。これにより、回帰モデル全体が統計的に有意であるかどうかがわかります。言い換えれば、組み合わせた 2 つの予測変数が応答変数と統計的に有意な関連性を持っているかどうかがわかります。この場合、p 値は 0.05 未満であり、予測変数「学習時間」と「受験した予備試験」の組み合わせが試験スコアと統計的に有意な関連性があることを示しています。

coef:各予測子変数の係数は、他の予測子変数が一定のままであると仮定した場合、応答変数の予想される平均変化を示します。たとえば、受験した模擬試験が一定であると仮定すると、勉強に費やす時間がさらに 1 時間増えるごとに、試験の平均得点は5.56 点増加すると予想されます。

別の見方をすると、生徒 A と生徒 B が同じ回数の予備試験を受け、生徒 A が 1 時間長く勉強した場合、生徒 A の得点は生徒 B より5.56点高くなるはずです。

切片係数は、何時間も勉強せず、予備試験も受けなかった生徒の予想される試験スコアが67.67であることを意味すると解釈します。

P>|t|。個々の p 値は、各予測変数が統計的に有意であるかどうかを示します。 「時間」は統計的に有意 (p = 0.00) であるのに対し、「試験」は統計的に有意であることがわかります。   (p = 0.52) は、α = 0.05 では統計的に有意ではありません。 「試験」という用語は統計的に有意ではないため、最終的にモデルから削除することを決定する可能性があります。

推定回帰式:モデル出力の係数を使用して、次の推定回帰式を作成できます。

試験スコア = 67.67 + 5.56*(時間) – 0.60*(準備試験)

この推定回帰式を使用して、学習時間数と受験した模擬試験の数に基づいて、生徒の予想される試験スコアを計算できます。たとえば、3 時間勉強して予備試験を受ける学生は、 83.75の成績を取得する必要があります。

過去の予備試験は統計的に有意ではなかったので (p = 0.52)、モデル全体に何の改善ももたらさないため、試験を削除することを決定する場合があることに留意してください。この場合、予測変数として調査された時間のみを使用して単純な線形回帰を実行できます。

ステップ 4: モデルの仮定を検証します。

線形回帰を実行したら、回帰モデルの結果が信頼できるものであることを確認するために、いくつかの仮定をチェックすることができます。これらの仮定には次のものが含まれます。

仮定 #1:予測変数と応答変数の間には線形関係があります。

  • 回帰モデルの残差に対する近似値を表示する残差プロットを生成して、この仮定を検証します。

仮説 #2:残差の独立性。

仮説 #3:残差の等分散性。

仮定 4:残差の正規性。

仮定 #5:予測変数間に多重共線性がないことを確認します。

  • 各予測子変数のVIF 値を計算して、この仮説を検証します。

これらの仮定が満たされていれば、重線形回帰モデルの結果が信頼できるものであると確信できます。

このチュートリアルで使用される完全な Python コードは、 ここで見つけることができます。

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です