본문 바로가기

딥러닝 & 머신러닝/머신러닝 지식

회귀 / 분류시 알맞은 metric과 그에 대한 설명

# 회귀 / 분류시 알맞은 metric은 무엇일까요?

# 알고 있는 metric에 대해 설명해주세요(ex. RMSE, MAE, recall, precision …)

 

모델에게 주어진 목표를 얼마나 잘 달성했는가를 측정해야 어떤 모델이 좋은 모델인지 알 수 있습니다.

 

# 회귀 문제

 

회귀 문제에서는 실제 값과 모델이 예측하는 값의 차이에 기반을 둔 metric(평가)을 사용합니다. 대표적으로 RSS(단순 오차 제곱 합), MSE(평균 제곱 오차), MAE(평균 절대값 오차)가 있습니다. RSS는 예측값과 실제값의 오차의 제곱합, MSE는 RSS를 데이터의 개수만큼 나눈 값, MAE는 예측값과 실제값의 오차의 절대값의 평균입니다. 그리고 RMSERMAE라는 것도 있는데, 각각 MSE와 MAE에 루트를 씌운 값입니다.

 

MSE의 경우 오차에 제곱이 되기 때문에 이상치(outlier)를 잡아내는 데 효과적입니다. 틀린 걸 더 많이 틀렸다고 알려주는 것입니다. MAE의 경우 변동치가 큰 지표와 낮은 지표를 같이 예측하는 데 효과적입니다. 둘 다 가장 간단한 평가 방법으로 직관적인 해석이 가능하지만, 평균을 그대로 이용하기 때문에 데이터의 크기에 의존한다는 단점이 있습니다.

 

예를 들어 현재 삼성전자의 주가가 200만이고 네이버의 주가가 70만일 때, 각각의 주가를 예측하는 회귀 모델을 만들었다고 생각해봅시다. 이때 삼성전자의 MSE가 50만이 나오고 네이버의 MSE도 50만이 나왔습니다. 그러면 각 기업의 주가를 예측하는 모델의 성능은 같은 걸까요? 아닙니다. 상대적으로 네이버의 경우가 더 모델이 안 좋다고 할 수 있습니다. 따라서 MSE는 전체 데이터의 크기에 의존하기 때문에 서로 다른 두 모델의 MSE만을 비교해서 어떤게 더 좋은 모델인지 판단하기 어렵다는 단점이 있습니다.

 

이를 해결하기 위한 metric으로는 R2(결정계수)가 있습니다. R2는 1-(RSS/전체 분산)입니다. R2는 회귀 모델의 설명력을 표현하는 지표로써, 그 값이 1에 가까울수록 높은 성능의 모델이라고 할 수 있습니다. R2의 식에서 분자인 RSS의 근본은 실제값과 예측값의 차이인데, 그 값이 0에 가까울수록 모델이 잘 예측을 했다는 뜻이므로 R2값이 1에 가까워지게 됩니다.

 

# 분류 문제

 

분류 문제에서는 어떤 모델이 얼마나 데이터를 클래스에 잘 맞게 분류했느냐를 측정하기 위해서 혼동 행렬(Confusion Matrix)라는 것에서 나오는 지표를 사용합니다. 혼동 행렬은 어떤 데이터에 대해 모델이 예측한 클래스와 실제 클래스가 일치하느냐 아니냐를 따지게 됩니다.

True Positive(TP)는 실제 데이터가 P(긍정)인데 모델도 P라고 잘 예측했을 때,

True Negative(TN)는 실제 데이터가 N(부정)인데 모델도 N이라고 잘 예측했을 때,

False Positive(FP)는 실제 데이터가 N인데 모델은 P라고 잘못 예측했을 때,

False Negative(FN)는 실제 데이터가 P인데 모델은 N이라고 잘못 예측했을 때입니다.

 

