RFM Analysis คืออะไร

RFM Analysis (ย่อมาจาก Recency, Frequency, Monetary) คือเทคนิคการวิเคราะห์ข้อมูลลูกค้า ที่นิยมใช้เพื่อ แบ่งกลุ่มลูกค้า (Customer Segmentation) ตามพฤติกรรมการซื้อที่แตกต่างกัน โดยชื่อ RFM มาจากตัวย่อของข้อมูลหลัก 3 อย่างที่นำมาวิเคราะห์ ได้แก่

1.R - Recency: ข้อมูลของลูกค้าที่มาซื้อสินค้าหรือใช้บริการครั้งล่าสุดเมื่อไหร่ หรือจำนวนวันนับจาก Transaction ล่าสุด7 ลูกค้าที่เพิ่งซื้อไปไม่นานมานี้จะมีแนวโน้มกลับมาซื้ออีกและได้รับ Score ที่สูงกว่า

2.F - Frequency: ความถี่ในการมาซื้อสินค้าหรือใช้บริการ หรือจำนวน Transaction ในช่วงเวลาหนึ่ง (เช่น 1 ปี) ลูกค้าที่ซื้อบ่อยคือลูกค้าขาประจำและได้รับ Score ที่สูงกว่า

3.M - Monetary: ปริมาณหรือมูลค่าการซื้อหรือใช้บริการของลูกค้า หรือมูลค่ารวมของ Transaction ในช่วงเวลาหนึ่ง (เช่น 1 ปี) ลูกค้าที่ใช้จ่ายมากคือลูกค้าที่มีมูลค่าสูงและได้รับ Score ที่สูงกว่า

ความสำคัญของการทำ RFM Analysis มาจากข้อจำกัดด้านทรัพยากร (เงิน เวลา กำลังคน) ในการทำการตลาดกับลูกค้าทุกกลุ่ม RFM Model ช่วยให้นักการตลาดมุ่งเน้นไปที่กลุ่มลูกค้าที่สำคัญ ซึ่งตามหลัก Pareto สามารถทำกำไรได้ถึง 80% ของลูกค้าทั้งหมด การแบ่งกลุ่มด้วย RFM ช่วยให้เข้าใจลูกค้าแต่ละคนใช้ทรัพยากรได้อย่างคุ้มค่า และสามารถออกแบบกลยุทธ์ทางการตลาดหรือโปรโมชั่นให้เหมาะสมกับกลุ่มเป้าหมายได้อย่างมีประสิทธิภาพซึ่งนำไปสู่การเพิ่มรายได้และการกลับมาซื้อซ้ำ ทำให้ธุรกิจยั่งยืน

ขั้นตอนการทำ RFM Analysis โดยทั่วไปต้องมีข้อมูลที่สามารถระบุตัวลูกค้าได้ (เช่น จากบัตรสะสมแต้ม) และมีการบันทึกข้อมูลการซื้อขาย (วันที่ซื้อ, มูลค่า) จากนั้นคำนวณค่า R, F, M สำหรับลูกค้าแต่ละคน14 และนำมา คำนวณคะแนน RFM ซึ่งมักจะให้ Score ตั้งแต่ 1 ถึง 5 ในแต่ละแกน (R, F, M) โดยวิธีที่นิยมคือ การหาค่าควินไทล์ (Quintile) หรือการกำหนดเกณฑ์ที่เหมาะสมกับธุรกิจ

เมื่อได้คะแนน R, F, M แล้ว จะนำมาแบ่งกลุ่มลูกค้าสามารถแบ่งออกได้เป็น 11 กลุ่มหลัก เช่น

• Champions: ลูกค้าที่ซื้อล่าสุด บ่อย และใช้จ่ายสูง ควรดูแลรักษาไว้เป็นอย่างดี

• Loyal Customers: ลูกค้าที่ซื้อบ่อยและใช้จ่ายสูง แม้ไม่ได้เพิ่งซื้อล่าสุด ควรทำความเข้าใจความชอบและมอบสิทธิประโยชน์

• New Customers: ลูกค้าที่เพิ่งซื้อครั้งแรกไม่นาน ควรสร้างความประทับใจ

• Can’t Lose: ลูกค้าที่เคยเป็น Champions แต่ไม่ได้ซื้อนานแล้ว ควรหาสาเหตุและพยายามดึงกลับมาด้วยโปรโมชั่นพิเศษ

• Lost: ลูกค้าที่ไม่ได้กลับมาซื้อนานมาก และมีประวัติการซื้อน้อยหรือมูลค่าต่ำ เป็นกลุ่มที่ยากจะดึงกลับมา

