분석모형 평가
혼동행렬 지표 계산, ROC·AUC와 향상도 곡선, 회귀·군집 평가지표, 교차검증 기법을 다룹니다.
혼동행렬(Confusion Matrix)
| 예측 Positive | 예측 Negative | |
|---|---|---|
| 실제 Positive | TP (True Positive) | FN (False Negative) |
| 실제 Negative | FP (False Positive) | TN (True Negative) |
이름 읽는 법: 앞 글자(T/F)는 예측이 맞았는가, 뒷 글자(P/N)는 모형이 무엇이라고 예측했는가입니다. 그래서 FN은 "Negative라고 예측했는데 틀림 = 실제는 Positive"입니다.
- FP = 1종 오류(귀무가설이 참인데 기각) — 헛경보
- FN = 2종 오류(귀무가설이 거짓인데 채택) — 놓침
지표 공식과 계산
아래 혼동행렬로 전부 계산해 봅니다. TP = 40, FN = 10, FP = 20, TN = 30(총 100건).
| 지표 | 공식 | 계산 |
|---|---|---|
| 정확도(Accuracy) | (TP + TN) / 전체 | (40 + 30) / 100 = 0.70 |
| 오차비율(Error rate) | (FP + FN) / 전체 = 1 − 정확도 | (20 + 10) / 100 = 0.30 |
| 정밀도(Precision) | TP / (TP + FP) | 40 / (40 + 20) = 40/60 ≈ 0.667 |
| 재현율(Recall) = 민감도(Sensitivity) = TPR | TP / (TP + FN) | 40 / (40 + 10) = 40/50 = 0.80 |
| 특이도(Specificity) = TNR | TN / (TN + FP) | 30 / (30 + 20) = 30/50 = 0.60 |
| 거짓긍정률(FPR) | FP / (FP + TN) = 1 − 특이도 | 20 / 50 = 0.40 |
| F1 점수 | 2 × (정밀도 × 재현율) / (정밀도 + 재현율) | 2 × (0.667 × 0.80) / (0.667 + 0.80) = 16/22 ≈ 0.727 |
가장 자주 틀리는 지점 — 정밀도와 재현율의 분모. 분자는 둘 다 TP로 같습니다. 다른 건 분모에 무엇을 더하느냐뿐입니다. 정밀도는 P끼리(TP + FP) = 예측한 것 중에서, 재현율은 실제 Positive 행(TP + FN) = 실제인 것 중에서. 한 문장으로: "정밀도는 세로(예측 열), 재현율은 가로(실제 행)".
민감도와 특이도. 민감도는 실제 Positive를 얼마나 잡아냈나(= 재현율과 완전히 같은 값), 특이도는 실제 Negative를 얼마나 정상으로 봤나입니다. "특이도 = TN / (TN + FN)"은 오답입니다.
F1은 산술평균이 아니라 조화평균입니다. 위 예에서 산술평균은 0.733이지만 F1은 0.727로 더 작습니다. 조화평균은 두 값 중 작은 쪽에 끌려가므로, 한쪽만 높은 모형을 걸러냅니다.
카파(Kappa) 통계량 = (Pr(a) − Pr(e)) / (1 − Pr(e)). 우연히 맞을 확률을 보정한 정확도이며 0 ~ 1 값을 갖고 1에 가까울수록 좋습니다.
불균형 데이터에서 정확도는 무의미합니다. 99%가 정상인 데이터에서 전부 "정상"이라 찍으면 정확도 99%지만 재현율은 0입니다. 이때는 F1, AUC, 재현율을 봐야 합니다.
ROC 곡선과 AUC
| 축 | 지표 |
|---|---|
| x축 | FPR = 1 − 특이도 (거짓긍정률) |
| y축 | TPR = 민감도 = 재현율 |
분류 임계값(threshold)을 1에서 0으로 낮추며 (FPR, TPR) 점을 이은 곡선입니다. 좌측 상단(0, 1)에 가까울수록 좋은 모형입니다.
AUC는 ROC 곡선 아래 면적으로 0.5 ~ 1 사이의 값입니다.
| AUC | 판정 |
|---|---|
| 0.9 ~ 1.0 | excellent (뛰어남) |
| 0.8 ~ 0.9 | good (우수) |
| 0.7 ~ 0.8 | fair (보통) |
| 0.6 ~ 0.7 | poor (불량) |
| 0.5 ~ 0.6 | fail (판별 없음) |
축을 뒤집어 놓은 선택지가 단골입니다. x축은 특이도가 아니라 1 − 특이도입니다. 그리고 AUC = 0.5는 대각선, 즉 무작위 추측 수준입니다. AUC의 최솟값이 0이라는 선택지도 오답입니다(실무적으로 0.5 미만이면 예측을 뒤집으면 됩니다).
향상도 곡선(Lift Chart)과 이익도표
예측 확률이 높은 순으로 정렬해 10등분(십분위)한 뒤, 각 구간의 반응률을 봅니다.
향상도(Lift) = 해당 구간의 반응률 / 전체 평균 반응률
계산 예. 전체 반응률이 5%인데 상위 10% 집단의 반응률이 25%라면 향상도 = 25% / 5% = 5배
- 랜덤 모델의 향상도는 항상 1이며 그래프에서 수평선으로 나타납니다.
- 좋은 모형일수록 상위 구간의 향상도가 크고, 곡선이 가파르게 감소합니다.
- 이익도표(gain chart) 는 누적 반응 비율을 그린 것으로, 좋은 모형일수록 좌상단으로 볼록합니다.
회귀 모형 평가지표
실제값과 예측값이 아래와 같을 때 전부 계산해 봅니다.
| 실제 y | 예측 ŷ | 오차 (y − ŷ) | 오차² | 절대오차 |
|---|---|---|---|---|
| 10 | 12 | −2 | 4 | 2 |
| 20 | 18 | +2 | 4 | 2 |
| 30 | 33 | −3 | 9 | 3 |
| 40 | 36 | +4 | 16 | 4 |
| 합 33 | 합 11 |
| 지표 | 공식 | 계산 |
|---|---|---|
| SSE | Σ(y − ŷ)² | 33 |
| MSE | SSE / n | 33 / 4 = 8.25 |
| RMSE | √MSE | √8.25 ≈ 2.87 |
| MAE | (절대오차의 합) / n | 11 / 4 = 2.75 |
| MAPE | (오차 / 실제값의 절댓값을 평균) × 100 | (0.2 + 0.1 + 0.1 + 0.1)/4 × 100 = 12.5% |
| 결정계수 R² | 1 − SSE / SST | 1 − 33 / 500 = 0.934 |
(SST = Σ(y − ȳ)², ȳ = 25이므로 225 + 25 + 25 + 225 = 500)
| 관계 | 내용 |
|---|---|
| SST = SSR + SSE | 총변동 = 회귀로 설명된 변동 + 설명 못 한 변동 |
| R² = SSR / SST | 0 ~ 1, 클수록 좋음 |
| 수정된 R² | 변수 수 증가에 페널티. 변수를 늘리면 R²는 무조건 오르지만 수정 R²는 내려갈 수 있음 |
RMSE·MAE·MSE·MAPE는 작을수록 좋고, R²는 클수록 좋습니다. 방향을 섞어 놓은 선택지에 주의합니다. MAE는 이상치에 덜 민감하고, MSE·RMSE는 오차를 제곱하므로 이상치에 크게 반응합니다. RMSE는 원래 데이터와 단위가 같아 해석이 쉽고, MAPE는 백분율이라 단위가 다른 모형끼리 비교할 수 있지만 실제값이 0이면 계산할 수 없습니다.
군집 모형 평가
| 지표 | 정의 | 방향 |
|---|---|---|
| 실루엣 계수 | (b − a) / max(a, b). a = 같은 군집 내 평균거리, b = 가장 가까운 다른 군집까지의 평균거리 | −1 ~ 1, 1에 가까울수록 좋음 (0.5 이상이면 타당) |
| Dunn 지수 | 군집 간 최소거리 / 군집 내 최대거리 | 클수록 좋음 |
| 엘보우(Elbow) | 군집 수에 따른 SSE(군집내 제곱합) 감소가 꺾이는 지점 | 적정 k 선택 |
실루엣 계수가 0에 가까우면 두 군집의 경계에 걸쳐 있다는 뜻이고, 음수면 잘못된 군집에 배정되었다는 뜻입니다. Dunn 지수는 "분자는 밖(멀수록 좋음), 분모는 안(가까울수록 좋음)"으로 기억합니다.
교차검증(Cross Validation)
| 기법 | 방식 | 특징 |
|---|---|---|
| 홀드아웃(Holdout) | 훈련/검증(/평가)으로 한 번 분할 (보통 7:3) | 간단하지만 분할 운에 따라 결과가 흔들림 |
| k-겹 교차검증(k-fold) | k개로 나눠 k − 1개로 학습, 1개로 검증을 k번 반복해 평균 | 가장 널리 쓰임. 모든 데이터가 검증에 한 번씩 쓰임 |
| LOOCV | 관측치 하나만 검증, 나머지 전부 학습 → n번 반복 | k = n인 특수한 k-fold. 데이터가 매우 적을 때, 계산비용 큼 |
| LpOCV | p개를 남기고 학습 | 조합 수가 커서 실무 사용 적음 |
| 부트스트랩(Bootstrap) | 복원추출로 n개를 뽑아 훈련, 안 뽑힌 것으로 검증 | 중복 허용, 소표본에 유리 |
| 층화 k-겹(Stratified) | 각 fold의 클래스 비율을 원본과 동일하게 유지 | 불균형 데이터에 필수 |
부트스트랩에서 한 관측치가 한 번도 뽑히지 않을 확률은 약 36.8%((1 − 1/n)ⁿ → e⁻¹)이고, 훈련 데이터에 포함될 확률은 약 63.2% 입니다. 뽑히지 않은 것이 OOB(Out-Of-Bag) 표본이며 검증에 씁니다. 이 숫자는 그대로 출제됩니다.
k-fold에서 k가 커질수록 학습 데이터는 많아져 편향은 줄지만 분산은 커지고 계산량이 늘어납니다. 통상 k = 5 또는 10을 씁니다.
모수 유의성과 적합도 검정
| 대상 | 검정 |
|---|---|
| 회귀모형 전체 | F 검정 (분산분석) |
| 회귀계수 개별 | t 검정 |
| 잔차 정규성 | 샤피로-윌크, 콜모고로프-스미르노프, Q-Q plot |
| 잔차 독립성 | 더빈-왓슨 (0~4, 2 근처면 자기상관 없음) |
| 잔차 등분산성 | 잔차 산점도, Breusch-Pagan |
| 범주형 적합도 | 카이제곱 검정 |
| 다중공선성 | VIF (보통 10 이상이면 의심) |