Pacmann Media Profile picture
Apr 30, 2021 34 tweets 10 min read Read on X
Mau punya model bagus tapi datanya imbalanced? 😢🤷‍♂️
Catat 3 solusinya!
.
.
.
A thread
Suatu hari, kita diminta klien membangun model machine learning yang bisa mendeteksi tumor ganas pada lambung pasien. Kemudian, dengan memakai dataset berisi kumpulan CT-Scan perut, kita buat model yang memprediksi apakah seorang pasien menderita kanker lambung atau tidak.
Tapi masalahnya, ‘Gastric cancer’ atau kanker lambung ini tergolong sangat jarang temen-temen. Bahkan di Indonesia, resikonya itu cuma sekitar 0.0028%. Itu artinya, kalau kita sampling 100.000 orang, kemungkinannya kita cuma akan peroleh 3 sampel data penderita kanker lambung!
Dataset dengan 'ketimpangan' informasi kayak gini bisa jadi masalah. Kenapa? Karena model akan bias dengan kelas data mayoritas dan nggak akan ‘learned well’ tentang kelas minoritas akibat terlalu minimnya informasi. Kasus seperti ini disebut juga dengan kasus data imbalanced.
Umumnya data sudah dikatakan ‘imbalanced’ jika kelas minoritas hanya sekitar 20%. Tapi pada realitanya, dataset bisa JAUH lebih imbalanced. Kasus credit card fraud misalnya, cuma 2% kasus per tahun, kasus cacat produksi pabrik cuma 0.1%, dan kasus kanker lambung? Cuma 0.0028%!
Semakin ‘rare’ kasus nya, semakin imbalanced data nya, dan semakin sulit pula membangun model yang optimal. Dan lucunya, padahal alasan utama kenapa kita implementasiin machine learning dalam kasus 'rare events' ya justru karena kasusnya itu 'rare' dan sulit dideteksi manual!
Terus gimana dong min? Nah, di sini mimin akan bahas berbagai cara yang bisa temen-temen apply untuk ‘menangani’ dataset yang imbalanced. Apa aja min? Yuk simak satu persatu!
1) Kita mulai dulu dengan cara yang ‘ya iyalah jelas’ -- Cari data lagi. Jika MUNGKIN, coba cari data tambahan dengan kelas minoritas yang lebih banyak sehingga data lebih proporsional. Bisa dibilang ini cara yang paling ‘natural’ untuk mengurangi ‘imbalanceness’ dari data.
Tapi, harus diakui nyari data lagi nggak selalu feasible, bisa karena masalah waktu, biaya, atau memang kasus yang diprediksi ‘intrinsically’ jarang banget terjadi sehingga mau sebanyak apapun datanya akan tetap imbalanced. Kalau gitu gimana dong min? Okay, let's move on!
2) Cara selanjutnya adalah kita ‘paksa’ data menjadi lebih proporsional dengan melakukan resampling, yaitu melakukan sampling ulang data dari dataset sedemikian rupa sehingga diperoleh dataset baru yang lebih balanced. Secara umum ada dua teknik: undersampling dan oversampling.
Dalam undersampling, data dari kelas mayoritas di 'downsample' secara random sehingga jumlah data kelas mayoritas menjadi lebih sedikit. Sedangkan dalam oversampling, data dari kelas minoritas kita replikasi sehingga menjadi lebih banyak dan membuat dataset lebih proporsional.
Untuk implementasinya, temen-temen bisa menggunakan imbalanced-learn (imblearn), sebuah library Python yang berguna untuk handling data imbalanced, termasuk melakukan undersampling dan oversampling. Contoh, misalnya kita punya dataset yang imbalanced seperti ini.
Terlihat bahwa kelas ‘0’ jumlah datanya jauh lebih banyak dibandingkan dengan kelas ‘1’. Jika kita ingin mengimplementasikan undersampling, kita bisa menggunakan RandomUnderSampler() untuk secara random melakukan downsampling pada data kelas ‘0’. Kelihatan bedanya?
Kalau teknik undersampling dengan RandomUnderSampler() akan secara ‘naive’ membuang sebagian data dari kelas mayoritas -- kelas ‘0’ -- secara random, ada juga teknik undersampling lain yang bekerja dengan prinsip berbeda, salah satunya adalah Tomek links.
Teknik undersampling ciptaan Tomek (1976) ini bekerja dengan membuat pasangan-pasangan 'Tomek links', antara data kelas minoritas dengan ‘nearest neighbour’ nya dari kelas mayoritas. Kemudian, data kelas mayoritas pada setiap pasangan Tomek link ini kemudian ‘dibuang’.
Data yang di downsample dengan Tomek Links mungkin lebih sedikit. Tapi, dengan membuang data kelas mayoritas yang ‘dekat’ dengan data kelas minoritas, maka kelas minoritas akan jadi semakin ‘distinct’. Nah, ini akan turut membantu model mengklasifikasi dan memilah kedua kelas.
Okay sekarang sebaliknya, alih-alih mengurangi data kelas ‘0’, kita ingin melakukan replikasi dan memperbanyak data kelas ‘1’ untuk menyeimbangkan dataset. Kita bisa gunakan class RandomOverSampler() untuk membuat duplikat dari data kelas ‘1’ secara random.
'Naive oversampling' dengan RandomOverSampler() itu simply hanya memilih data dari kelas minoritas secara random, lalu data-data tersebut ‘dicopy-paste’ sehingga hasilnya akan ada banyak data duplikat. Nah, ada pula teknik oversampling lain, salah satunya adalah SMOTE.
SMOTE (Synthetic Minority Oversampling Technique) adalah teknik oversampling yang bekerja dengan menentukan K-nearest neighbours dari setiap titik data kelas minoritas, lalu mensintesis data baru yang berada di antara titik data dengan ‘tetangga’ terdekat nya.
Berbeda dengan RandomOverSampler() yang menghasilkan duplikat, oversampling dengan SMOTE akan menghasilkan titik-titik data baru di sekitar setiap titik data pada kelas minoritas.
‘Undersampling vs oversampling, bagusan mana min?’ Nah, keduanya punya plus-minus masing-masing dan mana yang lebih baik digunakan pun tiap dataset bisa berbeda. Jika dataset nya kecil misalnya, undersampling mungkin bukan pilihan yang bijak karena data akan semakin minim.
Tapi apakah oversampling pasti lebih baik karena bisa menambah jumlah data? Belum tentu. Mereplikasi data bukan berarti tanpa konsekuensi. Jika model salah menebak satu data kelas minoritas, dan data direplikasi 5 kali, maka error akan meningkat menjadi 6 kali pada dataset baru.
Dan inget temen-temen, undersampling dan oversampling itu pada dasarnya ‘memaksa’ dataset lebih proporsional. Dan dalam prosesnya akan turut mengubah distribusi dari dataset dan bisa membuatnya kurang representatif terhadap realita dunia nyata. Terus ada cara lain min? Next!
3) Alternatif lainnya adalah menyesuaikan modeling dengan use case nya, salah satunya dengan mengatur ‘decision threshold’ model. Umumnya, model classifier memakai ‘threshold’ tertentu (biasanya 0.5) untuk menentukan apakah suatu data termasuk kelas ‘positif’ atau ‘negatif’.
Anggap jumlah data penderita penyakit jantung JAUH lebih sedikit daripada data orang sehat dalam dataset kita. Nah, dengan menurunkan threshold, model akan jadi lebih sensitif dalam memprediksi kelas minoritas (‘Has Heart Disease’) meskipun dataset masih imbalanced! Kebayang?
Seberapa rendah min threshold nya? Nah, dari sini kita bisa gunakan kurva ROC untuk memandu pemilihan threshold yang optimal untuk model kita. Untuk mengevaluasinya, kita hitung luas area di bawah kurva ROC untuk memperoleh nilai AUC dari model!
Dan yang harus diinget terkait evaluasi model, JANGAN memakai accuracy sebagai metrics untuk mengukur performa model yang dibangun menggunakan data imbalanced. Model yang selalu salah menebak kelas ‘minoritas’ pun, jika proporsi dataset nya 90:10, maka accuracy nya bisa 90%!
Karena 'accuracy-only' itu bisa misleading, artinya kita juga harus melihat gimana performa model terhadap metrics turunan confusion matrix lain, seperti precision, recall, F1 Score, ROC-AUC, dan lain-lain, cek disini ya:

