Evaluation
Evaluation atau evaluasi merupakan langkah ketiga dalam Machine Learning Framework / Machine Learning Workflow.
Setelah kita:
- mendefinisikan masalah,
- memahami data,
kita perlu menentukan bagaimana cara mengetahui apakah solusi Machine Learning yang kita buat berhasil atau tidak.
Pertanyaan utama pada tahap ini adalah:
"What defines success for us?"
atau:
"Apa yang mendefinisikan keberhasilan bagi kita?"
Machine Learning tidak cukup hanya menghasilkan prediksi. Kita perlu mengetahui seberapa baik prediksi tersebut.
Untuk itu, kita menggunakan evaluation metrics atau metrik evaluasi.
Apa Itu Evaluation Metric?
Evaluation metric adalah ukuran yang digunakan untuk menilai performa sebuah model Machine Learning.
Misalnya kita membuat model untuk memprediksi apakah pasien memiliki penyakit tertentu.
Model menghasilkan:
Prediksi model:
Pasien A → Sakit
Pasien B → Tidak sakit
Pasien C → Sakit
Kita perlu membandingkan prediksi tersebut dengan kondisi sebenarnya.
Prediksi Model
↓
Dibandingkan
↓
Nilai Sebenarnya
↓
Evaluation Metric
↓
Performance Model
Hasil evaluasi kemudian dapat digunakan untuk menentukan apakah model sudah cukup baik.
Mengapa Evaluation Penting?
Tanpa evaluasi, kita tidak dapat menjawab pertanyaan:
"Apakah model ini bagus?"
Misalnya dua model menghasilkan:
Model A → Accuracy 85%
Model B → Accuracy 92%
Berdasarkan accuracy, Model B terlihat lebih baik.
Tetapi kita masih perlu bertanya:
- Apakah accuracy merupakan metric yang tepat?
- Apakah dataset seimbang?
- Kesalahan apa yang dibuat model?
- Apakah false positive lebih berbahaya?
- Apakah false negative lebih berbahaya?
- Apakah model memenuhi kebutuhan bisnis?
Jadi evaluasi bukan hanya tentang mencari angka paling tinggi.
Kita harus menggunakan metric yang sesuai dengan masalah.
Evaluation Harus Didefinisikan Sejak Awal
Salah satu tujuan utama tahap Evaluation adalah menentukan standar keberhasilan sebelum model dibuat.
Misalnya sebuah tim ingin membuat model untuk mendeteksi penyakit.
Mereka dapat menetapkan:
Target:
Recall >= 95%
Atau untuk masalah lain:
Target:
Accuracy >= 90%
Dengan adanya target, tim memiliki standar yang jelas.
Problem
↓
Evaluation Target
↓
Model
↓
Evaluation
↓
Apakah target tercapai?
Hal ini juga membantu anggota tim memiliki pemahaman yang sama mengenai tujuan proyek.
Evaluation Metric dan Business Goal
Metric Machine Learning sebaiknya berhubungan dengan tujuan nyata dari proyek.
Misalnya perusahaan ingin mengurangi email spam.
Tidak cukup hanya mengatakan:
Buat model spam detection.
Kita perlu menentukan:
Seberapa baik model harus bekerja?
Misalnya:
Accuracy >= 95%
Namun target tersebut harus dipilih berdasarkan kebutuhan sistem.
Untuk beberapa kasus, precision mungkin lebih penting.
Untuk kasus lain, recall mungkin lebih penting.
Karena itu:
Metric harus mengikuti tujuan masalah, bukan sebaliknya.
Evaluation pada Classification
Classification digunakan ketika model memprediksi kategori.
Contoh:
Spam / Bukan Spam
Sakit / Tidak Sakit
Lulus / Tidak Lulus
Kucing / Anjing
Untuk classification, beberapa metric yang umum digunakan adalah:
- Accuracy
- Precision
- Recall
- F1 Score
- ROC-AUC
Pada materi ini kita akan terlebih dahulu memahami Accuracy, Precision, dan Recall.
Confusion Matrix
Sebelum memahami Accuracy, Precision, dan Recall, kita perlu mengenal Confusion Matrix.
Confusion Matrix digunakan untuk melihat jenis prediksi yang benar dan salah.
Pada binary classification, terdapat empat kemungkinan:
Kondisi Sebenarnya:
Positive Negative
Prediksi:
Positive TP FP
Negative FN TN

