Skip to main content

Classification Advanced: Metrics & ROC Curves

Overview​

Beyond accuracy and basic metrics, advanced classification evaluation uses curves and thresholds to understand true model performance.

Core Concepts:
• Decision threshold: Where to draw the line (0.5 is default)
• ROC Curve: Shows all possible threshold tradeoffs
• AUC: Area under ROC curve (single number summary)
• Precision-Recall: Better for imbalanced datasets
• Multi-class extension: Per-class and averaged metrics

Part 1: Decision Threshold​

What is a Decision Threshold?​

Logistic Regression outputs: P(y=1) between 0 and 1

Default rule:
If P(y=1) ≥ 0.5 → Predict class 1 (positive)
If P(y=1) < 0.5 → Predict class 0 (negative)

But 0.5 is arbitrary!
We can adjust the threshold for different tradeoffs.

Example: Email Spam Detection​

Logistic model outputs probabilities:

Email 1: P(spam) = 0.92 → Predict SPAM (if threshold = 0.5)
Email 2: P(spam) = 0.48 → Predict HAM (if threshold = 0.5)
Email 3: P(spam) = 0.55 → Predict SPAM (if threshold = 0.5)

With threshold = 0.5:
All three predictions clear-cut

What if threshold = 0.6?
Email 1: P(spam) = 0.92 ≥ 0.6 → Still SPAM
Email 2: P(spam) = 0.48 < 0.6 → Still HAM
Email 3: P(spam) = 0.55 < 0.6 → Now HAM! (changed!)

What if threshold = 0.3?
Email 1: P(spam) = 0.92 ≥ 0.3 → Still SPAM
Email 2: P(spam) = 0.48 ≥ 0.3 → Now SPAM! (changed!)
Email 3: P(spam) = 0.55 ≥ 0.3 → Still SPAM

Impact on Metrics​

Threshold = 0.3 (Low - catch more spam):
✓ Higher recall (fewer false negatives)
✗ Lower precision (more false positives)

Threshold = 0.5 (Default):
✓ Balanced between precision and recall

Threshold = 0.7 (High - be strict):
✗ Lower recall (miss more spam)
✓ Higher precision (fewer false alarms)

Part 2: ROC Curve (Receiver Operating Characteristic)​

What is ROC Curve?​

ROC Curve plots model performance at ALL possible thresholds.

X-axis: False Positive Rate (FPR)
Y-axis: True Positive Rate (TPR / Recall)

Formula:
TPR = TP / (TP + FN) = Recall
FPR = FP / (FP + TN) = Specificity complement

Building a ROC Curve: Step by Step​

Data: 10 emails (5 spam, 5 ham)

Model outputs probabilities:
Email Actual P(spam)
1 Spam 0.95
2 Ham 0.1
3 Spam 0.85
4 Spam 0.7
5 Ham 0.3
6 Spam 0.65
7 Ham 0.15
8 Spam 0.55
9 Ham 0.4
10 Ham 0.05

Sort by probability (descending):
Rank Email Actual P(spam) TP FN FP TN TPR FPR
─────────────────────────────────────────────────────────
Start 0 5 0 5 0.0 0.0
1 1 Spam 0.95 1 4 0 5 0.20 0.0
2 3 Spam 0.85 2 3 0 5 0.40 0.0
3 4 Spam 0.7 3 2 0 5 0.60 0.0
4 6 Spam 0.65 4 1 0 5 0.80 0.0
5 8 Spam 0.55 5 0 0 5 1.00 0.0
6 9 Ham 0.4 5 0 1 4 1.00 0.20
7 5 Ham 0.3 5 0 2 3 1.00 0.40
8 7 Ham 0.15 5 0 3 2 1.00 0.60
9 2 Ham 0.1 5 0 4 1 1.00 0.80
10 10 Ham 0.05 5 0 5 0 1.00 1.00

ROC Curve Points​

Plot points (FPR, TPR):

