Proses Machine Learning Dasar (Part 2)

Posting ini kelanjutan dari posting machine learning dasar (Part 1). Pada part 1 kita belajar untuk mengenali masalah dan menyeleksi solusi. Sekarang kita akan mencoba mempraktekkan yang kita pelajari di part-1.

Untuk praktek kali ini saya menggunakan Python dan Anaconda. Anaconda adalah kumpulan library dalam bahasa python untuk machine learning. Didalamnya terdapat scikit-learn yang berisi algoritma-algoritma machine learning.

Pertama kita definisikan masalah kita adalah memprediksi apakah seseorang terkena diabetes atau tidak. Disini masalah kita definisikan sendiri. Dalam praktiknya masalah ini biasanya didefinisikan oleh client atau user.

anaconda_logo

Untuk menjawab permasalahan tersebut kita ambil data. Dalam praktiknya lagi-lagi data ini biasanya disediakan oleh client atau user. Kalau data ini tidak disediakan maka tugas kita adalah mencari data yang semirip mungkin dengan data yang kita perlukan. Dalam kasus kita karena masalah kita adalah memprediksi pakah sesorang menderita diabetes atau tidak maka kita memerlukan data pasien yang telah didiagnosa dengan hasil terkena diabetes dan yang tidak terkena diabetes. Untungnya data tersebut tersedia di sini. Meskipun data ini adalah diagnosis orang India tapi data ini cukup mirip untuk membantu menyelesaikan masalah kita.

Berdasarkan paparan masalah dan data diatas sudah jelas ini adalah permasalahan classification / supervised learning. Karena tujuannya adalah mengelompokkan data ke dalam kelompok-kelompok yang sudah diketahui sebelumnya. Dalam hal ini kelompok pengidap diabetes dan kelompok yang bukan pengidap diabetes.

Ada beberapa algoritma di yang bisa kita gunakan untuk masalah ini antara lain K-Nearest neighbors, Decision Tree, Naive Bayes, dsb-nya. Untuk hasil optimal maka semua algoritma ini harus dicoba untuk mendapatkan model terbaik yang bisa memprediksi dengan hasil paling akurat. Akan tetapi sering kali mencoba semua algoritma yang ada bukanlah opsi yang dimiliki di setiap project machine learning. Hal ini dikarenakan keterbatasan waktu, biaya dsb-nya.

Kalau ini hambatannya biasanya di tentukan nilai akurasi yang bisa diterima, misal. Akurasi minimal adalah 70%. Dan algotima pertama yang memenuhi akurasi ini maka modelnya akan diterima. Untuk posting ini kita hanya akan mencoba K-Nearest neighbors. Karena keterbatasan waktu juga untuk mengulas semua algoritma 🙂 Tapi kalo ada waktu dan kesempatan silakan saja explore algoritma lainnya untuk mendapatkan hasil optimal.

K Nearest Neighbors adalah algoritma classification yang cukup luas digunakan. Algoritma ini mendasarkan pada tetangga terdekat dari data tersebut. Dalam kasus diabetes kita kali ini, sesorang didiagnosa terkena diabetes atau tidak tergantung dari orang (atau sejumlah orang) yang memiliki kondisi paling mirip dengan orang tersebut.

OK selanjutnya kita akan masuk ke kode. Setelah anaconda terinstall, jalankan jupyter notebook. Kode-kode dibawah ini bisa dijalankan di jupyter notebook.

Import data dengan Numpy lalu bagi menjadi observation dan target. Observation dalam kasus ini adalah data pasien dan ciri-ciri pasien tersebut. Dalam observation tidak ada hasil diagnosis apakah pasien tersebut terkena diabetes atau tidak. Target dalam hal ini adalah hasil diagnosis apakah pasien tersebut terkena diabetes atau tidak. Berikut kode dalam python untuk import data dan membagi data menjadi observation dan target:

import numpy as np

dataset=np.loadtxt('pima-indians-diabetes.data',delimiter=',')
print(dataset.shape)
observation=dataset[:,0:7]
target=dataset[:,8]

