Ketika model too good to be true: pas training bagus, giliran dipakai klien anjlok?🧐🤔
Intro to data leakage
.
.
.
A thread
Pak Saryono adalah seorang guru matematika di SMA Tunas Bangsa. Suatu hari, ia kepikiran buat ngasih murid-muridnya sebuah set soal latihan beserta pembahasannya sebagai bahan persiapan menjelang pelaksanaan ujian akhir semester.
Guru mana sih yang nggak pengen nilai muridnya bagus-bagus? Nah, tanpa ada satupun yang tahu, Pak Saryono ini sengaja memasukkan soal-soal ujian akhir semester -- yang harusnya baru dilaksanakan minggu depan -- ke dalam set soal latihan!
Singkat cerita, ujian selesai dilaksanakan dan semuanya lulus dengan sangat memuaskan. Gurunya bangga, muridnya senang, semua bahagia. Tapi pertanyaannya, apakah yang dilakukan oleh Pak Saryono adalah tindakan yang benar? Apakah Pak Saryono adalah guru yang baik?
Well, iya sih guru yang baik, baik BANGET malah. Tapi apakah ia pendidik yang baik? Probably not. Sengaja membocorkan soal tes saat latihan memang bisa membuat performa siswa terlihat bagus. Tapi efek sampingnya? Iya, jadi cuma sekedar ‘terlihat’ aja.
Belum tentu kualitas pemahaman muridnya juga baik, belum tentu akan sama bagus hasilnya dengan soal ujian yang berbeda. And believe it or not, the very same concept, juga jadi concern utama yang perlu diwaspadai dalam membangun model machine learning!
Seperti Pak Saryono, terkadang kita sebagai DS, sadar nggak sadar, ikut ‘membocorkan’ informasi test data pada model saat training. Hal ini yang menyebabkan model meraih performa luar biasa saat diuji, simply karena model udah pernah liat ‘soal’ nya saat training.
Nah, bocornya informasi test data saat proses training ini disebut dengan ‘data leakage’. Dan ini bahaya temen-temen. Kenapa? Karena bisa menipu si pembuat modelnya! Pas training ‘terlihat’ bagus, ketemu test data juga oke, tapi ketika di deploy performa buyar.
Data leakage itu secara umum bisa dibagi dua, yaitu data leakage dalam bentuk ‘leaked feature’, kedua adalah data leakage dalam bentuk ‘leaked test data’. Contohnya kayak gimana? Yuk ah kita kupas!
Kita mulai dulu dengan contoh yang ‘ya iyalah!’, yaitu turut menjadikan label -- target atau kelas yang diprediksi -- jadi bagian dari feature yang model pelajari. Contoh, kita ingin membangun model yang mengklasifikasi suatu hewan itu anjing atau bukan.
Namun dalam dataset yang dipakai, ada feature ‘anjing atau bukan’. Nah, kalau begini, model cuma akan belajar dari feature itu aja. Atau dengan kata lain, model nggak akan belajar apa-apa selain: ‘kalau anjing ~> maka anjing!’. Ya iyalah!
Tapi dari prinsip yang sama, bisa muncul contoh lain yang lebih ‘subtle’. Misal, adanya feature ‘pernah atau tidak suntik insulin’ pada dataset yang digunakan untuk mendiagnosis apakah seorang pasien itu menderita diabetes atau nggak. Kebayang?
Nah, feature yang seperti ini memang ‘highly predictive’ terhadap label. Tapi sayangnya, data dari feature tersebut belum akan ‘available’ di saat model di deploy dan dipakai buat prediksi kasus di dunia nyata. Nah, feature ini yang disebut dengan ‘leaked feature’.
Penyebab berikutnya adalah ‘leaked test data’, yaitu bocornya informasi test data ke dalam training data. Nah, dari kebanyakan kasus data leakage, dia inilah biang kerok nya. Data leakage tipe ini yang paling sering terjadi dan lolos dari deteksi.
Contoh, masih inget normalization dan standardization? Nah, data leakage akan terjadi kalau normalization atau standardization dilakukan SEBELUM dataset di split jadi training dan test data. Ini akan membuat informasi pada test data bocor ke training data. Kok bisa?
Dalam standardization misalnya, kita mengubah setiap data feature sedemikian rupa sehingga distribusi feature menjadi distribusi normal standar. Dalam prosesnya, kita memakai nilai mean μ dan standar deviasi σ yang dihitung dari SEMUA data.
And here’s the thing! Kalau standardization dilakukan pada dataset utuh, baru kemudian dipisah, maka kita sudah mengikutsertakan test data dalam preprocessing dataset. Dan itu artinya, udah ada kebocoran informasi statistik dari test data ke dalam training data!
Bisa nggak min deteksi data leakage sebelum model terlanjur di deploy? Nah, ada beberapa usaha yang bisa dilakukan. Tapi secara umum, rule of thumb nya adalah selalu curiga ketika performance model kita bagus nya ‘kebangetan’ dan spektakuler. Cara ngukurnya gimana?
ML ini lumayan ramai peminatnya, dan besar kemungkinan udah ada orang yang ngerjain proyek serupa. Tips dari mimin coba cari paper terkait dan ‘benchmarking’ sama model state-of-the-art yang udah ada. Cek apakah model kita ‘too good to be true’? paperswithcode.com
Selain itu, sebelum mulai modeling, coba periksa korelasi tiap feature dengan label target. Harusnya sih emang saling berkorelasi, tapi kalau korelasinya SANGAT tinggi, bahkan ‘perfectly-correlated’, bisa menjadi tanda adanya ‘leaked feature’ dalam dataset kita.
Nah, sampai di sini kita udah diskusi tentang fenomena data leakage, mulai dari ciri, gejala, sampai cara deteksinya. Tapi bagaimanapun juga, yang namanya mencegah itu lebih baik dari sekedar mendeteksi dan mengobati. Gimana cara terhindar dari data leakage?
1) Kenali data dengan baik! Di sinilah pentingnya exploratory data analysis (EDA) dalam machine learning workflow. Dengan tahap eksplorasi data inilah kita bisa mengetahui korelasi tiap feature dengan label dan melihat ada atau tidaknya tanda-tanda ‘leaked feature’ pada data.
2) Cek apakah ada data duplikat? Lakukan de-duplikasi data terlebih dahulu sebelum data di split. Ini penting temen-temen karena data duplikat bisa mengakibatkan data leakage, simply karena bisa jadi ada data yang sama antara test data dengan training data.
3) Pepatah mengatakan: “train-test-split dahulu, preprocessing kemudian!”. Semua preprocessing, baik itu ngisi null values, ngurus outliers, normalization, standardization, reduksi dimensi pakai PCA, dan lain-lain cuma boleh dilakukan dengan memakai informasi dari training data!
Maksudnya gimana? Contoh, kita dapat data, terus mau melakukan normalization. Pertama-tama dan yang paling utama, data perlu kita split dulu menjadi training dan test set. Variabel X berisi kolom-kolom features, dan y berisi kolom label.
Masih inget kalo normalization implementasinya apa di scikit-learn? Yess, kita pakai MinMaxScaler(). Kita panggil lalu kita fitting MinMaxScaler() pada training data X_train. Setelah itu baru kita normalisasi setiap nilai pada X_train dengan method transform().
Kalau buat test data, kita tinggal panggil method transform() tanpa perlu melakukan fitting ulang MinMaxScaler(). Artinya, normalization dilakukan hanya dengan memakai informasi dari training data, dalam hal ini berupa informasi nilai min dan nilai maks.
Dengan terlebih dahulu memisahkan dataset menjadi training dan test data, kita berhasil menjaga training data dari ‘terkontaminasi’ dengan test data. Atau dengan kata lain, nggak ada informasi test data yang bocor dan dipelajari oleh model saat proses training.
As a side note, terkadang dataset kita terlalu kecil untuk dipecah jadi training dan test sehingga untuk evaluasi model digunakan K-Fold cross validation, di mana dataset dilipat menjadi K bagian, lalu model dilatih pada K-1 bagian dan dites memakai 1 bagian sisanya
Nah, memang implementasinya akan lebih ‘menantang’ buat cross-validation karena training dan test set nya berbeda tiap iterasi. Namun, prinsip yang digunakan tetap sama, data preprocessing cuma boleh dilakukan dengan memakai informasi pada ‘lipatan’ yang menjadi training data.
Di scikit-learn sendiri kita bisa memakai kelas Pipeline sebagai tool untuk membuat implementasi cross-validation yang ‘leakage-proof’ jadi lebih mudah dan otomatis. Nanti deh mimin kapan-kapan bahas okaay!
Nah, insight apa nih yang bisa kita ambil?
Jadi DS itu nggak cuma soal modeling nya aja, tapi juga harus paham gimana melakukan ‘monitoring’ dan ‘maintenance’ model setelah di deploy. Nah, bisa dibilang mungkin ini skill yang nggak bisa diperoleh dari sekedar ikutan platform kompetisi seperti Kaggle, dan lain-lain.
Karena kompetisi itu umumnya hanya mencari model dengan performa setinggi mungkin pada test data yang disediakan. Kalau nggak 'aware', kita bisa jadi 'terbiasa' untuk nggak mikirin bagaimana model ketika di deploy dan menganggap remeh data leakage saat membangun model.
Padahal di dunia nyata, fenomena data leakage ini jadi salah satu masalah utama dalam machine learning, yang harus dideteksi dan di handle oleh DS bahkan sebelum memulai preprocessing dan modeling.
Makanya guys, jangan sepelekan data leakage lagi yaa. Biar data leakage ini ga kejadian, ada baiknya kalian mendalami konsep machine learning, salah satunya di non degree program Data Scientist Pacmann.AI
Yuk, sama sama belajar gimana cara jadi DS yang baik dan dicari-cari sama perusahaan. Cek kurikulum dan fasilitas kami di bit.ly/brosurpacmannai yaa atau tanya tanya di bit.ly/WASalesPacmann. See youu!
Mau terbebas dari panasnya neraka duniawi? Ini yang bisa machine learning lakukan!🥵🔥
Tackling climate change with machine learning.
.
.
.
A thread
Ngerasa gak sih, dari tahun ke tahun tuh rasanya tiap musim kemarau makin panas?
Ya wajar aja kalau ngerasa semakin panas. Sejak tahun 1981, temperatur bumi naik 0.18 derajat Celcius per dekadenya. Akibatnya tuh ga cuma sekedar ‘oh cuaca jadi makin panas’ aja guys, tapi lebih dari itu.
Emang Bidang Sosial Butuh Data Scientist? 🤨🤔
.
.
.
A thread
Mimin mau survey dulu. Ada berapa banyak sih followers Pacmann yang backgroundnya bukan IPA? Atau, yang backgroundnya IPA tapi sebenernya kepaksa dan ga suka suka banget?
Kali ini mimin mau bahas soal peranan Data Science di bidang Social Science. Jadi seperti yang kita tau, ilmu DS emang bisa dipake dimana-mana karena basicnya adalah data. Yang artinya, selama ada data, data science bisa berperan disana.
Harga ojol tiba-tiba naik drastis? Gara gara dynamic pricing sih!🚕💸
Bagaimana machine learning membantu menyeimbangkan pasar.
.
.
.
A thread
Malem minggu gini, siapa yang keluar rumah naik ojol? Kalo diliat-liat, harganya pasti lebih mahal ya daripada weekdays?
Ga cuma pas malem minggu aja, ada waktu-waktu tertentu harga transportasi online lebih mahal daripada biasanya. Misal nih, jam berangkat sama pulang kerja, pas lagi cuaca buruk kaya hujan deres, dan pas ada acara-acara tertentu kaya tahun baruan
Buat apa bisa regresi tapi ga bisa intepretasiin hasilnya?🙄🤯
Yuk belajar interpretasi hasil regresi!
.
.
.
A thread
Misalkan kalian kerja di produk pulpen, terus bos kalian minta buat sales bulan depan harus ningkat sekian persen atau kalian bakal dipecat. Berarti, kalian harus tau dulu dong faktor faktor apa yang mempengaruhi sales pulpen.
Dengan kemajuan ilmu yang kita punya sekarang, udah ga perlu lagi nganalisa data secara manual. Kalian bisa pakai regresi, metode buat nyari hubungan antara variabel yang punya hubungan dengan topik yang mau diteliti.
Lo pikir kebijakan yang lo buat bakal berdampak, yakin? 🤔🤨
Kenalan dulu sama theory of change!
.
.
.
A thread
Semua orang pasti punya tujuan, mau itu jangka panjang atau jangka pendek. Tentunya, buat mencapai tujuan-tujuan itu, ada tindakan yang harus dilakukan. Tapi, belum tentu semua tindakan itu bakal berhasil dan bisa mencapai tujuan akhir. Kan wajar hidup ada gagalnya, ya gak?~
Konsep ‘punya tujuan → lakukan tindakan → mencapai tujuan / tidak mencapai tujuan’ ini sebenarnya bisa diterapkan dalam pengambilan keputusan. Ada teori bernama ‘theory of change’ yang bisa kalian terapin, entah itu buat tujuan pribadi, bisnis, atau bahkan negara