FORMULA → SQL
แปลงคำถามเดียวกันเป็น query ที่ตรวจสอบได้ SELECT customer_id,
DATEDIFF(:snapshot, MAX(occurred_at)) AS recency,
COUNT(DISTINCT invoice_id) AS frequency,
SUM(amount) AS monetary
FROM transactions
WHERE occurred_at > :snapshot - INTERVAL 120 DAY
AND occurred_at <= :snapshot
GROUP BY customer_id;ใน production ควรสร้าง snapshot table รายสัปดาห์หรือรายเดือน แล้วคำนวณ slope ด้วย regression บนหลายจุดเวลา ไม่ใช่หารคะแนนสองช่วงเพียงครั้งเดียว
BOUNDED PYTHON RUNNER · LIVE DASHBOARD
เลือกขั้นตอน แล้วให้ Python รันสูตรจริง Dashboard นี้เปิดให้เปลี่ยน parameter แต่ไม่เปิด arbitrary code execution โค้ดที่แสดงคือ operation ที่ runner ใช้จริง นักศึกษาจึงอ่าน code, รัน และตรวจ output ได้โดยไม่เปิด shell บน server
ขั้นตอน01 · Clean transactions 02 · Calculate RFM 03 · Quartile scoring 04 · Customer movement Customer IDC-1001 C-1002 C-1003 C-1004 C-1005 C-1006 C-1007 C-1008 C-1009 C-1010 C-1011 C-1012 Snapshot Window90 days 120 days 180 days รัน Python
CONNECTING… — ms
PYTHON CODE · READ ONLY # Select an operation and run.RESULT · JSON {}ขอบเขตความปลอดภัย รองรับเฉพาะ 4 operation, ลูกค้า 12 รหัส, snapshot และ window ที่กำหนด ไม่มี eval/exec ไม่มี package install ไม่มี filesystem access จากผู้ใช้ และ Python service ไม่มี public port
ROLLING TIME WINDOW · DYNAMIC RFM
เมื่อเวลาเดิน แม้ไม่มีแถวใหม่ RFM ก็เปลี่ยนได้ เลื่อน Snapshot หรือกด Play แล้วสังเกตสองขอบพร้อมกัน: ขอบขวาคือ “วันนี้” ที่ทำให้ Recency เพิ่มขึ้น ขอบซ้ายคือวันหมดอายุของหลักฐาน เมื่อ transaction หลุดขอบซ้าย Frequency และ Monetary จะลดลง
CustomerC-1001 C-1002 C-1003 C-1004 C-1005 C-1006 C-1007 C-1008 C-1009 C-1010 C-1011 C-1012 Window60 days 90 days 120 days ▶ เล่นเวลา ↺ Reset
+ 0 รายการเข้าหน้าต่าง − 0 รายการหลุดหน้าต่าง 0 รายการอยู่ในหน้าต่าง
RECENCY — วันนับจากรายการล่าสุด — FREQUENCY — invoice ในหน้าต่าง — MONETARY — THB ในหน้าต่าง — Recency risk Frequency Monetary
01 · ไม่มีการซื้อใหม่ Recency เพิ่มตามเวลา ส่วน F และ M ยังเท่าเดิมจนกว่าขอบซ้ายจะชน transaction
02 · รายการใหม่เข้ามา Recency reset ใกล้ศูนย์ F เพิ่มหนึ่ง และ M เพิ่มตามมูลค่ารายการ
03 · รายการเก่าหลุดออก ไม่มี DELETE ในฐานข้อมูล แต่ feature เปลี่ยนเพราะนิยาม window ไม่มองรายการนั้นแล้ว