Threshold Point
─────────────────────
∞ (none) (0.0, 0.0) - Predict all as 0
0.95 (0.0, 0.2)
0.85 (0.0, 0.4)
0.70 (0.0, 0.6)
0.65 (0.0, 0.8)
0.55 (0.0, 1.0) - All spam caught
0.40 (0.2, 1.0) - 1 false positive
0.30 (0.4, 1.0) - 2 false positives
0.15 (0.6, 1.0) - 3 false positives
0.10 (0.8, 1.0) - 4 false positives
0.05 (1.0, 1.0) - Predict all as 1
-∞ (all) (1.0, 1.0) - All predicted as 1

ROC Curve visual:
TPR
1.0├─────────────●
│ ╱│
0.8├────────● │ ●
│ ╱ │╱
0.6├──────● ─ ─ ─ Random classifier
│ ╱ │ (diagonal line)
0.4├────● │
│ ╱ │
0.2├─●─────────●
│ │
0.0├────────────┴─→ FPR
0.0 0.2 0.4 0.6 0.8 1.0

Good model: Curve bends to top-left
Random model: Diagonal line

ROC-AUC (Area Under Curve)​

AUC = Area under ROC curve

Interpretation:

AUC = 1.0: Perfect classification
Curve reaches top-left corner
All positives ranked before negatives

AUC = 0.5: Random guessing
Diagonal line
Model has no discriminative power

AUC = 0.0: Worst possible
Curve reaches bottom-right corner
Predictions inverted

Scale:
0.9-1.0: Excellent
0.8-0.9: Good
0.7-0.8: Fair
0.6-0.7: Poor
0.5-0.6: Very Poor
0.5: Random

Calculating AUC​

Method 1: Trapezoid rule
Approximate area under curve by summing trapezoids

Method 2: Mann-Whitney U statistic
AUC = P(positive_score > negative_score)

For our example:
Positive scores: [0.95, 0.85, 0.7, 0.65, 0.55]
Negative scores: [0.1, 0.3, 0.15, 0.4, 0.05]

Compare every positive vs every negative
Positive > Negative: 5×5 = 25 comparisons
Positive > Negative count: 25 (all positive scores > all negative)

AUC = 25 / 25 = 1.0 (perfect!)

Part 3: Worked Example - ROC Curve with Real Data​

Problem: Medical Diagnosis​

Dataset: 50 patients (20 diseased, 30 healthy)

ML model outputs disease probability for each patient:

Patient Actual_Disease P(Disease)
1 Yes 0.95
2 No 0.05
3 Yes 0.92
4 No 0.08
5 Yes 0.88
...
(simplified - showing key points)

Step 1: Sort by Probability​

Rank by P(Disease) descending:

Threshold Actual P(Disease) TP FN FP TN TPR FPR
────────────────────────────────────────────────────────────
∞ - - 0 20 0 30 0.00 0.00
0.95 Yes 0.95 1 19 0 30 0.05 0.00
0.92 Yes 0.92 2 18 0 30 0.10 0.00
0.88 Yes 0.88 3 17 0 30 0.15 0.00
...
0.40 No 0.40 15 5 2 28 0.75 0.07
...
0.05 No 0.05 19 1 8 22 0.95 0.27
-∞ - - 20 0 30 0 1.00 1.00

Step 2: Plot ROC Curve​

Plot all (FPR, TPR) points:

TPR
1.0 ├─────────────●
│ ╱│
0.75├────────● │
│ ╱ ╲ │
0.50├───● ╲ │ Good model
│ ╱ ╲│ (area substantial)
0.25├●───────────●
│ │
0.0 ├────────────┴─→ FPR
0.0 0.25 0.5 0.75 1.0

Key points:
(0.0, 0.05): Very high threshold (catch very few)
(0.0, 0.50): High threshold (moderate catch)
(0.27, 0.95): Low threshold (catch most, many false alarms)
(1.0, 1.0): No threshold (predict all diseased)