การแบ่งกลุ่มนี้ช่วยให้สามารถวางกลยุทธ์และการสื่อสารที่แตกต่างกันสำหรับแต่ละกลุ่ม

แหล่งข้อมูลระบุว่า RFM Analysis สามารถทำได้โดยใช้ Excel หรือเครื่องมือ BI อย่าง Google Data Studio

อย่างไรก็ตาม RFM Analysis ก็มี ข้อจำกัด เช่น ไม่ได้นำข้อมูล Demographic มาใช้ (อาจต้องใช้เทคนิค Clustering เช่น K-means), เป็นการวิเคราะห์จาก พฤติกรรมในอดีต (ไม่ใช่การพยากรณ์อนาคตโดยตรง ซึ่งอาจต้องใช้ Predictive Analytics), และไม่สามารถจำแนก ชนิดสินค้าที่ซื้อขาย ได้ (อาจต้องใช้เทคนิคอื่นเช่น Basket Analysis).

:bar_chart: ตัวอย่างการนำไปใช้:

  • ให้คะแนนลูกค้าแต่ละคนในแต่ละมิติ (เช่น 1–5)
  • สร้างกลุ่มลูกค้า เช่น:
    • Best Customers: R=5, F=5, M=5
    • Lost High Value: R=1, F=5, M=5
    • Potential Loyalists: R=4, F=4, M=3
  • ส่งแคมเปญการตลาดเฉพาะกลุ่ม เช่น:
    • กลุ่มที่หายไปนาน → ส่งโปรโมชั่นให้กลับมา
    • กลุ่มที่ภักดี → มอบรางวัลหรือสิทธิพิเศษ

:white_check_mark: ประโยชน์:

  • ช่วยวิเคราะห์มูลค่าของลูกค้าแต่ละราย
  • ใช้ทรัพยากรการตลาดอย่างมีประสิทธิภาพ
  • เพิ่มยอดขายจากกลุ่มลูกค้าที่มีศักยภาพสูง

ตัวอย่างโค้ด RFM Analysis ด้วย Python โดยใช้ข้อมูลจาก DataFrame ของการสั่งซื้อสินค้า:

:package: 1. เตรียมข้อมูลตัวอย่าง

import pandas as pd
from datetime import datetime

# ตัวอย่างข้อมูลคำสั่งซื้อ
data = {
    'CustomerID': ['C001', 'C002', 'C001', 'C003', 'C002', 'C001', 'C003'],
    'InvoiceDate': [
        '2024-12-01', '2024-12-05', '2025-01-10',
        '2025-02-01', '2025-02-20', '2025-03-01', '2025-03-05'
    ],
    'Amount': [250, 300, 150, 400, 200, 100, 300]
}

df = pd.DataFrame(data)
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])

:bar_chart: 2. คำนวณค่า RFM

# วันที่อ้างอิง (วันที่ทำการวิเคราะห์)
snapshot_date = datetime(2025, 3, 31)

# คำนวณ RFM
rfm = df.groupby('CustomerID').agg({
    'InvoiceDate': lambda x: (snapshot_date - x.max()).days,  # Recency
    'CustomerID': 'count',                                     # Frequency
    'Amount': 'sum'                                            # Monetary
})

rfm.rename(columns={
    'InvoiceDate': 'Recency',
    'CustomerID': 'Frequency',
    'Amount': 'Monetary'
}, inplace=True)
  1. ให้คะแนน (Scoring) RFM
# ให้คะแนน 1–5 โดยใช้ quintile (แบ่งตามเปอร์เซ็นต์)
rfm['R_Score'] = pd.qcut(rfm['Recency'], 5, labels=[5,4,3,2,1]).astype(int)
rfm['F_Score'] = pd.qcut(rfm['Frequency'].rank(method='first'), 5, labels=[1,2,3,4,5]).astype(int)
rfm['M_Score'] = pd.qcut(rfm['Monetary'], 5, labels=[1,2,3,4,5]).astype(int)

# รวม RFM Score
rfm['RFM_Segment'] = rfm['R_Score'].astype(str) + rfm['F_Score'].astype(str) + rfm['M_Score'].astype(str)
rfm['RFM_Score'] = rfm[['R_Score', 'F_Score', 'M_Score']].sum(axis=1)

:clipboard: 4. แสดงผล

print(rfm.sort_values(by='RFM_Score', ascending=False))

:dart: ผลลัพธ์ (ตัวอย่าง)

CustomerID Recency Frequency Monetary R_Score F_Score M_Score RFM_Segment RFM_Score
C001 30 3 500 5 3 5 535 13
C003 26 2 700 5 2 5 525 12