Berkompetisi di Kaggle – Part 2– Melakukan prediksi sederhana
Pada tutorial ini kita akan melakukan submission berdasarkan algoritma yang kita buat. Pertama sekali kita perlu mendownload dataset yang ada dari website kaggle untuk kompetisi titanic.
Simpan file dataset tersebut pada tempat yang mudah di akses.
Kita sekarang sudah dapat meload data tersebut dan melakukan analisa sederhana. Sesuaikan dengan path dari dataset yang anda punya.
Kita dapat melihat 10 data teratas dengan fungsi head pada pandas dataset.
Untuk melihat statistik dari data numerik anda dapat memanggil fungsi describe.
Anda tentu melihat kejanggalan pada hasil dari statistik yang ada. Kita melihat bahwa attribute Age tidak memiliki jumlah yang sesuai dengan kolom lain nya. Hal ini disebabkan oleh null atau value yang hilang. Mari kita lihat lebih dalam lagi untuk attribute tersebut.
Ternyata memang benar terdapat NaN. Hal ini harus kita atasi karena algoritma machine learning akan memproses data yang salah tersebut. Kita harus melakukan pre processing untuk mengisi value yang hilang tersebut. Untuk hal yang sederhana ini kita dapat mengisnya dengan nilai tengah atau median dari data tersebut.
Oke sekarang agar kita tidak bosan maka kita dapat saja mengambil salah satu algoritma klasifikasi dan langsung menghitung akurasinya. Kita akan melakukan coba-coba atau eksperimen dengan data set berikut dan algoritmanya. Attribute yang kita pilih adalah Pclass dan Age. Artinya kita menggunakan 2 attribute atau features tersebut untuk melakukan prediksi. Algoritma yang kita pilih disini adalah LogisticRegression
Kita dapat melihat bahwa akurasi dari algoritma LogisticRegression adalah 69% terhadap data training. Cukup rendah. Tetapi untuk saat ini kita dapat menggunakannya sebagai baseline.
Sekarang kita akan melakukan prediksi terhadap dataset testing. Kita load dan bersihkan dulu data testing sesuai dengan apa yang kita lakukan terhadap Age.
Langsung saja kita lakukan fitting dan training terhadap model tersebut dengan menggunakan data training. Dan prediksi dengan data testing.
Setelah kita mem prediksi kita dapat menyimpan hasil nya pada dataframe dan ditulis ke csv file untuk di submit.
Jika anda melakukan submission terhadap result tersebut anda akan mendapatkan akurasi kurang lebih 66%
Cukup untuk kita jadikan baseline. Selanjutnya pada tutorial berikutnya masih di topik titanic kita akan membandingkan beberapa algoritma dan memilih yang terbaik. Kita juga akan melakukan feature engineering untuk mendapatkan hasil yang lebih baik.
Kita akan melakukan iterasi pada permasalahan titanic tersebut. Kita tidak bisa menyerah pada hasil dan merasa puas hanya dengan satu iterasi saja. Kita harus mengulang kembali proses-proses yang sebelumnya telah kita pelajari.
Anda juga dapat mencoba-coba parameter dan algoritma yang lain seperti SVM, Decision Tree etc.
Selamat melakukan eksplorasi
Cheers
Berkompetisi di Kaggle – Part 1– Perkenalan dengan Platform dan Dataset
Seperti janji pada blog post sebelumnya saya akan mengajak anda untuk berjuang dalam kompetisi data science Kaggle. Kaggle merupakan platform kompetisi untuk data science. Kaggle menggunakan platform tersebut untuk menantang para data scientist untuk menyelesaikan tugas yang telah di tentukan. Jika anda pernah mengikuti competitive programming maka anda mungkin sudah familiar dengan TopCoder dsb. Anda dapat menganggap Kaggle adalah TopCoder untuk Data Scientist
Keuntungannya adalah data set yang digunakan adalah data set yang sudah baik dan hanya membutuhkan sedikit data cleansing. Bentuk nya tabular sehingga memudahkan kita untuk melakukan eksplorasi dan pemodelan.
Di kaggle banyak kompetisi yang berjalan, oleh karena itu kita akan memilih kompetisi yang mudah untuk dijadikan sebagai bahan latihan. Project Hello World di kaggle adalah kompetisi Titanic. Dalam kompetisi titanic kita akan memprediksi mana saja penumpang yang akan bertahan hidup atau selamat.
Segera saja kita mulai tanpa panjang lebar. Buka website berikut
https://www.kaggle.com/c/titanic
Lakukan registrasi jika anda baru pertama kali. Anda dapat sign in dengan menggunakan google plus, facebook ataupun twitter.
Hal yang pertama sekali perlu dilakukan adalah memahami deskripsi dari masalah yang ada. Hal ini dapat di lihat pada bagian description.
Dari dekripsi tersebut kita mengetahui bahwa kompetisi ini tujuannya adalah memberikan tutorial bagi para pemula dalam kontes machine learning. Kita juga mengetahui bahwa tugas yang di berikan adalah memprediksi penumpang selamat atau tidak. Jadi tugas ini merupakan binary classification yang artinya memilih dari 2 pilihan ( selamat atau tidak )
Setelah anda mengetahui masalah yang harus dipecahkan tentu saja selanjutnya kita ingin melihat bagaimana kita akan melakukan deliverables nya. Format dari deliverables yang akan kita submit.
Dari penjelasan diatas kita dapat mempelajari format dari submission. Kita diminta untuk mensubmit file dengan format yang telah ditentukan.
Kita sudah mempelajari bagaimana submission nya, sekarang kita masuk ke bagian yang lebih seru yaitu mempelajari data yang ada dan formatnya. Kita dapat melihat di tab Data page.
Kita dapat melihat penjelasan dari data yang telah disediakan untuk kompetisi titanic.
Data set dibagi menjadi dua yaitu training data set dan test data set. Training data set akan kita gunakan untuk membuat model. Test data set adalah dataset yang kita pakai untuk membuat prediksi apakah selamat atau tidak.
Selain kedua data set tersebut kita juga diberikan contoh dari file submission yaitu gender_submission.csv
Mari kita perhatikan isi data set tersebut satu persatu. Pertama-tama kita akan melihat data set training
Kita dapat melihat bahwa formatnya adalah CSV dan kita juga mempunya header. Kolom yang akan di prediksi juga sudah tersedia yaitu kolom Survived. Mari kita lihat apa perbedaannya dengan test dataset.
Test dataset memiliki struktur yang sama dengan train dataset hanya saja tidak memiliki kolom survived. Oke sekarang kita akan melihat dataset terakhir yaitu submission.
Seperti yang kita lihat kita hanya memiliki dua kolom atau attribute yaitu passenger id dan status selamat atau tidak. File ini adalah file yang sudah memiliki format yang sesuai dengan penjelasan untuk submission. Kita dapat langsung saja mensubmit file ini ke Kaggle untuk Titanic.
Mari kita submit dan lihat hasil dari akurasi prediksi dari file tersebut. Untuk saat ini kita belum melakukan modeling atau bagaimana file tersebut dihasilkan, yang ingin kita dapatkan adalah sense dari bertanding di kaggle secara end to end. File di atas kemungkinan dihasilkan oleh salah satu algorithm blackbox yang dapat digunakan untuk binary classifier.
Klik submit prediction yang telah di sediakan.
Langsung saja drag and drop gender_submission.csv ke submission.
Klik submission maka file kita tersebut akan di grading secara otomatis. Setelah itu kita akan diberikan hasil dari submission tersebut.
Selamat anda telah berhasil memberikan submission pertama anda di kaggle. Anda adalah Kagglers now. Data Scientist !
Pada tutorial selanjutnya kita akan melakukan prediksi dan step by step untuk membuat submission kita sendiri dengan pemodelan machine learning.
Cheers
Machine Learning “Hello World” – Part 04 – Evaluasi Algoritma Learning
Ini adalah waktunya untuk masuk ke pertunjukan sebenarnya dari machine learning.
Kita akan membuat model dari data yang ada dan melakukan estimasi terhadap akurasi dari data yang belum diketahui sebelumnya. Berikut langkah-langkah nya
- Memisahkan dataset untuk validasi
- Membuat test untuk 10 fold cross validation
- Membangun 6 model untuk memprediksi spesies bunga dari pengukuran bunga
- Memilih model yang terbaik
- Melakukan prediksi dengan model yang terbaik
- Dataset untuk Validasi
Mari kita mulai membagi dataset untuk validasi dan untuk training. Kita perlu mengetahui apakah model yang akan kita buat adalah model yang baik. Kemudian kita akhirnya akan menggunakan metode statistik untuk melakukan estimasi akurasi dari model terhadap data yang belum diketahui sebelumnya. Kita akan membagi dataset tersebut menjadi dua bagian 80% digunakan untuk training model dan 20% digunakan untuk validasi.
Sekarang kita telah memiliki data untuk training di X_train dan Y_train untuk membuat mode dan X_validation dan Y_validation yang dapat kita gunakan untuk memvalidasi model yang dibuat.
Kita akan menggunakan teknik 10-fold cross validation untuk melakukan estimasi akurasi. Kita akan membagi dataset kita menjadi 10 bagian, 9 untuk training dan 1 lagi untuk test. Kita akan melakukan kombinasi train-test split. Kita akan menggunakan akurasi matrix untuk melakukan evaluasi model. Ini adalah rasio dari jumlah prediksi yang benar dibagi dengan jumlah instance dari dataset dikali dengan 100 untuk mendapatkan persentasi. Kita akan menggunakan scoring variable dalam membangun dan mengevaluasi setiap model.
This is a ratio of the number of correctly predicted
instances divided by the total number of instances in the dataset multiplied by 100 to give a
percentage (e.g. 95% accurate). We will be using the scoring variable when we run build and
evaluate each model next.
Membangun model
Kita tidak tahu algoritma machine learning mana yang terbaik untuk masalah iris ini dan konfigurasi apa yang tepat. Seperti yang sebelumnya kita sampaikan bahwa machine learning dan data mining adalah experimental science. Jadi kita perlu mencoba-coba algoritma dan menentukan mana yang cocok berdasarkan statistik.
Mari kita melakukan evaluasi terhadap 6 algoritma yang berbeda
- Logistic Regression (LR)
- Linear Discriminant Analysis ( LDA ).
- k-Nearest Neighbors ( KNN )
- Classification dan Regression Tree ( CART )
- Gaussian Naive Bayes ( NB )
- Support Vector Machine ( SVM )
- Jangan takut jika anda belum mengetahui atau memahami ke enam algoritma di atas. Untuk sekarang ini anda dapat memperlakukannya sebagai black box dimana jika kita memberikan input akan mengeluarkan output. Tentu saja setelah kita melakukan training terhadap fungsi tersebut berdasarkan data-data contoh.
List di atas merupakan kombinasi yang bagus antara algoritma Linear sederhana ( LR and LDA ) dan juga non linear ( KNN, CART, NB, SVM ). Mari kita evaluasi ke enam algoritma tersebut.
Sekarang kita sudah dapat menentukan model mana yang akan kita gunakan. Kita dapat melihat bahwa KNN memiliki akurasi yang terbaik. Sekarang kita akan melakukan validasi terhadap testing data set yang telah kita sisihkan sebelumnya.
Kita mendapatkan akurasi 90% ! Good progress.
Confusion matrix juga menunjukkan bahwa ada 3 error yang tercipta.
Untuk mengetahui lebih dalam mengenai confusion matrix kita dapat melihat pada tutorial berikut.
http://www.dataschool.io/simple-guide-to-confusion-matrix-terminology/
Selamat anda sudah melakukan end to end machine learning project. Anda juga mendapatkan accuracy yang cukup baik. Sekarang kita dapat beranjak menuju tutorial yang lebih menantang lagi. Bagaimana memulai kompetisi di Kaggle !!
Ikuti terus seri tutorial pada blog ini.
Cheers
Machine Learning “Hello World” – Part 03 – Visualisasi
Ok, Sekarang kita sudah memiliki pengetahuan dasar mengenai apa data yang akan kita olah. Saatnya kita memperdalam dengan visualisasi. Kita akan melihat 2 tipe plots
- Univariate plot untuk memperdalam pengetahuan tentang masing-masing attribute
- Multivariate plot untuk mempelajari tentang relasi antar attribute.
Univariate Plot
Kita akan memulai membuat plot untuk masing-masing variable. Kita beruntung karena semua attribute adalah numerik sehingga kita dapat menggunakan box and whisker plot untuk setiap attribute.
Untuk mengetahui bagaimana cara membaca whisker plot anda dapat mengikuti tutorial di khanacademy berikut ini.
Kita juga dapat membuat histogram untuk setiap input variable untuk mendapatkan gambaran mengenai probability distribution.
Untuk mengetahui lebih lanjut mengenai cara membaca atau membuat histogram anda dapat mengikuti tutorial di khan academy berikut ini
Dari gambar tersebut dapat disimpulkan bahwa 2 variable memiliki Gaussian distribution. Hal ini berguna karena kita dapat menggunakan machine learning algorithm yang bekerja bagus dengan tipe Gaussian distribution.
Untuk mengetahui lebih lanjut mengenai gaussian distribution anda dapat mengikuti tutorial di khanacademy.
https://www.khanacademy.org/math/probability/normal-distributions-a2
Multivariate Plot
Mari kita lanjutkan dengan melihat interaksi antar attribute/variable. Kita akan menggunakan scatter plot untuk pasangan semua attribute yang ada. Plot ini sangat baik digunakan untuk melihat relasi antar struktur dari variable masukan.
Kita dapat melihat bahwa terdapat struktur diagonal pada scatter plot beberapa attribute hal ini menunjukkan korelasi yang tinggi antar variable tersebut.
Pelajari scatter plot dari khan academy
Selanjutnya kita akan melanjutkan ke bagian yang paling menarik. Akhirnya kita akan melakukan evaluasi terhadap machine learning algorithm !!
Semakin menarik !
Cheers
Machine Learning “Hello World” – Part 02 – Loading dan Summary
Pada tutorial ini kita akan membahas bagaimana python dapat digunakan untuk melakukan pembangunan aplikasi machine learning. Untuk meningkatkan kepercayaan diri kita perlu melihat pengunaan python secara end to end. Artinya kita mengabungkan semua unsur yang diperlukan dalam machine learning. Seperti loading data, menampilkan descriptive statistics dan summary, sedikit visualization dan membandingkan 6 machine learning model.
Machine learning merupakan experimental science, jadi kita harus mencoba coba teknik yang menghasilkan hasil yang cukup akurat dan dapat diterima. Jadi tidak ada the best machine learning algorithm, semuanya tergantung hasil dari experiment kita, feature (attribute) yg digunakan sebagai input dan juga setting dari parameter yang digunakan.
Project kecil yang bisa dijadikan sebagai awal adalah mengklasifikasikan atau mengkategorikan jenis bunga iris. Iris dataset adalah dataset yang bagus untuk project pertama dikarenakan dataset tersebut sudah dipahami dengan baik.
Attribute nya semuanya adalah numeric sehingga kita tidak perlu melakukan feature engineering terlalu dalam. Kita tidak perlu melakukan standarisasi atau normalisasi terhadap data numeric karena datanya memiliki scala yang sama dan unit yang sama.
Hanya memiliki 4 attribute ( feature ) dan 150 rows ( instance ) sehingga bisa di load semuanya ke memory.
Dalam tutorial ini kita akan melakukan project kecil secara end to end. Berikut adalah overview dari hal-hal yang akan kita lakukan
- Loading dataset
- Melakukan summary terhadap dataset
- Memvisualisasikan dataset
- Melakukan evaluasi terhadap algorithm
- Melakukan prediksi terhadap dataset
Pahami setiap step by step dan sangat di harapkan anda mengetikkan semua command sendiri sehingga mendapatkan feel dari pemrograman machine learning.
Mari kita masuk ke tutorial pertama
Import Library
Pertama sekali yang kita lakukan adalah melakukan import terhadap semua library yang dibutuhkan.
Pastikan semuanya dapat di load tanpa error. Jika terjadi error pastikan anda telah menginstall pandas dan juga scipy dari package manager conda.
Loading Dataset
Iris dataset dapat di download dari site berikut ini.
https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data
Simpan file tersebut dengan nama iris.data.csv.
Kita akan menggunakan pandas untuk me load data. Kita juga akan menggunakan pandas untuk melakukan eksplorasi deskriptif statistics dan visualization. Perhatikan bahwa kita mencantumkan nama untuk setiap column pada saat me load data. Ini akan membantu kita dalam mengekspolore data kemudian.
Explorasi Dataset
Sekarang saatnya kita melihat isi dan struktur dari data yang baru saja kita load. Hal-hal yang akan kita lihat adalah
- Dimensi dari dataset
- Keseluruhan data
- Statistical Summary dari semua attribute
- Breakdown dari data berdasarkan class variable.
Tenang saja, masing-masing hanya butuh eksekusi satu command saja. Dan command tersebut akan berguna untuk project-project machine learning berikutnya.
Dimensi dari Dataset
Kita dapat melihat berapa instance ( baris ) yang ada dan berapa banyak attribute ( kolum ) yang dipunyai oleh data dengan property shape pada pandas.
Dari sini kita dapat mengetahui bahwa ada 150 baris atau instance dan 5 attribute atau feature.
Struktur data.
Ada baiknya jika kita melihat-lihat bagaimana sebenarnya bentuk data dan formatnya. Kita dapat mengambil sample beberapa data dari atas.
Dari sini anda dapat mengambil beberapa kesimpulan dengan melihat 20 row pertama. Semua attribute adalah numeric, dan class yng akan dikategorikan adalah string. Kita juga melihat bahwa semuanya tidak ada yang mengandung nilai null. Hal ini akan kita pastikan lagi lebih jauh di explorasi berikutnya.
Statistical Summary
Sekarang kita dapat melihat summary dari setiap attribute. Hal ini mencakup count, mean, min dan max value juga percentile.
Disini kita dapat melihat bahwa semua attribute yang berisi numerik atau angka memiliki scale yang sama dan diantara 0 sampai dengan 8 centimeters. Kita juga dapat melihat count nya sama semua yaitu 150 dimana hal ini menunjukkan bahwa tidak ada missing value atau null value.
Class Distribution
Mari kita melihat jumlah dari instance ( baris ) yang terdapat pada setiap kelas. Kita dapat melihat ini dengan nilai absolute.
Kita dapat melihat bahwa semua kelas memiliki jumlah instance yang sama. 33% dari dataset.
Pada tutorial ini kita telah melakukan loading data dan summary terhadap data set. Pada pertemuan berikutnya kita akan memvisualisasikan dataset dengan matplotlib di python.
Happy exploring
Cheers