회귀분석 결과표 확인하기
OLS Regression Results
==============================================================================
Dep. Variable: charges R-squared: 0.767
Model: OLS Adj. R-squared: 0.766
Method: Least Squares F-statistic: 625.1
Date: Wed, 18 Sep 2024 Prob (F-statistic): 0.00
Time: 05:51:48 Log-Likelihood: -809.08
No. Observations: 1337 AIC: 1634.
Df Residuals: 1329 BIC: 1676.
Df Model: 7
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 7.0052 0.070 100.187 0.000 6.868 7.142
age 0.0346 0.001 39.600 0.000 0.033 0.036
bmi 0.0129 0.002 6.213 0.000 0.009 0.017
children 0.1015 0.010 10.041 0.000 0.082 0.121
sex_male -0.0744 0.024 -3.045 0.002 -0.122 -0.026
smoker_yes 1.5520 0.030 51.245 0.000 1.493 1.611
south -0.1120 0.025 -4.470 0.000 -0.161 -0.063
east 0.0163 0.025 0.662 0.508 -0.032 0.065
==============================================================================
Omnibus: 458.018 Durbin-Watson: 2.050
Prob(Omnibus): 0.000 Jarque-Bera (JB): 1629.911
Skew: 1.662 Prob(JB): 0.00
Kurtosis: 7.267 Cond. No. 296.
==============================================================================
잔차가 정규 분포를 따르지 않는다는 신호가 많기 때문에 t-검정, F-검정, 로그우도, AIC, BIC값을 신뢰할 수 없지만, 각 항목들에 대해 살펴보는 것에 중점을 두고 보자.
기본정보 (표 1-1)
| 항목 | 표현 | 설명 |
|---|---|---|
| Dep. Variable | y | 종속변수 (타겟 변수) |
| Model | - | OLS를 사용 |
| Method | - | 회귀 계수를 추정하기 위해 Loss function을 MSE로 사용 |
| No. Observations | N | 총 표본 수 |
| Df Residuals | N-K-1 | 잔차의 자유도(상수항 포함) |
| Df Model | K | 모델의 자유도 (독립변수의 수) |
| Covariance Type | - | 회귀 계수의 표준 오차를 계산하는 방식 |
Covariance Type은 fit()의 파라미터 cov_type을 통해 지정 가능하다
nonrobust (default) : 기본적인 분산-공분산 행렬을 사용하여 회귀 계수의 표준 오차를 계산. 오차의 독립성, 등분산성, 그리고 정규성을 충족할 때 가장 적합하며, 표준적인 OLS 추정 방법이다.
HC0, HC1, HC2, HC3 : Heteroskedasticity-Robust. 오차의 등분산성이 깨진 경우(이분산성)에도 신뢰할 수 있는 표준 오차를 제공해준다.
HAC : heteroskedasticity-autocorrelation robust covariance. 이분산성과 자기상관을 동시에 고려하여 강건한 표준 오차를 제공하는 방법이다.
Cluster-Robust (군집화에서 사용) : 데이터가 군집화되어 있을 때, 각 군집 간의 상관관계를 고려하여 조정된 표준 오차를 계산한다
모델 적합도 (표 1-2)
| 항목 | 표현 | 설명 |
|---|---|---|
| R-squared | 독립변수들이 종속변수의 변동성을 얼마나 설명하는지를 나타냄 | |
| Adj. R-squared | 변수의 수에 따라 결정계수를 조정한 모델의 설명력. 결정계수와 비교하여 피쳐 선택이나 정규화를 적용할 때 유용하다 | |
| F-statistic | F-검정통계량 | : "회귀계수_1 = 회귀계수_2 = ... = 회귀계수_k = 0" 즉, "모든 독립변수가 종속변수에 유의미한 영향을 미치지 않는다"를 검정. 값이 클수록 모델의 유의성을 입증함. |
| Prob (F-statistic) | p-value | 유의수준보다 작을 경우 귀무가설을 기각. 즉, 적어도 하나의 독립변수는 종속변수에 유의미한 영향을 미친다. |
| Log-Likelihood | 모델이 주어진 데이터를 얼마나 잘 설명하는지를 나타내는 값.로그 우도가 클수록 모델의 적합도가 좋다. | |
| AIC | Akaike information criterion | 모델의 복잡도, 적합도를 고려한 정보 기준. 값이 낮을수록 모델이 좋음을 의미한다 |
| BIC | Bayesian information criterion | AIC와 유사하지만, 모델의 복잡도에 더 큰 패널티를 부과. 값이 낮을수록 모델이 좋음을 의미한다 |
Log-Likelihood : 잔차가 정규분포를 따른다는 가정 아래에서 계산된 최대 로그 우도 값
이므로, 는 다음과 같은 PDF를 가진다
각 는 독립이므로, 전체 데이터셋에 대한 우도함수는 관측값(n개)의 PDF의 곱으로 주어진다
계산의 단순화를 위해 로그를 취하여 로그우도 함수로 변환한다
SSE는 데이터와 모델의 잔차의 크기를 측정하며, 오차의 분산과 같은 의미를 가진다. 따라서, 로그우도 함수의 은 SSE로 대체 가능하다.
OLS는 SSE를 최소화하는 회귀계수를 찾는다. 따라서, OLS를 통해 구한 회귀계수를 로그우도 함수 식에 대입하면 최대 우도값을 구할 수 있다.
이렇게 구한 값이 위 summary의 Log-Likelihood 값이며, 모델 전체의 적합도(주어진 데이터가 모델에 의해 얼마나 가능성 있게 생성되었는지, 독립변수와 종속변수의 선형관계의 정도, 잔차의 정규성)를 상대적으로 평가할 수 있는 지표이다.
한계 : 모델의 복잡도를 고려하지 않음
AIC (Akaike information criterion) : 로그 우도의 한계를 보완하는 적합도 지표이다. 로그 우도를 기반으로 하지만, 모델의 복잡도를 반영하기 위해 파라미터 수에 페널티를 부여한다.
BIC (Bayesian information criterion) : AIC는 고정된 페널티를 사용하지만, BIC는 데이터의 관측치 수에 따라 가변적인 페널티를 부여한다. 이때, 모델의 복잡도에 대한 패널티의 정도가 AIC보다 강하다.
회귀계수 (표 2)
| 항목 | 표현 | 설명 |
|---|---|---|
| coef | 회귀 계수. 독립변수 한 단위가 종속변수에 미치는 영향 | |
| std err | 각 계수의 표준 오차. 작을수록 추정치의 정확도가 높다. | |
| t | t-검정통계량 | : "회귀계수_i = 0" 즉, "독립변수 i가 종속변수에 유의미한 영향을 미치지 않는다"를 검정. 값이 클수록 독립변수 i의 유의성을 입증한다. |
| P>|t| | p-value | 유의수준보다 작을 경우 귀무가설을 기각. 즉, 독립변수 i는 종속변수에 유의미한 영향을 미친다. |
| [0.025 0.975] | 계수의 95% 신뢰구간 | 신뢰구간이 좁을수록 추정치가 정확할 가능성이 크다 |
잔차 (표 3)
| 항목 | 표현 | 설명 |
|---|---|---|
| Omnibus | omni_normtest 검정통계량 | 잔차의 정규성을 검정하는 검정통계량. 값이 클수록 정규분포에 가까움 |
| Prob(Omnibus) | p-value | 유의수준보다 작을 경우 잔차가 정규성을 따르지 않을 가능성이 높다 |
| Skew | 왜도 | 잔차의 대칭성을 나타내며, 0에 가까울수록 대칭적이다 |
| Kurtosis | 첨도 | 잔차의 첨도를 나타내며, 3에 가까울수록 정규 분포와 유사하다 |
| Durbin-Watson | DW-검정통계량 | 잔차의 독립성(자기상관) 검증. 0~4 사이의 값을 가지며, 2에 가까울수록 독립성이 보장됨 |
| Jarque-Bera (JB) | JB-검정통계량 | 잔차의 정규성을 검정하는 검정통계량. 값이 클수록 정규분포에 가까움 |
| Prob(JB) | p-value | 유의수준보다 작을 경우 잔차가 정규성을 따르지 않을 가능성이 높다 |
| Cond. No. | condition number | 값이 크면 독립변수들 간에 높은 상관관계가 있음을 나타냄 |
Condition Number : 회귀분석에서 다중공선성을 평가하는데 사용하는 지표이다. 설계 행렬의 고유값을 통해 수치적 안정성을 평가하며, 일반적으로 100을 넘는 경우 중간정도의 다중공선성, 900을 넘는 경우 심한 다중공선성이 있다고 판단한다.
논문들을 찾아보면 루트를 씌운값을 많이 사용하지만, statsmodels에서는 그러지 않는다.
statsmodels에서 condition number를 계산하는 방식을 자체적으로 구현하면 아래와 같다
norm_x = X.values
for i, name in enumerate(X):
norm_x[:, i] = X[name] / np.linalg.norm(X[name])
norm_xtx = np.dot(norm_x.T, norm_x)
eigs = np.linalg.eigvals(norm_xtx)
condition_number = (eigs.max() / eigs.min())
print(condition_number)
