4. 분류 모델 평가하기
- 예측 모델링에서, 수많은 모델을 시도해보고 각각에 홀드아웃 표본(시험표본 혹은 타당성검사 표본이라고도 부른다)을 적용하고 성능을 평가하는 것은 아주 일반적이다.
용어 | 의미 |
정확도(accuracy) | 정확히 분류된 비율 |
혼동행렬(confusion matrix) | 분류에서 예측된결과와 실제 결과에 대한 레코드의 개수를 표시한 테이블(이진형인 경우 2x2) |
민감도(sensitivity) | 정확히 분류된 1의 비율(유의어 : 재현율) |
특이도(specificity) | 정확히 분류된 0의 비율 |
정밀도(precision) | 정확히 1이라고 예측된 1을 비율 |
ROC 곡선(ROC curve) | 민감도와 특이성을 표시한 그림 |
리프트(lift) | 모델이 다른 확률 컷오프에 대해 (비교적 드문) 1을 얼마나 더 효과적으로 구분하지 나타내는 측정 지표 |
- 분류 성능을 측정하는 가장 간단한 방법은 정확히 예측한 것들의 비율이 얼마인지 보는 것이다.
$정확도 = \frac{\sum참양성 + \sum참음성}{표본크기}$
1) 혼동행렬
- 분류 결과를 나타내는 가장 대표적인 행렬이다.
이진 응답변수에 대한 혼동행렬과 그에 관련된 다른 지표들 |
||||
예측 응답변수 | ||||
$\hat{y}=1$ | $\hat{y}=0$ | |||
실제 응답변수 |
$y=1$ | 참 양성 (TP) |
거짓 음성 (FN) |
재현율(민감도) TP / $y=1$ |
$y=0$ | 거짓 양성 (FP) |
참 음성 (TN) |
특이도 FP / $y=0$ |
|
유별율 $(y=1)$ / 총 개수 |
정밀도 TP/($\hat{y}=1$) |
정확도 (TP+TN) / 총 개수 |
2) 정밀도, 재현율, 특이도
- 정밀도란, 예측된 양성 결과의 정확도를 의미한다.
$정밀도 = \frac{참 양성}{\sum참양성+\sum거짓양성}$
- 재현율(recall)은 민감도라고 부르기도 하는데, 양성 결과를 예측하는 모델의 능력을 평가한다.
$재현율 = \frac{참 양성}{\sum참양성+\sum거짓음성}$
- 특이도는 음성 결과를 정확히 예측하는 능력을 측정한다.
$특이도 = \frac{참음성}{\sum참음성+\sum거짓양성}$
3) ROC 곡선
- 재현율과 특이도 사이에는 트레이트오프 관계(시소 관계)가 있다. 1을 잘 잡아낸다는 것은 그만큼 0을 1로 잘못 예측할 가능성도 높아지는 것을 의미한다.
- 이러한 트레이트오프 관계를 표현하기 위한 지표가 바로'수신자 조작 특성(receiver operating characteristic)'곡선, 줄여서 ROC 곡선이다.
- ROC 곡선은 x축의 특이도에 대한 y축의 재현율(민감도)을 표시한다.
4) AUC
- ROC 곡선 자체로는 아주 훌륭한 시각화 도구이지만, 분류기 성능을 나타내는 어떤 하나의 값을 주지는 않는다.
- 곡선 아래 면적(AUC; area underneath the curve)은 간단히 말해 ROC 곡선의 아래쪽 면적을 의미한다.
- AUC 값이 높을수록, 더 좋은 분류기이다.
- AUC가 1이라는 것은 0을 1로 잘못 예측하는 경우 없이, 1을 정확히 분류하는 완벽한 분류기를 의미한다.
- 최악의 분류기는 ROC 곡선이 가운데를 지나가는 직선인 경우, 즉 AUC가 0.5인 경우이다.
5) 리프트
- 무작위로 선택했을 때, 0.1%의 정확도를 얻은 반면, 상위 10%에서 0.3%의 결과를 얻었다면, 이 알고리즘은 상위 10%에서 3의 리프트(다른 표현으로 이득)를 갖는다고 할 수 있다.
- 리프트 차트를 계산하려면 먼저 y축에 재현율을 그리고 x축에 총 레코드 수를 나타내는 누적 이득 차트(cumulative gains chart)를 작성해야 한다.
- 리프트 곡선(lift curve)은 랜덤 선택을 의미하는 대각선에 대한 누적이득의 비율을 말한다.
- 리프트 곡선은 레코드를 1로 분류하기 위한 확률 컷오프 값에 따른 결과의 변화를 한눈에 볼 수 있게 해준다.
- 정확도(예측한 분류 결과가 몇 퍼센트 정확한지)는 모델을 평가하는 가장 기본적인 단계이다.
- 다른 평가 지표들(재현율, 특이도, 정밀도)은 좀 더 세부적인 성능 특성들을 나타낸다(예를 들면 재현율은 모델이 1을 얼마나 정확히 분류하는지를 나타낸다).
- AUC(ROC 곡선 아래 면적)는 모델의 1과 0을 구분하는 능력을 보여주기 위해 가장 보편적으로 사용되는 지표이다.
- 이와 비슷하게, 리프트는 모델이 1을 얼마나 효과적으로 분류해내는지를 측정한다. 가장 1로 분류될 가능성이 높은 것부터 매 십분위마다 이를 계산한다.
5. 불균형 데이터 다루기
용어 | 의미 |
과소표본(undersample) | 분류 모델에서 개수가 많은 클래스 데이터 중 일부 소수만 사용하는 것 |
과잉표본(oversample) | 분류 모델에서 희귀 클래스 데이터를 중복해서, 필요하면 부트스트랩 해서 사용하는 것 |
상향 가중치(up weight) 혹은 하향 가중치(down weight) |
모델에서 희귀(혹은 다수) 클래스에 높은(혹은 낮은) 가중치를 주는 것 |
데이터 생성(data generation) | 부트스트랩과 비슷하게 다시 샘플링한 레코드를 빼고 원래 원본과 살짝 다르게 데이터를 생성하는 것 |
z 점수(z-score) | 표준화 결과 |
K | 최근접 이웃 알고리즘에서 이웃들의 개수 |
1) 과소표본추출
- 데이터 개수가 충분하다면, 다수의 데이터에 해당하는 클래스에서 과소표본추출(다운샘플링)을 해서 모델링할 때 0과 1의 데이터 개수에 균형을 맞출 수 있다.
- 기본 아이디어는 다수의 클래스에 속한 데이터들 중에 중복된 레코드들이 많을 것이라는 사실에서 출발한다.
2) 과잉표본추출과 상향/하향 가중치
- 과소표본 방식의 약점으로 지적받는 부분은 일부 데이터가 버려지기 때문에 모든 정보를 활용하지 못한다는 점이다.
- 이럴 경우, 다수 클래스를 과소표본추출하는 대산, 복원추출 방식(부트스트래핑)으로 희귀 클래스의 데이터를 과잉표본추출(업샘플링)해야 한다.
- 데이터에 가중치를 적용하는 방식으로 이와 비슷한 효과를 얻을 수 있다.
※ 손실함수
- 많은 분류 혹은 회귀 알고리즘은, 어떤 기준 혹은 손실 함수(loss function)를 최적화한다고 볼 수 있다.
- 분류 알고리즘의 손실 함수를 직접적으로 수정하는 것은 복잡하고 어렵다.
- 반면에 가중치를 사용하는 방법은 가중치가 높은 데이터를 선호하고 가중치가 낮은 데이터의 오류를 줄여주는 식으로 손실 함수를 변경하는 것은 쉬운 방법이다.
3) 데이터 생성
- 부트스트랩을 통한 업샘플링 방식의 변형으로 기존에 존재하는 데이터를 살짝 바꿔 새로운 레코드를 만드는 데이터 생성 방법이 있다.
- 데이터의 개수가 제한적이기 때문에 알고리즘을 통해 분류 '규칙'을 세우기에는 정보가 충분하지 않다는 직관이 바탕에 깔려 있다.
- 통계에서 부스팅이나 배깅 같은 앙상블에 담겨 있는 개념과 매우 비슷하다.
※ SMOTE 알고리즘
- 합성 소수 과잉표본 기법(Synthetic Minority Oversampling Technique) 알고리즘은 업샘플링된 레코드와 비슷한 레코드를 찾고, 원래 레코드와 이웃 레코드의 랜덤 가중평균으로 새로운 합성 레코드를 만든다.
- 데이터의 심각한 불균형(즉, 관심 있는 결과의 데이터가 희박할 때)은 분류 알고리즘에서 문제가 될 수 있다.
- 한 방법은 다수의 데이터를 다운샘플링하거나 희귀한 데이터를 업샘플링해서 학습 데이터의 균형을 맞추는 것이다.
- 갖고 있는 1의 데이터를 모두 사용해도 그 개수가 너무 적을 때는, 희귀한 데이터에 대해 부트스트랩 방식을 사용하거나 기존의 데이터와 유사한 합성 데이터를 만들기 위해 SMOTE를 사용한다.
- 데이터에 불균형이 존재할 경우 보통은 어느 한쪽(1의 클래스)을 정확히 분류하는 것에 더 높은 점수를 주게 되어 있고, 이러한 가치 비율이 평가 지표에 반영되어야 한다.
<참고자료>
1. Peter Brucs & Andrew Brucs(2018). 데이터 과학을 위한 통계. 한빛미디어. 이용준 옮김.
2. ROC curve, Wikipedia (ROC curve)
3. Lift Chart (Lift Chart)
'공부 > 데이터 과학을 위한 통계(한빛미디어)' 카테고리의 다른 글
16. 통계적 머신러닝(2) (0) | 2021.01.11 |
---|---|
15. 통계적 머신러닝(1) (0) | 2021.01.07 |
13. 분류(1) (0) | 2021.01.01 |
12. 회귀와 예측(2) (0) | 2020.12.31 |
11. 회귀와 예측(1) (0) | 2020.10.25 |