Langsung ke konten utama

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.
a
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

Postingan populer dari blog ini

Berkenalan dengan Laravel

Cukup disayangkan, Codeigniter sudah sampai ke tahap "penguburan" - paling tidak ini klaim dari Ellis Lab- dan ini cukup mengusik kenyamanan saya untuk menggunakan CI. Padahal juga sesuai dengan pengakuan rekan-rekan web developer, CI menurut saya cukup mudah dan powerful untuk digunakan dalam membangun sebuah web apps, dan terbukti juga CI sempat jadi trendsetter untuk framework PHP. Saya jadi penasaran framework PHP apa yang jadi the next PHP Framework star setelah CI, setelah menggali informasi beberapa kali, saya temukan Laravel saat ini banyak jadi batu loncatan developer CI. Alasannya sederhana, Laravel banyak kemiripan dengan CI. Dari analisa Google Trends juga terlihat kepopuleran Laravel saat tulisan ini dibuat juga menanjak meskipun masih kalah populer dengan CI (cukup mengherankan CI masih memimpin untuk masalah kepopuleran). Jadi langsung saja saya mencoba mengeksplorasi barang baru ini. Berikut langkah-langkahnya: 0. Install curl 1. Install composer: ...

Perbandingan Algoritme Dynamic Programming, Greedy, dan Backtrack Programming.

Sebetulnya posting ini bisa dibilang sudah kadaluarsa.  But, Better be late than never at all, right mate ? Ok, sebetulnya(lagi) Saya ingin menulis ulang semua yang ada di tugas semester 1 mata kuliah Analisa Algoritme, namun setelah dipikir-pikir lagi rasa-rasanya akan mubadzir, jadi di sini akan Saya gambarkan ulang secara ringkas saja apa perbedaan Dynamic Programming, Greedy dan Backtrack. Sebelum menyentuh ke dalam algoritmenya, Kita lihat terlebih dahulu kasus permasalahannya. Tentu belajar akan lebih mudah apabila tidak hanya dengan mempelajari teorinya saja. Umumnya orang akan lebih semangat apabila ada kasus menarik yang dipelajari. Tentang Knapsack Knapsack sendiri merupakan permasalahan pencuri yang ingin mencuri barang dengan cara memasukkan sebanyak-banyaknya dan seberharga-berharganya barang yang ada ( of course, its a theft ), sejumlah wadah yang pencuri tersebut punya. Diharapkan dengan menerapkan beberapa algoritme ini pencuri dapat meraup keuntungan sebanyak...

Data Analysis Series: Perceptron - Basic Artificial Neural Network

Pendahuluan Pada posting berikut ini saya akan menyampaikan materi tentang (Artificial) Neural Network. Algoritme yang satu ini terinspirasi dari cara kerja sel otak dalam memproses informasi. Sedikit di bawah ini pertama-tama akan saya sampaikam penjelasan bagaimana sel otak bekerja, untuk mempermudah pemahaman bagaimana ANN dapat terinspirasi. Sel Otak (Sumber:  www.wealltest.com ) Seperti yang kita ketahui, otak terdiri atas milyaran sel. Tiap-tiap sel tersebut terbagi atas tiga bagian, yaitu Dendrites, atau receptor, bagian yang menerima sinyal/stimulasi dari sel-sel otak yang lain. Sinyal/stimulasi yang masuk ke dendrite tersebut awalnya berasal dari indra perangsang kita, seperti mata, kulit, telinga, dan lidah. Dari dendrite, sinyal kemudian diteruskan melalui Axon, semacam pipa penghubung, yang mentransmisikan sinyal dari dendrite, untuk ditransmisikan ulang ke sel lain melalui Synapse. Bisa dikatakan, Synapse ini berfungsi sebagai akumulator untuk dari info...