Python에서 가중치 최소 제곱 회귀를 수행하는 방법
선형 회귀 분석의 주요 가정 중 하나는 잔차가 예측 변수의 각 수준에서 등분산으로 분포된다는 것입니다. 이 가정을 등분산성(homoscedasticity) 이라고 합니다.
이 가정이 존중되지 않으면 잔차에 이분산성이 존재한다고 합니다. 이런 일이 발생하면 회귀 결과를 신뢰할 수 없게 됩니다.
이 문제를 해결하는 한 가지 방법은 가중치 최소 제곱 회귀를 사용하는 것입니다. 이는 오류 분산이 낮은 관측치 가 오류 분산이 큰 관측치에 비해 더 많은 정보를 포함하기 때문에 더 많은 가중치를 받도록 관측치에 가중치를 할당하는 것입니다.
이 튜토리얼에서는 Python에서 가중치 최소 제곱 회귀를 수행하는 방법에 대한 단계별 예를 제공합니다.
1단계: 데이터 생성
먼저, 수업 시간에 16명의 학생이 공부한 시간과 최종 시험 성적에 대한 정보가 포함된 다음 pandas DataFrame을 만들어 보겠습니다.
import pandas as pd #createDataFrame df = pd. DataFrame ({' hours ': [1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8], ' score ': [48, 78, 72, 70, 66, 92, 93, 75, 75, 80, 95, 97, 90, 96, 99, 99]}) #view first five rows of DataFrame print ( df.head ()) hours score 0 1 48 1 1 78 2 2 72 3 2 70 4 2 66
2단계: 단순 선형 회귀 모델 피팅
다음으로, statsmodels 모듈의 함수를 사용하여 시간을 예측 변수로 사용하고 점수를 응답 변수로 사용하여 간단한 선형 회귀 모델을 피팅합니다.
import statsmodels.api as sm #define predictor and response variables y = df[' score '] X = df[' hours '] #add constant to predictor variables X = sm. add_constant (x) #fit linear regression model fit = sm. OLS (y,x). fit () #view model summary print ( fit.summary ()) OLS Regression Results ==================================================== ============================ Dept. Variable: R-squared score: 0.630 Model: OLS Adj. R-squared: 0.603 Method: Least Squares F-statistic: 23.80 Date: Mon, 31 Oct 2022 Prob (F-statistic): 0.000244 Time: 11:19:54 Log-Likelihood: -57.184 No. Observations: 16 AIC: 118.4 Df Residuals: 14 BIC: 119.9 Model: 1 Covariance Type: non-robust ==================================================== ============================ coef std err t P>|t| [0.025 0.975] -------------------------------------------------- ---------------------------- const 60.4669 5.128 11.791 0.000 49.468 71.465 hours 5.5005 1.127 4.879 0.000 3.082 7.919 ==================================================== ============================ Omnibus: 0.041 Durbin-Watson: 1.910 Prob(Omnibus): 0.980 Jarque-Bera (JB): 0.268 Skew: -0.010 Prob(JB): 0.875 Kurtosis: 2.366 Cond. No. 10.5
모델 요약에서 모델의 R 제곱 값이 0.630 임을 알 수 있습니다.
관련 항목: 좋은 R 제곱 값이란 무엇입니까?
3단계: 가중치 최소제곱 모델 피팅
다음으로, statsmodels WLS() 함수를 사용하여 분산이 낮은 관측값이 더 많은 가중치를 받도록 가중치를 설정하여 가중치 최소 제곱을 수행할 수 있습니다.
#define weights to use
wt = 1/smf. ols (' fit.resid.abs() ~ fit.fittedvalues ', data=df). fit (). fitted values **2
#fit weighted least squares regression model
fit_wls = sm. WLS (y, X, weights=wt). fit ()
#view summary of weighted least squares regression model
print ( fit_wls.summary ())
WLS Regression Results
==================================================== ============================
Dept. Variable: R-squared score: 0.676
Model: WLS Adj. R-squared: 0.653
Method: Least Squares F-statistic: 29.24
Date: Mon, 31 Oct 2022 Prob (F-statistic): 9.24e-05
Time: 11:20:10 Log-Likelihood: -55.074
No. Comments: 16 AIC: 114.1
Df Residuals: 14 BIC: 115.7
Model: 1
Covariance Type: non-robust
==================================================== ============================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 63.9689 5.159 12.400 0.000 52.905 75.033
hours 4.7091 0.871 5.407 0.000 2.841 6.577
==================================================== ============================
Omnibus: 2,482 Durbin-Watson: 1,786
Prob(Omnibus): 0.289 Jarque-Bera (JB): 1.058
Skew: 0.029 Prob(JB): 0.589
Kurtosis: 1.742 Cond. No. 17.6
==================================================== ============================
결과에서 이 가중치 최소 제곱 모델의 R 제곱 값이 0.676 으로 증가한 것을 확인할 수 있습니다.
이는 가중 최소 제곱 모델이 단순 선형 회귀 모델보다 시험 점수의 변동을 더 많이 설명할 수 있음을 나타냅니다.
이는 가중 최소 제곱 모델이 단순 선형 회귀 모델에 비해 데이터에 더 잘 맞는다는 것을 알려줍니다.
추가 리소스
다음 튜토리얼에서는 Python에서 다른 일반적인 작업을 수행하는 방법을 설명합니다.
Python에서 잔차 플롯을 만드는 방법
Python에서 QQ 플롯을 만드는 방법
Python에서 다중 공선성을 테스트하는 방법