基于3个月消费支出移动平均值的客户行为分类问题咨询
适配短周期客户消费序列的分类解决方案
以下方案均适配你当前7个月长度、8万量级客户的数据集需求,可直接落地实现:
1. 统计显著性优先:曼-肯德尔(Mann-Kendall)趋势检验法
这是当前短序列趋势判断最常用的统计方案,不需要假设数据服从正态分布,对异常波动的抗干扰性强,可直接输出趋势的统计显著性,完美解决你提到的波动大无法区分随机波动和真实趋势的问题。
操作逻辑:
- 按客户维度提取1-7月的原始消费支出序列,逐客户运行MK检验,输出两个核心指标:
Sen's 斜率(代表趋势方向和幅度)、显著性p值(代表趋势是随机波动导致的概率) - 分类规则可直接套用:
- p值 < 0.05(可根据业务容错需求调整阈值,比如放宽到0.1降低漏判率)且斜率>0 → 增长组
- p值 < 0.05且斜率<0 → 下降组
- 其余所有情况 → 平稳组
2. 业务适配性优先:加权移动趋势评分法
如果需要分类规则更贴合业务实际判定逻辑,不需要严格的统计显著性,可选择规则类方案:
- 给不同月份的消费值设置梯度权重:最近3个月权重分别设为0.3、0.2、0.1,更早的4个月权重各设为0.1,计算加权后的趋势斜率
- 同时计算单客户消费序列的变异系数(标准差/均值),作为波动幅度的衡量指标
- 分类规则:
- 加权斜率大于正向阈值,且变异系数小于波动阈值 → 增长组
- 加权斜率小于负向阈值,且变异系数小于波动阈值 → 下降组
- 其余 → 平稳组
- 阈值可通过已有标注的样本跑ROC曲线取最优分位点,无标注样本的话用3倍四分位距取行业通用合理值即可
3. 已有方法的优化方向
你之前调研的方案可做调整后补充使用:
- 移动平均控制图优化为双阈值控制:同时校验原始消费值的3σ控制限、3个月移动平均的连续偏移情况,比如连续3个月移动平均值高于控制上限判定为增长,连续3个月低于控制下限判定为下降,覆盖度会比单阈值方案高很多
- 时间序列平稳性检验(如ADF检验)本身不匹配你的需求:这类方法是判断序列是否长期围绕固定均值波动,你需要的是有没有显著的单向趋势,两类问题的判定逻辑完全不同,之前找不到适配方案属于正常情况
落地代码示例(Python)
import pymannkendall as mk import pandas as pd # 假设数据集df包含字段customer_id、month、spend、3个月移动平均ma_3 def trend_classify(spend_series): mk_res = mk.original_test(spend_series) if mk_res.p < 0.05: if mk_res.slope > 0: return "增长" elif mk_res.slope < 0: return "下降" return "平稳" # 按客户分组、按月份排序后应用分类规则 df_class = df.sort_values("month").groupby("customer_id")["spend"].apply(trend_classify).reset_index() df_class.columns = ["customer_id", "trend_group"] # 合并回原数据集即可得到新增分组字段 df_final = df.merge(df_class, on="customer_id", how="left")
内容的提问来源于stack exchange,提问作者Mariane Santos
相关产品推荐
相关产品推荐

