Confusion Matrix untuk Evaluasi Model pada Supervised Learning

Contoh: Untuk Pemodelan Klasifikasi Biner

Kuncahyo Setyo Nugroho
8 min readNov 13, 2019

Ketika berhadapan dengan permasalahan machine learning timbul banyak pertanyaan “bagaimana cara mendapatkan model yang paling baik?”. Oleh karena itu, mengukur kinerja suatu model yang telah kita buat merupakan langkah penting dalam machine learning sehingga dapat menjadi pertimbangan untuk memilih model “terbaik”. Salah satu teknik yang dapat digunakan untuk mengukur kinerja suatu model khusunya kasus klasifikasi (supervised learning) pada machine learning adalah confusion matrix.

Saya berharap tulisan ini dapat membantu anda untuk lebih memahami tentang confusion matrix. Selamat membaca 😀

Photo by Roman Mager on Unsplash.

Apa itu confusion matrix dan mengapa kita memerlukan itu ?

Confusion matrix juga sering disebut error matrix. Pada dasarnya confusion matrix memberikan informasi perbandingan hasil klasifikasi yang dilakukan oleh sistem (model) dengan hasil klasifikasi sebenarnya. Confusion matrix berbentuk tabel matriks yang menggambarkan kinerja model klasifikasi pada serangkaian data uji yang nilai sebenarnya diketahui. Gambar dibawah ini merupakan confusion matrix dengan 4 kombinasi nilai prediksi dan nilai aktual yang berbeda. Perhatikan gambar dibawah ini:

Confusion Matrix

Terdapat 4 istilah sebagai representasi hasil proses klasifikasi pada confusion matrix. Keempat istilah tersebut adalah True Positive (TP), True Negative (TN), False Positive (FP) dan False Negative (FN). Agar lebih mudah memahaminya, saya menggunakan contoh kasus sederhana untuk memprediksi seorang pasien menderita kanker atau tidak.

  • True Positive (TP)
    Merupakan data positif yang diprediksi benar. Contohnya, pasien menderita kanker (class 1) dan dari model yang dibuat memprediksi pasien tersebut menderita kanker (class 1).
  • True Negative (TN)
    Merupakan data negatif yang diprediksi benar. Contohnya, pasien tidak menderita kanker (class 2) dan dari model yang dibuat memprediksi pasien tersebut tidak menderita kanker (class 2).
  • False Postive (FP) — Type I Error
    Merupakan data negatif namun diprediksi sebagai data positif. Contohnya, pasien tidak menderita kanker (class 2) tetapi dari model yang telah memprediksi pasien tersebut menderita kanker (class 1).
  • False Negative (FN)Type II Error
    Merupakan data positif namun diprediksi sebagai data negatif. Contohnya, pasien menderita kanker (class 1) tetapi dari model yang dibuat memprediksi pasien tersebut tidak menderita kanker (class 2).

Pada beberapa kasus “Type II Error” lebih berbahaya, kita dapat menghubungkan pernyataan itu dengan contoh prediksi kanker diatas. Jika pasien tidak menderita kanker tetapi diprediksi menderita kanker (FP), maka pada diagnosa selanjutnya pasien tersebut dapat mengetahui keadaan sebenarnya bahwa pasien tersebut benar tidak menderita kanker. Tetapi jika ada pasien yang sebenarnya menderita kanker tetapi diprediksi tidak menderita kanker (FN), maka pasien tersebut akan mengetahui keadaan sebenarnya dengan sangat terlambat dan pasien tersebut tidak segera mengambil tindakan pencegahan medis untuk kanker itu. Sehingga dapat menyebabkan kondisi pasien yang semakin memburuk setiap harinya bahkan kematian. Jadi dapat dikatakan bahwa “Type II Error” lebih berbahaya.

Ada cara yang lebih mudah untuk mengingatnya, yaitu:

  • Jika diawali dengan True maka prediksinya adalah benar, entah diprediksi terjadi atau tidak terjadi.
  • Jika diawali dengan False maka prediksinya adalah salah.
  • Positif dan negatif merupakan hasil prediksi dari model.

Tentunya kita ingin model yang telah kita buat memberikan 0 false positive dan 0 false negative. Tetapi pada prakteknya hal tersebut tidak akan pernah terjadi karena model mana pun tidak akan memberikan keakuratan 100%. Jika model anda memberikan nilai 100% maka ada masalah pada model yang anda buat atau data yang anda gunakan.

Mengapa kita memerlukan confusion matrix ?

Seperti yang telah dijelaskan diatas, confusion matrix akan memberi tahu seberapa baik model yang kita buat. Secara khusus confusion matrix juga memberikan informasi tentang TP, FP, TN, dan FN. Hal ini sangat berguna karena hasil dari klasifikasi umumnya tidak dapat diekspresikan dengan baik dalam satu angka saja.