Step 3: Calculate AUC​

Method: Trapezoid Rule

Area ≈ Sum of trapezoid areas:

A₁ = (0.00 + 0.05) / 2 × (0.00 - 0.00) = 0
A₂ = (0.05 + 0.15) / 2 × (0.01 - 0.00) = 0.001
A₃ = (0.15 + 0.50) / 2 × (0.10 - 0.01) = 0.0293
...
(many more trapezoids)

Total AUC ≈ 0.92

Interpretation:
AUC = 0.92 → Excellent (0.9-1.0 range)
Model correctly ranks diseased > healthy 92% of the time

Step 4: Compare with Baseline​

Random classifier:
AUC = 0.5 (diagonal line)

Our model:
AUC = 0.92

Improvement:
0.92 - 0.5 = 0.42 (significant!)
Our model is 84% better than random
(0.42 / 0.5 = 0.84)

Part 4: Precision-Recall Curve​

When to Use PR Curve vs ROC?​

ROC Curve:
✓ Good for balanced datasets
✓ Shows all threshold tradeoffs
✓ AUC is standard metric
✗ Can be misleading with imbalanced data

Precision-Recall Curve:
✓ Better for imbalanced datasets
✓ Focuses on positive class performance
✓ More relevant to most problems
✗ AUC less standardized

Example: Email dataset (99% ham, 1% spam)
ROC: Can appear good even with poor spam detection
PR: Better reflects actual performance on spam

Building Precision-Recall Curve​

Same data as before, but plot:
X-axis: Recall = TP / (TP + FN)
Y-axis: Precision = TP / (TP + FP)

Example points:

Threshold TP FN FP TN Recall Precision
──────────────────────────────────────────────
0.95 1 19 0 30 0.05 1.00
0.92 2 18 0 30 0.10 1.00
0.88 3 17 0 30 0.15 1.00
0.70 10 10 1 29 0.50 0.91
0.40 15 5 2 28 0.75 0.88
0.10 19 1 5 25 0.95 0.79

PR Curve visual:
Precision
1.0 ├─────────●
│ ╱│
0.8 ├───────● │
│ ╱ │
0.6 ├─────● │
│ ╱ │
0.4 ├──●──────● Random baseline
│ │ (horizontal at P = TP/total)
0.2 ├─────────┴─→ Recall
0.0 0.25 0.5 0.75 1.0

Good model: Curve stays high
Random model: Drops quickly

AP (Average Precision)​

Average Precision = Area under Precision-Recall curve

Similar to AUC but for PR space

Advantages:
✓ Better for imbalanced datasets
✓ Reflects business impact
✓ Accounts for positive class difficulty

Example:
AP = 0.87 (on imbalanced medical dataset)
Means: 87% average precision across all recalls

Part 5: Threshold Tuning​

Cost-Based Threshold Selection​

Different applications have different costs:

Medical Diagnosis:
Cost(False Negative) = ₹100,000 (patient dies)
Cost(False Positive) = ₹5,000 (unnecessary treatment)
Ratio: 100,000 / 5,000 = 20

Optimal threshold: Lower (0.3 instead of 0.5)
Maximize recall, accept lower precision

Credit Card Fraud:
Cost(False Negative) = ₹50,000 (fraud processed)
Cost(False Positive) = ₹100 (customer inconvenience)
Ratio: 50,000 / 100 = 500

Optimal threshold: Very low (0.1)
Catch almost all fraud

Spam Detection:
Cost(False Negative) = Mild (user inconvenience)
Cost(False Positive) = Severe (delete important email)
Ratio: 1 / 10 = 0.1

Optimal threshold: High (0.8)
Minimize false positives

Finding Optimal Threshold​

Method 1: Youden's Index

J = Sensitivity + Specificity - 1
= TPR + (1 - FPR) - 1
= TPR - FPR

Find threshold that maximizes J

