Segmentasi Pelanggan dengan SQL: Metode RFM (2026)
Blog/Tutorial SQL/Segmentasi Pelanggan dengan SQL: Metode RFM (2026)

Segmentasi Pelanggan dengan SQL: Metode RFM (2026)

BimaBima
·27 Juli 2026·10 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Segmentasi pelanggan dengan SQL paling praktis pakai metode RFM: Recency (kapan terakhir belanja), Frequency (seberapa sering), Monetary (total belanja). Hitung ketiganya per pelanggan, lalu bagi tiap dimensi jadi kuartil pakai window function NTILE(4). Gabungan skornya jadi dasar buat kasih label segmen kayak VIP, loyal, atau berisiko hilang, tanpa perlu tools mahal atau machine learning.

Cara paling praktis segmentasi pelanggan dengan SQL pakai metode RFM: hitung kapan terakhir mereka belanja, seberapa sering, dan berapa total belanjanya.

Semua pelanggan diperlakukan sama itu boros. Yang belanja tiap minggu dan yang cuma mampir sekali dikasih promo yang sama, hasilnya budget kebuang. RFM misahin mereka jadi kelompok yang tiap-tiapnya butuh perlakuan beda.

Di bawah ini query lengkapnya, dari hitung RFM sampai kasih label segmen yang bisa langsung ditindaklanjuti.

Apa itu segmentasi pelanggan RFM?

RFM adalah metode segmentasi berdasarkan tiga dimensi: Recency (kapan terakhir belanja), Frequency (seberapa sering), dan Monetary (total belanja). Tiap pelanggan dikasih skor di ketiganya, lalu digabung jadi segmen yang punya arti bisnis.

Kenapa RFM populer? Karena simpel dan langsung kepakai. Gak butuh machine learning, gak butuh tools mahal. Cukup data transaksi dan SQL. Buat bisnis yang lebih besar, ini pintu masuk sebelum ke cohort analysis yang lebih dalam.

Gimana cara hitung R, F, dan M per pelanggan?

Mulai dari agregasi. Satu pelanggan, tiga angka.

SELECT
  customer_id,
  CURRENT_DATE - MAX(order_date) AS recency,
  COUNT(*) AS frequency,
  SUM(total) AS monetary
FROM orders
GROUP BY customer_id;

Recency itu selisih hari antara hari ini dan order terakhir. Makin kecil, makin baru dia belanja. Frequency itu jumlah transaksi. Monetary itu total rupiah yang dia keluarin.

Perhatiin recency: nilai kecil itu bagus (baru belanja), nilai besar itu buruk (lama hilang). Ini kebalik dari frequency dan monetary. Nanti pengaruh ke arah pemeringkatan.

Gimana kasih skor kuartil pakai NTILE?

NTILE(4) bagi pelanggan jadi empat kelompok sama besar berdasarkan urutan nilai. Ini cara adil kasih skor 1 sampai 4, karena batasnya nyesuain data kamu, bukan angka tebakan.

NTILE(4) OVER (ORDER BY recency DESC) AS r_score,
NTILE(4) OVER (ORDER BY frequency ASC) AS f_score,
NTILE(4) OVER (ORDER BY monetary ASC) AS m_score

Buat recency aku pakai DESC biar pelanggan yang paling baru belanja (recency kecil) dapat skor 4. Buat frequency dan monetary pakai ASC biar yang paling tinggi dapat skor 4. Jadi di semua dimensi, skor 4 selalu berarti "pelanggan terbaik". NTILE ini window function, konsepnya aku bahas di glossary window function.

Gimana ngasih label segmen dari skor?

Gabung semuanya di satu query pakai CTE, lalu terjemahin kombinasi skor jadi label pakai CASE WHEN.

WITH rfm AS (
  SELECT
    customer_id,
    CURRENT_DATE - MAX(order_date) AS recency,
    COUNT(*) AS frequency,
    SUM(total) AS monetary
  FROM orders
  GROUP BY customer_id
),
skor AS (
  SELECT
    customer_id,
    NTILE(4) OVER (ORDER BY recency DESC) AS r_score,
    NTILE(4) OVER (ORDER BY frequency ASC) AS f_score,
    NTILE(4) OVER (ORDER BY monetary ASC) AS m_score
  FROM rfm
)
SELECT
  customer_id,
  r_score, f_score, m_score,
  CASE
    WHEN f_score = 4 AND m_score = 4 THEN 'VIP'
    WHEN r_score = 4 AND f_score >= 3 THEN 'Loyal'
    WHEN r_score = 1 THEN 'Berisiko Hilang'
    ELSE 'Reguler'
  END AS segmen
FROM skor
ORDER BY m_score DESC, f_score DESC;

Aturan label di sini contoh. Sesuaikan sama bisnismu. Yang penting tiap segmen punya tindak lanjut jelas: VIP dikasih prioritas, Berisiko Hilang dikirim promo pengingat. Logika CASE WHEN lengkap ada di CASE WHEN di SQL.

Contoh kasus: segmentasi pelanggan toko_berkah

Dataset toko_berkah punya 2.147 pelanggan dari 8.412 transaksi, periode Januari sampai Juni 2026. Waktu query RFM di atas dijalanin, sebaran segmennya bikin toko ini mikir ulang strategi promo.

SegmenJumlah% Pelanggan% Omzet
VIP1688%34%
Loyal41219%29%
Reguler76436%27%
Berisiko Hilang80337%10%

Angka yang paling nampol: 8% pelanggan VIP nyumbang 34% omzet. Sementara 37% pelanggan yang Berisiko Hilang cuma nyumbang 10%. Toko ini sebenernya ditopang segelintir orang.