Keempat komponen tersebut adalah:
- TP - True Positive
- TN - True Negative
- FP - False Positive
- FN - False Negative
True Positive
True Positive terjadi ketika model memprediksi positif dan kondisi sebenarnya juga positif.
Contoh:
Model:
Pasien → Sakit
Kondisi sebenarnya:
Pasien → Sakit
Prediksi benar.
Maka:
True Positive
True Negative
True Negative terjadi ketika model memprediksi negatif dan kondisi sebenarnya juga negatif.
Contoh:
Model:
Pasien → Tidak sakit
Kondisi sebenarnya:
Pasien → Tidak sakit
Prediksi benar.
Maka:
True Negative
False Positive
False Positive terjadi ketika model memprediksi positif, tetapi kondisi sebenarnya negatif.
Contoh:
Model:
Pasien → Sakit
Kondisi sebenarnya:
Pasien → Tidak sakit
Model memberikan peringatan yang sebenarnya tidak diperlukan.
Maka:
False Positive
False Positive sering juga disebut false alarm.
False Negative
False Negative terjadi ketika model memprediksi negatif, tetapi kondisi sebenarnya positif.
Contoh:
Model:
Pasien → Tidak sakit
Kondisi sebenarnya:
Pasien → Sakit
Model gagal mendeteksi kondisi positif.
Maka:
False Negative
Pada beberapa kasus, False Negative dapat menjadi kesalahan yang sangat serius.
Misalnya pada sistem deteksi penyakit.
Accuracy
Accuracy mengukur proporsi seluruh prediksi yang benar dibandingkan dengan seluruh prediksi.
Rumus:
Accuracy =
(TP + TN)
----------------
(TP + TN + FP + FN)
Dengan kata lain:
Jumlah prediksi benar
---------------------
Jumlah seluruh prediksi
Contoh Accuracy
Misalnya terdapat 100 data.
Model menghasilkan:
True Positive = 40
True Negative = 50
False Positive = 5
False Negative = 5
Maka:
Accuracy =
(40 + 50) / 100
= 0.90
= 90%
Jadi accuracy model adalah:
90%
Accuracy dengan Scikit-learn
Dalam Python kita dapat menggunakan:
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(
y_test,
y_pred
)
print("Accuracy:", accuracy)
Jika ingin menampilkan dalam persen:
print(f"Accuracy: {accuracy:.2%}")
Contoh output:
Accuracy: 90.00%
Precision
Precision menjawab pertanyaan:
"Dari semua data yang diprediksi positif oleh model, berapa banyak yang benar-benar positif?"
Rumus:
Precision =
TP
-----------
TP + FP
Precision berfokus pada kualitas prediksi positif.
Contoh Precision
Misalnya model mengatakan:
20 pasien → positif
Setelah diperiksa:
18 benar-benar positif
2 ternyata negatif
Maka:
TP = 18
FP = 2
Precision:
Precision =
18 / (18 + 2)
= 0.90
= 90%
Artinya:
Dari seluruh pasien yang diprediksi positif, 90% memang benar-benar positif.
Precision dengan Scikit-learn
from sklearn.metrics import precision_score
precision = precision_score(
y_test,
y_pred
)
print(f"Precision: {precision:.2%}")
Recall
Recall menjawab pertanyaan:
"Dari semua data yang sebenarnya positif, berapa banyak yang berhasil ditemukan oleh model?"
Rumus:
Recall =
TP
-----------
TP + FN
Recall berfokus pada kemampuan model menemukan seluruh kasus positif.
Contoh Recall
Misalnya terdapat:
100 pasien yang sebenarnya sakit
Model berhasil menemukan:
95 pasien
Tetapi:
5 pasien tidak terdeteksi
Maka:
TP = 95
FN = 5
Recall:
Recall =
95 / (95 + 5)
= 0.95
= 95%
Artinya:
Model berhasil menemukan 95% dari seluruh pasien yang sebenarnya positif.
Recall dengan Scikit-learn
from sklearn.metrics import recall_score
recall = recall_score(
y_test,
y_pred
)
print(f"Recall: {recall:.2%}")
Precision vs Recall
Precision dan Recall sering membingungkan bagi pemula.
Cara sederhana memahaminya:
Precision
Fokus pada:
Prediksi positif model dapat dipercaya atau tidak?
Semua yang diprediksi positif
↓
Berapa yang benar?
Recall
Fokus pada:
Berapa banyak kasus positif yang berhasil ditemukan?
Semua yang sebenarnya positif
↓
Berapa yang ditemukan?
Contoh Sederhana
Bayangkan kita memiliki sistem pendeteksi pencuri.
Model mengatakan:
10 orang → terdeteksi sebagai pencuri
Ternyata:
8 memang pencuri
2 bukan pencuri
Precision:
8 / 10 = 80%
Sekarang bayangkan sebenarnya terdapat:
20 pencuri
Model hanya berhasil menemukan:
8 pencuri
Recall:
8 / 20 = 40%
Jadi model memiliki:
Precision = 80%
Recall = 40%
Model cukup akurat ketika mengatakan seseorang pencuri, tetapi masih gagal menemukan banyak pencuri.
Memilih Accuracy, Precision, atau Recall
Tidak ada satu metric yang selalu paling baik.
Pemilihan metric bergantung pada masalah.
Accuracy Cocok Ketika
Accuracy dapat berguna ketika:
- kelas relatif seimbang,
- biaya kesalahan relatif mirip,
- kita ingin mengetahui proporsi prediksi yang benar secara keseluruhan.
Contoh sederhana:
Kucing vs Anjing
Jika jumlah data relatif seimbang, accuracy dapat menjadi metric yang berguna.
Precision Penting Ketika False Positive Mahal
Precision menjadi penting ketika kita ingin mengurangi prediksi positif yang salah.
Contohnya:
Sistem rekomendasi tindakan tertentu
atau sistem yang memberikan peringatan dan kita ingin mengurangi false alarm.
Recall Penting Ketika False Negative Mahal
Recall menjadi penting ketika kita ingin menemukan sebanyak mungkin kasus positif.
Contohnya:
Deteksi penyakit
Deteksi fraud
Deteksi ancaman keamanan
Jika kita terlalu banyak menghasilkan False Negative, kasus penting dapat terlewat.
Evaluation pada Regression
Regression digunakan ketika model memprediksi nilai numerik.
Contoh:
Harga rumah
Harga mobil
Suhu
Penjualan
Pendapatan
Berbeda dengan classification, regression tidak menggunakan Accuracy sebagai metric utama.
Kita ingin mengetahui:
Seberapa dekat prediksi model dengan nilai sebenarnya?
Misalnya:
Harga sebenarnya = 500 juta
Prediksi model = 480 juta
Error:
20 juta
Mean Absolute Error
Mean Absolute Error (MAE) menghitung rata-rata nilai absolut dari selisih antara prediksi dan nilai sebenarnya.
Rumus sederhananya:
MAE =
Σ |nilai_sebenarnya - prediksi|
--------------------------------
n
Semakin kecil MAE, semakin dekat prediksi model dengan nilai sebenarnya.
Contoh MAE
Misalnya kita memiliki:
Actual:
[100, 200, 300]
Prediction:
[110, 180, 290]
Error absolut:
|100 - 110| = 10
|200 - 180| = 20
|300 - 290| = 10
MAE:
(10 + 20 + 10) / 3
= 13.33
Jadi:
MAE = 13.33
MAE dengan Scikit-learn
from sklearn.metrics import mean_absolute_error
mae = mean_absolute_error(
y_test,
y_pred
)
print("MAE:", mae)
Jika target berupa harga dalam rupiah, nilai MAE juga akan berada pada satuan yang sama.
Misalnya:
MAE = 25.000.000
Artinya secara rata-rata prediksi model memiliki selisih absolut sekitar:
Rp25.000.000
dari nilai sebenarnya.
Mean Squared Error
Mean Squared Error (MSE) menghitung rata-rata kuadrat error.
Rumus:
MSE =
Σ (nilai_sebenarnya - prediksi)²
---------------------------------
n
Karena error dikuadratkan, error yang besar akan mendapatkan penalti yang lebih besar.
Contoh MSE
Menggunakan data sebelumnya:
Actual:
[100, 200, 300]
Prediction:
[110, 180, 290]
Error:
10
-20
10
Kuadrat error:
100
400
100
MSE:
(100 + 400 + 100) / 3
= 200
Jadi:
MSE = 200
MSE dengan Scikit-learn
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(
y_test,
y_pred
)
print("MSE:", mse)
MAE vs MSE
Perbedaannya:
| MAE | MSE |
|---|---|
| Menggunakan nilai absolut | Menggunakan kuadrat error |
| Lebih mudah diinterpretasikan | Lebih sensitif terhadap error besar |
| Berada pada satuan target | Satuannya menjadi kuadrat |
| Cocok untuk melihat rata-rata error | Berguna ketika error besar perlu diberi penalti lebih kuat |
Secara sederhana:
MAE
→ Seberapa jauh rata-rata prediksi dari nilai sebenarnya?
MSE
→ Memberikan penalti lebih besar terhadap error yang besar.