Prose selanjutnya adalah membagi observation dan target tersebut menjadi dua bagian yang disebut train dan test. Hal ini disebut train-test split. Model yang akan memprediksi diabetes akan dibuat menggunakan data train. Selanjutnya model tersebut akan di test akurasinya dengan menggunakan data test. Tujuan dari metode train-test split ini adalah untuk mencegah overfitting dari suatu model.

Overfitting adalah kondisi dimana model tersebut sangat akurat memprediksi semua data yang kita punya hanya dikarenakan kita menggunakan semua data yang ada untuk menciptakan model tersebut. Dalam hal ini tidak ada pengecekan akurasi terhadap model tersebut. Dengan membagi data yang kita punya menjadi train dan test maka akurasi model kita bisa di test dengan menggunakan data test sehingga kemungkinan overfitting bisa ditekan dan kemampuan model memprediksi data baru dikemudian hari menjadi lebih akurat dibanding model yang overfit.

Berikut kode untuk melakukan train-test split.

from sklearn.cross_validation import train_test_split

observation_train, observation_test, target_train, target_test = train_test_split(observation, target, test_size=0.2, random_state=10)

OK segini dulu hope this helps 🙂

Proses Machine Learning Dasar (Part 1)

scikit-learn-logo-small

Maaf banget vakum selama beberapa bulan karena ada pekerjaan yang cukup menyita waktu bahkan ketika weekend pun harus kerja. Setelah ada beberapa message ke saya untuk melanjutkan lagi blog ini (sebenernya gak pernah berniat untuk meninggalkan blog ini selamanya sih) jadinya dibikin posting ini setelah sekian lama.

Posting ini tentang proses machine learning dasar untuk menganalisa data. Seperti pada postingan sebelumnya dimana Big Data itu akan jauh lebih berharga jika ‘dihiasi’ dengan machine learning, maka fokus area berikutnya tentunya adalah machine learning.

Posting ini seperti titlenya adalah posting dasar dari proses machine learning untuk mendapatkan model yang bisa digunakan untuk memproses data. Posting ini merupakan langkah umum yang dilalui ketika kita menggunakan algoritma machine learning untuk menganalisa dan mengolah data. Pada posting kali ini saya kan menggunakan scikit-learn karena tool ini cukup populer dan cukup gampang untuk dipelajari. Scikit-learn memakai baha Python. Jadi kalo belum familiar dengan Python saya sarankan ikut tutorial singkatnya untuk mulai mehaminya. Python cukup mudah dipeljari jadi seharusnya gak perlu waktu lama untuk belajar python.

OK enough chit chat skrg waktunya mulai belajar. Kita akan membagi menjadi beberapa step dan melihat apa yang bisa kita lakukan di setiap step dengan menggunakan python.

kmeans

Langkah pertama adalah identifikasi masalah. Hal ini sudah jelas harus dilakukan. Apa masalah atau tujuan yang hendak dicapai dengan proses machine learning ini. Selain identifikasi masalah pastikan juga data yang mendukung untuk menyelesaikan masalah itu ada. Karena tanpa data, maka masalah ini tidak bisa diselesaikan dengan machine learning. Untuk kali ini kita akan mengambil masalah atau tujuan yaitu untuk mendeteksi apakah seseorang terkena diabetes atau tidak. Data untuk mendukung untuk menyelesaikan masalah itu adalah data pasien yang telah didiagnosis diabetes (baik terkena atau tidak). Data tersebut bisa di dapat di sini.

Dari masalah dan data ini maka bisa disimpulkan bahwa ini adalah supervised learning dan classification binary class. Supervised learning karena dari data kita sudah ada label (label berarti terdapat hasil akhir diagnosis apakah terkena diabetes atau tidak). Penjelasan singkat mengenai supervised learning dan unsupervised learning bisa dilihat di posting sebelumnya disini. Sehingga model nanti akan belajar menemukan pola berdasarkan data yang sudah mendapat label. Classification berarti mengelompokkan data ke dalam kelompok yang sudah kita tentukan sebelumnya (kelompok terkena diabetes dan kelompok tidak terkena diabetes). Classification binary class berarti label atau kelas pengelompokkan hanya ada dua (terkena diabetes dan tidak terkena diabetes). Sampai disini kita tidak menggunakan python. Cukup perlu mengetahui dasar-dasar dan teori dari machine learning untuk mengidentifikasi masalah.

