statsmodels를 사용한 회귀 분석

한상우·2024년 9월 18일

기초 통계학

목록 보기
11/15

회귀분석 결과표 확인하기

                            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. Variabley종속변수 (타겟 변수)
    Model-OLS를 사용
    Method-회귀 계수를 추정하기 위해 Loss function을 MSE로 사용
    No. ObservationsN총 표본 수
    Df ResidualsN-K-1잔차의 자유도(상수항 포함)
    Df ModelK모델의 자유도 (독립변수의 수)
    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-squaredR2R^2독립변수들이 종속변수의 변동성을 얼마나 설명하는지를 나타냄
    Adj. R-squaredRadj2R_{adj}^2변수의 수에 따라 결정계수를 조정한 모델의 설명력.\\ 결정계수와 비교하여 피쳐 선택이나 정규화를 적용할 때 유용하다
    F-statisticF-검정통계량H0H_0: "회귀계수_1 = 회귀계수_2 = ... = 회귀계수_k = 0" \\즉, "모든 독립변수가 종속변수에 유의미한 영향을 미치지 않는다"를 검정.\\ 값이 클수록 모델의 유의성을 입증함.
    Prob (F-statistic)p-value유의수준보다 작을 경우 귀무가설을 기각.\\ 즉, 적어도 하나의 독립변수는 종속변수에 유의미한 영향을 미친다.
    Log-Likelihoodln(L^)ln(\hat L)모델이 주어진 데이터를 얼마나 잘 설명하는지를 나타내는 값.\\로그 우도가 클수록 모델의 적합도가 좋다.
    AICAkaike information criterion모델의 복잡도, 적합도를 고려한 정보 기준. \\ 값이 낮을수록 모델이 좋음을 의미한다
    BICBayesian information criterionAIC와 유사하지만, 모델의 복잡도에 더 큰 패널티를 부과.\\ 값이 낮을수록 모델이 좋음을 의미한다
    • Log-Likelihood : 잔차가 정규분포를 따른다는 가정 아래에서 계산된 최대 로그 우도 값

      • residualsN(0,σ2)residuals\sim N(0,\sigma^2)이므로, yiy_i는 다음과 같은 PDF를 가진다

        P(yixi,β,σ2)=12πσ2exp((yiy^i)22σ2)P(y_i|x_i,\beta,\sigma^2) = {1\over \sqrt {2\pi\sigma^2}}exp(-{(y_i-\hat y_i)^2\over 2\sigma^2})

      • yiy_i는 독립이므로, 전체 데이터셋에 대한 우도함수는 관측값(n개)의 PDF의 곱으로 주어진다

        L(β,σ2y,X)=i=1n12πσ2exp((yiy^i)22σ2)L(\beta,\sigma^2|y,X)=\prod_{i=1}^n{1\over \sqrt {2\pi\sigma^2}}exp(-{(y_i-\hat y_i)^2\over 2\sigma^2})

      • 계산의 단순화를 위해 로그를 취하여 로그우도 함수로 변환한다

        ln(L(β,σ2y,X))=i=1n12πσ2i=1n(yiy^i)22σ2  ln(L(β,σ2y,X))=n2ln(2πσ2)12σ2i=1n(yiy^i)2ln(L(\beta,\sigma^2|y,X))=\sum_{i=1}^n{1\over \sqrt {2\pi\sigma^2}}-\sum_{i=1}^n {(y_i-\hat y_i)^2\over 2\sigma^2}\\\;\\∴ln(L(\beta,\sigma^2|y,X))=-{n\over 2}ln(2\pi\sigma^2)-{1\over 2\sigma^2}\sum_{i=1}^n(y_i-\hat y_i)^2

      • SSE는 데이터와 모델의 잔차의 크기를 측정하며, 오차의 분산과 같은 의미를 가진다. 따라서, 로그우도 함수의 σ2\sigma^2은 SSE로 대체 가능하다.

        SSE=i=1n(yiy^i)2,      y^i=β0+β1x1+...+βjxjSSE = \sum_{i=1}^n(y_i-\hat y_i)^2, \;\;\;\hat y_i = \beta_0 + \beta_1x_1+...+\beta_jx_j

      • OLS는 SSE를 최소화하는 회귀계수를 찾는다. 따라서, OLS를 통해 구한 회귀계수를 로그우도 함수 식에 대입하면 최대 우도값을 구할 수 있다.

      • 이렇게 구한 값이 위 summary의 Log-Likelihood 값이며, 모델 전체의 적합도(주어진 데이터가 모델에 의해 얼마나 가능성 있게 생성되었는지, 독립변수와 종속변수의 선형관계의 정도, 잔차의 정규성)를 상대적으로 평가할 수 있는 지표이다.

      • 한계 : 모델의 복잡도를 고려하지 않음

        • 일반적으로 파라미터의 수가 증가할수록 모델이 유연해져 데이터의 패턴을 잘 설명하게 된다. 이로 인해 SSE는 감소하게 되고 로그 우도는 증가하게 된다. 그러나, 파라미터의 수가 증가하면 과적합 문제가 일어나 일반화 성능이 떨어질 수 있다. 로그 우도는 복잡도가 증가할수록 커지기 때문에 이러한 문제를 포착하지 못한다.
    • AIC (Akaike information criterion) : 로그 우도의 한계를 보완하는 적합도 지표이다. 로그 우도를 기반으로 하지만, 모델의 복잡도를 반영하기 위해 파라미터 수에 페널티를 부여한다.

      AIC=2k2ln(L^)AIC = 2k - 2ln(\hat L)

      • kk : 모델의 파라미터 개수 (모델의 자유도)
      • ln(L^)ln(\hat L) : 로그 우도 최대값
    • BIC (Bayesian information criterion) : AIC는 고정된 페널티를 사용하지만, BIC는 데이터의 관측치 수에 따라 가변적인 페널티를 부여한다. 이때, 모델의 복잡도에 대한 패널티의 정도가 AIC보다 강하다.

      BIC=kln(n)2ln(L^)BIC = kln(n)-2ln(\hat L)

      • kk : 모델의 파라미터 개수 (모델의 자유도)
      • nn : 데이터 관측치 수 (총 표본 수)
      • ln(L^)ln(\hat L) : 로그 우도 최대값
  • 회귀계수 (표 2)

    항목표현설명
    coefβi\beta_i회귀 계수. 독립변수 한 단위가 종속변수에 미치는 영향
    std errSESE각 계수의 표준 오차. 작을수록 추정치의 정확도가 높다.
    tt-검정통계량H0H_0: "회귀계수_i = 0" \\즉, "독립변수 i가 종속변수에 유의미한 영향을 미치지 않는다"를 검정.\\ 값이 클수록 독립변수 i의 유의성을 입증한다.
    P>|t|p-value유의수준보다 작을 경우 귀무가설을 기각.\\ 즉, 독립변수 i는 종속변수에 유의미한 영향을 미친다.
    [0.025 0.975]계수의 95% 신뢰구간신뢰구간이 좁을수록 추정치가 정확할 가능성이 크다
  • 잔차 (표 3)

    항목표현설명
    Omnibusomni_normtest 검정통계량잔차의 정규성을 검정하는 검정통계량. \\ 값이 클수록 정규분포에 가까움
    Prob(Omnibus)p-value유의수준보다 작을 경우 잔차가 정규성을 따르지 않을 가능성이 높다
    Skew왜도잔차의 대칭성을 나타내며, 0에 가까울수록 대칭적이다
    Kurtosis첨도잔차의 첨도를 나타내며, 3에 가까울수록 정규 분포와 유사하다
    Durbin-WatsonDW-검정통계량잔차의 독립성(자기상관) 검증. 0~4 사이의 값을 가지며,\\ 2에 가까울수록 독립성이 보장됨
    Jarque-Bera (JB)JB-검정통계량잔차의 정규성을 검정하는 검정통계량. \\ 값이 클수록 정규분포에 가까움
    Prob(JB)p-value유의수준보다 작을 경우 잔차가 정규성을 따르지 않을 가능성이 높다
    Cond. No.condition number값이 크면 독립변수들 간에 높은 상관관계가 있음을 나타냄
    • Condition Number : 회귀분석에서 다중공선성을 평가하는데 사용하는 지표이다. 설계 행렬의 고유값을 통해 수치적 안정성을 평가하며, 일반적으로 100을 넘는 경우 중간정도의 다중공선성, 900을 넘는 경우 심한 다중공선성이 있다고 판단한다.

      Condition  Number=λmaxλminCondition\;Number = {\lambda_{max} \over \lambda_{min}}

      • 논문들을 찾아보면 루트를 씌운값을 많이 사용하지만, 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)

  • VIF 역시 다중공선성을 평가하는데 많이 사용하지만, 범주형 변수에 대해서는 VIF의 신뢰도가 낮다. 하지만, Condition Number는 범주형 변수가 포함된 경우에도 다중공선성에 대해 신뢰성 있는 결과를 준다
    (참고 : Role of Categorical Variables in Multicollinearity in the Linear Regression Model).
  • Omnibus가 잔차의 등분산성 검정인 줄 알았는데, 소스코드를 찾아보니 정규성 검정이었다. 잔차의 등분산성과 관련된 정보는 시각화(Residuals vs Fitted plot)과 levene's test과 같은 검정을 추가로 진행해서 확인해야 한다
profile
개인 공부용 블로그입니다

0개의 댓글