Python의 선형 회귀에 대한 완전한 가이드


선형 회귀 는 하나 이상의 예측 변수와 응답 변수 간의 관계를 이해하는 데 사용할 수 있는 방법입니다.

이 튜토리얼에서는 Python에서 선형 회귀를 수행하는 방법을 설명합니다.

예: Python의 선형 회귀

공부한 시간과 연습 시험의 횟수가 학생이 주어진 시험에서 받는 성적에 영향을 미치는지 알고 싶다고 가정해 보겠습니다.

이 관계를 탐색하기 위해 Python에서 다음 단계를 수행하여 다중 선형 회귀를 수행할 수 있습니다.

1단계: 데이터를 입력합니다.

먼저 데이터 세트를 보관할 pandas 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 제곱: 0.734 . 이것을 결정계수라고 합니다. 이는 예측 변수로 설명할 수 있는 반응 변수의 분산 비율입니다. 이 예에서 시험 점수 변동의 73.4%는 공부한 시간과 응시한 준비 시험 횟수로 설명됩니다.

F-통계량: 23.46 . 이는 회귀 모델의 전체 F 통계입니다.

확률(F 통계): 1.29e-05. 이는 전체 F 통계량과 연관된 p-값입니다. 이는 회귀 모델 전체가 통계적으로 유의미한지 여부를 알려줍니다. 즉, 결합된 두 예측 변수가 반응 변수와 통계적으로 유의미한 연관성을 가지고 있는지 여부를 알려줍니다. 이 경우 p-값은 0.05보다 작습니다. 이는 예측 변수인 “학습 시간”과 “응시한 준비 시험”이 시험 점수와 통계적으로 유의미한 연관성이 있음을 나타냅니다.

coef: 각 예측 변수의 계수는 다른 예측 변수가 일정하게 유지된다는 가정 하에 응답 변수의 예상 평균 변화를 알려줍니다. 예를 들어, 연습 시험이 일정하게 유지된다는 가정 하에 공부하는 데 추가 시간을 소비할 때마다 평균 시험 점수는 5.56 씩 증가할 것으로 예상됩니다.

이를 다르게 보는 방법은 다음과 같습니다. 학생 A와 학생 B가 모두 같은 수의 준비 시험을 치르지만 학생 A가 한 시간 더 공부한다면 학생 A는 학생 B보다 5.56 점 더 높은 점수를 받아야 합니다.

우리는 인터셉트 계수를 해석하여 시간도 공부하지 않고 준비 시험도 치르지 않은 학생의 예상 시험 점수가 67.67 임을 의미합니다.

피>|티|. 개별 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 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다