이진분류 모델의 평가지표로 정확도(accuracy)를 채택할 경우 정확도의 한계점을 인지해 둘 필요가 있다.
정확도는 분류 모델이 전체 데이터 중에서 몇 개나 실제값과 동일하게 예측했는가? 에 대한 비율에 해당한다.
어떤 게임에서 핵 사용자인지 아닌지 분류를 하는 모델을 만들었다고 했을 때 정확도 95%가 나왔다고 하자.
얼핏 생각하기에 이번 모델이 상당히 핵쟁이를 잘 구분해 낸다고 생각할 수 있겠지만 추가적인 확인이 필요하다.
만약 100명의 유저 중 실제 핵 유저가 단 5명만 존재할 경우 모델이 100명 모두 핵유저가 아니다라고 판별해도 정확도는 95%가 나온다. 핵 유저가 아닌 일반유저 95명에 대해서 핵 유저가 아니다 라고 잘 판별한 샘이 되기 때문이다. 결론적으로는 핵 유저를 하나도 찾지 못한 모델인 것이다.
우선 이러한 사태를 방지하기 위해서는 모델 학습에 사용될 데이터가 일반 유저 50% 핵 유저 50% 비율로 준비되는 것이 중요하며, 모델 학습 후 테스트에 사용될 데이터 또한 동일한 비율로 분류가 되어있어야 한다.
하지만 현실적으로 아무리 핵쟁이가 넘쳐난다 하더라도 전체 유저에서 차지하는 비율은 매우 낮을 것이다. 그렇게 되면 데이터 분포에 차이가 발생할 수 밖에 없기 때문에 또 다른 평가 지표를 활용해야 한다.
Precision, Recall
정밀도(precision)과 재현율(Recall)이라 불리는 두 친구는 참 헷깔리므로 정신 바짝 차리고 이해할 필요가 있다.
일반적으로 Confusion Matrix는 True, False, Positive, Negative 이 4가지의 단어가 서로 섞여서 TP, TN, FP, FN과 같은 단어로 표현되는데 도통 이해가기가 쉽지 않다. 그래서 나만의 방식으로 이해하기 쉽게 정리해 보았다.
True, False는 ‘잘 맞췄다.’, ‘잘못 맞췄다.’ 로 정하고, Positive, Negative는 쉽게 ‘1과 0으로 예상했다’ 라고 이해해보자. 그러면 TP(True Positive)와 FN(False Negative)은 어떻게 해석할 수 있을까?
TP - 1이라고 예상했는데 잘 맞췄다.
FN - 0이라고 예상했는데 잘못 맞췄다.
라고 해석할 수 있다.
여기서 잊지 말아야 할 점은
‘~이라고 예상했는데’ 바로 이 부분을 꼭 기억해야 나중에 혼돈이 다시 발생하지 않는다는 점
T, F는 맞춤, 못맞춤, P, N은 1로 예상함, 0으로 예상함을 의미하는 점
T, F는 항상 앞에 있고, P, N은 항상 뒤에 자리한다는 점이다.
더 풀어서 해석해보면
TP는 ‘정답이 1(P)이라 생각했는데 맞았어(T)’가 되고,
FN은 ‘정답이 0(N)라 생각했는데 틀렸어(F) 정답은 1이었어' 가 된다.
위 내용이 이해되었다면 여기서부터는 다시 숫자 혼동 방지를 위해 P는 참, N을 거짓이라고 하겠다.
그럼 이제 Confusion Matrix 기반의 또 다른 지표인 정밀도와 재현율을 이해해 보자.
정밀도
모델이 Positive라고 예측한 모든 데이터 중 진짜로 Positive였던 데이터의 비율을 말한다.
더 쉽게 풀어서 말하자면 참으로 예측
한 것들 중에 진짜 참
이었던 것들에 대한 비율이다.
식으로 쓰게 되면 TP / (TP + FP)로 표현할 수 있지만 개인적으로 이게 더 헷깔린다.
예를 들어 모델이 10개의 데이터 중 3개를 참이라고 답했는데 그 중에서 진짜로 참인 데이터가 2개라고 한다면 2/3 비율로 진짜 참을 참이라고 예측했다는 의미다.
그러면 모델이 66% 확률로 참을 구분해냈다고 말하고 싶을 것이다. 아쉽지만 그러면 안된다.
정밀도의 분모가 ‘참이라고 예측
한 모든 데이터'임을 다시 생각해보자. 정밀도라는 지표는 ‘예측값 참’ 이라는 세상에 갖혀 있다. 이 갖힌 세상 속에서 진짜값이 참인 데이터는 모두 2개겠지만 이 세상을 부수고 나왔을 때도 진짜값이 참인 데이터는 2개 밖에 없을까?
전체 데이터에서 진짜값이 참인 데이터가 4개일 수도 있다. 그렇게 되면 데이터 전체의 시각에서 볼 때 정밀도는 데이터 2개를 놓친 것이 된다. 즉 정밀도 만으로 모델 평가를 내리기에는 문제가 있어 보인다.
재현율
실제 Positive인 데이터 중 Positive라고 예측한 데이터의 비율을 말한다.
더 쉽게 풀어서 말하자면 진짜 참인 것들 중에 참이라고 잘 맞춘 것들에 대한 비율이다.
식으로 쓰게 되면 TP / (TP + FN)로 표현할 수 있지만 이것도 헷깔리긴 마찬가지다.
이제는 이해를 위해 표가 필요하다.
예상 | 실제 |
---|---|
1 | 1 |
0 | 0 |
0 | 1 |
0 | 0 |
1 | 1 |
0 | 0 |
0 | 0 |
0 | 1 |
0 | 0 |
1 | 0 |
전체 데이터에서 진짜 참인 데이터는 4개인데 그 중에 참으로 예상한 데이터는 2개로 재현율은 2/4가 된다.
정밀도가 2/3였던 것과는 또다른 면모를 보여주고 있다. 그렇다면 대체 이 둘을 가지고 어쩌란 말인가??
Precision, Recall Trade off
정밀도와 재현율은 어느정도 Trade off 관계에 놓여있기 때문에 모델의 목적에 따라 저울질을 해야 한다. 즉 모델링 프로젝트의 취지에 따라 재현율을 높이는 게 더 좋을 수도 있고, 정밀도를 높이는게 더 좋을 수도 있다. 그러면 그 조정은 어떻게 하는 걸까?
여기서 등장해야 하는 개념이 바로 Threshold이다. 트레숄드는 우리가 익히 알고 있는 로지스틱 회귀에서 쓰던 시그모이드 함수의 0.5 지점(구분점)을 말한다.
만약 로지스틱 회귀에서 참 거짓의 구분점을 0.9로 설정히면 어떻게 될까? 어지간해서는 다 거짓이라고 판별할 것이다. 즉 참이 되는 조건이 상당히 엄격해진다. 이러한 트레숄드값의 변화는 모델이 추구하는 바에 따라 값을 조정해줄 필요가 있다.
우리가 핵쟁이 구분 모델을 만든다고 생각하며 위 내용을 이해해보자
최근 게임 내 핵쟁이가 증가하면서 일반 유저가 감소하고, 매출도 함께 감소하는 바람에 회사 분위기가 똥이다. 그래서 핵쟁이를 감지해서 계정 정지 먹이는 모델을 만들기로 결심했다. 이번 프로젝트의 목표는 핵쟁이 완전 근절이다. 즉 재현율이 높은 모델을 만들어야 한다.
모델 완성 후 적용했더니 핵쟁이가 싹 사라졌다. 그런데 이제는 자신이 일반 유저인데 정지먹었다는 항의전화가 빗발치기 시작했다. 핵쟁이 구분 기준이 너무 느슨했던 걸까? 정밀도를 구해봤더니 핵쟁이로 예상한 데이터의 40% 가량이 사실은 일반 유저로 밝혀졌다. 모델이 조금만 의심스러우면 바로 핵쟁이로 구분해버렸던 것이다.
이제 구분 기준(Threshold)을 좀 더 높여서 누가봐도 핵쟁이라 단정지을 수 있는 명백한 조건을 달성한 경우에 핵쟁이로 구분하도록 모델을 수정했다. 이제 항의 전화는 줄어들었다. 하지만 핵 판정 기준이 높아진 만큼 핵쟁이가 다시 등장하기 시작했다.
이런 이유로 핵쟁이로 인한 매출 손실에 대한 대응과 문의전화 폭주로 인한 응대 비용 증가 중 어디에 더 집중하는 것이 좋을지는 상황에 따른 Trade off가 필요하다.
#Accuracy #Precision #Recall
'데이터사이언스 이론 공부' 카테고리의 다른 글
MAP(Maximum A Posterior) 에 대한 이해 (0) | 2022.09.08 |
---|---|
GitHub 실전 예시를 통해 실무 활용법을 파악해두자 (0) | 2022.09.06 |
피처 정규화 (Feature Normalization) (0) | 2022.09.02 |
머신러닝의 모델 평가 방법 (0) | 2022.08.30 |
MLE 에 대한 정리 (0) | 2022.08.12 |