Langkah selanjutnya adalah seleksi solusi. Dari sini mulai tergantung dari teknologi yang kita gunakan untuk menyelesaikan masalah. Dari langkah sebelumnya kita tahu bahwa ini adalah classification dengan binary class. Dari masalah itu kita lihat teknologi atau tools yang kita gunakan, apa sajar library atau algoritma yang disediakan untuk masalah ini. Karena sebelumnya kita akan menggunakan python dan scikit learn maka kita bisa lihat algoritma apa saja yang cocok untuk masalah ini. Ada beberapa algoritma classification yang tersedia  dari scikit learn misalnya K-Nearest Neighborhood,  Logistic Regression, SVM, Decision Tree. Jika kita memakai teknnologi lain misalnya Apache Spark atau Apache Flink, pilihan algoritmanya bisa saja berbeda tergantung yang diimplementasikan di tools tersebut.

Idealnya untuk mendapatkan model terbaik maka semua algoritma yang tersedia di tools tersebut harus dicoba untuk mendapatkan model terbaik. Akan tetapi seringkali hal ini tidak memungkinkan bahkan untuk data scientist yang cukup berpengalaman. Penyebabnya bisa karena waktu yang tidak cukup, atau pengetahuan tentang algoritma yang kurang memadai. Untuk pemula, sebaiknya dipilih sedikit (biasanya cukup satu dulu) yang sederhana dan mudah dipahami. Misalnya untuk kasus ini kita akan pilih algoritma K-Nearest Neighborhood. Algoritma ini cukup sederhana yaitu label dari suatu data ditentukan dari kedekatan data tersebut dengan data lainnya. Dengan kata lain, untuk kasus kita, seseorang didiagnosis terkena diabetes atau tidak ditentukan oleh orang lain (atau beberapa orang lain) yang memiliki gejala paling mirip dengan orang yang kita diagnosis.

OK segini aja dulu untuk part 1 untuk pemanasan setelah berbulan2 gak posting. Nanti part 2 akan mulai hands on dengan beberapa kode.

Enjoy 🙂

PrestoDB – a late report

prestodb

I am very late on two things. I missed last week post and the technology I am going to discuss here has been popular in the last few years. Today post is about PrestoDB or Presto for short. For those of you who are like me few months ago, Presto is NOT a database. I know it ends with DB in it but it is not a database. It is a query engine to query database(s).

Query engine is just a tool that acts like middleware between client and the real data storage or database. But if it is just an extra layer would it be just slowing down the query time? We’ll find out.

Lanjutkan membaca “PrestoDB – a late report”

Prosedur Umum Machine Learning – Part 2

machine-learning-370x229

Image souce: opsrule.com

Posting kali ini adalah kelanjutan dari sebelumnya. Well, doh kan emang Part-2, hehehe. Masih seputar prosedur dalam implementasi machine learning, setelah sebelumnya kita membicarakan teknologi yang bisa digunakan untuk machine learning berikut dengan pros dan cons-nya. Kali ini lebih ke arah non-teknisnya.

Hal non-teknis yang dimaksudkan disini adalah hal yang berhubungan dengan domain data dan permasalahan yang dihadapi top level manajemen. Domain data adalah hal yang berhubungan dengan sumber data. Misalnya adalah data dari industri telekomunikasi dan data dari industri kesehatan merupakan dua domain yang berbeda. Sedangkan permasalahan di level top manajemen seperti misalnya bagaimana meningkatkan penjualan? bagaimana mengurangi konsumen yang kecewa? dan sebagainya.