나의 얼굴 인식을 예로 한 번 들어보겠습니다. TP는 실제로 나의 얼굴이고 모델도 나의 얼굴이라고 인식했을 때입니다. TN은 실제로 다른 사람의 얼굴이고 모델도 다른 사람의 얼굴이라고 인식했을 때입니다. FP는 실제로 다른 사람의 얼굴이지만 모델은 나의 얼굴이라고 인식했을 때입니다. FN은 실제로 내 얼굴이지만 모델은 다른 사람의 얼굴이라고 인식했을 때입니다.

 

가장 쉽게 생각할 수 있는 metric으로 accuracy, 정확도가 있습니다. 정확도는 (TP+TN) / (TP+TN+FP+FN)으로 나타냅니다. 정확도는 모델이 얼마나 데이터를 잘 분류했느냐, 즉 분류 결과가 얼마나 True로 나왔느냐를 보여줍니다. 정확도는 일반적으로 분류 모델의 주요 평가 지표로 쓰이지만, 클래스의 개수가 불균형할 경우 신뢰도가 떨어진다는 단점이 있습니다.

 

만약 100만 개의 항공 데이터 중 90만 개가 정상 운행을 했고 10만 개가 지연 운행을 했다는 데이터를 가지고 앞으로의 운행이 어떻게 될지를 예측한다고 해봅시다. 이때 분류 모델 A가 전체 결과가 모두 지연되지 않았다고 예측할 경우 정확도는 (0+90만)/(100만) = 90%가 됩니다. 데이터 분포가 어떻든 간에 그냥 지연되지 않을 거라고만 예측하면 정확도가 90%가 나오는데, 그렇다고 해서 이걸 좋은 모델이라고 할 수 있을까요? 아마 아닐 것입니다. 따라서 정확도를 대신하기 위해 나온 metric이 몇 가지 더 있습니다.

 

Precision, 정밀도라는 게 있습니다. 정밀도는 ‘모델이 P라고 분류한 데이터 중에서’ 실제로 P인 데이터의 비율을 나타냅니다. 정밀도는 N인 데이터가 더 중요할 경우, 즉 실제로 N인 데이터를 P라고 판단하면 안 될 때 많이 사용하게 됩니다. 예를 들어 스팸 메일을 분류할 때, 일반 메일(P)을 스팸 메일(N)로 잘못 분류했을 땐 중요한 메일을 읽지 못하게 될 수 있습니다. 정밀도에선 ‘모델의 관점에서’ P라고 예측한 것이 분모로 들어가고, TP/(TP+FP)로 나타나게 됩니다. 분자로는 실제 P를 모델도 P라고 맞춘 것의 개수인 TP가 들어갑니다.

 

Recall (또는 True Positive Rate, TPR), 재현율이라는 게 있습니다. 재현율은 ‘실제 P인 데이터 중에서’ 모델이 P라고 잘 예측한 데이터의 비율을 나타냅니다. 재현율은 P인 데이터가 더 중요할 경우, 즉 실제로 P인 데이터를 N이라고 판단하면 안 될 때 사용하게 됩니다. 예를 들어 종양의 종류를 판단할 때, 악성 종양(P)을 음성 종양(N)으로 잘못 분류하면 생명이 위급해질 수 있습니다. 재현율은 ‘데이터의 관점에서’ 실제로 P인 것이 분모로 들어갑니다. 따라서 재현율은 TP/(TP+FN)로 나타냅니다.

 

지금까지 배운 지표를 이용해 예제를 풀어보겠습니다.


창고의 지문 인식기 성능을 측정한다고 가정하겠습니다. 이때 나의 지문을 긍정(Positive) 데이터, 상대방의 지문을 부정(Negative) 데이터로 정의하겠습니다.

 

그리고 지문 인식기가 내 지문을 내 지문으로 잘 인식하고 창고가 열리는 경우, 또는 상대방 지문을 상대방 지문으로 잘 인식하고 창고가 열리지 않는 경우를 True라고 하겠습니다.

 