Dengan contoh yang sama untuk memprediksi kanker, anda akan mencoba memprediksi siapa yang akan mati karena kanker tahun ini berdasarkan perilaku seperti merokok dari seluruh populasi. Pada tahun tertentu, hanya 1% populasi yang mati karena kanker. Algoritma klasifikasi naif hanya akan memprediksi tidak ada yang mati karena kanker. Dengan confusion matrix memungkinkan kita untuk melihat dengan cepat, dari siapa yang akan diprediksi mati, berapa banyak yang mati dan yang tidak.

Berikut adalah beberapa manfaat dari confusion matrix:

  1. Menunjukkan bagaimana model ketika membuat prediksi.
  2. Tidak hanya memberi informasi tentang kesalahan yang dibuat oleh model tetapi juga jenis kesalahan yang dibuat.
  3. Setiap kolom dari confusion matrix merepresentasikan instance dari kelas prediksi.
  4. Setiap baris dari confusion matrix mewakili instance dari kelas aktual.

Contoh confusion matrix pada klasifikasi biner

Klasifikasi biner akan menghasilkan ouput dengan dua kelas (0 / 1) untuk data input yang diberikan.

Confusion matrix dapat digunakan untuk mengukur performa dalam permasalahan klasifikasi biner maupun permasalahan klasifikasi multiclass. Klasifikasi biner hanya menghasilkan dua ouput kelas (label), seperti “Ya” atau “Tidak”, “0” atau “1” untuk setiap data input yang diberikan. Kelas utama biasanya dinotasikan sebagai data positif dan yang lainnya sebagai data negatif.

Sebagai contoh, sebuah model akan dilatih untuk memprediksi apakah seorang pasien sedang menderita kanker atau tidak. Dengan asumsi terdapat 20 pasien dengan 9 pasien positif kanker dan 11 pasien negatif kanker, maka contoh confusion matrix yang dihasilkan model seperti dibawah ini :

Contoh confusion matrix untuk klasifikasi biner

Jika dilihat dari confusion matrix diatas dari 9 pasien positif kanker, model memprediksi ada 3 pasien yang diprediksi negatif kanker (FN), dan dari 11 pasien negatif kanker, model memprediksi ada 2 pasien yang diprediksi positif kanker (FP). Prediksi yang benar terletak pada tabel diagonal (garis bawah merah), sehingga secara visual sangat mudah untuk melihat kesalahan prediksi karena kesalahan prediksi berada di luar tabel diagonal confusion matrix.

Bagaimana mengukur performance metrics dari confusion matrix ?

Kita dapat menggunakan confusion matrix untuk menghitung berbagai performance metrics untuk mengukur kinerja model yang telah dibuat. Pada bagian ini mari kita pahami beberapa performance metrics populer yang umum dan sering digunakan: accuracy, precission, dan recall.

Accuracy

Accuracy menggambarkan seberapa akurat model dapat mengklasifikasikan dengan benar. Maka, accuracy merupakan rasio prediksi benar (positif dan negatif) dengan keseluruhan data. Dengan kata lain, accuracy merupakan tingkat kedekatan nilai prediksi dengan nilai aktual (sebenarnya). Nilai accuracy dapat diperoleh dengan persamaan (1).

Confusion matrix yang menggambarkan nilai accuracy.
Persamaan nilai accuracy.

Dari contoh confusion matrix klasifikasi biner diatas maka dengan menghitung nilai accuracy dapat menjawab pertanyaan “Berapa persen pasien yang benar diprediksi menderita kanker maupun yang tidak menderita kanker dari kesuluruhan pasien?”

Menghitung nilai accuracy dari contoh confusion matrix klasifikasi biner.

Precision (Positive Predictive Value)

Precision menggambarkan tingkat keakuratan antara data yang diminta dengan hasil prediksi yang diberikan oleh model. Maka, precision merupakan rasio prediksi benar positif dibandingkan dengan keseluruhan hasil yang diprediksi positf. Dari semua kelas positif yang telah di prediksi dengan benar, berapa banyak data yang benar-benar positif. Nilai precision dapat diperoleh dengan persamaan (2).

Confusion matrix yang menggambarkan nilai precison.
Persamaan nilai precision.

Dari contoh confusion matrix klasifikasi biner diatas maka dengan menghitung nilai precision dapat menjawab pertanyaan “Berapa persen pasien yang benar menderita kanker dari keseluruhan pasien yang diprediksi menderita kanker?”

Menghitung nilai precision dari contoh confusion matrix klasifikasi biner.

Recall atau Sensitivity (True Positive Rate)

Recall menggambarkan keberhasilan model dalam menemukan kembali sebuah informasi. Maka, recall merupakan rasio prediksi benar positif dibandingkan dengan keseluruhan data yang benar positif. Nilai recall dapat diperoleh dengan persamaan (3).

Confusion matrix yang menggambarkan nilai recall.
Persamaan nilai recall.

