正在準備工作環境...
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 →