반면에 지문 인식기가 상대방 지문을 내 지문으로 잘못 인식하고 창고가 열리는 경우, 또는 내 지문을 상대방 지문으로 잘못 인식하고 창고가 열리지 않는 경우를 False라고 하겠습니다.

 

이러한 상황에서, 총 100번의 실험을 통해 지문 인식기의 정밀도와 재현율을 측정하고자 합니다. 실험 결과는 다음과 같습니다.

  • 지문 인식기가 내 지문을 잘 인식하고 금고를 열었을 때 : 50번
  • 지문 인식기가 상대방 지문을 잘 인식하고 금고를 열지 않았을 때 : 40번
  • 지문 인식기가 상대방 지문을 내 지문으로 잘못 인식하고 금고를 열었을 때 : 2번
  • 지문 인식기가 내 지문을 상대방 지문으로 잘못 인식하고 금고를 열지 않았을 때 : 8번

위와 같은 실험 결과, 지문 인식기의 정밀도와 재현율을 순서대로 올바르게 구하세요.

→ 정밀도 = TP / TP + FP = 50 / 50 + 2 = 50/52

→ 재현율 = TP / TP + FN = 50 / 50 + 8 = 50/58


또한 False Positive Rate, FPR이라는 게 있습니다. FPR은 실제로 N인 데이터 중에서 모델이 P라고 잘못 분류한 데이터의 비율입니다. 그래서 분모로는 실제로 N인 데이터가 들어가고 분자로는 모델이 P라고 잘못 분류한 데이터의 수가 들어가므로 FPR은 FP/(FP+TN)이 됩니다.

 

x축을 FPR, y축을 TPR(Recall)로 두고 이를 시각화한 그래프를 ROC curve라고 합니다. 그림을 참고하면 이해가 쉬울 것 같습니다. ROC curve의 아래 면적을 AUC라고 하는데, 이를 보고 모델의 성능을 평가합니다. 만약 ROC curve가 y=x선처럼 된다면 AUC는 (1*1)/2=0.5가 되고, 이는 분류기로써 최하 성능을 나타내는 것입니다. 만약 TPR, 즉 y축 쪽으로 그래프가 당겨진다면 좋은 쪽으로 그래프가 기우는 것이니까 분류기의 성능이 향상된다는 것을 의미합니다.

 

 

F1 score라는 지표도 있습니다. F1 score는 정밀도와 재현율을 적절히 혼합해 사용하기 위하여 만들어진 지표로, 정밀도와 재현율의 가중 조화평균 값으로 구성되어 있습니다. 원래는 아래와 같은 F-measure라는 식이고, 여기에 alpha값으로 정확도와 재현율 중 어느 쪽에 더 가중치를 둘 것이냐를 결정합니다. F1 score는 alpha값이 0.5인 경우입니다.

 

F-measure에서 왜 우리가 아는 산술평균을 쓰지 않고 굳이 조화평균을 쓰느냐? 그 이유는 조화평균을 썼을 때 정밀도와 재현율 중 더 작은 값에 가깝게 그 결과를 던져주기 때문입니다. 약간 안전빵(?) 같은 개념이라고도 볼 수 있겠네요. 예를 들어 정밀도(P)가 0.1, 재현율(R)이 0.9라고 할 때 F1 score를 계산해보면 0.18이 나오고, 이는 P에 더 가깝습니다. 정밀도(P)가 0.7, 재현율(R)이 0.3이라고 할 때 F1 score를 계산해보면 0.42가 나오고, 이는 R에 더 가깝습니다.

 

지금까지 분류와 회귀 문제에서 쓰이는 다양한 평가 지표들에 대하여 설명해 드렸습니다. 상황에 따라 선정해야 하는 평가 지표가 다르므로 다양한 평가 지표를 적용 후 결과를 비교하는 것이 필요합니다.