Dari contoh confusion matrix klasifikasi biner diatas maka dengan menghitung nilai recall dapat menjawab pertanyaan “Berapa persen pasien yang diprediksi kanker dibandingkan keseluruhan pasien yang sebenarnya menderita kanker”.

Menghitung nilai recall dari contoh confusion matrix klasifikasi biner.

Confusion Matrix pada Python

Pada bagian ini saya akan memberikan contoh bagaimana cara membuat model sederhana untuk prediksi dan menampilkan confusion matrixnya untuk menghitung beberapa performance metrics pada python. Kita membutuhkan library scikit-learn untuk menghasilkan confusion matrix, jadi pastikan anda telah menginstallnya terlebih dahulu. Fungsi confusion_matrix()akan menghitung confusion matrix pada model dan mengembalikan hasilnya dalam bentuk array.

Dataset yang Digunakan

Saya menggunakan dataset diagnosa kanker payudara dari kaggle untuk melakukan prediksi penderita kanker. Disarankan anda untuk mengunduh dataset dan mengikuti langkah yang ada pada tulisan ini.

import pandas as pd
import numpy as np
# membaca dataset
data = pd.read_csv("data/breast-cancer-wisconsin-data.csv")
# mengahapus kolom yang tidak digunakan
data.drop(["Unnamed: 32","id"], axis=1, inplace=True)
# merubah label M(ganas) = 1 dan B(jinak) = 0
data.diagnosis = [1 if each == "M" else 0 for each in data.diagnosis]
data.head(3) # menampilkan sample data
Contoh dataset (menggunakan Pandas.head)

Membagi Dataset dan Membuat Model Prediksi

Dataset dibagi ke dalam data latih dan data uji, data latih digunakan untuk melatih model yang telah dibuat sedangkan evaluasinya akan dilakukan pada data uji.

from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=42)

Selanjutnya, kita akan membuat model sederhana menggunakan Decision Tree untuk melakukan prediksi.

from sklearn.tree import DecisionTreeClassifiermodel = DecisionTreeClassifier()
model.fit(x_train, y_train)
y_pred = model.predict(x_test) # prediksi

Evaluasi Model menggunakan Confusion Matrix

Kita akan menggunakan confusion matrix untuk mengevaluasi model yang sudah kita buat sebelumnya.

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)
# ouput
# array([[95, 3],
# [ 2, 43]])

Kita dapat memvisualisasikan confusion matrix tersebut untuk memudahkan dalam mengevaluasi.

import seaborn as sns
import matplotlib.pyplot as plt
f, ax = plt.subplots(figsize=(8,5))
sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt=".0f", ax=ax)
plt.xlabel("y_head")
plt.ylabel("y_true")
plt.show()
Visualisasi dari confusion matrix.

Seberapa baik model kita ?

Seperti yang sudah saya jelaskan diatas, dengan confusion matrix kita dapat mengetahui keakuratan dari model yang kita buat dengan performance metrics seperti: accuracy, recall, dan precision.

from sklearn.metrics import cclassification_report
print (classification_report(y_test, y_pred))
# ouput
# precision recall f1-score support
0 0.98 0.97 0.97 98
1 0.93 0.96 0.95 45
accuracy 0.97 143
macro avg 0.96 0.96 0.96 143
weighted avg 0.97 0.97 0.97 143

Penutup dan saran belajar lanjutan

Tulisan ini hanya menjabarkan teori secara umum serta praktek ringkas untuk confusion matrix. Oleh karena itu, ada beberapa saran belajar lanjutan agar anda lebih memahami tentang confusion matrix, antara lain: bagaimana menghitung confusion matrix pada permasalahan klasifikasi multiclass dan tentunya yang lebih penting adalah bagaimana cara memilih performance metric yang tepat untuk kasus anda sehingga anda dapat menjawab pertanyaan “bagaimana cara mendapatkan model yang paling baik?”.

Pada tulisan berikutnya saya akan membahas lebih dalam tentang confusion matrix dengan mengukur performance metrics lainnya. Selamat ‘pusing’ dengan confusion matrix 😀

Referensi

  1. Kohavi, Ron and Foster Provost, eds. 1998. “Glossary of Terms.” Special Issue on Applications of Machine Learning and the Knowledge Discovery Process, Machine Learning, vol. 30, pp. 271–274, Kluwer Academic Publishers.
  2. Narkhede, Sarang. 2018. “Understanding Confusion Matrix.” Towards Data Science, via Medium.
  3. Brownlee, Jason. 2016. “What is a Confusion Matrix in Machine Learning.” Machine Learning Mastery.
  4. Scikit-Learn Confusion Matrix (https://scikit-learn.org/stable/modules/generated/sklearn.metrics.confusion_matrix.html)
  5. Scikit-Learn Classification Report (https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html)

--

--

Kuncahyo Setyo Nugroho

Learn about Computer Science. Interested in the scientific field of Artificial Intelligence, related to Natural Language Processing. ☕