Sebelum ini, toko_berkah nyebar diskon rata ke semua pelanggan lewat broadcast. Setelah lihat segmennya, mereka geser: VIP dapat akses produk baru duluan, dan yang Berisiko Hilang dapat voucher khusus buat narik balik. Budget promo yang sama, sasaran lebih tepat. Buat ngukur nilai jangka panjang tiap segmen, lanjutin dengan Customer Lifetime Value SQL.

Kesalahan umum saat segmentasi RFM

Salah arah pemeringkatan recency. Ini jebakan nomor satu. Recency kecil itu bagus, jadi arah ORDER BY-nya harus dibalik biar skor 4 buat yang baru belanja.

Pakai batas skor manual. Nentuin "monetary di atas 1 juta itu skor 4" gampang meleset kalau sebaran datamu beda. NTILE ngatur batas otomatis dari data.

Lupa filter transaksi batal. Order yang di-refund atau dibatalin bikin monetary bengkak. Filter status dulu sebelum hitung.

Nganggep segmen permanen. Pelanggan pindah segmen tiap bulan. Jalanin ulang query-nya rutin, jangan simpan label lama.

Bikin terlalu banyak segmen. 11 segmen RFM klasik sering kebanyakan buat tim kecil. Mulai dari 4 sampai 5 yang tiap-tiapnya punya aksi jelas.

FAQ

Apa itu segmentasi pelanggan RFM?

RFM adalah metode segmentasi pelanggan berdasarkan tiga hal: Recency (kapan terakhir belanja), Frequency (seberapa sering belanja), dan Monetary (total uang yang dibelanjain). Tiap pelanggan dikasih skor di tiga dimensi itu, lalu digabung jadi segmen. Metode ini populer karena simpel, gak butuh machine learning, dan hasilnya langsung kepakai buat nentuin siapa yang dikasih promo dan siapa yang perlu ditarik lagi.

Kenapa pakai NTILE buat segmentasi di SQL?

NTILE(4) membagi pelanggan jadi empat kelompok sama besar berdasarkan urutan nilai, jadi kuartil. Ini cara adil buat ngasih skor 1 sampai 4 di tiap dimensi RFM, karena batasnya nyesuain sebaran data kamu sendiri, bukan angka tetap yang ditebak. Pelanggan di 25% teratas monetary otomatis dapat skor 4. Tanpa NTILE, kamu harus nentuin batas manual yang gampang meleset.

Gimana cara ngasih label segmen dari skor RFM?

Pakai CASE WHEN buat nerjemahin kombinasi skor jadi label yang bisa dibaca manusia. Misalnya pelanggan dengan frequency dan monetary skor 4 dikasih label VIP. Pelanggan yang recency skor 1 (lama gak belanja) dikasih label Berisiko Hilang. Aturan labelnya kamu sesuaikan sama bisnis. Yang penting tiap segmen punya tindak lanjut yang jelas, bukan cuma nama keren.

Apakah segmentasi RFM butuh machine learning?

Gak. RFM murni hitungan agregat dan pemeringkatan, semuanya bisa dikerjain dengan SQL biasa pakai GROUP BY dan window function. Machine learning baru masuk kalau kamu mau segmentasi yang lebih rumit, misalnya clustering dengan banyak variabel. Buat mayoritas toko dan bisnis kecil menengah, RFM dengan SQL udah cukup akurat dan jauh lebih gampang dijelasin ke tim non-teknis.

Seberapa sering segmentasi pelanggan harus diperbarui?

Tergantung ritme bisnis. Buat retail atau e-commerce, sebulan sekali biasanya pas, karena recency pelanggan berubah terus. Buat bisnis dengan siklus beli panjang, sekali per kuartal cukup. Kuncinya, segmentasi itu foto sesaat, bukan label permanen. Pelanggan bisa pindah dari VIP ke Berisiko Hilang kalau dia berhenti belanja, jadi jalanin ulang query-nya secara rutin.

Penutup

Ringkasnya:

  • Hitung Recency, Frequency, Monetary per pelanggan pakai GROUP BY.
  • Kasih skor kuartil pakai NTILE(4), hati-hati arah recency dibalik.
  • Terjemahin skor jadi label segmen pakai CASE WHEN, tiap segmen punya aksi.

Jalanin query RFM lengkap di atas ke tabel order kamu. Kalau ternyata segelintir VIP nyumbang sebagian besar omzet, kamu baru nemu prioritas yang selama ini kelewat.

Mau lanjut deteksi pelanggan yang mulai kabur? Baca Churn Rate SQL. Sintaks NTILE dan window function resminya ada di dokumentasi PostgreSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Composite Index di SQL: Cara Kerja dan Urutan Kolom
Tutorial SQL
8 Oktober 2026•8 menit baca

Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite index itu index atas beberapa kolom sekaligus. Urutan kolomnya nentuin query mana yang kebantu, lewat aturan leftmost prefix.

BimaBima
Menghitung Stickiness (DAU/MAU) di SQL
Tutorial SQL
5 Oktober 2026•10 menit baca

Menghitung Stickiness (DAU/MAU) di SQL

Stickiness ngukur seberapa sering user balik lagi. Ini cara hitung DAU, MAU, dan rasio stickiness pakai SQL, plus contoh aplikasi UMKM.

BimaBima
Menghitung DAU dan MAU dengan SQL
Tutorial SQL
3 Oktober 2026•9 menit baca

Menghitung DAU dan MAU dengan SQL

DAU dan MAU dua metrik wajib buat produk digital. Ini cara hitungnya pakai SQL, lengkap query DISTINCT, per bulan, sampai rasio stickiness.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore