按邮件打开星期偏好进行客户分群的技术实现咨询
客户邮件打开偏好分群方案
一、数学层面核心思路
本质是聚类分析:把每个客户转化为7维特征向量(对应周一至周日的邮件打开行为,比如打开次数占比、打开率等),通过聚类算法(优先选K-Means,易实现、解释性强)将行为模式相似的客户归为同一群组。
二、各工具实现方案
1. Python/Pandas + Scikit-learn 实现
步骤:
- 数据预处理:将客户-星期的打开数据整理成宽表(每行一个客户,列是周一到周日的特征值)
- 聚类建模:用K-Means算法分群
- 结果输出:给每个客户打上Segment标签
代码示例:
import pandas as pd from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler # 1. 读取长表数据(结构:customer_id, weekday, open_count) df = pd.read_csv("email_open_data.csv") # 2. 转成宽表:每行对应一个客户,列是各星期的打开次数 wide_df = df.pivot_table(index="customer_id", columns="weekday", values="open_count", fill_value=0) # 3. 标准化特征(K-Means对数据尺度敏感,消除量纲影响) scaler = StandardScaler() scaled_features = scaler.fit_transform(wide_df) # 4. 训练K-Means(假设分4个群组,可通过肘部法确定最优K值) kmeans = KMeans(n_clusters=4, random_state=42) wide_df["Segment"] = kmeans.fit_predict(scaled_features) # 5. 查看各群组的星期打开偏好特征 segment_profiles = wide_df.groupby("Segment").mean().round(2) print(segment_profiles)
2. Excel 实现
步骤:
- 数据整理:用数据透视表将长表转成宽表(行=客户ID,列=星期,值=打开次数)
- 数据标准化:用
STANDARDIZE函数对每个星期的列做标准化处理 - 聚类分析:通过Excel「数据分析」工具(需先加载)里的「K均值聚类」功能完成分群
- 匹配标签:将聚类结果对应回原数据,生成Segment列
操作要点:
- 加载数据分析工具:文件→选项→加载项→勾选「分析工具库」
- 运行K均值:点击「数据」→「数据分析」→选择「K均值聚类」,设置输入区域、聚类数、输出区域,最终得到每个客户的聚类编号(即Segment)
3. SQL 实现
SQL本身不适合复杂聚类运算,可先完成数据预处理,再导出到Python/Excel做聚类;若使用支持ML的SQL引擎(如BigQuery ML),可直接实现:
BigQuery ML 聚类示例:
-- 1. 生成客户-星期的宽表 CREATE OR REPLACE TABLE email_open_wide AS SELECT customer_id, SUM(IF(weekday = 'Monday', open_count, 0)) AS mon_open, SUM(IF(weekday = 'Tuesday', open_count, 0)) AS tue_open, SUM(IF(weekday = 'Wednesday', open_count, 0)) AS wed_open, SUM(IF(weekday = 'Thursday', open_count, 0)) AS thu_open, SUM(IF(weekday = 'Friday', open_count, 0)) AS fri_open, SUM(IF(weekday = 'Saturday', open_count, 0)) AS sat_open, SUM(IF(weekday = 'Sunday', open_count, 0)) AS sun_open FROM email_open_data GROUP BY customer_id; -- 2. 训练K-Means聚类模型 CREATE OR REPLACE MODEL email_segment_model OPTIONS(model_type='kmeans', num_clusters=4, standardize_features=True) AS SELECT mon_open, tue_open, wed_open, thu_open, fri_open, sat_open, sun_open FROM email_open_wide; -- 3. 生成每个客户的Segment标签 SELECT customer_id, cluster_id AS Segment FROM ML.PREDICT(MODEL email_segment_model, TABLE email_open_wide);
三、Segment标签优化
聚类得到的数字编号(0、1、2...)可根据群组行为模式重命名,比如:
- Segment 0:「周末活跃型」(周六周日打开占比最高)
- Segment 1:「工作日全勤型」(周一至周五打开量均较高)
- Segment 2:「周中偏好型」(周三、周四打开率显著高于其他时段)
- Segment 3:「低活跃型」(全周打开次数均偏低)
内容的提问来源于stack exchange,提问作者RedVII
相关产品推荐
相关产品推荐

