정확도 하나로는 부족합니다
1000개 이메일 가운데 스팸은 10개입니다. 모두 정상이라고 답하는 모델도 정확도는 99%입니다. 하지만 스팸을 하나도 찾지 못합니다. 숫자가 높다고 해서 필요한 일을 잘하는 것은 아닙니다.
자료의 역할을 나눕니다
- 학습 자료: 평균, 모델의 가중치 등 학습에 필요한 값을 구합니다.
- 검증 자료: 이웃 수나 판단 기준 같은 설정을 고릅니다.
- 시험 자료: 선택을 마친 모델을 마지막으로 평가합니다.
같은 사람의 기록이 여러 개라면 사람 단위로 나누는 것이 필요할 수 있습니다. 미래를 예측할 때는 시간을 거꾸로 섞지 않아야 합니다. 실제 사용 상황과 비슷한 평가가 되어야 합니다.
어떤 오류가 중요한가
스팸을 양성으로 정하면, 진짜 스팸을 찾은 것은 TP, 정상을 스팸으로 잘못 표시한 것은 FP, 스팸을 놓친 것은 FN입니다.
true_positive, false_positive, false_negative = 6, 2, 4
precision = true_positive / (true_positive + false_positive)
recall = true_positive / (true_positive + false_negative)
print(precision)
print(recall)
정밀도는 0.75, 재현율은 0.6입니다. 정밀도는 ‘스팸이라고 표시한 것 중 맞은 비율’, 재현율은 ‘진짜 스팸 중 찾은 비율’입니다. 분모가 0인 경우에는 표시 규칙을 따로 정해야 합니다.
정상 메일을 가두는 비용과 스팸을 놓치는 비용은 다릅니다. 점수의 판단 기준을 바꾸면서 두 종류의 오류를 비교해야 합니다. 학습 성능만 좋고 검증 성능이 나쁘면 학습 자료에 지나치게 맞춘 과적합을 의심할 수 있습니다.
확인 문제
전체 자료의 평균으로 빈칸을 채운 뒤 학습 자료와 시험 자료를 나눠도 될까요?
해설 보기
시험 자료의 정보가 학습 과정으로 들어갑니다. 먼저 나누고 학습 자료에서만 평균을 구한 뒤 같은 평균으로 나머지를 처리해야 합니다. 이런 정보 유입을 데이터 누수라고 합니다. 전처리와 누수 예시를 참고하세요.