ADP 실기를 준비하면서 내용을 정리했습니다. 잘못된 부분이 있으면 알려주시면 감사하겠습니다.
지난 포스팅에서는 분류 평가 지표를 구할 때, 많이 활용되는 개념인 Confusion Matrix부터 Accuracy, F1-score, AUC에 대해 다뤘습니다! 이번에는 수치형 데이터를 예측하는 회귀 문제의 평가 지표들에 대해 알아보려고 합니다!
1. 회귀 문제(Regression)
평가지표를 설명하기 전에 회귀 문제는 어떤 것인지 간단하게 설명해보겠습니다. 회귀 문제는 종속 변수가 수치형으로 해당 수치 값을 예측하는 문제입니다. 예를 들면, 보스턴 지역에 있는 집 값을 예측하거나, 내일의 주식 가격을 예측하는 것처럼 숫자를 예측하는 형태의 문제입니다. 그래서 실제 값과 예측 값의 차이를 활용한 편가 지표들을 많이 활용합니다. 대표적인 회귀 문제로는 캐글의 'House Prices - Advanced Regression Techniques'가 있습니다.
2. 회귀 문제의 평가 지표

위의 사진은 현재 sklearn 라이브러리에서 제공하고 있는 회귀 모델 평가 지표들입니다. 흔하게 접해보셨을 만한 MAE, MSE, r2_score 등이 구현되어 있습니다. RMSE, adjusted_r2_score처럼 각 지표들로부터 파생되어서 사용할 수 있는 지표들은 따로 구현되어 있지는 않습니다. 많이 활용되는 평가 지표들을 위주로 설명해보도록 하겠습니다. 회귀 문제에서는 실제 값보다 크게 예측하기도, 작게 예측하기도 합니다. 그래서 단순 오차를 합하게 되면 각 값에 대해 떨어진 정도를 판단하기 어렵습니다. 그래서 절댓값을 씌워주거나 제곱하는 방법을 사용해줍니다.
MAE(mean absolute error)
MAE는 절대 오차의 산술 평균을 구한 값입니다. $\hat{y}_{i}$는 모델이 예측한 값입니다. MAE는 scale에 의존적인 정확도 측정방법입니다. 그래서 다른 scale의 데이터 간의 비교를 할 수 없는 특징을 가지고 있습니다. 주로 시계열 예측에서 예측 오차 측정에 활용됩니다. 차이의 절댓값을 씌우기 때문에 실제값보다 높게 예측했는지 낮게 예측했는지를 구분할 수 없습니다. 이러한 부분에 대해 차이를 준 방법은 아래에서 소개할 MSLE입니다.
MSE(mean squared error)
$$\text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_{\text{samples}} -1} (y_i - \hat{y}_i)^2$$
MSE는 제곱 오차의 산술 평균을 구한 값입니다. MSE는 MAE와 비슷하게 scale에 의존적인 특징을 가지고 있습니다. 오차에 대해 제곱을 하기 때문에 1보다 작은 경우에는 작아지고, 1보다 큰 경우에는 더 커지기에 오차에 대한 왜곡이 존재할 수 있습니다. 또한 차이를 제곱하기 때문에 이상치에 민감하다는 단점이 존재합니다. 또한 MAE와 동일하게 높게 예측했는지, 낮게 예측했는지 구분할 수 없습니다.
RMSE(root mean squared error)
$$\text{RMSE}(y, \hat{y}) = \sqrt{\frac{1}{n_\text{samples}} \sum_{i=0}^{n_{\text{samples}} -1} (y_i - \hat{y}_i)^2}$$
RMSE는 MSE의 값에 루트를 씌워준 값으로 제곱 오차에 의한 왜곡을 줄여주는 역할을 합니다. 또한 모델의 예측 성능이 평균적으로 RMSE 만큼 차이 난다고 해석할 수 있는 장점이 있습니다. 아무래도 MSE의 성질을 그대로 가지다 보니, 이상치에 민감하고, 스케일에 의존적인 특징을 가집니다.
R Squared
$$R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}$$
$$ \text{where} \, \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i \, \text{and} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} \epsilon_i^2 $$
R Squared는 결정계수라고 부르기도 하는데, 모델의 설명력을 표현하는 지표입니다. 앞에서 언급했던 지표들과 다르게 높을수록 좋은 모델이라고 판단할 수 있습니다. 수식을 풀어서 설명해보면, 관측치의 평균값으로 모델을 예측한 오차의 분산과 우리가 만든 모델의 예측 오차($\hat{y}_{i}$는 우리 모델이 예측한 값입니다.)의 분산을 비율로 표현하여 1에서 비율을 빼줍니다. 단순히 평균으로 모델을 구성했을 때에 비해 분산이 얼마나 줄어드는지를 나타낸다고 보실 수 있습니다. 분산이 줄어든다는 것은 그만큼 모델이 관측 값에 가깝게 예측했다고 볼 수 있습니다. 하지만, R Squared는 단순히 의미 없는 독립변수가 추가되면 값을 상승시킬 수 있습니다. 이로 인해, Adjusted R squared를 활용하는 것을 추천합니다.

