Idenya
Pemrograman biasa: kamu yang menulis aturannya, komputer yang menerapkannya.
aturan + data ──▶ jawaban
Machine learning membaliknya: kamu memberi komputer contoh beserta jawabannya, dan komputer yang menemukan aturannya.
data + jawaban ──▶ aturan (sebuah "model")
Toko Kita ingin tahu customer mana yang akan berhenti membeli ("churn"), supaya tim marketing bisa mengirimi mereka voucher. Kamu bisa menulis aturannya sendiri: "customer yang belum order selama 60 hari akan churn". Tapi apakah 60 itu benar? Apakah jumlah order mereka berpengaruh, atau apakah mereka memakai aplikasinya? Machine learning melihat ratusan customer lama, di mana kita tahu siapa yang churn, dan menemukan aturan yang paling baik memisahkan customer yang churn dari customer yang setia.
Datanya
Track ini memakai churn.csv: 400 customer lama, perilaku mereka, dan apakah mereka churn dalam 90 hari berikutnya:
import pandas as pd
churn = pd.read_csv("churn.csv")
print(churn.head())
print(churn.shape)
print(churn["churned"].mean().round(3))
customer_id tenure_months orders_90d avg_order_value days_since_last_order support_tickets \
0 1001 12 7 163000 47 1
1 1002 33 4 472000 73 1
2 1003 5 0 124000 14 0
3 1004 11 2 241000 14 1
4 1005 16 6 166000 31 2
segment app_user churned
0 Consumer 0 0
1 Business 0 0
2 Business 0 1
3 Consumer 0 1
4 Consumer 0 0
(400, 9)
0.335
Setiap baris adalah satu contoh (seorang customer). Kolom-kolomnya mendeskripsikan mereka, dan churned adalah jawaban yang ingin kita prediksi (1 = churn). Sepertiga dari customer ini churn.
Belajar adalah mencari aturan yang baik
Ayo buat idenya konkret dengan NumPy. Aturan buatan tangan: "churn kalau lebih dari 60 hari sejak order terakhir". Seberapa sering aturan itu benar?
import numpy as np
days = churn["days_since_last_order"].to_numpy()
actual = churn["churned"].to_numpy()
predicted = (days > 60).astype(int)
print("accuracy:", (predicted == actual).mean().round(3))
accuracy: 0.72
Sekarang biarkan data yang memilih batasnya: coba setiap nilai dan simpan yang akurasinya terbaik.
best_threshold, best_accuracy = None, 0
for threshold in range(1, 120):
accuracy = ((days > threshold).astype(int) == actual).mean()
if accuracy > best_accuracy:
best_threshold, best_accuracy = threshold, accuracy
print(best_threshold, round(best_accuracy, 3))
43 0.742
Loop itu adalah machine learning dalam versi mini: sekumpulan aturan yang mungkin (days > threshold), cara menilainya (akurasi), dan pencarian yang terbaik. Algoritma sungguhan mencari di kumpulan yang jauh lebih besar (menggabungkan semua kolom, dengan bobot) dengan cara yang jauh lebih cerdas, tapi idenya tidak pernah berubah.
Model adalah aturan dengan pengaturan yang bisa disesuaikan (parameter-nya). Melatih (training) berarti menyesuaikan parameter supaya aturannya cocok dengan contoh-contoh yang diketahui sebaik mungkin.
Supervised learning: contoh beserta jawabannya
Saat contoh-contohmu dilengkapi jawabannya (label), itu supervised learning: jawaban-jawaban itu "mengawasi" pencariannya. Ada dua jenis:
| Jenis | Jawabannya berupa | Contoh di Toko Kita |
|---|---|---|
| klasifikasi | sebuah kategori | apakah customer ini akan churn? (ya/tidak); ulasan produk ini tentang kategori apa? |
| regresi | sebuah angka | berapa unit kopi yang akan kita jual besok? berapa yang akan dibelanjakan customer ini bulan depan? |
Pertanyaan yang perlu diajukan: "apakah hal yang aku prediksi berupa kategori atau besaran?"
Unsupervised learning: tanpa jawaban, temukan strukturnya
Kadang tidak ada label, hanya data. Unsupervised learning menemukan struktur dengan sendirinya:
- Clustering: kelompokkan customer ke segmen dengan perilaku serupa (pemburu diskon, pelanggan setia, pembeli bisnis besar), tanpa memberi tahu apa segmennya.
- Reduksi dimensi: ringkas 50 kolom menjadi 2 atau 3 yang mempertahankan sebagian besar informasinya, untuk grafik atau sebagai input model lain.
- Deteksi anomali: tandai order yang terlihat tidak seperti order lainnya (kemungkinan penipuan).
Hasilnya butuh interpretasi manusia: algoritmanya berkata "80 customer ini mirip", dan kamu yang mencari tahu kenapa.
Kapan tidak memakai ML
Machine learning itu ampuh dan terlalu sering dipakai. Utamakan aturan biasa atau query SQL saat:
- Aturannya sudah diketahui dan stabil: PPN 11%; ongkir gratis di atas Rp 500.000. Menulis aturannya lebih jelas, tepat dan gratis.
- Kamu tidak punya cukup contoh berlabel: beberapa lusin jarang cukup; ratusan sampai ribuan itu yang biasa.
- Kesalahan itu mahal dan harus bisa dijelaskan: penolakan pinjaman mungkin butuh alasan yang bisa diperiksa orang.
- Baseline sederhana sudah berhasil: selalu bandingkan model dengan "aturan yang jelas". Kalau model nyaris tidak mengalahkannya, kerumitannya tidak sepadan.
Poin terakhir itu paling penting. "Prediksi bahwa tidak ada yang churn" benar untuk 66,5% dari customer ini. Model apa pun harus mengalahkan baseline itu supaya berguna.
Mengapa ini penting untuk kode yang bersih
Memandang model sebagai "fungsi dengan parameter, yang dipilih supaya cocok dengan contoh" menghilangkan kesan misterius dari ML. Ini disiplin yang sama dengan bagian lain kursus ini: input yang jelas (fitur), output yang jelas (prediksi), tujuan yang terukur (skor), dan baseline sederhana yang harus dikalahkan. Tim yang melewatkan baseline akhirnya merawat model rumit yang sebenarnya bisa disamai aturan satu baris.
Rangkuman
- ML menemukan aturan (model) dari contoh, alih-alih kamu yang menulisnya.
- Model punya parameter; training mencari parameter yang paling cocok dengan contoh-contohnya.
- Supervised = contoh dengan label: klasifikasi (kategori) atau regresi (angka).
- Unsupervised = tanpa label: clustering, reduksi dimensi, deteksi anomali.
- Pakai aturan biasa saat aturannya sudah diketahui, datanya sedikit, atau penjelasan itu wajib. Selalu kalahkan baseline sederhana.