跳到主要內容
Cypher's Practical Coding
正在準備工作環境...

RFM 客戶分群

老闆走過來問:「誰是我們的 VIP?誰快流失了?」你翻了翻 Excel 裡的客戶名單,但 5 萬筆資料根本看不出頭緒。這時候你需要的是 RFM 分析 — 用三個數字就能把客戶分成明確的群體。

  • R(Recency) = 最近一次消費距今幾天?數字越小越好
  • F(Frequency) = 一段時間內消費了幾次?數字越大越好
  • M(Monetary) = 一段時間內總共花了多少錢?數字越大越好

第一步:算出每個客戶的 R、F、M

先從 orders 表算出每個客戶的三個原始指標:

重點:

  • MAX(order_date) 取最近一次消費日期
  • julianday 轉成天數方便相減(這是 SQLite 語法,MySQL 用 DATEDIFF
  • 只算已完成的訂單

第二步:用 NTILE 打分數

拿到原始數字後,要把每個指標分成 1~5 分。SQL 的 NTILE(5) 剛好能把資料平均分成 5 等份:

注意排序方向:

  • R 分數:天數越小越好,所以 ASC(最近的排前面,拿到 1 分 = 最佳)
  • F、M 分數:數字越大越好,所以 DESC(最多的排前面,拿到 1 分 = 最佳)

第三步:組合分數,定義客群

把三個分數加總或分類,就能貼標籤:

分群邏輯:

  • VIP:最近有買、常買、花很多(R、F、M 都在前 2 等分)
  • 忠實客戶:最近有買、買的頻率不錯
  • 流失風險:很久沒買、也不常買
  • 沉睡客戶:很久沒買(但以前可能常買)
  • 一般客戶:其他

第四步:統計各客群人數

最後看看每個群有多少人,確認分布是否合理:

AI 協作:學了這個,跟 AI 怎麼配合?

RFM 分析的 SQL 很長,但邏輯是固定的模式。AI 可以幫你快速產出,但你要會判斷。

你的人類優勢:

  • 你知道公司的 VIP 定義是什麼(不是每家公司都一樣)
  • 你能決定 NTILE 要分幾等、分群門檻怎麼設
  • 你能看出分群結果是否合理(例如 VIP 佔 80% 一定有問題)

可以這樣跟 AI 說:

幫我用 orders 表做 RFM 分析,基準日期用今天,用 NTILE(5) 打分,然後幫我分成 VIP、忠實、一般、沉睡、流失五群。先給我每群的人數統計。

練習題

互動示範

DEMO 1可以修改程式碼試玩
DEMO 2可以修改程式碼試玩
DEMO 3可以修改程式碼試玩
DEMO 4可以修改程式碼試玩

挑戰任務

Task 1

算出每個客戶的 recency(距離 2025-07-01 的天數)、frequency 和 monetary,只算 completed 訂單(顯示 customer_id、recency_days、frequency、monetary)

Task 2

在上一題的基礎上,用 NTILE(5) 為每個客戶的 R、F、M 打分(顯示 customer_id、r_score、f_score、m_score)

Task 3

統計 RFM 各客群的人數(顯示 segment、customer_count),VIP 定義為 r_score<=2 且 f_score<=2 且 m_score<=2,流失風險為 r_score>=4 且 f_score>=4,其餘為一般客戶

Next Lesson →