Nah, insight apa nih yang bisa kita ambil?
Real-world data itu messy dan nggak jarang sangat imbalanced, beda dengan yang mungkin biasa ditemui di kelas atau course di mana dataset yang dipakai sudah ‘bersih’, balanced, dan perfect. Ini juga menjadi tugas kita sebagai DS untuk bisa menangani hal seperti ini dengan baik.
Teknik menangani imbalanced data itu macem-macem. Nggak ada cara yang ‘one-size-fits-all’. Bahkan, nggak menutup kemungkinan dibutuhkan kombinasi berbagai cara untuk mendapat hasil yang optimal. Nah, ini jadi ladang kita buat explore and know much better data yang kita miliki!
Untuk bisa membuat data menjadi lebih ‘cleaned’ dan proporsional, tentu kita harus bisa mengenal data dengan baik. Dan untuk bisa memahami data dengan baik, dasar pemahaman statistika yang kuat itu menjadi syaratnya.
Nah, kalau kalian pengen jago memahami data dan statistik, serta ingin belajar menjadi Data Scientist, yuk gabung di non degree program Data Scientist Pacmann.AI! Kalian akan belajar dari basic loh, cek kurikulumnya di bit.ly/brosurpacmannai yaa. See you!

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Pacmann Media

Pacmann Media Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @pacmannai

