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: 잔차의 독립성.
- Durbin-Watson 테스트를 수행하여 이 가설을 검증합니다.
가설 #3: 잔차의 동분산성.
- Breusch-Pagan 테스트를 수행하여 이 가설을 검증합니다.
가정 4번: 잔차의 정규성.
- QQ 플롯을 사용하여 이 가정을 시각적으로 확인합니다.
- Jarque-Bera 테스트 또는 Anderson-Darling 테스트 와 같은 공식 테스트를 통해 이 가설을 검증하세요.
가정 #5: 예측 변수 간에 다중 공선성이 없는지 확인합니다.
- 각 예측 변수의 VIF 값을 계산하여 이 가설을 검증합니다.
이러한 가정이 충족되면 다중 선형 회귀 모델의 결과를 신뢰할 수 있다고 확신할 수 있습니다.
이 튜토리얼에서 사용된 전체 Python 코드는 여기에서 찾을 수 있습니다.