寫在前面
—— 超越 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