Lập hồ sơ và diễn giải các phân khúc

Phân khúc khách hàng bằng Python

Karolis Urbonas

Head of Data Science, Amazon

Cách xây dựng chân dung khách hàng

  • Thống kê tóm tắt cho từng cụm, ví dụ giá trị RFM trung bình
  • Snake plot (từ nghiên cứu thị trường)
  • Tầm quan trọng tương đối của thuộc tính cụm so với toàn bộ
Phân khúc khách hàng bằng Python

Thống kê tóm tắt cho từng cụm

  • Chạy phân cụm k-means cho vài giá trị k quanh giá trị khuyến nghị.
  • Tạo cột nhãn cụm trong DataFrame gốc:

    datamart_rfm_k2 = datamart_rfm.assign(Cluster = cluster_labels)
    

    Tính giá trị RFM trung bình và kích thước cho mỗi cụm:

    datamart_rfm_k2.groupby(['Cluster']).agg({
       'Recency': 'mean',
       'Frequency': 'mean',
       'MonetaryValue': ['mean', 'count'],
    }).round(0)
    
    • Lặp lại cho k=3
Phân khúc khách hàng bằng Python

Thống kê tóm tắt cho từng cụm

  • So sánh giá trị RFM trung bình của từng phương án phân cụm
Phân khúc khách hàng bằng Python

Snake plot để hiểu và so sánh phân khúc

  • Kỹ thuật nghiên cứu thị trường để so sánh các phân khúc
  • Biểu diễn trực quan thuộc tính của từng phân khúc
  • Cần chuẩn hóa dữ liệu trước (chuẩn tâm & chuẩn độ lệch)
  • Vẽ giá trị chuẩn hóa trung bình theo từng thuộc tính cho mỗi cụm
Phân khúc khách hàng bằng Python

Chuẩn bị dữ liệu cho snake plot

Chuyển datamart_normalized thành DataFrame và thêm cột Cluster

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

Chuyển dữ liệu sang dạng dài để giá trị RFM và tên chỉ số nằm mỗi thứ trong 1 cột

datamart_melt = pd.melt(datamart_normalized.reset_index(), 
                    id_vars=['CustomerID', 'Cluster'],
                    value_vars=['Recency', 'Frequency', 'MonetaryValue'], 
                    var_name='Attribute', 
                    value_name='Value')
Phân khúc khách hàng bằng Python

Trực quan hóa snake plot

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

Phân khúc khách hàng bằng Python

Tầm quan trọng tương đối của thuộc tính phân khúc

  • Kỹ thuật hữu ích để nhận diện tầm quan trọng tương đối của thuộc tính từng phân khúc
  • Tính giá trị trung bình của mỗi cụm
  • Tính giá trị trung bình của toàn bộ tập khách hàng
  • Tính điểm quan trọng bằng cách chia hai giá trị và trừ 1 (trả về 0 khi trung bình cụm bằng trung bình toàn bộ)
cluster_avg = datamart_rfm_k3.groupby(['Cluster']).mean()

population_avg = datamart_rfm.mean()
relative_imp = cluster_avg / population_avg - 1
Phân khúc khách hàng bằng Python

Phân tích và vẽ tầm quan trọng tương đối

  • Tỷ lệ càng xa 0, thuộc tính càng quan trọng hơn với phân khúc (so với toàn bộ).
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()
Phân khúc khách hàng bằng Python

Heatmap tầm quan trọng tương đối

         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
Phân khúc khách hàng bằng Python

Đến lượt bạn thử các kỹ thuật lập hồ sơ khách hàng khác nhau!

Phân khúc khách hàng bằng Python

Preparing Video For Download...