Adjusted R Squared
$$ \text{Adjusted} \, R^2(y, \hat{y}) =1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} \times \frac{n-1}{n-k-1}$$
$$ \text{where} \, \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i \, \text{and} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} \epsilon_i^2, \, \text{k} : \text{The number of independent variables} $$
Adjusted R Squared는 독립변수 증가에 따라 결정계수가 증가하는 문제를 해결하기 위해 만들어진 평가 지표입니다. Adjusted R Squared는 sklearn에서 따로 구현되어 있진 않지만 R Squared를 활용하여 만들 수 있습니다.
MAPE(mean absolute percentage error)
$$ \text{MAPE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \frac{{}\left| y_i - \hat{y}_i \right|}{\max(\epsilon, \left| y_i \right|)} $$
MAPE는 기존에 MAE, MSE와 같이 scale 의존적인 문제를 해결하기 위해 만들어진 평가 지표입니다. 오차를 $ \max(\epsilon, \left| y_i \right|) $로 나눠주는 작업을 통해, 값의 scale에 영향을 받지 않도록 수정했습니다. 실제 관측 값이 0인 경우에는 계산할 수 없거나 무한대로 발산할 수 있기에 주의가 필요합니다.
MSLE(mean squared log error)
$$ \text{MSLE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (\log_e (1 + y_i) - \log_e (1 + \hat{y}_i) )^2. $$
MSLE는 MSE에서 관측치와 예측치에 1을 더한 뒤, 자연로그를 취해주는 평가 지표입니다. 여기서 예측치에 1을 더해주는 이유는 예측치가 0일때에 $\log_e 0$은 정의할 수 없기 때문입니다. 그래서 1을 더해줘서 $y$의 값이 0이상의 값을 가질 수 있도록 변환해준 것입니다. 위의 지표는 지수적인 성장을 보이는 값(인구, 연간 판매 금액 등)에 활용하면 좋은 지표입니다. MSLE는 실제 값보다 낮게 추정하는 것에 대하여 더 큰 페널티를 부여합니다. MSE는 실제값과의 차이가 같으면 동일한 값을 얻게 되지만, MSLE는 실제값과의 차이가 동일해도 실제값(기준 값)보다 낮게 예측하는 경우에 대해 페널티를 부여해서 더 높은 MSLE 값을 얻게 됩니다.
3. 정리하기
분류 문제와 회귀 문제에서 많이 사용되고 있는 평가 지표들을 정리해봤습니다. 이 외에도 많은 지표들이 있지만 무엇보다 중요한 것은 모델의 성능을 잘 진단하기 위해서 올바른 평가 지표를 선정하는 것입니다. 우리의 데이터는 어떠한 평가 지표를 사용해야 하는 가에 대한 충분한 고민이 필요할 것 같습니다. 글을 읽어주셔서 감사하고 조금이나마 도움이 되셨길 바라봅니다.
ADP 실기를 준비하면서 내용을 정리했습니다. 잘못된 부분이 있으면 알려주시면 감사하겠습니다.
지난 포스팅에서는 분류 평가 지표를 구할 때, 많이 활용되는 개념인 Confusion Matrix부터 Accuracy, F1-score, AUC에 대해 다뤘습니다! 이번에는 수치형 데이터를 예측하는 회귀 문제의 평가 지표들에 대해 알아보려고 합니다!
1. 회귀 문제(Regression)
평가지표를 설명하기 전에 회귀 문제는 어떤 것인지 간단하게 설명해보겠습니다. 회귀 문제는 종속 변수가 수치형으로 해당 수치 값을 예측하는 문제입니다. 예를 들면, 보스턴 지역에 있는 집 값을 예측하거나, 내일의 주식 가격을 예측하는 것처럼 숫자를 예측하는 형태의 문제입니다. 그래서 실제 값과 예측 값의 차이를 활용한 편가 지표들을 많이 활용합니다. 대표적인 회귀 문제로는 캐글의 'House Prices - Advanced Regression Techniques'가 있습니다.
2. 회귀 문제의 평가 지표

위의 사진은 현재 sklearn 라이브러리에서 제공하고 있는 회귀 모델 평가 지표들입니다. 흔하게 접해보셨을 만한 MAE, MSE, r2_score 등이 구현되어 있습니다. RMSE, adjusted_r2_score처럼 각 지표들로부터 파생되어서 사용할 수 있는 지표들은 따로 구현되어 있지는 않습니다. 많이 활용되는 평가 지표들을 위주로 설명해보도록 하겠습니다. 회귀 문제에서는 실제 값보다 크게 예측하기도, 작게 예측하기도 합니다. 그래서 단순 오차를 합하게 되면 각 값에 대해 떨어진 정도를 판단하기 어렵습니다. 그래서 절댓값을 씌워주거나 제곱하는 방법을 사용해줍니다.
MAE(mean absolute error)
MAE는 절대 오차의 산술 평균을 구한 값입니다. $\hat{y}_{i}$는 모델이 예측한 값입니다. MAE는 scale에 의존적인 정확도 측정방법입니다. 그래서 다른 scale의 데이터 간의 비교를 할 수 없는 특징을 가지고 있습니다. 주로 시계열 예측에서 예측 오차 측정에 활용됩니다. 차이의 절댓값을 씌우기 때문에 실제값보다 높게 예측했는지 낮게 예측했는지를 구분할 수 없습니다. 이러한 부분에 대해 차이를 준 방법은 아래에서 소개할 MSLE입니다.
MSE(mean squared error)
$$\text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_{\text{samples}} -1} (y_i - \hat{y}_i)^2$$
MSE는 제곱 오차의 산술 평균을 구한 값입니다. MSE는 MAE와 비슷하게 scale에 의존적인 특징을 가지고 있습니다. 오차에 대해 제곱을 하기 때문에 1보다 작은 경우에는 작아지고, 1보다 큰 경우에는 더 커지기에 오차에 대한 왜곡이 존재할 수 있습니다. 또한 차이를 제곱하기 때문에 이상치에 민감하다는 단점이 존재합니다. 또한 MAE와 동일하게 높게 예측했는지, 낮게 예측했는지 구분할 수 없습니다.
RMSE(root mean squared error)
$$\text{RMSE}(y, \hat{y}) = \sqrt{\frac{1}{n_\text{samples}} \sum_{i=0}^{n_{\text{samples}} -1} (y_i - \hat{y}_i)^2}$$
RMSE는 MSE의 값에 루트를 씌워준 값으로 제곱 오차에 의한 왜곡을 줄여주는 역할을 합니다. 또한 모델의 예측 성능이 평균적으로 RMSE 만큼 차이 난다고 해석할 수 있는 장점이 있습니다. 아무래도 MSE의 성질을 그대로 가지다 보니, 이상치에 민감하고, 스케일에 의존적인 특징을 가집니다.
R Squared
$$R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}$$
$$ \text{where} \, \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i \, \text{and} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} \epsilon_i^2 $$
R Squared는 결정계수라고 부르기도 하는데, 모델의 설명력을 표현하는 지표입니다. 앞에서 언급했던 지표들과 다르게 높을수록 좋은 모델이라고 판단할 수 있습니다. 수식을 풀어서 설명해보면, 관측치의 평균값으로 모델을 예측한 오차의 분산과 우리가 만든 모델의 예측 오차($\hat{y}_{i}$는 우리 모델이 예측한 값입니다.)의 분산을 비율로 표현하여 1에서 비율을 빼줍니다. 단순히 평균으로 모델을 구성했을 때에 비해 분산이 얼마나 줄어드는지를 나타낸다고 보실 수 있습니다. 분산이 줄어든다는 것은 그만큼 모델이 관측 값에 가깝게 예측했다고 볼 수 있습니다. 하지만, R Squared는 단순히 의미 없는 독립변수가 추가되면 값을 상승시킬 수 있습니다. 이로 인해, Adjusted R squared를 활용하는 것을 추천합니다.

