TL;DR
Tahapan data mining dalam proses KDD ada lima: seleksi data, pembersihan data, transformasi data, penambangan pola, dan evaluasi atau interpretasi hasil. Tiga tahap pertama nyiapin data dan biasanya makan porsi waktu terbesar. Tahap penambangan pola itu bagian yang paling sering dibayangkan orang, padahal biasanya paling cepat.
Tahapan data mining ada lima: seleksi data, pembersihan data, transformasi data, penambangan pola, lalu evaluasi hasil.
Urutan ini datang dari proses KDD, singkatan dari Knowledge Discovery in Databases. Data mining sendiri sebenernya cuma satu tahap di tengah, walau namanya yang paling sering dipakai buat nyebut seluruh proses.
Yang bikin orang kaget waktu pertama kali ngerjain: tiga tahap pertama makan waktu paling banyak, dan tahap keempat yang paling dibayangin orang malah paling cepat.
Lima tahapannya: seleksi data buat milih bagian data yang relevan, pembersihan buat benerin nilai salah dan kosong, transformasi buat ngubah bentuk data sesuai kebutuhan algoritma, penambangan pola buat nerapin teknik data mining, dan evaluasi buat nilai apakah pola yang ketemu berguna.
| Tahap | Masukan | Keluaran | Porsi waktu |
|---|---|---|---|
| 1. Seleksi | Semua data mentah | Data target | 10% |
| 2. Pembersihan | Data target | Data bersih | 35% |
| 3. Transformasi | Data bersih | Data siap model | 25% |
| 4. Penambangan pola | Data siap model | Pola dan model | 15% |
| 5. Evaluasi | Pola dan model | Pengetahuan yang kepakai | 15% |
Porsi waktu di atas dari proyek-proyek yang aku kerjain, jadi anggap sebagai patokan kasar, bukan angka mutlak.
Kalau kamu belum kenal istilah dasarnya, mampir dulu ke penjelasan data mining dan contoh penerapannya.
Seleksi data adalah proses milih tabel, kolom, dan rentang waktu yang nyambung sama pertanyaan kamu. Patokannya satu: tiap kolom yang kamu bawa harus bisa kamu jelasin kenapa dia ada. Kolom yang nggak bisa kamu jelasin cuma nambah waktu pembersihan tanpa nambah nilai.
Empat keputusan yang harus kamu ambil di tahap ini:
Satu hal yang sering ketinggalan: catat kenapa kamu buang sesuatu. Tiga minggu lagi ada yang nanya kenapa angka kamu beda tipis sama laporan keuangan, dan catatan itu yang jawab.
Pembersihan data ngurus lima jenis masalah: nilai kosong, duplikat, format yang nggak seragam, nilai yang nggak masuk akal, dan pencilan. Urutan pengerjaannya penting. Buang duplikat dulu sebelum ngisi nilai kosong, biar kamu nggak ngisi baris yang bakal dihapus.
| Masalah | Contoh nyata | Penanganan umum |
|---|---|---|
| Nilai kosong | Kolom kota kosong di 1.200 baris | Isi modus, isi rata-rata, atau buang baris |
| Duplikat | Struk sama keinput 2 kali | Hapus, simpan yang timestamp-nya terbaru |
| Format campur | "Jakarta", "jakarta", "JKT" | Samain huruf lalu petakan ke satu nilai |
| Nilai nggak masuk akal | Umur 210, harga negatif | Cek sumbernya, benerin atau tandai |
| Pencilan | Transaksi Rp 12 juta di toko sembako | Selidiki dulu, jangan langsung buang |
Soal nilai kosong, pilihannya jangan asal. Isi rata-rata bikin sebaran data kamu menyempit dan hubungan antar kolom melemah. Cara-cara penanganannya dijelasin lengkap di panduan missing data pandas.
Soal pencilan, aturan aku: selidiki dulu sebelum buang. Transaksi Rp 12 juta di toko sembako bisa jadi salah input, bisa juga pesanan katering yang justru pelanggan paling berharga. Bedanya jauh. Cara mendeteksinya ada di halaman outlier.
Urutan pemeriksaan lengkapnya bisa kamu ikutin dari checklist data cleaning.
Transformasi ngubah data bersih jadi bentuk yang bisa dicerna algoritma. Empat pekerjaan utamanya: bikin kolom turunan, ngubah skala angka, ngubah kategori jadi angka, dan ngeringkas data ke tingkat rincian yang dipakai model.
Kolom turunan. Ini bagian yang paling nentuin hasil. Tanggal transaksi mentah nggak berguna buat model. Turunannya berguna: jarak hari sejak belanja terakhir, jumlah transaksi setahun, hari dalam minggu, dan tanggal dalam bulan.
Penskalaan. Algoritma berbasis jarak kayak K-Means bakal didominasi kolom yang angkanya besar. Kolom total belanja dalam jutaan bakal ngalahin kolom jumlah transaksi yang cuma puluhan. Dua cara paling umum:
# Normalisasi min-max, hasilnya 0 sampai 1
x_baru = (x - x_min) / (x_max - x_min)
# Standardisasi z-score, rata-rata 0 simpangan baku 1
z = (x - rata_rata) / simpangan_baku
Pengkodean kategori. Kolom kota yang isinya teks harus jadi angka. One-hot encoding bikin satu kolom per nilai. Label encoding kasih nomor urut, tapi hati-hati, model bisa salah nganggap Bekasi lebih besar dari Bandung cuma gara-gara nomornya lebih tinggi.
Peringkasan. Kalau modelnya per pelanggan, 41 ribu baris transaksi harus diringkas jadi 3 ribu baris pelanggan. Proses mindahin dan ngubah bentuk data kayak gini istilahnya ETL.
Di tahap ini kamu milih teknik sesuai bentuk pertanyaan, lalu jalanin algoritmanya. Empat teknik nutup mayoritas kasus: klasifikasi buat nebak label, clustering buat ngelompokin, association rules buat nyari kombinasi yang sering muncul, dan regresi buat nebak angka.
Yang wajib kamu lakuin sebelum ngelatih: pisahin data latih dan data uji. Tanpa itu, angka akurasi kamu cuma ngukur seberapa bagus model ngapalin data lama.
Dua pembagian yang umum:
Buat data deret waktu, jangan acak. Latih pakai data lama, uji pakai data baru. Model yang dilatih pakai data Desember lalu diuji di data Januari itu nggak masuk akal buat kasus nyata.
Pola dianggap berguna kalau dia lewat tiga saringan: bertahan di potongan data lain, didukung jumlah kasus yang cukup, dan masuk akal buat orang yang paham bisnisnya. Angka statistik yang bagus tanpa tiga hal itu belum tentu kepakai.
Buat association rules, tiga ukuran yang dipakai:
| Ukuran | Artinya | Patokan kasar |
|---|---|---|
| Support | Porsi transaksi yang memuat kombinasi itu | Di bawah 1% biasanya terlalu jarang |
| Confidence | Kalau beli A, berapa persen juga beli B | Di bawah 30% biasanya lemah |
| Lift | Berapa kali lebih sering dibanding kebetulan | Di bawah 1 berarti nggak berguna |
Lift yang paling sering diabaikan pemula. Aturan "beli minyak goreng lalu beli beras" bisa punya confidence 60 persen dan kelihatan hebat. Tapi kalau 60 persen semua transaksi emang beli beras, lift-nya 1,0 dan aturan itu nggak ngasih informasi apa-apa.
Dataset toko_berkah punya ngulikdata isinya 41.892 baris transaksi setahun dari satu toko sembako di Bekasi.
Seleksi. Rentang 12 bulan, cuma transaksi bermember. Dari 41.892 baris, sisa 25.678 baris.
Pembersihan. Duplikat struk 312 baris, dibuang. Baris dengan qty nol atau harga negatif 1.297 baris, dibuang setelah dicek berasal dari retur yang kecatat dobel. Kolom kota punya 47 variasi penulisan buat 9 kota beneran, disamain jadi 9. Sisa 24.069 baris bersih, artinya 6,3 persen data kena buang.
Transformasi. Data diringkas dari 24.069 baris transaksi jadi 3.104 baris pelanggan. Tiga kolom turunan: jarak hari sejak belanja terakhir, jumlah transaksi setahun, total belanja. Ketiganya distandardisasi karena skalanya beda jauh, dari puluhan sampai jutaan.
Penambangan pola. K-Means dengan jumlah klaster diuji dari 2 sampai 8. Nilai siluet tertinggi di 4 klaster, angkanya 0,52.
Evaluasi. Empat klaster yang keluar:
| Klaster | Jumlah | Rata-rata transaksi/tahun | Rata-rata belanja |
|---|---|---|---|
| Rutin nilai besar | 287 | 41 | Rp 142.800 |
| Rutin nilai kecil | 1.164 | 28 | Rp 38.500 |
| Sesekali | 1.041 | 6 | Rp 71.200 |
| Pernah rajin, sekarang hilang | 612 | 14 | Rp 87.400 |
Klaster pertama isinya cuma 9,2 persen member, tapi nyumbang 31,7 persen total nilai belanja member. Itu angka yang langsung bisa ditindaklanjuti pemilik toko.
Klaster keempat yang lebih menarik. 612 orang yang dulu belanja rutin dan sekarang hilang, dengan rata-rata belanja historis lebih tinggi dari klaster kedua. Ini daftar yang paling layak dikejar duluan.
Buat mastiin polanya bukan kebetulan, aku ulang proses yang sama pakai data 6 bulan pertama aja. Empat klaster tetap muncul dengan karakter yang mirip, dan porsi klaster pertama ada di 8,7 persen. Cukup dekat, jadi polanya aku anggap bertahan.
Beda cakupan. Tahapan KDD lima langkah dan fokusnya di pengolahan data sampai pola ketemu. CRISP-DM enam fase dan dia mulai lebih awal, dari pemahaman masalah bisnis, lalu berakhir lebih jauh, di deployment. Isi teknisnya banyak yang tumpang tindih. Kalau kamu nulis skripsi, cek dulu kerangka mana yang diminta pembimbing.
Pembersihan dan transformasi. Di proyek yang aku kerjain, dua tahap itu rutin makan 50 sampai 70 persen total jam kerja. Alasannya sederhana: data dari sistem kasir, form, dan spreadsheet manual hampir selalu punya format campur, nilai kosong, dan duplikat. Tahap penambangan pola sendiri sering cuma sehari dua hari.
Normalisasi min-max ngerapetin nilai ke rentang 0 sampai 1 pakai nilai terkecil dan terbesar. Standardisasi z-score ngubah nilai jadi jarak dari rata-rata dalam satuan simpangan baku. Normalisasi lebih gampang dibaca tapi peka sama nilai ekstrem. Standardisasi lebih tahan pencilan dan biasanya jadi pilihan default buat algoritma berbasis jarak.
Uji polanya di potongan data yang lain. Kalau pola cuma muncul di semester pertama dan hilang di semester kedua, kemungkinan besar itu kebetulan. Cek juga jumlah kasusnya. Aturan yang cuma didukung 12 transaksi dari 40 ribu itu lemah, walau angka confidence-nya tinggi. Terakhir, tanya ke orang yang paham bisnisnya, masuk akal nggak.
Tergantung ukuran data. Di bawah 100 ribu baris, Excel plus Power Query udah cukup buat tahap 1 sampai 3. Buat penambangan pola tanpa coding, pakai Orange. Kalau datanya jutaan baris atau prosesnya harus jalan rutin, pindah ke SQL buat penyiapan data dan Python dengan pandas plus scikit-learn buat modelnya.
Dua hal yang paling nentuin kualitas hasil kamu: keputusan tingkat rincian di tahap seleksi, dan kolom turunan yang kamu bikin di tahap transformasi.
Sisanya kerja rapi-rapi yang bisa dilatih.
Ambil satu file transaksi yang ada sekarang, lalu kerjain tahap 1 dan 2 aja. Tulis berapa persen baris yang kamu buang dan kenapa. Itu udah lebih dari yang dilakuin kebanyakan orang.
Habis itu lanjut ke tutorial Orange Data Mining buat ngerjain tahap 4 tanpa nulis kode, atau ke panduan CRISP-DM kalau kamu butuh kerangka yang nyambung ke sisi bisnisnya.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Kolom datetime nyimpen tanggal, jam, hari, semuanya nempel jadi satu. Accessor .dt di pandas ngeluarin tiap bagian jadi kolom sendiri buat dianalisa.
Nama toko ketik campur huruf besar-kecil, spasi nyasar di ujung, atau kode produk nempel jadi satu. Accessor .str di pandas ngerapiin semua itu tanpa loop.
Model machine learning cuma ngerti angka, bukan teks kayak merah atau biru. get_dummies ngubah kolom kategori jadi kolom 0/1 dalam satu baris kode.