ice rabbit programming

[AI] 회귀분석 - 검증, 평가 본문

Development/Machine Learning

[AI] 회귀분석 - 검증, 평가

판교토끼 2021. 1. 12. 02:08

지난 글에서 회귀 분석의 모델에 대해서 간단하게 다루었고, 과적합에 대해서 얘기하며 포스팅을 마무리했었다. 이번 포스팅에서는 과적합 방지 기법부터 시작하여, 회귀 알고리즘을 평가하는 것에 대해 다루도록 하겠다.

과적합 방지

우선 과적합(Overfitting)을 방지하는 방법부터 시작할 것이다. 과적합은 지난 글에도 언급했듯이 모델이 훈련 데이터에 과도하게 맞추어져 있어, 일반성이 떨어지는 경우이다. 일반성을 증가시키기 위해 모델의 복잡성을 줄이거나 랜덤성을 높이는 것이 목적인데, 크게 두 가지를 꼽을 수 있다.

첫 번째로는 교차 검증(Cross Validation)이다. 훈련용 데이터와 별개의 테스트 데이터, 검증 데이터로 나누어 성능을 평가하는 방식이다. 일반적으로는 k-fold 교차 검증을 많이 사용한다.
k-fold 교차 검증은 쉽게 말해 데이터를 K등분하고 K번 훈련시키는 방법이다. 과정은 아래와 같다.

  1. K를 설정하여 데이터 Set을 K개로 나눈다(K등분한다).
  2. K개 중 한 개를 valid(검증)로 사용하고 나머지를 훈련용으로 사용한다.
  3. K개 각각 모델의 평균 성능이 최종 모델의 성능이 된다.

두 번째로는 정규화(Regularization)이다. 정규화는 모델의 복잡성을 줄여 일반화한 모델을 구현하는 방법인데, 모델의 계수에 페널티를 부여한다. 여기서는 선형 회귀에 많이 쓰는 L1, L2 정규화에 대해서 보겠다.

  • L1 정규화(Lasso) : 불필요한 입력 값에 대응되는 Bi(계수)를 0으로 만든다.
    -> Lasso Regression : Loss function에 L1 정규화를 추가한 기법인데, 중요하지 않은 B(계수)를 0으로 만들어 모델의 복잡성을 줄인다.
  • L2 정규화(Ridge) : 이상치(Outlier)의 Bi(계수)를 0에 가깝게 만든다.
    -> Ridge Regression : Loss function에 L2 정규화를 추가한 기법인데, 중요하지 않은 B(계수)를 0에 가깝게 만들어 모델의 복잡성을 줄인다. Lasso와 다르게 완전한 0이 아니므로, 모델이 계속 복잡할 가능성도 있다.
  • Elastic Net Regression : Lasso, Ridge의 단점을 보완하기 위해 L1 정규화와 L2 정규화를 적절히 섞은 기법이다.

 

회귀 알고리즘의 평가

회귀 알고리즘 모델을 평가하는 방법이 있는데, 목적은 '목표를 얼마나 잘 달성했는가'이다. 즉, 실제 값과 모델이 예측하는 값의 차이에 기반하여 평가한다. 중고등학교 때 확률과 통계에서 다뤄봤을 만한 것이며, 별로 어려운 개념은 아니다. 실제 값과 모델의 예측값의 차이를 평가한다는 점이 핵심이다.

  • RSS : 실제 값과 예측 값의 오차로, 간단하고 직관적으로 해석할 수 있다.
  • MSE : 평균 제곱 오차. 즉 RSS에서 데이터 수만큼 나눈 값이다. 단, outlier에 민감하다.
  • MAE : 평균 절댓값의 오차. 즉 실제 값과 예측 값 간 오차의 절댓값의 평균이다. 변동성이 큰 지표와 낮은 지표를 같이 예측할 때 유용하다. 또한 가장 간단하여 직관적인데, 다만 평균을 이용하므로 입력 값의 크기에 의존한다.
  • R^2(결정 계수) : 회귀 모델의 설명력을 표현하는 지표로, 1에 가까울수록 높은 성능을 나타낸다.
    ex) 1-(RSS/MSE)

결론적으로 모든 점에서 우월한 만능 기법은 없으며, 다양한 지표를 적용해보고 또한 다양한 측면에서 확인이 필요하다.