Evaluasi Classification Model: Classification Report
Classification Report adalah laporan yang berisi beberapa metrik evaluasi untuk menilai performa model klasifikasi.
Berbeda dengan Accuracy yang hanya memberikan satu nilai performa, classification report menampilkan beberapa metrik sekaligus, yaitu:
- Precision
- Recall
- F1-Score
- Support
Classification report membantu kita memahami bagaimana model bekerja pada masing-masing kelas, terutama ketika dataset memiliki class imbalance.
Di Scikit-Learn, classification report dapat dibuat menggunakan classification_report().
from sklearn.metrics import classification_report
print(classification_report(y_test, y_preds))
Contoh hasil:
precision recall f1-score support
0 0.85 0.90 0.87 50
1 0.88 0.82 0.85 50
accuracy 0.86 100
macro avg 0.86 0.86 0.86 100
weighted avg 0.86 0.86 0.86 100
Dari laporan tersebut, kita dapat melihat performa model secara lebih detail dibandingkan hanya menggunakan accuracy.
Precision
Precision mengukur seberapa banyak prediksi positif yang benar-benar merupakan kelas positif.
Dengan kata lain:
Dari semua data yang diprediksi sebagai kelas tertentu, berapa banyak yang benar?
Untuk klasifikasi biner pada kelas positif:
Keterangan:
TP= True PositiveFP= False Positive
Contoh
Misalnya model memprediksi 100 orang sebagai memiliki penyakit.
Ternyata hanya 80 orang yang benar-benar memiliki penyakit.
Maka:
Artinya, sekitar 80% dari prediksi positif model benar.
Hubungan Precision dengan False Positive
Precision akan tinggi ketika jumlah False Positive (FP) rendah.
Model yang tidak menghasilkan False Positive untuk kelas tertentu dapat memiliki:
Kapan Precision Penting?
Precision menjadi penting ketika False Positive memiliki konsekuensi yang besar.
Contohnya:
- Sistem mendeteksi transaksi penipuan.
- Sistem mendeteksi email spam.
- Sistem memberikan peringatan keamanan.
- Sistem mengklasifikasikan konten tertentu sebagai pelanggaran.
Recall
Recall mengukur seberapa banyak kasus positif yang sebenarnya berhasil ditemukan oleh model.
Dengan kata lain:
Dari semua data yang sebenarnya merupakan kelas positif, berapa banyak yang berhasil ditemukan oleh model?
Rumus recall:
Keterangan:
TP= True PositiveFN= False Negative
Contoh
Misalnya terdapat 100 orang yang benar-benar memiliki penyakit.
Model berhasil mendeteksi 90 orang.
Namun 10 orang tidak berhasil dideteksi.
Maka:
Artinya, model berhasil menemukan 90% kasus positif yang sebenarnya.
Hubungan Recall dengan False Negative
Recall akan tinggi ketika jumlah False Negative (FN) rendah.
Jika model tidak menghasilkan False Negative untuk kelas tertentu:
Kapan Recall Penting?
Recall menjadi sangat penting ketika False Negative memiliki konsekuensi besar.
Contohnya:
- Deteksi penyakit.
- Deteksi serangan keamanan.
- Deteksi transaksi mencurigakan.
- Deteksi kejadian bencana.
- Deteksi permintaan bantuan darurat.
Dalam kasus seperti ini, melewatkan kasus positif dapat lebih bermasalah dibandingkan menghasilkan beberapa False Positive.
F1-Score
F1-Score merupakan kombinasi antara Precision dan Recall menggunakan harmonic mean.
Rumusnya:
F1-Score berguna ketika kita ingin mempertimbangkan Precision dan Recall secara bersamaan.
Contoh
Misalnya:
Precision = 0.80
Recall = 0.60
Maka:
Hasilnya sekitar:
F1-Score = 0.686
F1-Score tidak hanya melihat salah satu metrik, tetapi mempertimbangkan keseimbangan antara Precision dan Recall.
Nilai F1-Score
Secara umum:
1.0→ performa sempurna pada kelas tersebut0.0→ performa sangat buruk pada kelas tersebut
F1-Score yang tinggi membutuhkan Precision dan Recall yang sama-sama relatif tinggi.
Jika salah satunya sangat rendah, F1-Score juga akan terpengaruh.
Support
Support adalah jumlah sampel aktual yang termasuk ke dalam setiap kelas pada data yang dievaluasi.
Misalnya:
precision recall f1-score support
0 0.85 0.90 0.87 50
1 0.88 0.82 0.85 50
Maka:
- Kelas
0memiliki 50 sampel. - Kelas
1memiliki 50 sampel.
Support bukan metrik performa model.
Support hanya menunjukkan berapa banyak sampel aktual yang digunakan untuk menghitung metrik pada setiap kelas.
Accuracy
Accuracy menunjukkan proporsi seluruh prediksi yang benar dibandingkan dengan seluruh data yang dievaluasi.
Rumusnya:
Dalam konteks confusion matrix:
Misalnya model menghasilkan:
90 prediksi benar
10 prediksi salah
dari 100 data.
Maka:
atau:
Accuracy = 90%
Accuracy mudah dipahami, tetapi tidak selalu cukup untuk mengevaluasi model.
Macro Average
Macro Average menghitung rata-rata metrik dari setiap kelas dengan memberikan bobot yang sama kepada setiap kelas.
Misalnya terdapat dua kelas:
Class 0:
Precision = 0.80
Class 1:
Precision = 0.60
Macro Precision:
Setiap kelas mendapatkan kontribusi yang sama terhadap hasil akhir, terlepas dari jumlah sampelnya.
Mengapa Macro Average Penting?
Macro Average berguna ketika kita ingin melihat apakah model bekerja dengan baik pada semua kelas, termasuk kelas yang memiliki jumlah sampel lebih sedikit.
Hal ini menjadi sangat relevan pada dataset imbalanced.
Misalnya:
Kelas 0 = 9.900 sampel
Kelas 1 = 100 sampel
Macro Average tetap memberikan bobot yang sama kepada kelas 0 dan kelas 1 ketika menghitung rata-rata metrik antar kelas.
Weighted Average
Weighted Average menghitung rata-rata metrik dengan mempertimbangkan support atau jumlah sampel pada setiap kelas.
Artinya, kelas dengan jumlah sampel lebih banyak memiliki kontribusi yang lebih besar terhadap hasil rata-rata.
Misalnya:
Kelas 0 = 9.900 sampel
Kelas 1 = 100 sampel
Maka kelas 0 akan memberikan kontribusi jauh lebih besar terhadap weighted average karena memiliki jumlah sampel yang jauh lebih banyak.
Perbedaan Macro dan Weighted Average
| Average | Mempertimbangkan Jumlah Sampel? | Bobot Setiap Kelas |
|---|---|---|
| Macro Average | Tidak | Sama |
| Weighted Average | Ya | Berdasarkan support |
Perbedaan ini sangat penting ketika dataset memiliki class imbalance.
Memahami Output Classification Report
Contoh:
precision recall f1-score support
0 0.85 0.90 0.87 50
1 0.88 0.82 0.85 50
accuracy 0.86 100
macro avg 0.86 0.86 0.86 100
weighted avg 0.86 0.86 0.86 100
Cara membacanya:
Kelas 0
precision = 0.85
recall = 0.90
f1-score = 0.87
support = 50
Artinya:
- Precision kelas
0adalah0.85. - Recall kelas
0adalah0.90. - F1-Score kelas
0adalah0.87. - Terdapat 50 sampel aktual kelas
0.
Kelas 1
precision = 0.88
recall = 0.82
f1-score = 0.85
support = 50
Artinya:
- Precision kelas
1adalah0.88. - Recall kelas
1adalah0.82. - F1-Score kelas
1adalah0.85. - Terdapat 50 sampel aktual kelas
1.
Kemudian pada bagian bawah terdapat:
accuracy
macro avg
weighted avg
yang memberikan gambaran performa model secara keseluruhan dan agregat antar kelas.
Accuracy Trap pada Class Imbalance
Salah satu masalah penting dalam evaluasi klasifikasi adalah accuracy trap.
Accuracy trap terjadi ketika accuracy terlihat sangat tinggi, tetapi model sebenarnya gagal mengenali kelas yang penting.
Hal ini sering terjadi pada dataset yang memiliki class imbalance.
Contoh Class Imbalance
Misalkan terdapat dataset:
Total data = 10.000 orang
Sehat = 9.999 orang
Penyakit = 1 orang
Kita menggunakan model yang sangat buruk dan model tersebut selalu memprediksi:
Semua orang → Sehat
Model tidak pernah memprediksi seseorang sebagai memiliki penyakit.
Hasil Confusion Matrix
Secara sederhana:
Predicted
Sehat Penyakit
Actual Sehat 9999 0
Actual Penyakit 1 0
Untuk kelas penyakit:
TP = 0
FN = 1
Model gagal menemukan satu-satunya pasien yang sebenarnya memiliki penyakit.
Accuracy Model
Walaupun model tersebut buruk, accuracy-nya adalah:
atau:
Accuracy = 99.99%
Sekilas, angka tersebut terlihat sangat tinggi.
Namun model sebenarnya tidak berhasil menemukan satu pun kasus penyakit.
Recall Kelas Penyakit
Recall:
Karena:
TP = 0
FN = 1
maka:
Artinya:
Recall = 0.00
Model gagal menemukan seluruh kasus positif pada data tersebut.
Precision Kelas Penyakit
Model tidak menghasilkan prediksi positif sama sekali.
Dengan kondisi seperti ini, precision untuk kelas tersebut perlu dibaca dengan hati-hati karena tidak ada sampel yang diprediksi sebagai positif.
Scikit-Learn menyediakan parameter zero_division untuk menentukan bagaimana kondisi pembagian dengan nol tersebut ditangani.
Contoh:
print(
classification_report(
y_test,
y_preds,
zero_division=0
)
)
Dengan demikian, jangan hanya melihat accuracy ketika mengevaluasi dataset yang sangat tidak seimbang.
Mengapa Accuracy Saja Tidak Cukup?
Accuracy dapat menjadi misleading ketika distribusi kelas sangat tidak seimbang.
Contohnya:
99.99% accuracy
tidak berarti model selalu bagus.
Jika hampir seluruh dataset berasal dari satu kelas, model yang selalu memilih kelas mayoritas dapat memperoleh accuracy yang sangat tinggi tanpa benar-benar mampu mengenali kelas minoritas.
Oleh karena itu, kita perlu melihat metrik lain seperti:
- Precision
- Recall
- F1-Score
- Macro Average
- Confusion Matrix
- ROC-AUC
- Precision-Recall / Average Precision
Pemilihan metrik harus disesuaikan dengan tujuan dan konsekuensi kesalahan pada masalah yang sedang dikerjakan.
Precision vs Recall
Precision dan Recall sering memiliki hubungan trade-off.
Secara sederhana:
Precision
│
│ ●
│ ●
│ ●
│ ●
└──────────────── Recall
Dalam beberapa kasus, meningkatkan sensitivitas model terhadap kelas positif dapat meningkatkan jumlah False Positive sehingga Precision dapat menurun.
Sebaliknya, membuat model lebih konservatif dalam memberikan prediksi positif dapat mengurangi False Positive tetapi berpotensi meningkatkan False Negative.
Tidak ada satu nilai yang selalu paling penting untuk semua kasus.
Memilih Metrik Berdasarkan Tujuan
Pertimbangkan konsekuensi dari setiap jenis kesalahan.
| Situasi | Metrik yang Perlu Diperhatikan |
|---|---|
| False Positive sangat merugikan | Precision |
| False Negative sangat merugikan | Recall |
| Ingin keseimbangan Precision dan Recall | F1-Score |
| Dataset relatif seimbang | Accuracy dapat menjadi salah satu metrik |
| Dataset tidak seimbang | Macro Average, Precision, Recall, F1-Score |
| Ingin melihat jenis kesalahan | Confusion Matrix |
| Evaluasi ranking probabilitas/score | ROC-AUC atau Precision-Recall |
Tabel tersebut bukan aturan mutlak. Metrik yang digunakan tetap harus disesuaikan dengan tujuan bisnis, karakteristik data, dan konsekuensi kesalahan.
Classification Report dengan Scikit-Learn
Berikut contoh sederhana menggunakan Random Forest.
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
stratify=y
)
clf = RandomForestClassifier(
n_estimators=100,
random_state=42
)
clf.fit(X_train, y_train)
y_preds = clf.predict(X_test)
print(classification_report(y_test, y_preds))
Output dapat berbentuk:
precision recall f1-score support
0 0.86 0.90 0.88 50
1 0.89 0.84 0.86 50
accuracy 0.87 100
macro avg 0.87 0.87 0.87 100
weighted avg 0.87 0.87 0.87 100
Nilai tersebut merupakan contoh. Hasil sebenarnya bergantung pada dataset, pembagian data, model, parameter, dan proses preprocessing.
Classification Report pada Multiclass Classification
Classification report juga dapat digunakan untuk masalah dengan lebih dari dua kelas.
Misalnya kita memiliki tiga kelas:
Kelas 0 → Setosa
Kelas 1 → Versicolor
Kelas 2 → Virginica
Model dapat menghasilkan:
precision recall f1-score support
0 0.95 0.95 0.95 20
1 0.90 0.90 0.90 20
2 0.95 0.95 0.95 20
accuracy 0.93 60
macro avg 0.93 0.93 0.93 60
weighted avg 0.93 0.93 0.93 60
Dalam multiclass classification, Precision, Recall, dan F1-Score dihitung untuk setiap kelas.
Kemudian Scikit-Learn menyediakan beberapa metode averaging, seperti:
macroweightedmicro
Untuk classification report secara default, bagian macro avg dan weighted avg ditampilkan.
Menghubungkan Classification Report dengan Confusion Matrix
Classification Report dan Confusion Matrix saling melengkapi.
Confusion Matrix membantu kita melihat:
Kesalahan model terjadi di kelas mana dan dalam bentuk apa?
Sedangkan Classification Report membantu menjawab:
Seberapa baik model mendeteksi masing-masing kelas berdasarkan Precision, Recall, dan F1-Score?
Alur evaluasinya dapat digambarkan sebagai:
Model
│
▼
Predictions
│
▼
┌───────────────┐
│ Confusion │
│ Matrix │
└───────┬───────┘
│
▼
┌─────────────────────┐
│ Classification │
│ Report │
└─────────┬───────────┘
│
┌────────┼────────┐
▼ ▼ ▼
Precision Recall F1-Score
Confusion Matrix memberikan gambaran jumlah kesalahan, sedangkan Classification Report memberikan metrik yang dihitung dari hasil tersebut.
Workflow Evaluasi Classification Model
Workflow evaluasi klasifikasi yang dapat digunakan:
Dataset
│
▼
Persiapan Data
│
▼
Train-Test Split
│
├───────────────┐
▼ ▼
Training Data Test Data
│ │
▼ │
Training Model │
│ │
▼ │
Predictions ───────┘
│
▼
Evaluation
│
├── Accuracy
├── Confusion Matrix
├── Precision
├── Recall
├── F1-Score
├── ROC-AUC
└── Classification Report
Jika digunakan cross-validation, evaluasi dapat dilakukan pada data training untuk membantu memilih model atau hyperparameter sebelum final test evaluation.
Contoh Evaluasi Lengkap
Berikut contoh workflow sederhana:
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import (
accuracy_score,
classification_report,
confusion_matrix
)
from sklearn.model_selection import train_test_split
# Split data
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.2,
random_state=42,
stratify=y
)
# Membuat model
clf = RandomForestClassifier(
n_estimators=100,
random_state=42
)
# Training
clf.fit(X_train, y_train)
# Prediction
y_preds = clf.predict(X_test)
# Accuracy
accuracy = accuracy_score(y_test, y_preds)
print(f"Accuracy: {accuracy:.2f}")
# Confusion Matrix
cm = confusion_matrix(y_test, y_preds)
print("Confusion Matrix:")
print(cm)
# Classification Report
print("Classification Report:")
print(classification_report(y_test, y_preds))
Dengan workflow tersebut kita tidak hanya mengetahui accuracy, tetapi juga dapat melihat bagaimana model menangani setiap kelas.
Cara Membaca Classification Report Secara Sistematis
Ketika mendapatkan classification report, gunakan langkah berikut.
Langkah 1 - Lihat Support
Periksa jumlah data pada setiap kelas.
support
Tujuannya untuk mengetahui apakah dataset memiliki distribusi kelas yang seimbang.
Langkah 2 - Lihat Accuracy
Accuracy dapat memberikan gambaran umum performa model.
Namun jangan berhenti pada accuracy.
Langkah 3 - Periksa Precision
Tanyakan:
Ketika model memprediksi suatu kelas, seberapa sering prediksi tersebut benar?
Langkah 4 - Periksa Recall
Tanyakan:
Dari semua data yang sebenarnya termasuk kelas tersebut, berapa banyak yang berhasil ditemukan?
Langkah 5 - Periksa F1-Score
Gunakan F1-Score untuk melihat keseimbangan antara Precision dan Recall.
Langkah 6 - Bandingkan Macro dan Weighted Average
Jika keduanya berbeda cukup jauh, periksa distribusi kelas dan performa masing-masing kelas.
Langkah 7 - Kembali ke Confusion Matrix
Jika terdapat performa yang rendah pada suatu kelas, gunakan confusion matrix untuk mengetahui bentuk kesalahannya.
Kesalahan yang Sering Terjadi
Hanya Melihat Accuracy
Kesalahan:
Accuracy = 99%
kemudian langsung menyimpulkan bahwa model sangat baik.
Solusi:
Periksa juga:
- Precision
- Recall
- F1-Score
- Confusion Matrix
- Support
- Distribusi kelas
Mengabaikan Class Imbalance
Dataset dengan distribusi:
Class 0 = 99%
Class 1 = 1%
memerlukan perhatian khusus.
Accuracy yang tinggi belum tentu menunjukkan bahwa model mampu mendeteksi kelas minoritas.
Menganggap Precision dan Recall Sama
Precision dan Recall mengukur hal yang berbeda.
Precision:
Dari prediksi positif, berapa yang benar?
Recall:
Dari seluruh positif sebenarnya, berapa yang berhasil ditemukan?
Menganggap F1 Selalu Lebih Penting
F1-Score bukan otomatis metrik terbaik untuk semua masalah.
Jika False Negative jauh lebih berbahaya, Recall mungkin lebih relevan.
Jika False Positive jauh lebih berbahaya, Precision mungkin lebih relevan.
Pemilihan metrik harus mengikuti tujuan sistem.
Mengabaikan Support
Nilai metric tanpa melihat jumlah sampel dapat menyesatkan.
Misalnya:
Class 0 → F1 = 0.95 → support = 10.000
Class 1 → F1 = 0.60 → support = 10
Performa kelas minoritas perlu diperhatikan meskipun jumlah datanya kecil.
Ringkasan
Classification Report menyediakan beberapa informasi penting untuk mengevaluasi model klasifikasi.
| Metrik | Pertanyaan Utama |
|---|---|
| Precision | Dari prediksi suatu kelas, berapa yang benar? |
| Recall | Dari seluruh data aktual suatu kelas, berapa yang ditemukan? |
| F1-Score | Seberapa seimbang Precision dan Recall? |
| Support | Berapa jumlah data aktual pada kelas tersebut? |
| Accuracy | Berapa proporsi seluruh prediksi yang benar? |
| Macro Avg | Bagaimana rata-rata performa antar kelas dengan bobot sama? |
| Weighted Avg | Bagaimana rata-rata performa dengan mempertimbangkan jumlah sampel tiap kelas? |
Untuk dataset yang seimbang, Accuracy dapat menjadi salah satu metrik yang berguna.
Untuk dataset yang tidak seimbang, jangan hanya mengandalkan Accuracy. Perhatikan Precision, Recall, F1-Score, Macro Average, Weighted Average, dan Confusion Matrix.
Checklist Evaluasi Classification Model
Gunakan checklist berikut ketika mengevaluasi model klasifikasi:
- Sudah membagi data training dan testing dengan benar.
- Tidak terjadi data leakage.
- Sudah melihat distribusi kelas.
- Sudah menghitung Accuracy.
- Sudah melihat Confusion Matrix.
- Sudah menghitung Precision.
- Sudah menghitung Recall.
- Sudah menghitung F1-Score.
- Sudah memeriksa Support setiap kelas.
- Sudah membandingkan Macro Average dan Weighted Average.
- Sudah mempertimbangkan dampak False Positive dan False Negative.
- Tidak hanya mengandalkan Accuracy pada dataset imbalanced.
- Metrik yang digunakan sesuai dengan tujuan masalah.
Kesimpulan
Classification Report merupakan salah satu alat penting dalam evaluasi model klasifikasi karena memberikan gambaran performa model secara lebih lengkap.
Empat komponen utama yang perlu dipahami adalah:
Precision
Recall
F1-Score
Support
Kemudian kita juga perlu memahami:
Accuracy
Macro Average
Weighted Average
Hal terpenting adalah memahami bahwa tidak ada satu metrik yang selalu cocok untuk semua masalah.
Model dengan Accuracy tinggi belum tentu mampu mendeteksi kelas yang penting, terutama ketika dataset memiliki class imbalance.
Oleh karena itu, evaluasi model sebaiknya dilakukan dengan melihat beberapa metrik secara bersamaan dan mempertimbangkan konsekuensi dari setiap jenis kesalahan prediksi.