본문 바로가기
스터디/데이터사이언스

Multiple Linear Regression (2) - Evaluation

by 궁금한 준이 2024. 10. 14.
728x90
반응형

Multiple Linear Regression - Evaluation, Analysis

 

다중선형회귀 모델을 fitting하면 끝인가? 그렇지 않다.

다중선형회귀 모델의 기본 가정을 위반하지 않는지 확인해야 한다.

기본가정을 위반하지 않아야 unseen data에 대해서도 적절한 inference를 할 수 있다.

그렇지 않으면 garbage value를 얻을 것이다.

 

$R_{adj}^2$: 조정된 결정계수

결정계수($R^2$)는 회귀모형이 주어진 데이터에 얼마나 잘 맞는지 평가하는 지표이다.

종속변수의 변동성을 설명하는 독립변수의 비율을 의미한다.

$0 \le R^2 \le 1$이며 값이 클 수혹 모델이 데이터를 잘 설명한다는 뜻이다.

그러나 독립변수가 많아지면 이 식이 왜곡될 수 있다.

$R^2$는 독립변수가 많아지면 값이 항상 증가하는 경향이 있다. 

즉 아무 의미없는(불필요한) 독립변수를 추가해도 $R^2$가 증가한다.

 

이에 기존 결정계수의 단점을 보완한 조정된 결정계수(adjusted R-squared)가 도입된다.

독립변수가 증가하더라도 무조건적으로 값이 증가하지 않게 penalty를 부여한다.

$n$: data point의 개수 (샘플 수)

$k$: (bias term을 제외한) 독립변수의 개수 

$R^2$: 결정계수

\[ R^2_{adj} = 1 - (1 - R^2) \left( \frac{n-1}{n-k-1} \right) \]

 

  • 항상 $R_{adj}^2 < R^2$ 이다. ($k > 0$ 이므로)
  • $n \gg k$인 경우에 $n \to \infty$를 계산하면 $R^2_{adj} \approx R^2$

데이터 크기와 독립변수의 개수를 고려한 지표이다.

새로운 변수가 추가될 때, 해당 변수가 실제로 모델 성능을 개선하지 않으면 $R^2_{adj}$의 값은 오히려 작아진다.

따라서 서로 다른 회귀 모델의 성능을 비교하는 지표로 사용될 수 있다.

또한 변수 선택에도 도움이 된다.

※ 단일 회귀모델의 설명력을 알고싶으면 여전히 $R^2$를 이용한다.

 

Multicollinearity (다중공선성)

이전 포스트 마지막에서 간단히 설명했지만 여기서 자세히 설명한다.

 

수학적 관점