Jun 8
Ketika kita ingin menjalankan banyak service dengan menggunakan docker tentu menghabiskan waktu jika kita melakukan konfigurasi dan menjalankannya satu per satu.

Oleh karena itu, kita bahas tentang Docker Compose hari ini!
Nah, kalo kita ingin melakukan konfigurasi dan menjalankan banyak service di docker kita dapat menggunakan "docker compose" untuk meminimalisir penggunaan waktu untuk konfigurasi dan menjalankan service-service tersebut.
Untuk mendefinisikan konfigurasi service dengan menggunakan docker compose kita cukup membuat file konfigurasinya dengan nama "docker-compose.yaml", "docker-compose.yml", atau nama lain dengan extensi file .yaml dan .yml.
Read 17 tweets
May 3
Pengen review santai paper yang lagi di-viral-KAN ini.

Sambil nungguin Jumatan, kita bahas Kolmogorov-Arnold Network yang disebut-sebut Neural Network 2.0 nih! ⬇️
Oiya, ini dari POV Mas Cahya @menarik_hm dalam mereview paper.

Jangan lupa share dan repost ke teman-teman kalian ya!
@menarik_hm Melihat summary-nya, terbayang perbedaan fundamental antara MLP dan KAN.

Di MLP (traditional NN), yang kita train adalah weight dengan architecture yang punya activation function yang fix.

Dalam KAN, ternyata kita bisa melakukan training di level activation function. Image
Read 28 tweets
Jan 27
Gak malam mingguan?

Gabut gak ngapa-ngapain?

Ngulik Python aja gan. Sini, pacmin berikan sumber belajarnya! Sumber belajar python Pacmann
Pertama, dari kampusnya Pak @tomlembong

Walaupun dari kampus ternama, tapi yang ini GRATIS!

Tersedia lecture video, lecture slide & lecture notes, style belajarnya kayak kuliah.

Link disertakan di akhir ya Pacpeers! Harvard CS50 from Reddit
@tomlembong Sumber kedua, dari ITB (Institut Teknologi di Boston).

Ada lecture video, source code Python dan bentuknya video course.

GRATIS juga nih! MIT OCW CS
Read 12 tweets
Jul 28, 2023
Sebutannya sih Exotic Pets, tapi harimau itu hewan peliharaan atau satwa liar sih? 🤬

Apakah memelihara harimau itu Konservasi atau Monetisasi?

Mari kita bahas~ Ilustrasi Influencer Kolektor Satwa Langka
AZ Animals melaporkan bahwa secara keseluruhan rata-rata populasi harimau di tahun 2023 kurang dari 10.000 ekor saja, baik di Alam liar maupun penangkaran.

Harimau tersebut dibagi ke dalam beberapa jenis, mulai dari Harimau Sumaterai hingga Harimau Indo Cina. Populasi Harimau Berdasarkan Jenisnya (2023)
Sayangnya, menurut kategorisasi IUCN Redlist, semua jenis harimau tersebut telah tercancam punah (ketika jumlah harimau menurun 50% sampai lebih dari 70% dalam 10 tahun terakhir) bahkan kritis (ketika jumlah harimau menurun 80% hingga lebih dari 90% dalam 10 tahun terakhir).
Read 34 tweets
May 31, 2023
Menyambung diskusi kemarin, kenapa sih Data Visualization itu jadi fundamental untuk Data Analyst dan Data Scientist?

Seberapa susahnya sih bikin grafik doang?

Baiklah, Pacmin bahas..... Worst Dataviz
Kenapa Dataviz itu fundamental banget berdasarkan diskusi dengan Lecture kami Mas Cahya.

Data Analyst dan Data Scientist itu adalah problem solver, sedangkan constraint mereka adalah waktu, tenaga dan uang. Jadi kita perlu metode paling sederhana untuk melakukan analisis.
Untuk Data Analyst dan Business Intelligence, salah satu jobdesk mereka adalah membuat Dashboard yang baik dan mudah dimengerti.

Tujuannya agar stakeholders bisa mengambil insights dan paham keadaan perusahaan saat ini, mentranslasikan data menjadi insight kemudian jadi action. Image
Read 22 tweets
May 30, 2023
Induknya sama, tapi jualannya mirip-mirip.

Kenapa ya begitu?

Ini ada hubungannya dengan strategi mereka! ⬇️ ImageImageImageImage
Kita ambil dari mie instan, Indomie sebagai Market Leader memiliki Supermi, Sarimie dan Mie Sakura.

Sama-sama mie instan tapi saingan di pasar. From: Databoks Katadata
Sekarang ke Smartphone, Oppo, Vivo dan Realme itu satu parent company (BBK Group) dan menguasai pasar Indonesia, bukan Samsung..... Data dari Katadata Databoks
Read 24 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us!

:(