Example:
Threshold TPR FPR J = TPR - FPR
──────────────────────────────────────
0.9 0.85 0.05 0.80
0.7 0.92 0.08 0.84 ← Maximum
0.5 0.95 0.15 0.80
0.3 0.98 0.25 0.73

Optimal threshold: 0.7

Complete Worked Example: Fraud Detection​

Data: 1000 transactions (50 fraud, 950 legitimate)

Fraud costs ₹10,000 per missed fraud
False alarm costs ₹100 per false positive

Calculate expected cost at different thresholds:

Threshold TP FN FP TN
───────────────────────────────
0.3 45 5 45 905
Cost = 5×10,000 + 45×100 = ₹54,500

0.5 48 2 20 930
Cost = 2×10,000 + 20×100 = ₹22,000 ← Minimum

0.7 50 0 5 945
Cost = 0×10,000 + 5×100 = ₹500 ← Even better!

0.9 48 2 2 948
Cost = 2×10,000 + 2×100 = ₹20,200

Optimal: 0.7 (lowest cost)

Part 6: Multi-Class Metrics​

Per-Class Metrics​

Multi-class example: Email classification
Classes: Work (0), Personal (1), Spam (2)

Confusion Matrix (3x3):
Predicted
W P S
Actual W [80 15 5]
P [10 75 15]
S [2 3 95]

Calculate metrics for each class:

CLASS 0 (Work):
TP₀ = 80, FN₀ = 15+5 = 20, FP₀ = 10+2 = 12
Precision₀ = 80 / (80+10+2) = 0.84
Recall₀ = 80 / (80+15+5) = 0.80

CLASS 1 (Personal):
TP₁ = 75, FN₁ = 15+15 = 30, FP₁ = 15+3 = 18
Precision₁ = 75 / (75+15+3) = 0.81
Recall₁ = 75 / (75+15+15) = 0.71

CLASS 2 (Spam):
TP₂ = 95, FN₂ = 5+15 = 20, FP₂ = 5+3 = 8
Precision₂ = 95 / (95+5+3) = 0.90
Recall₂ = 95 / (95+5+15) = 0.86

Averaging Strategies​

Macro Averaging​

Average across classes equally (regardless of support)

Macro Precision = (0.84 + 0.81 + 0.90) / 3 = 0.85
Macro Recall = (0.80 + 0.71 + 0.86) / 3 = 0.79
Macro F1 = (2×0.85×0.79) / (0.85+0.79) = 0.82

When to use:
✓ All classes equally important
✓ Small classes shouldn't be ignored
✓ You want balanced treatment

Micro Averaging​

Pool all TP, FP, FN across classes

Total TP = 80 + 75 + 95 = 250
Total FP = 12 + 18 + 8 = 38
Total FN = 20 + 30 + 20 = 70

Micro Precision = 250 / (250 + 38) = 0.87
Micro Recall = 250 / (250 + 70) = 0.78
Micro F1 = (2×0.87×0.78) / (0.87+0.78) = 0.82

When to use:
✓ Class distribution reflects real-world importance
✓ Large classes should have more influence
✓ Overall accuracy is what matters

Weighted Averaging​

Average per-class metrics weighted by class size

Class sizes:
Class 0: 100 samples (33.3%)
Class 1: 100 samples (33.3%)
Class 2: 100 samples (33.3%)

Weighted Precision = 0.84×0.333 + 0.81×0.333 + 0.90×0.333 = 0.85
Weighted Recall = 0.80×0.333 + 0.71×0.333 + 0.86×0.333 = 0.79

When to use:
✓ Unequal class sizes matter
✓ Want to reflect class distribution
✓ Most realistic metric

Part 7: Complete Worked Example - Banking Loan Classification​

Problem Setup​

Dataset: 500 loan applications
Classes:
• Approved (0): 350 applications
• Rejected (1): 100 applications
• Pending (2): 50 applications

Task: Evaluate classifier performance on test set

Step 1: Predictions​

Confusion Matrix:

Predicted
App Rej Pend
Actual App [320 25 5]
Rej [ 15 80 5]
Pend[ 3 2 45]

(Test set: 350 approved, 100 rejected, 50 pending)

Step 2: Per-Class Metrics​

CLASS 0 (APPROVED):
TP₀ = 320, FN₀ = 25+5 = 30, FP₀ = 15+3 = 18
Accuracy₀ = (320+400)/(500) = 0.92 (overall)
Precision₀ = 320/(320+15+3) = 0.95
Recall₀ = 320/(320+25+5) = 0.91
F1₀ = 2×(0.95×0.91)/(0.95+0.91) = 0.93

CLASS 1 (REJECTED):
TP₁ = 80, FN₁ = 25+5 = 30, FP₁ = 25+2 = 27
Precision₁ = 80/(80+25+2) = 0.74
Recall₁ = 80/(80+25+5) = 0.67
F1₁ = 2×(0.74×0.67)/(0.74+0.67) = 0.70

CLASS 2 (PENDING):
TP₂ = 45, FN₂ = 5+5 = 10, FP₂ = 5+2 = 7
Precision₂ = 45/(45+5+2) = 0.82
Recall₂ = 45/(45+5+5) = 0.82
F1₂ = 2×(0.82×0.82)/(0.82+0.82) = 0.82

Step 3: Averaged Metrics​

MACRO AVERAGE (equal weight):
Precision = (0.95 + 0.74 + 0.82) / 3 = 0.84
Recall = (0.91 + 0.67 + 0.82) / 3 = 0.80
F1 = (0.93 + 0.70 + 0.82) / 3 = 0.82

WEIGHTED AVERAGE (by class size):
Weights: [350/500, 100/500, 50/500] = [0.7, 0.2, 0.1]

Precision = 0.95×0.7 + 0.74×0.2 + 0.82×0.1 = 0.895
Recall = 0.91×0.7 + 0.67×0.2 + 0.82×0.1 = 0.833
F1 = 0.93×0.7 + 0.70×0.2 + 0.82×0.1 = 0.864

MICRO AVERAGE (pool all):
Total TP = 320 + 80 + 45 = 445
Total FP = 18 + 27 + 7 = 52
Total FN = 30 + 30 + 10 = 70

Precision = 445 / (445+52) = 0.895
Recall = 445 / (445+70) = 0.864
F1 = 0.879

Step 4: Interpretation & Inference​

Model Performance Summary:

STRENGTHS:
✓ Approved class: 95% precision, 91% recall (excellent)
✓ Pending class: 82% on both metrics (good balance)
✓ Overall weighted F1 = 0.864 (strong)

WEAKNESSES:
✗ Rejected class: 74% precision, 67% recall (poor)
✗ Confuses rejected with approved in 25 cases
✗ Only catches 67% of actual rejections

BUSINESS IMPLICATION:
The model is BIASED toward approving loans!

Cost analysis:
False approval (Actual Rej → Pred App): 15 cases
→ Risk: ₹15M (assuming ₹1M loss per false approval)

False rejection (Actual App → Pred Rej): 25 cases
→ Loss: ₹2.5M (assuming ₹100K lost opportunity per denial)

Total risk: ₹17.5M per 500 applications

RECOMMENDATION:
✓ Use Pending class as intermediate approval check
✓ Retrain model to balance classes
✓ Adjust decision threshold to reduce false approvals
✓ Consider cost-weighted loss function

Part 8: Exam Questions & Solutions​

Q1: ROC vs Precision-Recall​

Q: "When would you use ROC-AUC instead of Precision-Recall curve?"

A:

ROC-AUC is better when:
✓ Dataset is balanced
✓ Both FP and FN are equally important
✓ You want a standard benchmark metric
✓ Comparing multiple models needed

Example: Customer satisfaction classification
Classes: Happy (70%), Neutral (20%), Sad (10%)
ROC-AUC still useful (not too imbalanced)