Lanjutkan membaca “Prosedur Umum Machine Learning – Part 2”

Prosedur Umum Machine Learning – Part 1

machine-learning-370x229

Image source: opsrule.com

Saya minta maaf sekali karena sudah lama tidak posting di blog ini karena cukup sibuk dengan project saya. Kali ini saya akan posting dalam bahasa indonesia dan bukan teknikal. Posting kali ini lebih tentang proses atau prosedur aplikasi machine learning.

Posting kali ini didasari dari pengalaman saya membantu klien dalam perjalanan mereka mendapatkan ‘harta karun’ tersembunyi dari tumpukan data yang mereka punyai. Apa hubungannya dengan Big Data? Big data memungkinkan untuk mendapatkan ‘harta karun’ itu meskipun tumpukan harta tersebut luar biasa besar (paling tidak ratusan Giga Bytes).

Secara umum ada dua cara untuk mendapatkan insight dari data kita. Pertama dengan analisis konvensional. Hal ini baisanya melibatkan query dari data-data kita dengan menggunakan pengetahuan tentang bisnis proses yang sudah kita miliki.

Hal ini umum dilakukan akan tetapi memiliki keterbatasan. Pertama hanya terbatas untuk data yang sudah terstruktur, dalam tabel database. Kedua umumnya teknik ini susah diimplementasikan untuk data yang sangat besar. Susah dalam hal ini bisa jadi tidak mungkin atau sangat lambat jika harus menjalankan query untuk data yang sangat besar. Apalagi dengan format yang berbeda-beda. Hal ini berlaku untuk sistem yang tidak menggunakan Big Data.

Ketiga adalah teknik konvensional ini tidak bisa mendapatkan informasi di luar data yang sudah ada. Informasi yang saya maksudkan disini misalnya informasi tentang prediksi di masa depan, pengelompokkan data secara fuzzy yang tidak kaku (misalnya pengelompokkan email spam/no spam di GMail), dsb-nya.

Meskipun memiliki keterbatasan-keterbatasan tersebut teknik ini masih tetap berguna karena bisa memberikan gambaran yang lengkap dan cepat dari data yang kita punya. teknik ini masih menjadi yang paling banyak digunakan di dunia. Untuk implementasinya sudah saya sebutkan diatas menggunakan query/SQL pada database berbasis SQL yang lazim digunakan untuk menyimpan data. Atau menggunakan tools untuk melakukan query pada sistem Big Data misalnya Map Reduce, Hive, Pig, Impala, Spark dan lain-lain.

Kedua adalah teknik analisis dengan menggunakan machine learning. Seperti yang pernah saya sebutkan di posting saya sebelumnya. Machine learning untuk teknologi Big Data merupakan pencapaian tertinggi saat ini. Karena dengan machine learning kita bisa mendapatkan informasi lebih dari data yang sudah kita miliki. Dengan machine learning kita bisa membuat model yang bisa memprediksi masa depan, mengenali data yang baru/belum pernah kita tangani sebelumnya, dsb-nya. Yang kesemuanya itu pada akhirnya bisa digunakan untuk mendongkrak pemasukan. Memang hasil dari machine learning tidak bisa memprediksi 100% secara akurat tetapi meskipun, misalnya, hanya menambah 10% saja sudah cukup signifikan untuk suatu perusahaan.

Untuk implementasi teknik machine learning ini sudah saya banyak bahas di posting sebelumnya yaitu dengan menggunakan banyak library yang sudah ada seperti Spark MLLib, Flink, Scikit learn, dsb-nya. Untuk dua pilihan pertama umumnya ditujukan untuk big data sedangkan yang terakhir untuk data yang lebih kecil. Sedikit informasi. Apache Flink yang saya tuliskan dalam posting beberapa waktu lalu kini telah menjapai tingkat maturity yang cukup bagus dengan di release-nya versi 1.0. Sepertinya memang Apache Spark punya saingan yang cukup kuat.

