머신러닝 영역은 기술용어로 가득 차 있고,
이는 처음 시작하는 초보자들을 더 혼란스럽게 만든다.
머신러닝 영역에서 아래 단어들이 뜻하는 의미가 무엇일까?
deep learning, the kernel trick, regularization, overfitting, semi-supervised learning, cross-validation
머신러닝 모델을 만드는 핵심 작업 중 하나는 성능을 평가(evaluate)하는 일이며,
이는 기본적, 필수적인 일이며, 매우 어려운 일이다.
과연 어떻게 머신러닝 모델의 완성도를 측정할까?
언제 학습(train)과 학습평가(evaluation)를 끝내고, 완성했다고 말할 수 있을까?
이 글을 통해, 이 질문에 대한 답을 찾아보자.
첫번쨰 섹션에서는 "ML Model Evaluation" 가 의미하는 바를 알아보고,
왜 이것이 꼭 필요한 일인지 알아보자.
그 다음 섹션에서는 평가지표(evaluation metrics) 를 더 잘 이해하기 위해,
특정 사용 사례와 함께 활용가능한 다양한 평가지표를 알아본다.
데이터 준비와 모델 학습은 누구나 머신러닝 작업 파이프라인에서 핵심적인 단계로 생각하지만,
학습된 모델의 퍼포먼스를 측정하는것 또한 중요한 단계에 해당한다.
새로운 데이터로(학습에 사용하지 않은) 모델을 일반화시킬 수 있을까 하는것은
적응형(adaptive) vs 비적응형(non-adaptive)으로 구분할 수 있다.
우리는 학습시킨 모델을 바로 실서비스에 올려서 처음 만나는 데이터를 접하기 전에,
다른 평가지표로 퍼포먼스 평가를 하여 우리 모델이
처음만나는 데이터에 대해서도 훌륭한 예측력을 가질 수 있도록 개선시켜야한다.
다른 평가지표를 사용하여 머신러닝 모델의 제대로 된 학습평가를 하지 않고,
정확도에만 연연한다면, 모델이 처음 만나는 실서비스의 데이터에 대해
엉뚱한 예측을 하는 끔찍한 상황에 빠질 수 있다.
우리 모델은 배우지 않지만, 기억하고있다
ML모델은 처음만나는 데이터를 스스로 일반화 하여 받아들일 수 없다.
이를 시작하기 위해, 3개의 중요한 기준을 세우도록 한다.
아래 이미지는 모델이 학습하면서 단순히 모델 정확정확도에만 의존하여,
검증단계에서 좋지 않은 성능을 보여주는 결과라고 볼 수 있다.
다음 섹션에서는, 모델이 일반화될 수 있게 도와줄 다른 평가지표를(evaluation metrics) 살펴볼 것이다.
평가지표는 꼭 필요한 머신러닝 업무 중 꼭 필요한 부분이다.
분류(classification), 회귀(regression), 랭킹, 군집화(clustering), 토픽모델링(topic modeling) 등
각각의 모델마다 적절한 평가지표는 다르지만, Precision-recall
과 같이 여러 머신러닝에서 통상적으로 유용하게 쓰이는 지표들이 있다.
분류, 회귀와 랭킹은 보편적으로 많이 쓰이는 지도학습(supervised learning)의 예시로 볼 수도 있다.
분류 모델 측면에서 모델 정확도는 전체 표본 중 정확히 분류된 표본의 수 라고 볼 수 있겠다.:
여러 class로 분류결과가 나뉜다면, 정확도 = 정답을 맞춘 예측의 수 / 전체 문제의 수
라고 볼 수 있다.
만약 2진분류로 결과가 나뉜다면 위 그림의 표처럼 4가지로 구분해볼 수 있다.
True Positive (TP) - 모델이 정답(Positive)을 맞추었을때
True Negative (TN) - 모델이 오답(Negative)을 맞추었을때
False Postive (FP) - 모델이 오답(Negative)을 정답(Positive)으로 잘못 예측했을때
False Negative (FN) - 모델이 정답(Positive)을 오답(Negative)으로 잘못 예측했을때
우리의 목표는 높은 정확도의 모델이지만, 정확도만 가지고
학습때 만나보지 못한 실서비스의 데이터에서도 모델 퍼포먼스를 보장할 수 있다고 설명하기는 어렵다.
몇가지 사례를 가지고 이 말을 이해해보자.
2진 분류 모델 - 환자가 암에 걸렸는지 아닌지 분류한다
정답라벨이 있는 학습 데이터셋을 살펴보자
위 100개의 데이터를 가지고 우리모델의 정확도를 계산해보자. 결과는 아래와 같으며, 이는 앞서 살펴본 TP, TN, FP, FN으로 대입해볼 수 있다.
TP(실제로 암이면서, 암으로 예측한 결과) = 1
TN(실제로 정상이고, 정상으로 예측한 결과) = 90
FN(실제로 암이지만, 예측을 정상으로 한 결과) = 8
FP(실제로 정상이지만, 예측을 암으로 한 결과) = 1
우리 모델의 정확도는 91%라고 명시할 수 있다.
하지만 우리 모델이 실서비스에서도 정말 쓸모있을지에 대한 의문은 여전히 풀리지 않았다.
이렇게 높은 정확도의 모델일지라도,
실제 어떤 암환자 예측에서는 최악의 결과를 초래할 수 있기때문에, 유용하지 않은 모델일 수 있다.
이런 케이스들에서 과연 ML모델을 어떻게 신뢰할 수 있을까?
위의 암환자 예시처럼 학습셋의 class항목별(긍정,부정) 불균형과 같은 데이터에 대한 파악은 정확도에서 찾을 수 없다.
이것에 대한 더 자세한 내용을, class 불균형 문제에 따른 2개의 평가지표(metrics)에 대해서 알아본다: precision and recall
분류과제에서, 분류종목에 대한 precision 은
정답을 정답이라고 맞춘TP(True Positive)
개수를 TP+FP(False Positive, 정답을 오답이라고 판단한 개수)
로 나눠주면 된다.
precision이 높다는것은 알고리즘이 관련있는 결과를 그렇지 못한것 대비 충분히 맞추었다는 의미로 볼 수 있다.
이제 Recall에 대해 알아보도록 하자.
Recall은 정답을 정답이라고 맞춘 TP(True Positive)
개수를 TP+FN
로 나눠주면 된다.
recall이 높다는것은 알고리즘이 관련있는 결과를 최대한 많이 가져왔다 의미로 볼 수 있다.
이제, precision 과 recall을 위의 암 예측 결과를 가지고 측정해보자
우리 모델은 0.5의 precision값을 가지며, 이는 암을 관측할 때 50%의 정확성을 가진다고 할 수 있다.
또, 우리 모델은 0.11의 recall 값을 가지며, 이는 전체 암 환자 중 오직 11%만을 식별할 수 있다고 할 수 있다.
모델의 효율성을 평가하기 위해 precision과 recall을 모두 검토할 필요가 있다. 불행하게도, precision과 recall은 보통 반대되는 수치를 가진다. 다시말해, precision을 높이고자 하면 recall이 감소하고, 그 반대도 마찬가지다.
아래의 PR(Precision-Recall) 커브를 살펴보자
종종 분석 도메인별로 기존 사례들을 이용하거나
비용을 지불하여 이상적인 precision 또는 recall 을 찾으려 노력한다. 아래의 예시들을 살펴보자
Precision-Recall의 Trade-Off
그래서 높은 precision이나 recall은 실제 활용 도메인이나 필요 상황에 맞는것을 택하게 된다.
또는, F1 스코어
라고 알려진 평가지표(evaluation metric)를 사용할 수 있는데,
이 지표는 Precision과 Recall 지표의 황금비율을 찾도록 도와준다.
F1 스코어는 Precision과 Recall의 조화평균(harmonic mean)을 의미하여,
F1 스코어가 1에 도달할 때 최적의 Precision과 Recall을 의미하며, 0이 최악을 의미한다.
왜 조화평균을 쓸까? 데이터들의 조화평균은 가장 작은 수치쪽으로 치우치기 때문에(산술평균에 비해),
크게 튀는 아웃라이어와 작은 값의 영향을 조정하는 역할을 합니다.
F1 스코어는 편중된 값을 더 크게 조정시킨다.
그렇기에 이상적으로 볼때, F1 스코어는 아래의 분류 시나리오들에서 효과적인 평가지표로 사용될 수 있다.
ROC(수용자 반응 특성, Receiver Operating Characteristic)커브는
분류기의 분류 능력을 그래프 좌표로 표현하는 방법이다.
ROC 커브는 FP 비율(FPR)에 대한 TP 비율 (TPR) 을 여러 Threshold로 조정하여 표로 그려서 표현한다.
TPR은 Recall 또는 탐지확률로 사용되고, FPR은 실패 확률로 볼 수 있다.
점 A,B,C와 C`는 아래의 서로 다른 TPR과 FPR을 가지고 그래프에 표현한 것이다.
점 (0, 0) - Positive 결과가 하나도 없는 경우.
점(1, 1) - FN과 TN의 결과는 하나도 없고, TP와 FP가 전부인 결과
따라서 최고의 예측 모델은 ROC공간의 (0, 1) 또는 왼쪽 위 방향에 있다면,
잘 예측하는 모델이라 생각할 수 있다.
특히, (0, 1) 좌표에 있다면, 정확도 100%라고 볼 수 있다(FN과 FP의 개수가 0)
어림짐작으로 (0, 0)과 (1, 1) 사이에 아무렇게나 기준선을 그었을 때,
선보다 왼쪽 상단은 성능이 좋고, 오른쪽 하단은 성능이 좋지 않다고 기준을 잡을 수 있다.
ROC커브의 매력 중 하나는 클래스(class) 분포에 민감하지 않다는 점이다.
테스트셋에서 긍정과 부정의 비율이 바뀌어도 ROC곡선은 변하지 않는다.
이러한 ROC커브의 특성을 클래스간에 꼬인 독립(class skew independence)이라고 한다.
이는 ROC에 사용되는 지표(metric) TPR및 FPR이
클래스 분산에 영향을 받는 accuracy, precision 등과 독립적인 수치이기 떄문이다.
앞서 어림짐작으로 기준선을 그었지만, 정밀하게 계산하자면, ROC커브 안에 찍은 점들은 어떻게 측정할 수 있을까?
다른 분류 임계점들을 참고하여 로지스틱 회귀 모델을 사용해 평가할 수 있지만, 비효율적이고,
이를 대체할 AUC 라는 효율적인 알고리즘이 존재한다.
ROC 커브는 분류기 성능의 2차원표현이었다.
분류기들을 비교하고자, ROC 퍼포먼스 수치를 모델의 예상 성능을 나타내는 단일 스칼라값으로 정리하여 보고싶을수 있는데,
이에대한 일반적 방법은 ROC곡선 아래 면적을 계산하는 것이고, 줄여서 AUC라고 한다.
AUC는 그림의 사각형 영역의 일부영역의 비율이기 때문에, 그 값은 항상 0~1.0
사이가 된다.
그렇지만, 어림짐작으로 (0, 0) 과 (1, 1) 사이의 대각선을 생성하기 때문에, 실제 분류기의 AUC 값은 0.5 미만이 나와야 한다.
위의 차트a 는 AUC를 A와 B로 표현한 것이다.
분류기 B는 더 큰 영역을 가지고 있으므로, 평균적으로 더 나은 퍼포먼스를 낸다고 해석할 수 있다.
차트b는 이진분류기 A와 스코어링 분류기 B의 AUC를 한 표로 나타낸 것이다.
차트a를 보면, 높은 AUC값을 가지는 분류기가 그렇지 못한 분류기보다
ROC공간의 특정 영역에서는 성능이 저하될 수도 있다는것을 확인할 수 있다.
A가 일부 영역에서는 더 좋은 성능을 보이지만, 분류기 B가 FP비율> 0.6일때를 제외하고는 일반적으로 A보다 성능이 낫다고 볼 수 있다.
이처럼 AUC는 예측에 대한 바람직한 기준이 필요할때 종종 사용된다.
AUC는 아래 2가지 이유로 바람직한 지표라고 생각할 수 있다.
2개 이상의 분류 클래스에서, 분류문제는 더욱 복잡해진다.
n개의 분류 클래스라면, 결과를 나타내는 차원은 N * N
행렬이 되며,
이 중 행렬의 중심 대각선으로 들어가는 값N개
는 정답을 표현하고,
나머지(N * N - N)개
는 오답의 개수를 표현하게 된다.
TP와 FP 구조를 대체할 수 있는 형태로 N개의 정답과 (N * N - N)개의 오답이라고 표현할 수 있다.
n개의 분류클래스를 다루는 한가지 방법은 n개의 서로 다른 ROC 그래프를 그려보는 것이다.
1개당 1개의 클래스를 중점으로 두고 말이다.
예를들어, 분류 클래스 중 C라는 클래스가 있다면,
ROC 그래프 i는 클래스 Ci를 Positive로 표시하고 나머지 모든 클래스를 Negative로 적용해서 분류 성능을 표시할 수 있다.
Pi = Ci
Ni = Union(Cj) for j≠i
Multi-Class AUC
실데이터에 대해 ML모델이 좋은 성능을 보여줄 것인지 확인해보는것이 이러한 평가 지표(evaluation metrics)의 궁극적인 목적이다.
accuracy, precision, recall 과 같은 지표는 균형 잡힌 데이터 집합을 가질때, 분류 모델을 평가하는 좋은 방법이지만,
데이터가 불균형하거나 분류 클래스간 차이가 있다면 ROC / AUC 와 같은 방법으로 모델의 성능을 평가할 수 있다.
우리가 살펴본 것처럼 ROC곡선은 단순한 숫자 표현이 아니고, 전체 곡선을 표현하면서 분류기의 동작에 대한 디테일을 확인할 수 있는 방법이다.
하지만, ROC 곡선만으로는 모델간 비교가 어렵기 때문에 AUC를 사용하여 ROC곡선을 단일 수치로 환산하여 쉽게 비교할 수 있게 해준다.
요약하면 좋은 모델의 ROC곡선은 면적이 넓고, 그렇지 못한 모델의 ROC는 면적이 거의 없게 표현된다.
마지막으로,이 글은 분류모델에 초점을 두고 가이드를 작성하였기 때문에,
각자의 도메인에 맞게 별도로 최적화 될 필요가 있다는 것을 중요하게 생각해야한다.
1) https://www.oreilly.com/library/view/evaluating-machine-learning/9781492048756/ch01.
2) https://www.datascience.com/blog/machine-learning-generalization
3) https://machinelearningmastery.com/classification-accuracy-is-not-enough-more-performance-measures-you-can-use/
4) https://en.wikipedia.org/wiki/Precision_and_recall
5) https://en.wikipedia.org/wiki/Confusion_matrix
6) https://developers.google.com/machine-learning/crash-course/classification/precision-and-recall
7) https://en.wikipedia.org/wiki/Harmonic_mean
8) https://www.medcalc.org/manual/roc-curves.php
9) https://people.inf.elte.hu/kiss/11dwhdm/roc.pdf