วิเคราะห์และตีความกลุ่มลูกค้า

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

Karolis Urbonas

Head of Data Science, Amazon

แนวทางสร้าง customer personas

  • สถิติสรุปของแต่ละคลัสเตอร์ เช่น ค่าเฉลี่ย RFM
  • Snake plots (จากการวิจัยตลาด)
  • ความสำคัญสัมพัทธ์ของแต่ละแอตทริบิวต์เทียบกับประชากรรวม
การแบ่งกลุ่มลูกค้าด้วย Python

สถิติสรุปของแต่ละคลัสเตอร์

  • รัน k-means segmentation สำหรับค่า k หลายค่าที่อยู่รอบค่าที่แนะนำ
  • สร้างคอลัมน์ label ของคลัสเตอร์ใน DataFrame ต้นฉบับ:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    คำนวณค่าเฉลี่ย RFM และขนาดของแต่ละคลัสเตอร์:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • ทำซ้ำเช่นเดียวกันสำหรับ k=3
การแบ่งกลุ่มลูกค้าด้วย Python

สถิติสรุปของแต่ละคลัสเตอร์

  • เปรียบเทียบค่าเฉลี่ย RFM ของแต่ละ clustering solution
การแบ่งกลุ่มลูกค้าด้วย Python

Snake plots สำหรับทำความเข้าใจและเปรียบเทียบกลุ่ม

  • เทคนิคจากการวิจัยตลาดสำหรับเปรียบเทียบกลุ่มต่าง ๆ
  • แสดงแอตทริบิวต์ของแต่ละกลุ่มในรูปแบบภาพ
  • ต้อง normalize ข้อมูลก่อน (center & scale)
  • พล็อตค่าเฉลี่ย normalized ของแต่ละแอตทริบิวต์ในแต่ละคลัสเตอร์
การแบ่งกลุ่มลูกค้าด้วย Python

เตรียมข้อมูลสำหรับ snake plot

แปลง datamart_normalized เป็น DataFrame และเพิ่มคอลัมน์ Cluster

datamart_normalized = pd.DataFrame(datamart_normalized, 
                                   index=datamart_rfm.index, 
                                   columns=datamart_rfm.columns)
datamart_normalized['Cluster'] = datamart_rfm_k3['Cluster']

แปลงข้อมูลเป็น long format เพื่อเก็บค่า RFM และชื่อ metric ไว้ในคอลัมน์ละ 1 คอลัมน์

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
การแบ่งกลุ่มลูกค้าด้วย Python

สร้างภาพ snake plot

plt.title('Snake plot of standardized variables')
sns.lineplot(x="Attribute", y="Value", hue='Cluster', data=datamart_melt)

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

ความสำคัญสัมพัทธ์ของแอตทริบิวต์ในแต่ละกลุ่ม

  • เทคนิคที่มีประโยชน์สำหรับระบุความสำคัญสัมพัทธ์ของแอตทริบิวต์ในแต่ละกลุ่ม
  • คำนวณค่าเฉลี่ยของแต่ละคลัสเตอร์
  • คำนวณค่าเฉลี่ยของประชากรรวม
  • คำนวณคะแนนความสำคัญโดยหารแล้วลบ 1 (ทำให้ได้ค่า 0 เมื่อค่าเฉลี่ยของคลัสเตอร์เท่ากับค่าเฉลี่ยประชากร)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
การแบ่งกลุ่มลูกค้าด้วย Python

วิเคราะห์และพล็อตความสำคัญสัมพัทธ์

  • ยิ่งอัตราส่วนห่างจาก 0 มากเท่าใด แอตทริบิวต์นั้นยิ่งมีความสำคัญต่อกลุ่ม (เทียบกับประชากรรวม) มากขึ้น
relative_imp.round(2)
         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
# Plot heatmap
plt.figure(figsize=(8, 2))
plt.title('Relative importance of attributes')
sns.heatmap(data=relative_imp, annot=True, fmt='.2f', cmap='RdYlGn')
plt.show()
การแบ่งกลุ่มลูกค้าด้วย Python

Heatmap ความสำคัญสัมพัทธ์

         Recency  Frequency  MonetaryValue
Cluster                                   
0          -0.82       1.68           1.83
1           0.84      -0.84          -0.86
2          -0.15      -0.34          -0.42
การแบ่งกลุ่มลูกค้าด้วย Python

ถึงเวลาลองใช้เทคนิค customer profiling ต่าง ๆ ด้วยตัวเอง!

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

Preparing Video For Download...