Seluruh proyek sebelumnya mengikuti satu pola: data datang dengan label, model belajar memetakan fitur ke label, dan metrik menilai seberapa dekat prediksi terhadap label yang benar. Proyek ini menghapus pilar terakhir tersebut. Basis data 300 pelanggan ritel online tidak memiliki kolom label — tidak ada churn, tidak ada kelas harga, tidak ada target apa pun. Yang tersedia hanya perilaku belanja: berapa total yang dibelanjakan, seberapa sering memesan, berapa hari sejak transaksi terakhir, dan berapa nilai rata-rata tiap pesanan. Dari empat angka tersebut kita harus menemukan kelompok pelanggan yang benar-benar berbeda karakternya — itulah masalah unsupervised learning, dan alat utamanya adalah clustering.

Masalah Tanpa Label #

Tim pemasaran toko ritel online ingin menghentikan kebiasaan lama: mengirim kampanye yang sama ke seluruh basis pelanggan. Voucher diskon yang relevan bagi pembeli besar justru mengikis margin bila dikirim ke pembeli kecil yang memang hanya akan belanja saat ada potongan harga. Solusinya bukan memprediksi satu nilai per pelanggan seperti regresi, melainkan membagi pelanggan menjadi segmen yang secara perilaku serupa di dalam kelompoknya dan berbeda antar kelompoknya.

Karena tidak ada label, definisi berhasilnya juga bergeser. Akurasi dan recall tidak lagi tersedia — tidak ada kebenaran acuan untuk dibandingkan. Kita menilai segmentasi dari tiga sisi: kualitas statistik lewat silhouette score dan elbow method pada inertia, keterbacaan profil tiap klaster dalam bahasa bisnis, dan keberlakuan setiap segmen menjadi aksi pemasaran yang konkret. Proyek ini berhenti bukan pada angka silhouette, melainkan pada laporan rekomendasi aksi per segmen yang bisa dibaca pemangku kepentingan non-teknis.

Dataset Pelanggan 300 Baris #

Dataset dibangkitkan sintetis oleh skrip 01_bangun_data.py dengan np.random.default_rng(42), meniru hasil agregasi tabel transaksi menjadi fitur RFM (Recency, Frequency, Monetary):

  • total_belanja_ribu — total belanja setahun dalam ribu rupiah (monetary);
  • frekuensi_pesanan — jumlah pesanan selama periode observasi (frequency);
  • hari_sejak_transaksi — hari sejak transaksi terakhir (recency);
  • rata_belanja_ribu — nilai rata-rata satu pesanan dalam ribu rupiah.

Pembangkit data menyusun empat kelompok perilaku laten — pelanggan besar yang loyal, pembeli hemat yang jarang datang, pelanggan baru, dan pelanggan yang mulai mengendur — dengan tumpang tindih dan derau di tepinya agar clustering bermakna tanpa menjadi steril. Kunci pentingnya: kolom kelompok tersebut tidak disimpan ke CSV. Model clustering harus menemukan struktur itu sendiri, persis kondisi data pelanggan sungguhan yang tidak pernah hadir dengan label bawaan.

Struktur dan Artefak Proyek #

text
proyek-segmentasi-pelanggan/
├── _index.md
├── bagian/
│   ├── part-1-eksplorasi-data/
│   ├── part-2-preprocessing-dan-scaling/
│   ├── part-3-clustering-dan-profil/
│   └── part-4-rekomendasi-aksi/
├── data/
│   └── pelanggan.csv
├── src/
│   ├── 01_bangun_data.py
│   ├── 02_eksplorasi.py
│   ├── 03_preprocessing.py
│   ├── 04_clustering.py
│   └── 05_laporan.py
└── laporan/
    └── laporan-segmentasi.txt

Kelima skrip di src/ dirancang dijalankan dari root proyek sehingga path relatif data/pelanggan.csv dan laporan/... selalu konsisten. Laporan akhir sengaja berformat teks polos — berkas .md di dalam bundle akan dirender Hugo sebagai halaman kursus, sedangkan laporan/laporan-segmentasi.txt adalah artefak analisis untuk dibaca apa adanya.

Tahapan Pengerjaan #

Proyek dikerjakan dalam empat bagian berurutan; setiap bagian menghasilkan skrip yang dapat dijalankan ulang kapan saja:

  1. Bagian 1: Eksplorasi Data — bangkitkan dataset, periksa kualitasnya, kenali kemiringan distribusi dan konsentrasi pendapatan.
  2. Bagian 2: Preprocessing dan Scaling — terapkan log1p pada fitur miring, standarkan seluruh fitur, dan buktikan mengapa scaling wajib untuk KMeans.
  3. Bagian 3: Clustering dan Profil — uji k=2 sampai k=8 dengan silhouette dan elbow, lalu susun profil bisnis tiap klaster.
  4. Bagian 4: Rekomendasi Aksi — terjemahkan segmen menjadi strategi pemasaran dan tulis laporan proyek.

Kerjakan sesuai urutan karena setiap skrip membangun di atas temuan dan keputusan bagian sebelumnya.

Aturan Determinisme dan Cara Menjalankan #

Seluruh proyek patuh pada aturan determinisme: dataset memakai satu generator berseed 42; KMeans memakai random_state=42, n_init=10; tidak ada skrip yang mencetak waktu, durasi, atau path absolut. Setiap skrip selesai dalam hitungan detik, sehingga seluruh proyek dapat diverifikasi ulang berkali-kali dengan hasil identik:

bash
cd content/machine-learning/proyek/proyek-segmentasi-pelanggan
python3 src/01_bangun_data.py
python3 src/02_eksplorasi.py
python3 src/03_preprocessing.py
python3 src/04_clustering.py
python3 src/05_laporan.py

Mulailah dari Bagian 1: Eksplorasi Data — di sana dataset dibangkitkan, kemiringan distribusi yang kelak menjadi alasan transformasi log mulai terlihat, dan konsentrasi pendapatan pada segelintir pelanggan menegaskan mengapa segmentasi layak dikerjakan.

Referensi Resmi #