Meskipun Scikit-learn tidak bisa menganalisis data sebesar Spark atau Flink, bukan berarti untuk Anda yang memiliki data besar, hal ini tidak bisa digunakan. Dalam dunia statistik dikenal istilah sampling. Dimana untuk mendapatkan gambaran sebuah data yang besar, kita tidak perlu menganalisis seluruh data tetapi hanya cukup mengambil sebagian data yang cukup representatif dari keseluruhan data dan menganalisa data tersebut untuk mendapatkan gambaran dari keseluruhan data. Dan banyak startup yang memilih cara ini karena bisa digunakan dengan sumber daya (orang, waktu dan uang) yang lebih sedikit.

Pada postingan berikutnya saya akan jelaskan prosedur penggunakan library machine learning ini yang baik dan benar berdasarkan pengalaman saya. So stay tuned.

Scikit-learn for fine-grained Machine Learning

scikit-learn-logo-small

I have spent sometimes on this beautiful machine learning tool lately. That is one of the reasons my posts are late.  It is quite interesting yet useful library. For those machine learning enthusiast you guys should check it out.

I would dedicate this post for this library. A friend of mine who woprks at twitter told me that they prpefer to use this library first than jump into more ‘cool’ machine learning library like Spark’s MLLib. And I can see why.

Lanjutkan membaca “Scikit-learn for fine-grained Machine Learning”

Big Data dengan Google Cloud Platform (Part-2 end)

Post kali ini masih tentang big data dengan menggunakan Google Cloud Platform. Kalau pada posting sebelumnya tidak terkait langsung dengan big data, tetapi tetap sangat penting untuk sistem big data, maka posting kali ini adalah komonen GCE yang berhubungan langsung dengan Big Data.

gcp-header-logo

Bagi yang mengikuti sejarah Big Data, pasti mengetahui bahwa Hadoop, yang merupakan sistem de facto dari bigdata, merupakan hasil reverse engineering dari paper big data Google. Hal ini menunjukkan bahwa Google adalah perusahaan yang cukup mau di bidang big data. Karena itu komponen big data yang mereka gunakan di google cloud platform pasti benar-benar bagus.

Lanjutkan membaca “Big Data dengan Google Cloud Platform (Part-2 end)”

Big Data dengan Google Cloud Platform (Part-1)

Seperti biasa kali ini posting dalam bahasa Indonesia untuk menghoprmati mayoritas pengunjung yang berasal dari Indonesia. Post kali ini membahas tentang salah satu cloud computing service. Kalau sebelumnya beberapa kali saya membahas Amazon Web Service dari Amazon. Maka sekarang saya akan membahas tentang Google Cloud Platform dari Google.

gcp-header-logo

Lanjutkan membaca “Big Data dengan Google Cloud Platform (Part-1)”

Cassandra Common Pitfalls (Part 3 – end)

cassandra

Hello again, this post would be the last post of Cassandra Common Pitfalls serie. After reviewing how to denormalize data to gain performance in query in the first post, and how to handle tombstones on the second post, now it is the time for another query optimization using some advanced and latest features of Cassandra.

Those features are secondary index and materialized view. OK, secondary index is not really new it been around for a while. And if you look on some developers forums like stackoverflow,  people would recommend not to use secondary index. Why? we would explain in details in a second.

Materialized View is a new feature in Cassandra. At least it is relatively new than secondary index. It is just got introduced in Cassandra 3.0. It is created to help query to be more ‘flexible’. So here are the details about the two features.

Lanjutkan membaca “Cassandra Common Pitfalls (Part 3 – end)”

Cassandra Common Pitfalls (Part 2)

cassandra

Hello, little bit late this week  but better than never. To continue my previous post about Cassandra common pitfalls, I shall write another common pitfall that should be avoided.

This post’s pitfall is about tombstone. As the conventional tombstone in cemetery, tombstones mark a grave. In term of Cassandra tombstones also mark a grave. But instead of a dead men, tombstones in cassandra mark dead data. This post is mainly how to avoid tombstone trap.
Lanjutkan membaca “Cassandra Common Pitfalls (Part 2)”