본문 바로가기
C.W.K.
Stream
Lesson 01 of 05 · published

Error Analysis

~28 min · errors, diagnostics

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

오류는 가장 값싼 다음 자료야

오류 분석은 모델이 틀린 실제 사례를 사람이 읽고 반복되는 실패 모양을 찾는 작업이야. 평균 지표는 모델이 얼마나 틀렸는지 말하지만 왜 틀렸고 무엇을 고칠지는 알려주지 않아. 매 학습 실행 뒤 대표 오류 50개를 펼쳐보는 습관은 무작정 초매개변수를 돌리는 몇 주보다 큰 향상을 줄 수 있어.

표본을 한쪽 오류에만 치우치지 마

분류에서는 거짓양성과 거짓음성을 따로 뽑고, 회귀에서는 큰 과대예측과 과소예측을 나눠 봐. 중요한 집단과 시간 구간도 포함하고 무작위 오류와 손실이 큰 오류를 섞어. 점수가 가장 나쁜 사례만 보면 데이터 오류와 극단치만 보이고 일상적인 반복 실패를 놓칠 수 있어.

재사용할 분류표를 만들어

  • 정답 오류: 실제 기준값이나 범주가 잘못 붙어 있어.
  • 본질적 애매함: 숙련된 검토자도 여러 답을 합리적으로 고를 수 있어.
  • 빠진 특성: 사람은 판단에 쓰지만 현재 자료에는 없는 정보가 필요해.
  • 분포 이동: 학습 자료에서 거의 보지 못한 새 기간, 집단, 형식이야.
  • 파이프라인 오류: 단위, 결측, 인코딩, 열 순서가 잘못 처리됐어.
  • 모델 오류: 정답과 입력은 정상인데 모델이 배울 수 있는 패턴을 놓쳤어.

애매함을 모델 실패로 세지 마

판정자끼리 의견이 갈리는 사례를 단일 정답으로 고정하면 모델이 그 잡음을 외우게 돼. 두 번째 검토자가 기존 답을 보지 않고 다시 판단하게 하고 불일치율을 재. 기준을 고칠 수 없다면 보류 범주, 사람 검토, 확률적 정답처럼 불확실성을 제품 흐름에 드러내야 해.

각 꼬리표는 다른 처방으로 이어져

정답 오류는 판정 체계로 돌려보내고 과거 자료도 같은 규칙으로 고쳐. 빠진 특성은 수집 가능성과 예측 시점 누출을 검토한 뒤 작업으로 만들어. 분포 이동은 자료 범위와 재학습 계획을, 파이프라인 오류는 자동 검사를 고쳐야 해. 정상 사례의 모델 오류가 큰 비중일 때 비로소 특성이나 모델 튜닝이 주된 처방이 돼.

빈도와 비용을 함께 계산해

오류 유형이 많다고 항상 먼저 고칠 대상은 아니야. 각 유형의 비율, 건당 피해, 고칠 수 있는 정도를 곱해 예상 효과를 비교해. 빈도 30%인 사소한 오류보다 빈도 2%인 치명적 누락이 먼저일 수 있어. 표본 수가 작다면 불확실성도 적고 다음 실행에서 다시 확인해.

오류 분류표를 버전 있는 자산으로 남겨

사례 식별자, 모델 점수, 실제값, 오류 꼬리표, 검토자, 결정한 행동을 저장해. 다음 모델에서 같은 사례가 해결됐는지 회귀 시험처럼 다시 돌릴 수 있어. 새로운 실패 유형이 생기면 분류표를 고치되 정의 변경 이력을 남겨야 시간에 따른 비율을 정직하게 비교할 수 있어.

Code

오류 유형별 층화 표본 추출·python
import numpy as np
import pandas as pd

preds = (probs >= 0.5).astype(int)
errors = X_val.assign(y_true=y_val.values, y_pred=preds, prob=probs)
errors = errors[errors["y_true"] != errors["y_pred"]]
fp = errors[errors["y_pred"] == 1].sample(min(25, len(errors)), random_state=7)
fn = errors[errors["y_pred"] == 0].sample(min(25, len(errors)), random_state=7)
review = pd.concat([fp, fn]).sample(frac=1, random_state=7)
review.to_csv("errors_to_review.csv", index=False)
하위 집단별 지표로 구조적인 오류 찾기·python
from sklearn.metrics import classification_report

for plan in df_val["plan_tier"].unique():
    mask = df_val["plan_tier"] == plan
    print(f"--- {plan} (n={mask.sum()}) ---")
    print(classification_report(y_val[mask], preds[mask], digits=3))

External links

Exercise

검증 자료에서 거짓양성·거짓음성 또는 과대·과소 오차를 섞어 50개를 뽑아. 정답 오류, 애매함, 빠진 특성, 분포 이동, 파이프라인 오류, 모델 오류로 나누고 빈도와 비용으로 기대 효과가 가장 큰 수정 하나를 골라.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.