Precision-Recall is better when:
✓ Dataset is imbalanced (1% positive class)
✓ Positive class is more important
✓ You care about precision specifically

Example: Disease diagnosis (0.5% disease prevalence)
PR curve more informative than ROC

Q2: Calculate AUC Interpretation​

Q:

Model 1 AUC = 0.92
Model 2 AUC = 0.58
Random classifier AUC = 0.50

Interpret these results.

A:

Model 1 (AUC = 0.92):
✓ Excellent performance (0.9-1.0 range)
✓ 92% chance it ranks random positive > random negative
✓ Much better than random (0.92 vs 0.50)
✓ Ready for production

Model 2 (AUC = 0.58):
✗ Only slightly better than random (0.58 vs 0.50)
✗ 58% chance it ranks positive > negative (barely)
✗ Not reliable for decisions
✗ Needs significant improvement

Recommendation: Use Model 1, discard Model 2

Q3: Threshold Optimization​

Q:

Current threshold: 0.5
Metrics: Precision=0.9, Recall=0.7

If medical diagnosis where missing disease = ₹100,000
and false alarm = ₹1,000:

Should you adjust threshold? To what?

A:

Cost Ratio = 100,000 / 1,000 = 100

Current (threshold 0.5):
Expected cost per prediction:
= P(FN)×100,000 + P(FP)×1,000
= 0.3×100,000 + 0.1×1,000 (roughly)
= ₹31,000

Recommendation: LOWER threshold (e.g., 0.3)

Why:
✓ Cost of missing disease (₹100K) >> false alarm (₹1K)
✓ Lower threshold → Higher recall (catch more)
✓ Trade-off: Higher false positives acceptable

With threshold = 0.3:
Expected recall: ~0.95 (catch most diseases)
Expected precision: ~0.7 (more false alarms)
Expected cost: 0.05×100,000 + 0.3×1,000 = ₹5,300 (much better!)

Q4: Multi-Class Averaging​

Q:

3-class problem (50 test samples):
Class A (30 samples): Precision=0.9, Recall=0.8
Class B (15 samples): Precision=0.8, Recall=0.9
Class C (5 samples): Precision=0.6, Recall=0.6

Calculate macro and weighted F1-scores.

A:

MACRO F1 (equal weight):
F1_A = 2×(0.9×0.8)/(0.9+0.8) = 1.44/1.7 = 0.847
F1_B = 2×(0.8×0.9)/(0.8+0.9) = 1.44/1.7 = 0.842
F1_C = 2×(0.6×0.6)/(0.6+0.6) = 0.72/1.2 = 0.600

Macro F1 = (0.847 + 0.842 + 0.600) / 3 = 0.763

WEIGHTED F1 (by class size):
Weights: [30/50, 15/50, 5/50] = [0.6, 0.3, 0.1]

Weighted F1 = 0.847×0.6 + 0.842×0.3 + 0.600×0.1
= 0.508 + 0.253 + 0.060
= 0.821

Interpretation:
Macro F1 (0.763): Treats all classes equally (Class C dragging score)
Weighted F1 (0.821): Class A dominates (higher weight)
Use weighted for realistic performance

Q5: Confusion Matrix to Metrics​

Q:

Medical test confusion matrix (100 test cases):
Predicted
Disease Healthy
Actual D [85 15]
H [10 90]

Calculate: Sensitivity, Specificity, Precision, Recall, F1

A:

TP = 85 (correctly identified disease)
FN = 15 (missed disease)
FP = 10 (false positive)
TN = 90 (correctly identified healthy)

Sensitivity = TP / (TP+FN) = 85/100 = 0.85
(Recall: Of actual disease cases, 85% detected)

Specificity = TN / (FP+TN) = 90/100 = 0.90
(Of actual healthy, 90% correctly identified)

Precision = TP / (TP+FP) = 85/95 = 0.895
(Of predicted disease, 89.5% actually have disease)

Recall = TP / (TP+FN) = 85/100 = 0.85
(Same as Sensitivity in binary case)

