지난 글에서는 선형 회귀 모델을 통해 '손실 함수'와 '최적화'의 개념을 간단하게 짚어봤습니다. 다시 한번 정리를 해볼게요. 위의 문제에서 기계의 연료와 작동 시간을 정리해놓은 데이터가 있습니다. 이 데이터를 가장 잘 예측하는 y=ax라는 선형 모델을 만들고 싶은데, A회사는 y=(9/8)x를, B 회사는 y=(7/8)x를 산출해왔습니다.
문제-1. 두 회사 중에서는 어느 회사가 더 예측을 잘했다고 말할 수 있을까요?
문제-2. 만약 여러분이 C회사라고 한다면 더 정확한 y=cx라는 모델을 찾을 수 있나요?
이 2가지 질문으로 마쳤습니다. 그러면 이 문제들을 하나씩 풀어보도록 하겠습니다.
손실 함수 : 모델을 평가하는 함수
수학은 어떤 대상을 '수치화'할 수 있습니다. 가령 수많은 값들이 존재하는 데이터라고 한다면 '평균'이라는 값을 통해 대략적으로 전체의 균형을 이루어주는 값을 찾을 수 있습니다. 얼마나 평균에서 많이 흩어져있는지를 살펴보는 대푯값으로는 분산이나 표준편차가 있죠. 엄밀하게 보자면 이 수치들은 대상 혹은 확률 변수로 표현된 대상에 대한 값입니다. 그렇다면 좀 더 넓게 보면 평균은 데이터들의 모임을 실수로 대응시켜주는 함수라고 할 수 있습니다. 이 때문에 E(X)라는 식을 통해 X라는 대상의 평균을 구하고, σ(X)라는 함수를 통해 표준편차를 구합니다.
모델이 있을 때 이 모델들의 집합을 X라고 한 번 해보죠. 그중 A회사는 y=(9/8)x 라는 모델을 만들어왔고, B회사는 y=(7/8)x 라는 모델을 만들어왔습니다. 그렇다면 이 모델이 얼마나 실제 데이터를 잘 표현하고 예측하고 있는지 측정하는 도구가 필요합니다. 따라서 실제 데이터와 모델과의 차이를 측정하는 함수를 도입하는데 이를 손실 함수(loss function) 혹은 비용 함수 (cost function)이라고 부릅니다.
그렇다면 어떻게 손실을 측정할까요? 만약 실제 데이터와 예측한 함수의 값의 차이(편차)를 통해 측정을 하면 어떨까요? 위의 그림을 보면 어떤 값에서는 A 모델의 오차가 작고, 어떤 값에서는 B 모델의 오차가 작습니다. 게다가 x=4, 12에서는 A 모델의 오차가 작은데 x=8, x=16에서는 A 모델의 오차가 크죠. 게다가 x=20에서는 오차의 크기가 같네요. 편차의 값들만 가지고는 정확한 판단이 어렵습니다. 가령 각 모델에 따른 오차를 더한다고 하더라도 그 더한 값을 통해 어떻게 해석해야 할지도 난감하죠..;
오차의 합만으로 손실 함수를 정의하면.. 위 세 함수는 오차의 합이 모두 0이 되므로 모두 같은 평가를 받게 됩니다..;; ㄷㄷ
더 황당한 경우는 정확하게 맞춘 모델과 +와 -가 교대로 나와서 더했을 때 오차의 합이 0이 되어버리면 두 모델이 손실 함수의 값으로 모두 0을 가져오게 되죠. 따라서 따라서 오차를 그냥 다 더하는 것을 손실 함수로 택하는 것은 그다지 좋은 방법이 아님을 알 수 있습니다.
따라서 이 오차가 가지는 -의 값을 모두 +로 바꾸어줄 필요가 있습니다. 수학에서 이런 역할을 하는 방법이 크게 2가지가 있는데 하나는 절댓값을 취하는 것이고 하나는 제곱을 취하는 방법입니다. 오차에 절댓값을 취하는 방법을 평균 절대 오차(MAE : Mean Absolute Error)라고 하고 제곱을 취하는 방법을 평균 제곱 오차(MSE : Mean Square Error)라고 합니다. 선형 회귀분석에서는 이 2가지 방법을 주로 손실 함수로 사용합니다.
1) 평균 절대 오차 (MAE : Mean Absolute Error)
평균 절대 오차는 모델에서 예측하는 함수의 값과 실제 값의 편차에 절댓값을 취해서 모두 더한 다음 평균을 낸 값입니다. 자세히 살펴보면 실제 값과 함숫값을 이은 선분의 길이의 평균임을 알 수 있습니다.
따라서 A회사의 모델과 B 회사의 모델은 위와 같은 평균 절대 오차를 보이고 있습니다. 이것을 통해서 보면 오차 크기의 평균이 B회사의 값이 작으므로 B회사의 모델이 좀 더 정확하다고 판단할 수 있습니다.
2) 평균 제곱 오차 (Mean Square Error)
평균 제곱 오차는 편차의 제곱을 모두 더한 값의 평균을 의미합니다. 앞의 평균 절대 오차는 기하적으로 각 오차의 선분의 길이의 평균이라는 멋진 해석이 나오지만 평균 제곱 오차는 그런 해석을 붙이지는 않습니다. (굳이 붙이자면.. 그 선분으로 만든 정사각형 넓이들의 평균??)
두 모델의 평균 제곱 오차를 구해보면 B회사의 모델이 더 좋은 결과를 보이고 있죠. 전체적으로 보면 x=4, x=12일 때 A의 모델이 훌륭한 값을 보이고 있음에도 불구하고 B가 좋은 모델로 선정이 된 이유는 '무난하게 잘 반영하기 때문'입니다. A의 모델은 2개나 확 튀는 값을 가지고 있기 때문에 '모 아니면 도'의 특성을 가지는 모델은 좋은 평가를 받을 수 없음을 보여줍니다.
3) 여러분이 만약 C회사라고 한다면?
우리는 2개의 손실 함수를 알고 있습니다. 그렇다면 여러분은 c회사의 연구원으로서 y=cx라는 모델을 가져와 A회사의 모델과 B회사의 모델보다 좋은 모델이라고 설명해야 합니다. 그러면 어떻게 증명해야 할까요? 네! 위에서 살펴봤던 손실 함수 중 하나를 가져와서
"이 손실 함수의 결과 우리 모델이 최선일 수밖에 없습니다."
라고 설명을 해야 합니다.
위에서 했던 방법처럼 아래의 단계를 따라 만들면 됩니다.
① 우선 y=ax라는 모델을 하나 만들어봅시다. a의 값은 아직 정해지지 않았습니다.
② 그렇다면 예측 시간을 구해서 오차를 구해야겠죠. 열심히 손으로 계산하거나 엑셀 등을 사용하면 아래의 표를 만들 수 있습니다. 절대 오차와 제곱 오차를 각각 계산해줍니다.
③ 각각의 오차를 평균을 낸 함수를 L₁(a)와 L₂(a)라고 합시다. 그러면 각각의 식은 아래와 같습니다.
④ 위의 함수들은 언제 최솟값을 가질까요? 각각을 그래프로 그려서 나타내면 다음과 같습니다.
따라서 손실 함수로 평균 절대 오차를 활용할 때는 최고의 모델이 y=x가 되고, 평균 제곱 오차를 손실 함수로 선택할 때는 y=0.95x가 됩니다.
그럼 두 손실 함수 중 무엇을 사용하는 게 좋을까요? MAE와 MSE의 차이는?
사실 위의 두 케이스만 놓고 보자면 A의 모델과 B의 모델에서 두 가지 방법 모두 B의 모델이 더 좋은 모델로 판정이 났기 때문에 뭘 사용해도 상관이 없어 보입니다. 게다가 MAE의 모델은 계산이 훨씬 편리하죠. 따라서 그냥 절댓값의 평균을 사용하는 MAE가 훨씬 편리해 보입니다. 그런데 회귀분석을 공부해보면 대부분 손실 함수로 MSE를 사용합니다. 굳이 계산이 편리한 MAE를 두고 MSE를 사용하는 이유는 무엇일까요? 그 이유는 최적화 과정에 MSE가 훨씬 편리하기 때문입니다.
위의 예시에서 C회사가 가장 손실 함수의 최솟값을 찾을 수 있었던 이유는 두 그래프의 식을 정확하게 구할 수 있었다는 것과, 아래로 볼록한 2차 함수의 최솟값이 바로 꼭짓점에 존재한다는 중3 때 이후 열심히 풀어왔던 수학 문제 풀이 경험 때문이죠! 그런데 최솟값을 쉽게 구할 수 없을 때는 어떻게 할까요?