Adjusted R Squared
$$ \text{Adjusted} \, R^2(y, \hat{y}) =1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2} \times \frac{n-1}{n-k-1}$$
$$ \text{where} \, \bar{y} = \frac{1}{n} \sum_{i=1}^{n} y_i \, \text{and} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} \epsilon_i^2, \, \text{k} : \text{The number of independent variables} $$
Adjusted R Squared는 독립변수 증가에 따라 결정계수가 증가하는 문제를 해결하기 위해 만들어진 평가 지표입니다. Adjusted R Squared는 sklearn에서 따로 구현되어 있진 않지만 R Squared를 활용하여 만들 수 있습니다.
MAPE(mean absolute percentage error)
$$ \text{MAPE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \frac{{}\left| y_i - \hat{y}_i \right|}{\max(\epsilon, \left| y_i \right|)} $$
MAPE는 기존에 MAE, MSE와 같이 scale 의존적인 문제를 해결하기 위해 만들어진 평가 지표입니다. 오차를 $ \max(\epsilon, \left| y_i \right|) $로 나눠주는 작업을 통해, 값의 scale에 영향을 받지 않도록 수정했습니다. 실제 관측 값이 0인 경우에는 계산할 수 없거나 무한대로 발산할 수 있기에 주의가 필요합니다.
MSLE(mean squared log error)
$$ \text{MSLE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (\log_e (1 + y_i) - \log_e (1 + \hat{y}_i) )^2. $$
MSLE는 MSE에서 관측치와 예측치에 1을 더한 뒤, 자연로그를 취해주는 평가 지표입니다. 여기서 예측치에 1을 더해주는 이유는 예측치가 0일때에 $\log_e 0$은 정의할 수 없기 때문입니다. 그래서 1을 더해줘서 $y$의 값이 0이상의 값을 가질 수 있도록 변환해준 것입니다. 위의 지표는 지수적인 성장을 보이는 값(인구, 연간 판매 금액 등)에 활용하면 좋은 지표입니다. MSLE는 실제 값보다 낮게 추정하는 것에 대하여 더 큰 페널티를 부여합니다. MSE는 실제값과의 차이가 같으면 동일한 값을 얻게 되지만, MSLE는 실제값과의 차이가 동일해도 실제값(기준 값)보다 낮게 예측하는 경우에 대해 페널티를 부여해서 더 높은 MSLE 값을 얻게 됩니다.
3. 정리하기
분류 문제와 회귀 문제에서 많이 사용되고 있는 평가 지표들을 정리해봤습니다. 이 외에도 많은 지표들이 있지만 무엇보다 중요한 것은 모델의 성능을 잘 진단하기 위해서 올바른 평가 지표를 선정하는 것입니다. 우리의 데이터는 어떠한 평가 지표를 사용해야 하는 가에 대한 충분한 고민이 필요할 것 같습니다. 글을 읽어주셔서 감사하고 조금이나마 도움이 되셨길 바라봅니다.