F1 = 2×(Precision×Recall) / (Precision+Recall)
= 2×(0.895×0.85) / (0.895+0.85)
= 1.521 / 1.745
= 0.872

All metrics: Sensitivity 85%, Specificity 90%, F1 87%
Evaluation: Very good test (high on all measures)

Part 9: Practice Problems​

Problem 1: ROC Curve Construction​

Build ROC curve from predictions:

Patient Actual P(Disease)
1 Yes 0.9
2 No 0.1
3 Yes 0.8
4 No 0.2
5 Yes 0.7
6 No 0.3
7 Yes 0.6
8 No 0.4
9 Yes 0.5
10 No 0.05

Tasks:
a) Sort by probability
b) Calculate TPR and FPR at each threshold
c) Plot rough ROC curve
d) Estimate AUC

Problem 2: Threshold Selection​

Cost-benefit analysis:

Fraud detection model outputs probabilities
Cost(False Negative) = ₹50,000 per fraud
Cost(False Positive) = ₹200 per false alarm

Current threshold = 0.5:
At this point: 5% miss rate, 2% false alarm rate

Lower to 0.3:
Miss rate drops to 1%, false alarm rate rises to 8%

Lower to 0.1:
Miss rate drops to 0.5%, false alarm rate rises to 15%

Questions:
a) Calculate expected cost at each threshold
b) Which threshold is optimal?
c) What if you lower cost of false alarm to ₹50?

Problem 3: Multi-Class Metrics​

4-class sentiment analysis:
Classes: Positive (400), Neutral (300), Negative (200), Spam (100)

Confusion Matrix:
Pos Neu Neg Spam
Pos [380 15 5 0]
Neu [20 270 8 2]
Neg [5 15 180 0]
Spam [0 2 0 98]

Calculate:
a) Per-class F1 scores
b) Macro F1
c) Weighted F1
d) Which metric best represents performance?

Part 10: Key Takeaways​

When to Use Each Metric​

ScenarioBest MetricWhy
Balanced dataAccuracy, F1All classes equally important
Imbalanced dataPrecision, Recall, F1Accuracy misleading
Medical diagnosisRecall (Sensitivity)Missing disease is costly
Spam detectionPrecisionFalse positives unacceptable
Model comparisonROC-AUC (balanced) / PR-AUC (imbalanced)Single number summary
Threshold-sensitiveROC/PR curvesSee all tradeoffs

Red Flags​

- High accuracy on imbalanced data
→ Check precision, recall, F1 instead

- ROC-AUC excellent but PR-AUC poor
→ Likely imbalanced dataset
→ Use PR-AUC for decisions

- Macro and weighted metrics differ greatly
→ Class sizes matter
→ Use weighted for realistic performance

- Specificity high but recall low
→ Threshold too high
→ Too many false negatives

Summary Table​

MetricFormulaWhen UseRange
Sensitivity (Recall)TP/(TP+FN)Minimize FN cost0-1
SpecificityTN/(FP+TN)Minimize FP cost0-1
PrecisionTP/(TP+FP)Reduce false alarms0-1
F1-Score2PR/(P+R)Balance both0-1
AUC-ROCArea under ROCModel comparison0-1
AUC-PRArea under PRImbalanced data0-1

Tips for CT Exam​

DO​

  • Calculate both precision and recall (different purposes)
  • Plot ROC/PR curves when asked about thresholds
  • Use appropriate averaging (macro vs weighted)
  • Interpret AUC in context (what does 0.92 mean practically?)
  • Consider costs when selecting threshold

DON'T​

  • Don't use accuracy alone for imbalanced data
  • Don't confuse sensitivity and specificity
  • Don't ignore multi-class considerations
  • Don't forget to average properly
  • Don't choose threshold without cost analysis

Next Topics​

→ Model Comparison
→ Cross-Validation (Review for evaluation)
→ Logistic Regression (Review for classification)