Data Analysis Series: Tutorial Membangun DSS Berbasis Naive Bayes Classifier Menggunakan Scikit-Learn dan Flask Framework (1)
Pendahuluan
Pada post sebelumnya sudah dibahas tentang implementasi ANN menggunakan salah satu toolbox ANN di Scilab. Penggunaan dataset real seperti Iris juga sudah ditunjukkan pada post tersebut. Dan...mungkin sekarang muncul pertanyaan bagaimana implementasinya pada aplikasi riil? Mungkin beberapa dari anda bertanya, bagaimana jika sebuah perusahaan ingin mengimplementasikan data analysis di mana end user sendiri yang bisa mengoperasikan dalam pekerjaan sehari-harinya tanpa harus selalu dibantu oleh seorang data analyst?
Well, pada post kali ini saya tunjukkan bagaimana mudahnya membangun aplikasi semacam itu. Saya akan menggunakan beberapa metode dan alat bantu yang belum saya jelaskan pada post sebelumnya, seperti Naive Bayes dan Scikit-Learn. Saya akan jelaskan sekilas pada sub bagian di bawah. Untuk web framework yang akan saya gunakan di sini untuk implementasi, sebelumnya sudah pernah saya bahas pada post beberapa waktu yang lalu.
Naive Bayes
Naive Bayes merupakan metode classifier yang cukup mudah (menurut beberapa artikel ilmiah dan tutorial) untuk dipelajari. Dikatakan naive karena metode ini mengeluarkan asumsi berdasarkan perhitungan peluang, terhadap suatu objek dengan dasar hasil observasi dari objek-objek yang memiliki atribut yang secara naif dianggap saling independen. Sebagai contoh, jika ditemukan seekor binatang dengan ciri-ciri bersirip, bersisik, dan berenang di laut secara naif, metode ini membuat asumsi bahwa berdasarkan perhitungan peluang dari ciri-ciri itu, disimpulkan binatang tersebut adalah seekor ikan.
Bagaimana perhitungannya? Saya menemukan sebuah contoh yang cukup mudah untuk dimengerti pada laman ini. Penjelasannya? Misal, terdapat dataset seperti di bawah ini, dengan dua atribut x dan y.
Di mana pada dataset tersebut terdapat dua kelas, RED dan GREEN. Langkah awal untuk melakukan klasifikasi menggunakan Naive Bayes adalah menghitung Prior Probability (PP), yang akan digunakan untuk menunjukkan 'kondisi' atau fakta dari kelas yang ada. Cara perhitungannya cukup mudah:
Selengkapnya, anda bisa baca pada laman asli artikel tersebut.
Scikit-Learn (sklearn)
Library Python yang satu ini terbilang salah satu yang cukup lengkap dari sisi jenis algoritma yang digunakan. Dokumentasi dan dukungan dari komunitas (saya sebut di sini salah satunya dari Stackoverflow) juga cukup banyak dan mudah ditemukan, daripada Scilab yang pernah saya gunakan pada post sebelumnya.Syarat instalasi dari sklearn ini tidak banyak, cukup SDK Python 2.7x ataupun Python 3.x. Selain itu anda juga harus menginstal Numpy untuk perhitungan scientific dan MatPlotLib untuk visualisasi hasil observasi. Instalasinya cukup mudah, jalankan perintah berikut pada command line anda:
pip install scikit-learn
Jika anda menggunakan Python 2.7x, Atau
pip3 install scikit-learn
Jika anda menggunakan Python 3.x. Sampai di sini, anda bisa langsung mencoba penggunaan sklearn.
Dataset
Dataset yang saya gunakan pada tutorial kali ini adalah Bank Marketing dataset. Dataset ini dapat diunduh dari portal UCI Machine Learning. Dataset ini merupakan catatan marketing sebuah bank yang menghubungi calon nasabah yang mempunyai prospek untuk membuka produk Deposito di bank tersebut. Terdapat 16 atribut yang digunakan di sini mulai dari umur, penghasilan, jumlah saldo rekening dsb. Penjelasan lebih lengkap dan dataset yang digunakan di sini dapat diunduh melalui link ini. Dataset yang digunakan adalah dalam bentuk csv, dan yang akan digunakan adalah row data tanpa header.
Implementasi
Buka text editor favorit anda, misal SublimeText, PyCharm dari Jetbrain ataupun Idle dari Python. Berbeda dengan implementasi menggunakan SciLab/Matlab yang mengharuskan menggunakan interpreter dan compiler dari kedua tool tersebut, untuk implementasi menggunakan sklearn, kita bisa menggunakan tool editor/pemrograman yang lain.
Berikut code Python berikut dengan penjelasannya.
from numpy import genfromtxt
Import library numpy yang akan digunakan untuk mengimpor file csv dan mengkonversinya ke bentuk numpy list.
bank_data = genfromtxt('bank_marketing.csv', delimiter=',')
Terdapat 45211 baris data yang diimpor, dan dengan jumlah atribut sebanyak 16, sehingga terbentuk matriks yang berukuran 45211 x 16
label = genfromtxt('label.csv', delimiter=',')
Berikutnya kita akan melakukan impor data target. Data target di sini berisi kelas target dari data marketing, akan berisi 0 apabila nasabah setuju untuk membuka rekening, dan akan berisi 1 apabila nasabah tidak setuju.
gnb = GaussianNB()
Berikutnya, code di atas adalah inisiasi object Naive Bayes Classifier yang akan digunakan untuk melakukan klasifikasi. Untuk menilai likelihood, pada tutorial in kita akan gunakan distribusi Gaussian. Ada beberapa model distribusi data yang dapat digunakan, akan saya coba bahas pada post lainnya.
y_pred_gnb1 = gnb.fit(bank_data, label).predict(bank_data)
Code di atas kita menginstruksikan model untuk melakukan proses learning (fitting) terhadap data dan label. Sekaligus, kita juga menginstruksikan model untuk melakukan prediksi dari model yang sudah dibangun. Variabel y_pred_gnb1 digunakan untuk menampung hasil training. Dari variabel ini dapat dilihat seberapa akurat model yang kita bangun dalam memprediksi data. Terdapat beberapa mekanisme untuk melakukan sampling saat proses validasi, namun untuk mempermudah pemahaman di sini semua data yang digunakan untuk proses learning digunakan pula untuk testing.
print((label != y_pred_gnb1).sum())
Sampai juga pada potongan code terakhir, yang menunjukkan jumlah data yang gagal/salah diprediksi. Jika semua kode di atas sudah ditulis, kita tinggal save and run untuk mengetahui hasilnya.
Hasil run kode-kode di atas menujukkan terdapat 6575 data atau sekitar 14.94% yang gagal diprediksi, atau dengan kata lain sekitar 85.05% yang berhasil diprediksi.
Kesimpulan
Kesimpulannya, cukup mudah melakukan implementasi menggunakan sklearn. Pilihan algoritmanya juga cukup melimpah, tergantung kebutuhan dan dataset yang akan diolah. Post kali ini akan berlanjut pada post berikutnya yang akan membahas tentang integrasi model classifier ini dengan salah satu web framework Python, sesuai dengan yang sudah saya jelaskan di Pendahuluan di atas.

Komentar
Posting Komentar