การจำแนกประเภท

Eval

การจำแนกประเภท

まとめ
  • สรุปตัวชี้วัดหลักสำหรับงานจำแนก และความต่างของ binary, multi-class, multi-label
  • มองภาพรวมตัวชี้วัดจาก confusion matrix, การปรับ threshold, ความน่าเชื่อถือของความน่าจะเป็น และ ranking
  • แนะแนวการเลือกชุดตัวชี้วัดและการรายงานผลให้สอดคล้องกับธุรกิจ

Chapter 3 #

ภาพรวมตัวชี้วัดการจำแนก #

การประเมินโมเดลจำแนกขึ้นอยู่กับสมดุลของคลาส การตั้ง threshold ความน่าเชื่อถือของความน่าจะเป็น และคุณภาพของอันดับบนสุด ในส่วนนี้เรารวบรวมกลุ่มตัวชี้วัดหลักและแนวทางเลือกใช้ตามงาน


หมวดของตัวชี้วัด #

1. กลุ่มที่อิง confusion matrix #

  • Accuracy (Accuracy): ความแม่นยำรวม แต่หลอกตาเมื่อข้อมูลไม่สมดุล
  • Precision / Recall / F1 (Precision-Recall, F1): เลือกตามต้นทุนของความผิดพลาด
  • Specificity / Sensitivity (Sensitivity/Specificity): สำคัญในงานแพทย์หรือคัดกรอง
  • Macro / Micro / Weighted averaging (Averaging strategies): วิธีรวมผลในงานหลายคลาส

2. การปรับ threshold และ ranking #

  • Precision-Recall curve / PR-AUC (PR): เหมาะเมื่อคลาสบวกมีน้อย
  • ROC curve / ROC-AUC (ROC-AUC): วัดความสามารถในการแยกคลาสโดยรวม
  • Top-k Accuracy / Hit Rate (Top-k Accuracy, Hit Rate): งานแนะนำหรือค้นหาที่ดูแค่ผลลัพธ์บนสุด

3. ความน่าจะเป็นและการคาลิเบรต #

  • Log Loss (Log Loss): ให้รางวัลกับความน่าจะเป็นที่แม่นยำ
  • Brier Score (Brier Score): ใช้คู่กับ calibration curve เพื่อตรวจความน่าเชื่อถือ
  • Calibration curves: เปรียบเทียบความน่าจะเป็นทำนายกับความถี่จริง

4. ตัวชี้วัดช่วยงานคลาสไม่สมดุล #

  • Balanced Accuracy (Balanced Accuracy): เฉลี่ย recall ต่อคลาส
  • Cohen’s Kappa / MCC (Cohen’s κ, MCC): ทนทานต่อความไม่สมดุล

การเปลี่ยนแปลงของตัวชี้วัดเมื่อปรับ threshold #

import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import precision_score, recall_score, f1_score
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

X, y = make_classification(
    n_samples=2000,
    n_features=12,
    n_informative=4,
    weights=[0.85, 0.15],
    random_state=42,
)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, stratify=y, random_state=42
)

scaler = StandardScaler()
model = LogisticRegression(max_iter=2000)
model.fit(scaler.fit_transform(X_train), y_train)

prob = model.predict_proba(scaler.transform(X_test))[:, 1]
thresholds = np.linspace(0.05, 0.95, 19)

precision, recall, f1 = [], [], []
for t in thresholds:
    y_pred = (prob >= t).astype(int)
    precision.append(precision_score(y_test, y_pred, zero_division=0))
    recall.append(recall_score(y_test, y_pred, zero_division=0))
    f1.append(f1_score(y_test, y_pred, zero_division=0))

fig, ax = plt.subplots(figsize=(6.8, 4))
ax.plot(thresholds, precision, label="Precision", color="#2563eb")
ax.plot(thresholds, recall, label="Recall", color="#dc2626")
ax.plot(thresholds, f1, label="F1", color="#0d9488")
ax.set_xlabel("Threshold")
ax.set_ylabel("Score")
ax.set_title("Effect of threshold on classification metrics")
ax.set_ylim(0, 1.05)
ax.grid(alpha=0.3)
ax.legend()
plt.tight_layout()
การเปลี่ยนแปลงของ Precision / Recall / F1 ตาม threshold

เมื่อ threshold ลดลง recall จะเพิ่มขึ้น แต่ precision จะลดลง สามารถเลือกจุดที่ F1 สูงสุดเป็นจุดสมดุลได้


ประเด็นสำหรับรายงานและการใช้งานจริง #

  1. แนบ confusion matrix เสมอ
    เห็นรูปแบบความผิดพลาดต่อคลาสชัดเจน
  2. อธิบายเหตุผลของ threshold
    ใช้ PR curve หรือกราฟ threshold-score ประกอบ
  3. ตรวจสอบการคาลิเบรตของความน่าจะเป็น
    หากใช้ความน่าจะเป็นในการตัดสินใจให้ดู Brier Score
  4. คำนึงถึงคลาสไม่สมดุล
    ใช้ Balanced Accuracy หรือ MCC ร่วมกับ Accuracy
  5. เฝ้าระวัง drift
    ติดตาม Precision/Recall, PR-AUC, ROC-AUC ตามเวลา

Quick reference #

มุมมองตัวชี้วัดหน้าที่เกี่ยวข้องหมายเหตุ
ความแม่นยำรวมAccuracy / Balanced AccuracyAccuracy / Balanced Accuracyคลาสไม่สมดุลควรรายงาน Balanced Accuracy
FP vs FNPrecision / Recall / FβPrecision-Recall / F1ใช้ร่วมกับการเลือก threshold
คุณภาพ rankingPR-AUC / ROC-AUC / Top-kPR curve / ROC-AUC / Top-k Accuracyเหมาะกับงานแนะนำและคลาสหายาก
การคาลิเบรตLog Loss / Brier ScoreLog Loss / Brier Scoreใช้เมื่อความน่าจะเป็นมีผลต่อการตัดสินใจ
ความทนทานMCC / Cohen’s κMCC / Cohen’s κเสถียรเมื่อคลาสไม่สมดุล

Checklist #

  • ใช้ตัวชี้วัดสำหรับคลาสไม่สมดุลร่วมกัน
  • อธิบายเหตุผลของ threshold (PR/ROC, ต้นทุน)
  • ตรวจสอบการคาลิเบรตของความน่าจะเป็น
  • เทียบการกระจายของข้อมูลระหว่าง valid กับ production
  • กำหนด metric หลักสำหรับการเปรียบเทียบในอนาคต