—— 超越 RFM 标签,结合用户行为与 LLM 文本洞察,实现更精准、更立体的客户细分
欢迎回来!在前面的学习中,我们已经为 Python 数据智能工具箱添置了与大语言模型 (LLM) 交互的能力,特别是掌握了如何利用 LLM 将非结构化的文本信息转化为包含深层语义的数值向量——Embeddings。
现在,是时候将这些新获得的能力投入实战,解决电商运营中最核心、最基础的问题之一:用户分群 (User Segmentation)。
传统的用户分群方法,例如经典的 RFM 模型 (Recency 最近一次消费时间, Frequency 消费频率, Monetary 消费金额),或者基于用户基本属性(年龄、性别、地域)和简单行为(浏览次数、加购次数)的聚类,无疑是有价值的。它们能帮助我们快速识别出“高价值客户”、“近期活跃客户”、“低消费潜力客户”等群体。
但这种分群方式,往往存在局限:
如何才能打破这些局限,实现更智能、更精准、更具洞察力的用户分群呢?
答案就藏在那些我们之前难以充分利用的 文本数据 中,以及能够“读懂”这些数据的 大语言模型 (LLM) 里!
本篇博客,我们将实战演练:
通过本篇实战,你将掌握一种将用户“行为”与“心声”相结合的先进用户分群方法,让你的运营策略真正做到有的放矢,直抵人心!
在引入 LLM 之前,我们先快速回顾一下仅基于结构化行为数据进行用户分群的典型流程。假设我们已经有了一个包含用户 ID、最近一次购买距今天数 (Recency)、购买频率 (Frequency) 和总购买金额 (Monetary) 的 DataFrame df_rfm
。
import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler # 用于特征缩放
import matplotlib.pyplot as plt
import seaborn as sns
# 模拟 RFM 数据 (实际应用中需要从订单数据计算得到)
data_rfm = {
'CustomerID': ['C001', 'C002', 'C003', 'C004', 'C005', 'C006', 'C007', 'C008'],
'Recency': [30, 15, 60, 5, 90, 20, 45, 10], # 数值越小越好
'Frequency': [5, 10, 2, 15, 1, 8, 3, 12], # 数值越大越好
'Monetary': [1000, 2500, 300, 3000, 150, 1800, 500, 2800] # 数值越大越好
}
df_rfm = pd.DataFrame(data_rfm)
print("模拟 RFM 数据:\n", df_rfm)
# --- K-Means 聚类步骤 ---
# 1. 特征选择 (选择用于聚类的列)
features = ['Recency', 'Frequency', 'Monetary']
X = df_rfm[features]
# 2. 特征缩放 (非常重要!K-Means 对距离敏感)
# 由于 Recency, Frequency, Monetary 的量纲不同,需要进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print("\n标准化后的特征数据 (部分):\n", X_scaled[:3])
# 3. 选择 K 值 (聚类数量)
# 这里我们先假设 K=3,实际中可以用肘部法则等方法确定 K 值
k = 3
# 4. 应用 K-Means 算法
kmeans = KMeans(n_clusters=k, random_state=42, n_init='auto')
kmeans.fit(X_scaled)
# 5. 获取聚类标签
df_rfm['Cluster_Traditional'] = kmeans.labels_
print("\n传统 RFM 聚类结果:\n", df_rfm)
# 6. 分析聚类结果 (计算每个簇的特征均值)
cluster_summary_traditional = df_rfm.groupby('Cluster_Traditional')[features].mean