수학적으로 두 독립변수가 매우 높은 상관관계를 가지면(거의 선형종속이면) $\mathbf{X'X}$는 almost singular가 된다.

그러면 $\hat{\beta}_i$를 구하기 위해 필요한 역행렬($\mathbf{(X'X)^{-1}}$) 계산상 어려움이 발생할 수 있다.

프로그램에는 pseudo inverse matrix를 구할 수 있는 함수가 있지만(e.g. `numpy.linalg.pinv()`), 단순히 계산이 어렵다, 불가능하다의 문제만 있는것이 아니다.

아래 모델/해석 관점에서도 문제가 있다.

 

모델 적합의 관점 (fitting)

실용적인 관점에서, $x_i$와 $x_j$가 매우 높은 상관관계를 가질 경우, 그 중 하나만 모델에 포함시키면 충분하다.

두 변수 모두 포함한다고 해서 모델 적합도가 크게 좋아지지 않는다.

$x_i$가 제외되어도 $x_i$와 $y$와 상관관계가 없다는 뜻이 아니다. 

왜냐하면 $x_j$가 (이미 서로 상관성이 높은) $x_i$를 대체할 수 있기 때문이다.

 

모델 해석의 관점 (interpretation)

독립변수끼리 상관관계가 높으면 파라미터 $\beta_i$의 해석에도 영향을 준다.

원래 coefficient는 단위 $x_i$가 증가할 때 $y$의 증가(혹은 감소)에 얼마나 영향을 미치는지로 해석한다.

정확히는, $\beta_i$는 (다른 독립변수가 일정[고정]할 때) $x_i$가 1 단위 증가할 때 $y$가 평균적으로 얼마나 변하는지를 의미한다.

그런데 $x_i$와 $x_j$가 강한 상관관계를 가지면 실제로 $x_1$의 변화는 $y$뿐만 아니라 $x_j$에도 영향을 주기 때문에 모델 해석이 굉장히 복잡해진다. 즉 $x_i$의 1단위 증가가 실제로 $y$가 $\beta_i$만큼 증가(혹은 감소)한다고 해석할 수 없다.

 

다중공선성 탐지, VIF(Variance Inflation Factor)

다중공선성이 있으면 안된다는걸 알았으니 이제 찾는법을 알아보자.

VIF, 상관계수, 고윳값분해, 조건수 등 여러 방법이 있다.

 

일반적으로 상관행렬를 통해 지나치게 높은(예: 0.8 이상) 상관계수가 있는지 먼저 살펴보는 방법이 있다.

그러나 이는 pair인 경우에만 찾을 수 있다.

예를 들어, $x_1$과 $x_2$는 pair로는 상관성이 없지만 $x_1, x_2, x_3$는 함께 있을 때 다중공선성이 발생할 수 있다.

그러나 상관행렬을 이용해서는 찾을 수 없다.

 

여기서는 가장 많이 사용되는 VIF만 설명한다.

VIF는 분상 팽장 요인으로, Variance Inflation Factor의 줄임말이다.

 

독립변수 $x_i$가 다른 모든 독립변수들에 대해 얼마나 선형 종속인지 측정한다.

$x_i$를 target으로 하고 나머지 독립변수들을 input으로 하여 선형회귀모델을 적합한다.

그러면 각 $x_i$마다 결정계수 $R_i^2$를 얻을 수 있다. 이때 VIF는

\[ \text{VIF}(\beta_i) = \frac{1}{1 - R_i^2} \]

이다. $R_i^2$의 범위가 $[0, 1]$이므로 $\text{VIF}(\beta_i)$의 범위는 $[1, \infty)$ 이다.

일반적으로 VIF가 5 ($R_i^2=0.8$)또는 10($R_i^2=0.9$) 이상인 경우에 다중공선성이 있다고 판단한다.

 

Python에서는 `statsmodels.stats.outliers_influence.variance_inflation_factor`를 이용하여 계산할 수 있다.

 

이론상 하나의 $x_i$만 VIF가 클 수 있지만, 실질적으로 그럴 가능성은 거의 없다.

$x_1$이 $x_2, x_3$과 강한 상관관계를 가지면 $x_2, x_3$ 역시 높은 VIF 값을 가지게 된다.

 

다중공선성 해결방법

  • 상관관계가 높은 변수들 중 일부를 제거하여 다시 모델 적합
    • 단점: 정보 손실 발생. 특히 제거된 변수가 중요한 설명 변수일 수도 있다.
  • PCA를 이용하여 상관관계가 높은 변수들을 주성분으로 결합하여 다중공선성 완화
    • 장점: 다중공선성을 제거하면서 원래 데이터 정보 손실 최소화가 가능
    • 단점: 주성분($PC_i$)은 원래의 독립변수($x_i$)로 해석하기 어려움
  • 정규화 회귀모델 이용한다 (Ridge, LASSO 등)
    • 장점: 다중공선성 뿐만 아니라 과적합도 방지할 수 있다.
    • 단점: 회귀 계수 추정이 왜곡될 수 있다.
  • 다중공선성 허용
    • 회귀모델의 해석에 영향을 주지 않는 경우 (또는 해석이 중요하지 않은 경우)
    • 예측 성능이 주된 목적인 경우 (특히 대회, competition)
    • 그럼에도, 정규화가 적용된 회귀 모델을 사용하는 것이 더 나을 수 있다.

Residual Analysis (잔차 분석)

잔차 $e_i$를 시각화할 때, $\hat{y}_i$ 뿐만 아니라 독립변수 $x_i$에 대해서도 시각화해야한다.

※ $e_i$와 $y_i$가 아니다. fitted value $\hat{y}_i$이다.

 

Homogeneity of error variance

잔차들을 시각화했을 때 random scatter of points가 되어야 좋은 regression model이다.

잔차들이 어떠한 패턴이 존재한다면, linear regression 모델 가정에 위배한 데이터였다는 것이다.

예를 들어, $e_i$와 $\hat{y}_i$를 plot했는데, 깔때기 모양(funnel shape)의 패턴이 존재한다면, 등분산성(homogeneity of error variance)을 위배한 것을 알 수 있다.

 

Additional term

그리고 잔차 패턴을 통해 독립변수를 더 추가할 근거를 찾을 수도 있다.

예를 들어, $e_i$와 $x_i$를 plot했는데, 잔차 분포가 이차함수를 따른다면, 이는 quadratic term $x_i^2$ 변수를 추가하면 더 좋은 모델을 얻을 수 있다.

 

Correlation over time

만약 데이터가 시계열과 같이 시간에 따라 얻은 데이터라면, X축은 time이 되고, Y축은 residual이 된다.

그러나 시계열임에도 잔차들의 분포는 random해야 한다. 

잔차들이 어떤 패턴이 있다면 error term이 정규분포를 따르지 않는다는 것을 의미한다.

 

Outlier Detection

standardized residuals를 이용하여 각각 data point가 모델에 잘 맞는지/아닌지 확인할 수 있다.

정규분포에서 $\mu \pm 2 \sigma$ 범위에 있는 확률이 95%임을 이용한다. 

표준화된 잔차 값의 절댓값이 2보다 크면 해당 data point는 이상치(outlier)로 의심할 수 있다.

실제로 데이터를 찾아서 이상치가 확인이 된다면, 해당 data point를 제거하고 다시 적합해야한다.

(refit the model to the remaining data set)

 

 

728x90
반응형