写在前面
—— 超越 RFM 标签,结合用户行为与 LLM 文本洞察,实现更精准、更立体的客户细分
欢迎回来!在前面的学习中,我们已经为 Python 数据智能工具箱添置了与大语言模型 (LLM) 交互的能力,特别是掌握了如何利用 LLM 将非结构化的文本信息转化为包含深层语义的数值向量——Embeddings。
现在,是时候将这些新获得的能力投入实战,解决电商运营中最核心、最基础的问题之一:用户分群 (User Segmentation)。
传统的用户分群方法,例如经典的 RFM 模型 (Recency 最近一次消费时间, Frequency 消费频率, Monetary 消费金额),或者基于用户基本属性(年龄、性别、地域)和简单行为(浏览次数、加购次数)的聚类,无疑是有价值的。它们能帮助我们快速识别出“高价值客户”、“近期活跃客户”、“低消费潜力客户”等群体。
但这种分群方式,往往存在局限:
- 忽略了用户的“心声”: 两个 RFM 指标完全相同的用户,一个可能在评论区对你的产品赞不绝口,另一个可能充满了对物流或客服的抱怨。他们的 真实满意度、潜在需求和流失风险 可能截然不同,但仅凭 RFM 无法区分。
- 难以发现“兴趣部落”: 用户购买了相似价格区间的商品,但他们是追求“性价比”还是“潮流设计”?他们是因为“功能需求”购买还是因为“社交推荐”?传统行为数据很难揭示这些基于 兴趣、偏好、价值观 的细微群体差异。
- 群组画像“脸谱化”: 分出来的群组往往只有一些冷冰冰的数字标签(“高 F 低 M”),难以形成 生动、立体、可感知 的用户画像,不利于营销和产品团队真正理解目标用户。
- 运营策略“一刀切”: 对同一 RFM 群组的用户推送相同的营销信息,可能对某些用户有效,但对另一些用户可能造成打扰,因为我们忽略了他们更深层次的差异。
如何才能打破这些局限,实现更智能、更精准、更具洞察力的用户分群呢?
答案就藏在那些我们之前难以充分利用的 文本数据 中,以及能够“读懂”这些数据的 大语言模型 (LLM) 里!
本篇博客,我们将实战演练:
- 回顾传统基于行为数据的用户分群方法 (以 K-Means 为例)。
- 演示如何利用 LLM 处理用户评论等文本数据,提取情感、主题或生成 Embeddings 作为新特征。
- 将 LLM 提取的特征与传统行为特征融合,构建更丰富的用户特征向量。
- 应用 K-Means 算法对融合后的特征进行聚类,实现“智能用户分群”。
- 利用 LLM 辅助解释和命名生成的群组,让用户画像更生动、更可理解。
通过本篇实战,你将掌握一种将用户“行为”与“心声”相结合的先进用户分群方法,让你的运营策略真正做到有的放矢,直抵人心!
一、温故知新:传统基于行为数据的用户分群 (K-Means)
在引入 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