Klasifikasi menggunakan Algoritma Decision Tree
Hello, friends! Bertemu kembali dengan saya di sesi sharing machine learning.
Hari ini kita akan sharing tentang algoritma decision tree atau yang biasa kita sebut sebagai pohon keputusan. Decision tree dengan teknik regresi yang paling terkenal yaitu CART (Classification and Regression Tree) yang diperkenalkan oleh Professor Breimann. Decision tree sendiri sudah sering digunakan untuk menyelesaikan beberapa bidang dalam kasus klasifikasi, misalnya bidang finance, kesehatan, manufacture, dan lainnya. Decision tree merupakan metode paling terkenal dalam menentukan keputusan suatu kasus. Hal ini karena metode ini tidak memerlukan proses pengelolaan pengetahuan terlebih dahulu dan dapat menyelesaikan dengan sederhana kasus-kasus yang memiliki dimensi yang besar (Handayanto & Herlawati, 2020). Decision tree juga dapat menghasilkan performa akurasi yang baik jika data yang digunakan akurat dan relevan.
Ada beberapa tahapan yang harus dilakukan untuk membuat sebuah pohon keputusan, yaitu:
- Menyiapkan data training yang sudah dikelompokkan ke dalam kelas-kelas tertentu.
- Menentukan akar dari pohon keputusan. Akar akan diambil dari atribut yang terpilih, dengan cara menghitung nilai gain dari masing-masing atribut, nilai gain yang paling tinggi yang akan menjadi akar pertama. Tapi, sebelum menghitung nilai gain kita harus menghitung nilai entropynya terlebih dahulu. Untuk menghitungnya dapat digunakan rumus berikut:
Keterangan:
S = himpunan kasus
n = jumlah partisi S
pi = proporsi Si terhadap S
3. Kemudian, hitung nilai gain menggunakan rumus:
Keterangan:
S = himpunan kasus
A = fitur
n = jumlah partisi atribut A
|Si| = proporsi Si terhadap S
|S| = jumlah kasus dalam S
4. Ulangi langkah ke-2 hingga semua record terpartisi.
5. Proses partisi pohon keputusan akan berhenti saat:
- Semua record dalam simpul N mendapat kelas yang sama
- Tidak ada atribut di dalam record yang dipartisi lagi.
- Tidak ada record di dalam cabang yang kosong.
Selanjutnya, kita akan mengimplementasikan algoritma decision tree untuk mengklasifikasi kecurangan (fraud) dalam transaksi kartu kredit. Karena, penting bagi perusahaan kartu kredit untuk dapat mengenali transaksi yang curang sehingga pelanggan tidak dikenakan biaya untuk barang yang mereka tidak beli. Seperti sesi sharing sebelumnya, kita akan melihat tampilan source code dan juga visualisasinya. Sesi sharing kali ini menerapkan metode supervised learning, dimana model algoritma dapat belajar melalui target class atau target variable.
Pada sesi sharing kali ini menggunakan dataset ‘credit card fraud’ yang berisikan transaksi kartu kredit pada September 2013 oleh nasabah kartu kredit Eropa. Atribut V1, V2, …, V28 adalah transformasi nilai PCA yang seharusnya merupakan informasi yang aktual terkait data transaksi, namun tidak dapat ditampilkan karena persetujuan masing-masing pihak. Atribut ‘Time’ mengandung waktu pada saat transaksi. Sedangkan, atribut ‘Amount’ merupakan jumlah transaksi yang dilakukan. Target variable yang digunakan yaitu dengan nama atribut ‘Class’ nilai 1 menunjukan adanya kecurangan, dan 0 sebaliknya.
Seperti biasa, kita harus mengimport semua library yang akan digunakan pada sesi kali ini, yang dapat dilihat pada source code berikut:
Selanjutnya, kita akan mengimport data yang sudah disimpan dalam format csv, dan melihat 5 data teratas pada dataframe.
Lalu, membuang atau mendrop atribut yang tidak akan kita gunakan. Kali ini kita akan mendrop atribut ‘Time’.
Berikutnya, kita akan melihat info dari data tersebut apakah terdapat null atau missing values atau tidak.
Dari hasil diatas, kita dapat melihat bahwa data yang diinputkan berjumlah 284807. Lalu kita dapat lihat ditiap atributnya, semua data tidak terdapat null atau dari hasil diatas dituliskan not-null yang berjumlah sama dengan inputan datanya. Selanjutnya, kita akan melihat kasus fraud dan non-fraud yang terdapat pada transaksi kartu kredit.
Kasus non-fraud dan fraud jumlahnya sangat berbeda jauh, hal ini dapat dinamakan juga sebagai imbalanced class atau ketidakseimbangan kelas. Dimana, terdapat kelas mayoritas yakni non-fraud dan kelas minoritas yakni fraud.
Terdapat atribut yang mempunyai rentang nilai yang sangat besar dibandingkan dengan atribut yang lain, mari kita lihat rata-rata dari atribut ‘Amount’ berikut ini.
Dapat dilihat dari hasil diatas, rata-rata dari masing-masing nilai berbeda jauh dibandingkan dengan atribut lainnya. Untuk itu, perlu dilakukan transformasi data yang akan mengubah data ke dalam rentang nilai dari -1 sampai 1.
Selanjutnya, kita akan melabeli feature dan class target, dan juga splitting data menjadi data latih sebesar 80% dan data uji sebesar 20% dengan cara seperti dibawah ini.
Kali ini kita masuk ke proses yang ditunggu-tunggu yaitu melatih data dengan algoritma Decision Tree menggunakan data latih, lalu data uji akan digunakan untuk membuat prediksi. Kenapa model algoritma harus dilatih menggunakan data terlebih dahulu? Agar dapat memprediksi ketika diberikan data baru, dalam kasus ini data uji dapat dikatakan sebagai data baru karena tidak dilatih terlebih dahulu. Berikut proses training datanya:
Selanjutnya, setelah data kita ditraining kita akan melihat akurasi performance yang dihasilkan oleh algoritma Decision Tree pada kasus ini.
Akurasi yang dihasilkan sebesar 99%, dalam kasus klasifikasi akurasi yang dihasilkan terbilang sangat bagus. Namun, bila diingat bahwa target variable yang terdapat pada data ini terdapat ketidakseimbangan kelas. Maka dari itu, kita tidak bisa hanya melihat performa algoritma dari hasil akurasinya saja. Alternatif pengukuran yang tepat yaitu dengan menggunakan confusion matrix, lalu dilihat nilai precision, recall, dan juga f1-scorenya.
Melalui confusion matrix kita dapat melihat kesalahan prediksi yang terdapat pada sistem, biasanya terdapat ambiguitas antar kelasnya sehingga terjadi misklasifikasi. Dapat dilihat pada confusion matrix bahwa:
- True Positif atau data aktual non-fraud yang terprediksi sebagai non-fraud berjumlah 56854 data,
- True Negatif atau data aktual fraud yang terprediksi sebagai fraud berjumlah 66 data,
- False Positif atau data aktual non-fraud yang terprediksi sebagai fraud berjumlah 21 data,
- False Negatif atau data aktual fraud yang terprediksi sebagai non-fraud berjumlah 21 data.
Kemudian, langkah terakhir yaitu mengukur performa dengan menggunakan precision, recall, dan juga f1-score.
Precision merupakan ketepatan sistem dalam memprediksi data, dalam kasus ini precision yang dihasilkan pada kelas non-fraud sebesar 100%. Lalu, sistem akan mengoreksi kembali apakah hasil precision benar adanya, proses ini disebut dengan recall yang berjumlah 100%. Dari kedua pengukuran ini akan dicari rata-ratanya dengan menggunakan f1-score yang berjumlah 100%. In the other hand, pada kelas fraud hasil precision sebesar 76%, recallnya sebesar 76%, kemudian f1-score sebesar 76%.
Tidak terasa proses klasifikasi berhasil dijalankan sampai dengan pengukuran yang sesuai dengan datanya. Selamat mencoba ya, friends!