การแบ่งกลุ่มลูกค้าแบบ RFM (Recency, Frequency, Monetary)

การแบ่งกลุ่มลูกค้าด้วย Python

Karolis Urbonas

Head of Data Science, Amazon

RFM segmentation คืออะไร?

การแบ่งกลุ่มลูกค้าตามพฤติกรรม โดยใช้ 3 ตัวชี้วัด:

  • Recency (R)
  • Frequency (F)
  • Monetary Value (M)
การแบ่งกลุ่มลูกค้าด้วย Python

การจัดกลุ่มค่า RFM

ค่า RFM สามารถจัดกลุ่มได้หลายวิธี:

  • เปอร์เซ็นไทล์ เช่น ควอร์ไทล์
  • การตัดแบบ Pareto 80/20
  • กำหนดเองตามความรู้ทางธุรกิจ

เราจะใช้วิธีจัดกลุ่มแบบเปอร์เซ็นไทล์

การแบ่งกลุ่มลูกค้าด้วย Python

ทบทวนเปอร์เซ็นไทล์

ขั้นตอนการคำนวณเปอร์เซ็นไทล์:

  1. เรียงลำดับลูกค้าตามตัวชี้วัดนั้น
  2. แบ่งลูกค้าออกเป็นจำนวนกลุ่มที่กำหนดไว้ล่วงหน้า โดยแต่ละกลุ่มมีขนาดเท่ากัน
  3. กำหนดป้ายกำกับให้แต่ละกลุ่ม
การแบ่งกลุ่มลูกค้าด้วย Python

คำนวณเปอร์เซ็นไทล์ด้วย Python

ข้อมูลที่มี CustomerID 8 รายการ และค่า Spend ที่คำนวณแบบสุ่ม

ข้อมูลตัวอย่างเปอร์เซ็นไทล์

การแบ่งกลุ่มลูกค้าด้วย Python

คำนวณเปอร์เซ็นไทล์ด้วย Python

spend_quartiles = pd.qcut(data['Spend'], q=4, labels=range(1,5))

data['Spend_Quartile'] = spend_quartiles
data.sort_values('Spend')

การแบ่งกลุ่มลูกค้าด้วย Python

การกำหนดป้ายกำกับ

  • ให้คะแนนสูงสุดกับตัวชี้วัดที่ดีที่สุด — แต่ค่าสูงสุดไม่ได้หมายความว่าดีเสมอไป เช่น recency
  • ในกรณีนี้ ป้ายกำกับจะกลับด้าน — ยิ่งลูกค้าซื้อล่าสุด ยิ่งมีคุณค่ามากกว่า

การแบ่งกลุ่มลูกค้าด้วย Python

การกำหนดป้ายกำกับ

# Create numbered labels
r_labels = list(range(4, 0, -1))

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels)
# Create new column data['Recency_Quartile'] = recency_quartiles
# Sort recency values from lowest to highest data.sort_values('Recency_Days')
การแบ่งกลุ่มลูกค้าด้วย Python

การกำหนดป้ายกำกับ

จะเห็นว่าป้ายกำกับควอร์ไทล์ถูกกลับด้าน เนื่องจากลูกค้าที่ซื้อล่าสุดมีคุณค่ามากกว่า

recency_quartiles

การแบ่งกลุ่มลูกค้าด้วย Python

ป้ายกำกับแบบกำหนดเอง

สามารถกำหนดรายการป้ายกำกับเป็นข้อความหรือค่าอื่น ๆ ได้ตามกรณีใช้งาน

# Create string labels
r_labels = ['Active', 'Lapsed', 'Inactive', 'Churned']

# Divide into groups based on quartiles recency_quartiles = pd.qcut(data['Recency_Days'], q=4, labels=r_labels) # Create new column data['Recency_Quartile'] = recency_quartiles # Sort values from lowest to highest data.sort_values('Recency_Days')
การแบ่งกลุ่มลูกค้าด้วย Python

ป้ายกำกับแบบกำหนดเอง

ป้ายกำกับแบบกำหนดเองที่กำหนดให้แต่ละควอร์ไทล์

Recency_quartiles

การแบ่งกลุ่มลูกค้าด้วย Python

มาฝึกกันเถอะ!

การแบ่งกลุ่มลูกค้าด้วย Python

Preparing Video For Download...