<최소제곱법 (Least Square Method)>
지금까지 근사 모델을 만들어 봤다. 이 모델이 오차가 최소가 되는 것은 알겠는데 내가 적당한 모델을 가정했는지 판단이 안 된다. 만약 실제 현상은 지수 증가인데 선형 증가로 모델링 했다면 오차의 합이 최소가 되는 선형 모델은 얻겠지만 실제 현상과는 동떨어진 엉뚱한 모델을 사용하게 될 것이다. 그럼 이제 이 모델이 얼마나 현상을 잘 표현해 주는지를 따져봐야 한다.
1. 결정 계수 (the coefficient of determination)
대개 모델이 얼마나 잘 맞는지 알려주는 파라미터로 $R^2$를 사용하는 것은 잘 알고 있다. 학교에서 여기까지는 알려주기 때문이다. 그래도 까먹었으니 이제부터 어떻게 봐야 하는지 다시 살펴보자. 그런데 글을 끝까지 읽어야 한다. 보통 아무렇게나 대충 쓰고 있기 때문이다.
$$
SS_{total} = \sum_{i=1}^n (y_i - \bar{y})^2 \\
SS_{rgrss} = \sum_{i=1}^n (y^e - \bar{y})^2 \\
SS_{error} = \sum_{i=1}^n (y_i - y^e)^2 \\
$$
$SS_{error}$는 모델의 관측값에 대한 오차 제곱 합이다. $SS_{rgrss}$은 모델 값과 관측값 평균의 편차 제곱 합이고 $SS_{total}$은 실측값의 편차 제곱 합이다. 여기서 세 항은 다음의 관계를 갖는다.
$$ SS_{total} = SS_{rgrss} + SS_{error} $$
이제 모델의 결정 계수 $ R^2 $는 다음과 같다.
$$ R^2 = 1 - \cfrac{SS_{error}}{SS_{total}} = \cfrac{SS_{rgrss}}{SS_{total}}$$
이 $R^2$는 $0$ 에서 $1$ 사이의 값을 갖고 $R^2 = 1$은 모델이 실측값을 완벽하게 표현하는 경우이고 $R^2 = 0$은 전혀 안 맞는 경우이다. 이게 무슨 소리냐면 $R^2$가 모델이 설명하는 편차와 전체 편차의 비율이기 때문에 이 비율이 일치하면 모델이 실제 편차를 완벽히 표현하는 것이고 이 비율이 1보다 작으면 무엇인가 편차에 기여하는 또 다른 요인이 있다는 것이다. 그 요인을 우리가 가정한 모델이 설명하지 못하는 것이다.
결정 계수가 어느 정도면 모델이 현상을 잘 표현한다고 보는지는 전적으로 분석하는 사람 마음이다. 대체적으로 요즘 핫한 머신러닝의 경우에는 $R^2$가 0.7 정도면 쓸만하다고 본다. 만약 성에 안차면 모델에 고차 항을 추가하던지 아예 모델을 바꿔 보던지 하면서 적당한 모델을 만들어 가야 한다. 그렇지만 누가 '이 모델은 '$R^2$가 0.9999라서 아주 정확한 모델입니다'라고 말하는 것을 듣게 되면 흠칫하면서 의심해볼 필요가 있다. 뭣이 문제인지 자세히 알아보자.
2. 조정된 $R^2$ (Adjusted $R^2$)
학교에서 보통 알려주는 $R^2$는 끝난 듯 하지만 아직 끝내면 안 된다. 다중선형회귀를 할 때 $R^2$이 문제가 되기 때문이다.
1. 다중선형회귀 (변수가 여러 개 거나 고차항을 포함) 모델을 만들게 되면 항이 추가될 때마다 $R^2$값이 마냥 높아지게 된다.
2.모델에 너무 많은 항이 추가되면 무작위 잡음(random noise)까지 모델에 점차 포함되어 $R^2$가 의미 없이 높아진다.
Predictor가 늘어날수록 $R^2$가 커진다고도 하는데 초보자들이 많이 실수하는 이유 중 하나다. 일차 근사를 할 때보다 이차 삼차 사차 근사를 하면 $R^2$값이 계속 커지니까 '아 차수를 높여서 근사 모델을 만들면 그냥 더 잘 맞네' 하고 쓸데없이 고차 근사를 해버리는 것이다. 그리고 계속 고차 근사를 하다 보면 의미 없는 값인 배경 잡음도 점차 모델에 포함되어 더욱 의미 없이 $R^2$가 커지게 된다. 그러니까 실제로는 억지로 갖다 맞춘 건데 겉보기에는 오차가 적어져 잘 맞는 것처럼 보이는 것이다. 이것을 overfitting이라고 한다. 좀 오바해서 맞췄다 이 말이다. 예를 들어 n개의 점이 있는데 n차 다항식으로 모델링을 하면? 모델이 모든 점을 다 지나면서 모델에 오차가 하나도 없으니 $R^2 = 1$을 준다. 잡음까지 다 모델에 포함되어 버린 것이다. 그럼 n+1차 근사를 하면? 정말 의미 없게 될 것이다.
그래서 adjusted R-square를 봐야 한다. 보통 minitab이나 matlab의 fitting toolbox만 써도 주는 값이지만 다들 이게 뭐야 하고 넘어간다. adjusted R-square는 아래와 같다. 여기서 $p$는 predictor(regressor or term)의 개수이다. 주의할 점은 상수항은 빼야 한다는 것이다. 예를 들어 다항식 근사면 총 항의 개수에서 1을 뺀 값이 된다. m차 근사면 $p = m$인데 항의 개수는 상수항 때문에 $m+1$ 개처럼 보이기 때문이다. 아무튼 항이 1개 일 때 p에 0을 넣어보면 $R_{adj}^2$이 $R^2$가 되는 것을 알 수 있다. 1개 일 때가 기준인 셈이다.
$$ R_{adj}^2 = 1-(1-R^2)\cfrac{n-1}{n-p-1} $$
의미는 간단하다. 단지 모델에 변수가 추가될 때마다 분모의 크기를 줄여서 결정 계수가 작아지도록 벌칙(penalty)을 주는 것이다. 다시 말해 모델에 항이 추가되면 $R^2$가 계속 커지니까 다시 값이 작아지도록 상충(trade-off)을 만들어주는 것이다. 만약 항이 늘어나서 받는 벌칙보다 모델의 적합성이 더 크다면 $R_{adj}^2$는 증가할 것이다. 혹자는 정규화(normalized) 한 것이라고 하기도 하고 항이 설명하는 오차를 보여준다고도 하는데 솔직히 그건 뭔 소린지 잘 모르겠다.
간단한 예로 알아보자. 아래 표와 같은 데이터 세트가 있을 때 다항식 근사를 해보면 차수에 따라 $R^2, R_{adj}^2$을 구할 수 있다.
표 1. 10점 데이터 세트
표 2. 차수에 따른 결정계수의 변화
Order | $R^2$ | $R_{adj}^2$ |
1 | 0.8958 | 0.8828 |
2 | 0.9603 | 0.9490 |
3 | 0.9603 | 0.9405 |
4 | 0.9605 | 0.9289 |
5 | 0.9640 | 0.9189 |
3. 교차 검증 오차 (Cross-Validation Error)
그래도 아직도 안 끝났다. 지금까지는 회귀 모델의 적합성을 생각해봤지만 보간 모델이 섭섭하다고 한다. 보간 모델도 $R^2$로 적합성을 판단할 수 있을까? 결론을 이야기하자면 안된다. 왜냐하면 모델이 실측값을 지나게 만들었기 때문에 오차가 없으니 $R^2$는 그냥 계산할 필요도 없이 1.0이 된다.
보간 모델이 실측값과 잘 맞는지는 어떻게 확인할까? 쉬운 방법이 있다. 실제 측정을 한번 더 해서 추가 데이터를 만들고 모델이 주는 결과와 비교해 보는 것이다. 그러면 모델이 실제 현상을 얼마나 잘 설명하는지 알 수 있을 것이다. 그렇지만 데이터를 추가로 만든다는 것은 곧 돈과 시간이 든다는 뜻이다. 우리에겐 그런 여유란 없다. 상사에게 내일 보고를 해야 하는데 돈 더 쓰면 혼나고 납기 못 맞추면 혼나고 무엇보다 시험팀은 벌써 장비 전원 내리고 퇴근했을 테니까.
그럼 어떤 방법이 있을까? 두려움에 떨던 머리 나쁜 공돌이는 계속 피 말리는 야근 중이다. 너무 배가 고프지만 먹을 건 없고 커피 믹스나 두 개 타서 들이키던 중 공돌이 머리에 천재적인 생각이 떠올랐다. 이미 있는 데이터 세트에서 한 개 실측점을 빼고 모델을 만든 뒤 빼놓은 실측점을 검증용으로 사용하는 것이다. 공돌이는 '난 천재야'를 외치며 셔틀버스 막차 시간이 지나는 줄도 모르고 작업에 착수했다.
엄마가 공부하랄 때 했으면 공돌이가 미리 알았을 텐데 이것이 교차 검증 오차(Cross-Validation Error)를 찾는 것이다. 엄밀하게 말해서는 모델이 잘 맞는지 적합성(accuracy)을 평가하는 것이 아니고 단지 모델이 데이터 세트 밖의 입력에 대해 어떤 반응(response)을 주는지를 알아보는 것이다. 그렇지만 방법이 없으니 쓰는 것이다. 아무튼 각 측정점마다 데이터를 빼고 모델을 하나씩 만들어 모델의 오차를 계산하고 이 오차들을 깡그리 더해서 제곱평균오차(Root Mean Squared Error)를 구하면 이것을 교차 검증 오차라고 한다. 데이터 세트에서 $i$번째 데이터를 제외하고 만든 모델을 $ y_{-i}^{e} $라고 하면 $i$ 번째 데이터를 검증하는 오차를 아래와 같이 쓸 수 있다.
$$ CVE = \sqrt{\cfrac{1}{n}\sum_{i=1}^n[y_{-i}^{e}(\boldsymbol{x}_i) - y_i]^2 } $$
4. 예측된 $R^2$ (Predicted $R^2$)
Predicted $R^2$는 모델이 실제 현상을 잘 예측하는지 확인해보는 것이다. 그러니 데이터 세트 밖의 새로운 실측값으로 확인을 하는 것이 좋지만 당장 할 수 있는 더 쉬운 방법이 '있는 데이터'를 쓰는 것이다. 그래서 다음과 같이 PRESS(Predicted Residual Error Sum of Squares)라고 하는 오차 제곱 합을 계산한다. 잘 보면 교차 검증 오차와 같은 꼴이다.
$$
PRESS = \sum_{i=1}^n[y_{-i}^{e}(\boldsymbol{x}_i) - y_i]^2 \\
R_{pred}^2 = 1 - \cfrac{PRESS}{SS_{total}}
$$
대충 딱 봐도 알겠지만 모델이 설명하지 못하는 오차의 합인 $SS_{error}$ 대신 모델이 예측하지 못하는 오차인 PRESS를 사용하는 것이다. overfitting 된 모델을 생각해보자. 모델이 각 데이터를 지나려고 심하게 드리프트 하면서 연결되어 있을 것이다. 만약 데이터 하나가 빠진 모델을 만들게 되면 모델이 그 점 부근에서 심하게 뒤틀리게 되고 그 데이터 부근에서 보이는 반응이 크게 달라진다. 그렇게 되면 PRESS 값이 커지고 predicted $R^2$가 작아질 것이다. 너무 과도하게 overfitting 경우에는 PRESS가 전체 오차 $SS_{total}$보다도 커져서 predicted $R^2$가 음수가 되는 경우도 있다. 데이터의 산포가 심한 경우에 overfitting을 하기 쉽고 predicted $R^2$를 관찰해 모델을 단순화해야 한다.
결론적으로 말하면 다중선형회귀를 할 때는 $R_{adj}^2, R_{pred}^2$를 중요하게 봐야 하고 웬만하면 $R^2, R_{adj}^2, R_{pred}^2$가 골고루 다 높게 모델링을 하면 된다.
<최소제곱법 (Least Square Method)>
최근댓글