购物分段
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 48 课,共 51 课。
一家在线植物商店只能通过顾客的行为来了解这 240 位顾客:每年的订单数、购物篮大小、促销商品的购买占比,以及距离上次下单的天数。
没人给它们贴上标签。店主想要几个能用简单文字描述的细分群体,还想为那个已经流失的群体写一封挽回邮件。
让两种方法在 k 上达成一致:病房树给出建议,轮廓则将其与相邻值进行比较。然后用实际单位读取每个片段。
挑战
困难程序会读取树的切分位置;起始代码会设置好带标题的图表。
- 对特征进行缩放,并在该位置切分 ward 树。打印生成的分段数量。
- 打印该 k 值及其相邻值对应的 k-means 轮廓系数(保留 3 位小数),然后打印最佳 k 值。
- 用最佳 k 值重新拟合,并将结果存入
plants["segment"]。按数量从多到少排列,用字母标记每个分段,并打印各项的原始单位均值;然后找出最后一次下单时间最久远的分段。 - 绘制每个分段的散点图,并用字母标记;添加图例并显示图表。
对于另一家店,将树切分在 8 处:
Tree cut at 8.0: 3 segments
Silhouette at k = 2: 0.573
Silhouette at k = 3: 0.675
Silhouette at k = 4: 0.630
Best k: 3
A (70): 8.6 orders a year, 29 EUR baskets, 15% on sale, last order 23 days ago
B (50): 3.1 orders a year, 22 EUR baskets, 60% on sale, last order 53 days ago
C (30): 1.8 orders a year, 89 EUR baskets, 10% on sale, last order 148 days ago
Win-back email: segment C以及它的图表:
然后 Coddy 会描述你的结果。
亲手试试
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from scipy.cluster.hierarchy import linkage, fcluster
# 植物店每位顾客占一行
plants = pd.read_csv("plants.csv")
features = ["orders_per_year", "avg_basket_eur", "sale_share_pct", "days_since_order"]
# 从树状图中读取店主切分聚类树的高度(分为 3 个或更多客群)
cut = float(input())
fig, ax = plt.subplots()
ax.set_title("Plant Shop Segments")
ax.set_xlabel("Orders per year")
ax.set_ylabel("Average basket (EUR)")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器