분류 (Classification) 의 평가 지표
분류 문제의 경우 레이블이 이산(discrete) 데이터로 표현된다. 따라서 손실 값 이외에도 정확도와 같은 다른 평가 지표가 존재한다. 이러한 다양한 평가 지표를 살펴보자.
혼동 행렬 (Confusion Matrix)
분류 문제 에서 실제 클래스와 학습기가 예측 분류한 클래스 조합은
$$ 실제 양성 (True Positive), 거짓 양성(False Positive),실제 음성(Ture Negative), 거짓 음성(False Negative)$$
총 4가지 형태로 요약할 수 있다. 가각을 TP, FP, TN, FN으로 나타내며 \('TP + FP + TN + FN = 총 샘플 수'\) 가 된다.
이처럼, 분류 모델에서 구한 예측 범주와 실제 범주의 교차 결과를 혼동 행렬 (Confusion Matrix)이라고 부른다
실제값 | 예측 값 | |
양성 (Positive) | 음성 (Negative) | |
양성 (Positive) | TP (True Positive) = 실제 양성 = 옳은 검출 |
FN (False Negative) = 거짓 음성 = 검출되어야 할 것이 검출되지 않았음 |
음성 (Negative) | FP (False Positive) = 실제 음성 = 틀린 검출 |
TN (True Negative) = 실제 음성 = 검출되지 말아야 할것이 검출되지 않았음 |
오차율(Error Rate)과 정확도 (Accuracy)
오차율과 정확도는 분류 분석에서 자주 사용하는 두가지 성능 측도이다. 이진 분류뿐만 아니라 다중 분류 문제에서도 사용된다.
오차율은 모든 샘플 수에서 잘못 분류한 샘플 수가 자치하는 비율이고, 정확도는 전체 샘플 수 에서 정확히 분류한 샘플 수가 차지하는 비율이다.
- 오차율 : 모든 샘플 수에서 잘못 분류한 샘플 수가 자치하는 비율
- 정확도 : 전체 샘플 수에서 정확히 분류한 샘플 수가 차지하는 비율
재현율(Recall), 정밀도(Precision)
오차율과 정확도는 자주 사용되지만 모든 문제에 활용되지 못한다.
수박 분류 문제를 예로 들어보면, 수박 장수가 수박을 손수레에 가득 담아 왔다. 그는 훈련된 모델을 통해 수박들을 분류하려고 한다. 여기서 오차율은 덜 익은 수박으로 분류되는 판별 오차율을 나타낼 수 있다. 하지만 우리가 올기 싶은 것은 '골라낸 수박 중에 잘 익은 수박의 비율', 혹은 '모든 잘 익은 수박 중에 선택될 비율'이다. 그렇다면 오차율은 도움을 줄 수가 없게 되는 것이다. 이때 다른 성능 측도가 필요하다
잘익은 수박 골라내기 예제 외에도 우리는 정보 검색, 웹 검색 등의 응용 환경에서 이와 같은 요구를 찾을 수 있다. 예를 들어, 정보 검색 중에 우리가 일반적으로 확인하고 싶은 것은 '검색된 자료 중 사용자가 관심 있어 할 내용의 비율' 혹은 '사용자가 좋아하는 내용을 검색하여 제공할 수 있는 확률' 등이 있다. 정밀도 (percision)과 재현율(recall)은 이러한 요구에 맞는 성능 측도 이다.
정밀도 P와 재현율 R은 다음과 같이 정의
- Precision (정밀도) : 모든 검출 결과 중 옳게 검출 한 비율
- (모델이 True라고 예측한 객체가 실제 정답이 True인 것의 비율)
$$ P (정밀도) = \frac{TP}{TP + FP} $$
- Recall (재현율) : 마땅히 검출해내야하는 물체 중에서 제대로 검출된 것의 비율
- ( 모든 평가 데이터에서 모델이 Ture로 정확히 예측한 비율)
$$ R (재현율) = \frac{TP}{TP + FN} $$
정밀도와 재현율 사이에는 트레이드 오프 (Trade-off)가 존재한다. 일반적으로 정밀도가 높으면 재현율이 낮고, 반대로 재현율이 높으면 정밀도는 낮은 경우가 많다.
예를 들어 잘 익은 수박을 최대한 많이 골라내려면 골라내는 수박의 수를 늘리는 방법으로 목적을 달성할 수 있다. 만약 모든 수박을 선택한다면 모든 잘 익은 수박도 선택된다. 그러나 이러한 방법은 정밀도를 매우 낮게 만든다. 만약 선택한 수박 중 잘 익은 수박의 비율을 최대한 높이고 싶다면 최대한 신중하게 수박을 골라야 한다. 하지만 너무 조심스러우면 잘 익은 수박을 고르지 못할 수도 있다. 즉, 이러한 방법은 재현율을 매우 낮게 만든다. 우리는 매우 간단한 문제에서만 비교적 높은 정밀도와 재현율을 달성할 수 있다.
P-R 곡선은 직관적으로 샘플 전체에 대한 학습기의 정밀도, 채현율을 나타낸다. 두 지표를 비교할 때 어떠한 학습기의 P-R 곡선이 다른 학습기의 P-R 곡선의 영역 내에 완전히 포함된다면, 후자가 전자보다 학습 성능이 뛰어 나다고 판단할 수 있다. 위의 그래프 에서는 곡선 A를 나타내는 C보다 우월하다고 할 수 있다.
그러나 A와 B 처럼 P-R 곡선의 교차가 발생한다면, 재현율 및 정밀도를 종합적으로 고려해 성능을 측정할 수 있다. 이때 사용되는 것이 손익 분기점 (Break-Even Point, BEP)이다. BEP는 '정밀도 = 재현율' 일때를 나타내는 값으로 BEP 기준으로 0.8인 A가 가장 좋은 성능을 보이는 것을 알 수 있다. 하지만 BEP는 활용한 방법은 지나치게 간소화한 면이 있어서 F1 Score를 더 많이 사용하게 된다.
F1 스코어
위에서 설명한 것처럼 BEP의 간소화된 면 때문에 F1 Score를 사용한다
$$ F1 = \frac{2PR}{P+R} = \frac{2TP}{총 샘플수 + TP - TN} $$
다양한 정책에 따라서 정밀도와 재현율의 중요도는 다를 수 있다.
만약, 상품 추천 시스템의 경우, 싫어할 만한 내용은 배제하고 흥미를 느낄 만한 콘텐츠를 추천해야 한다. 따라서 정밀도가 더 종요하다고 볼 수 있다. 반면, 범죄 기록 검색의 경우에는 최대한 놓치는 내용을 적게 하기 위해서 재현율이 중요화다.
이처럼 정밀도/재현율에 대한 서로 다른 선호도에 따라서
$$ F_{\beta } = \frac{(1 + \beta^2) \times R \times R}{(\beta^2 \times P) + R} $$
위 식에서 \(\beta > 0\) 은 정밀도에 대한 재현율의 상대적 중요도를 측정하며,
\(\beta = 1\) 일 때는 일반적인 F1 Score가 된다.
\(\beta > 1\) 일 때는 재현율의 영향력이 더 크고, 반대로 \(\beta < 1\) 일 때는 정밀도의 영향력이 더 크다
여러 데이터 세트, 다향 분류 문제등 혼동 행렬을 종합해서 작업하는 경우, 한번에 정밀도와 재현율을 평가할 수 있는 하나의 종합적인 혼동 행렬을 얻고 싶어한다.
한 가지 방법은 각 혼동 행렬에 대해 정밀도와 재현율을 계산하고, \((P_1,R_1),(P_2,R_2),...,(P_n,R_n)\)으로 기록하고, 이들의 평균값을 계산하 것이 매크로 정밀도(macro-P), 매크로 재현율(macro-R)이라고 하고, 이들로 만든 F1 스코어를 매크로 F1 스코어 (macro-F1 score)라고 한다.
$$ \text{macro-P} = \frac{1}{n}\sum_{i=1}^{n}{P_i},\; \text{macro-P} = \frac{1}{n}\sum_{i=1}^{n}{R_i} $$
$$ \text{macro-F1} = \frac{2 \times \text{macro-P} \times \text{macro-R}}{\text{macro-P}+\text{macro-R}} $$
다른 방법은 각 TP, FP, TN, FN의 평균 값으로 얻을 수 있고, 이들을 각각 \(\overline{TP}, \overline{FP}, \overline{TN}, \overline{FN}\)으로 기록하여 나타내는 평균값을 계산하면 마이크로 정밀도(micro-P), 마이크로 재현율(micro-R)이라고 하고, 이들로 만든 F1 스코어를 마이크로 F1 스코어 (micro-F1 score)라고 한다.
$$ \text{micro-P} = \frac{\overline{TP}}{\overline{TP}+\overline{FP}}, \; \text{micro-R} = \frac{\overline{TP}}{\overline{TP}+\overline{FN}} $$
$$\text{micro-F1} = \frac{2 \times \text{micro-P} \times \text{micro-R}}{\text{micro-P}+\text{micro-R}} $$
ROC 와 AUC
많은 학습기가 테스트 세트를 위해 실숫값 혹은 확률 예측값을 계산해 냅니다. 그런 다음 해당 예측값과 하나의 분류 임계치를 비교한다.
만약 임계치보다 크면 양성값 (positive value)으로, 작으면 음성값(negative value)으로 분류한다.
예를 들어, 대부분의 신경망 학습에서 테스트 세트에서 예측을 위해 사용할 [0.0, 1.0] 범위 사이의 실수값을 계산하고, 이 값과 0.5를 비교하여 0.5보다 크면 양성값으로, 작으면 음성값으로 분류합니다. 이 실수값이나 확률값의 좋고 나쁨이 학습기의 성능을 직접적으로 결정한다. 이 실숫값이나 확률값의 좋고 나쁨이 학습기의 성능을 직접적으로 결정한다. PR 그래프를 그릴 때에도 실질적으로 이러한 실숫값이나 확률값으로 분류될 ‘가능성’이 가장 큰 샘플이 가장 앞으로, ‘가능성’이 가장 작은 샘플은 가장 뒤에 놓습니다. 이러한 분류 과정은 해당 순서에서 하나의 차단점 (cut point)을 기준으로 샘플을 양분하는 과정과 유사하다
다양한 문류에서 우리는 각 문제의 목적과 필요에 따라 서로 다른 차단점을 사용한다. 만약 우리가 정밀도 더 중요하게 생각한다면, 배열에서 앞쪽에 위치한 부분을 차단점으로 설정하고, 재현율이 더 중요한 상황이라면 배열 뒤쪽으로 차단점을 설정한다. 따라서 배열 순서 자체의 품질에 따라 다른 문제에서 각 학습기의 일반화 성능이 결정된다. 이러한 관점에서 출발하여 학습기의 일반화 성능을 연구하는 좋은 도구가 만들어졌는데, 그것이 바로 ROC 곡선이다.
ROC는 수신 조작 특성 (Receiver Operating Characteristic)의 약자이다. 세계 2차 대전 당시 적군의 레이더 신호를 분석하는 기술로 활용되었고, 1960~1970년대부터 심리학, 의학용 테스트 연구에 응용되기 시작했다. 그 후 본격적으로 머신러닝 영역에서도 응용되기 시작했다. (Spackman, 1989)
P-R 곡선과 비숫하게, 학습기의 예측 결과를 기반으로 샘플에 대해 순서를 매기고, 해당 순서에 따라 샘플이 양성값이 될 확률을 계산한다. 그리고 TPR과 FPR값을 계산하여 x축과 y축에 그려 넣으면 ROC곡선이 완성된다. P-R곡선은 재현율과 정밀도를 각각 x와 y축에 놓는 반면, ROC곡선은 세로축인 y축에는 참 양성률(Ture Positive Rate, TPR)을 가로축인 x축에는 거짓 양성률(False Positive)을 놓습니다.
$$ TPR = \frac{TP}{TP + FN} $$
$$ FPR = \frac{FP}{TN + FP} $$
ROC 곡선을 표현한 그래프를 ROC 그래프라고 한다. 그림 a에서 대각선은 '랜덤 예측 모델'을 나타낸 것이다. 그리고 좌표 위의 점 (0, 1)은 모든 양성값을 분류해 낸 '가장 이상적인 모델'일 것이다.
현실에서는 테스트 샘플의 개수가 많지 않을 때가 많다. 이렇게 재현된 데이터를 이용해 ROC 그래프를 그리면 유한한 개수의 좌푯값을 얻르 수밖에 없다. 그렇게 된다면 매끄러운 ROC 곡선 그래프가 나올 수 없고, b와 같은 근갓값을 얻을 수 있을 것이다
그래프를 만드는 과정은 매우 단순하다. \(m^+\)개 양성값과 \(m^-\)개의 음성값이 있다고 가정하고 학습기 예측 결과에 기반을 둔 샘플을 오름차순으로 정렬한다. 그 후 임계치 값을 최댓값으로 하여 모든 샘플을 음성값이라 예측한다. 이때 참 양성률과 거짓 양성률은 모두 0이 된다. 좌표 (0, 0)에 점을 찍고, 임계치를 각 샘플의 예측값으로 설정한다. 그리고 각 샘플을 양성값이라 분류한다. 앞의 값 좌표 (x, y)라고 설정하고, 참 양성률은 \((x, y + \frac{1}{m^+})\), 거짓 양성률은 \((x\frac{1}{m^-}, y)\)로 표기한 후, 직선을 이용하여 각 점을 잇는다
학습기를 비교할 때, P-R 그래프와 마찬가지로 만약 어떤 한 학습기의 ROC 곡선이 다른 하나의 ROC 곡선에 완전히 '포함'되는 경우, 후자가 전자보다 우수한 성능을 가진 학습기라고 판단할 수 있다. 만약 두 학습기 ROC 곡선에 교차가 발생한다면, 한눈에 우열을 가리기 힘든 경우가 많다. 이런 상황에서 비교적 합리적인 판단 방법은 ROC 곡선 아래의 면적을 비교하는 것이다. 이를 AUC(Area Under ROC Curve)라고 한다
위 정의에서 볼 수 있듯이, AUC는 ROC 곡선 아래 각 부분의 면적을 모두 더해 구할 수 있다. 만약 ROC 곡선이 각 조표 \(\left\{(x_1, y_1), (x_2, y_2),..., (x_m, y_m)\right\}\) 의 점들을 이어 \((x_1=0, x_m=1)\)로 만들어 졌다고 가정한다면, AUC는 다음과 같이 계산될 수 있다
$$ AUC = \frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1} - x_{i})\cdot (y_{i} + y_{i+1}) $$
위 식에서 볼 수 있듯이, AUC가 고려하는 것은 샘플 에
측의 배열 순서 품질이다. 따라서 순서 오차와 긴말한 관계가 있다. \(m^+\)개 양성값과 \(m^-\)개의 음성값이 있고, \(D^+\)와\(D^-\)로 양성값, 음성값의 집합을 나타내면, 순서의 손실 (loss)은 다음과 같이 정의 된다.
$$ \ell_{rank} = \frac{1}{m^{+}m^{-}}\sum_{x^{+}\in D^{+}}\sum_{x^{-}\in D^{-}} \left (\mathbb{I}(f(x^{+}) < f(x^{-})) + \frac{1}{2}\mathbb{I}(f(x^{+}) = f(x^{-})) \right ) $$
만약 각 양성값, 음성값 쌍에서 양성값이 음성값보다 작게 나온다면 벌점을 부여한다. 만약 같으면 0.5개의 벌점을 매긴다 . \(\ell_{rank}\)는 ROC 곡선 위의 면적으로서, 만약 하나의 양성값이 ROC 곡선 위에 대응하는 점 (x, y)라고 한다면, x는 그 아펭 얼마만큼의 음성값이 있는지를 나타낸다고 볼 수 있다. 즉 거짓 양성률을 나타낸다
$$ AUC = 1 - \ell_{rank}$$
참고자료
1. 단단한 머신러닝
2. 딥러닝 부트 캠프
'Machine-Learning > Basic' 카테고리의 다른 글
[ML] 손실함수(Loss function) (0) | 2021.09.05 |
---|---|
[ML] 경사하강법(Gradient Descent) (0) | 2021.09.05 |
[ML] 회귀 (Regression) 평가 지표 (0) | 2021.09.05 |
[ML] 분류 (Classification) (0) | 2021.09.05 |
[ML] Logistic Regression (0) | 2021.03.17 |
댓글