3. 促销数据特征工程
在促销影响量化与因果建模中,特征工程的质量直接决定模型能否准确识别促销的增量效果。本节围绕三大核心特征域——用户行为、商品属性、时间与渠道——展开系统构建,确保每个特征都具备因果可解释性与业务可操作性。
3.1 特征工程总体架构
促销特征工程遵循“业务驱动 + 因果对齐”原则,将原始数据转化为三类特征:
| 特征域 | 核心维度 | 因果角色 | 典型特征示例 |
|---|---|---|---|
| 用户行为特征 | 历史购买、浏览、加购、复购 | 混淆因子(Confounder) | 近30天购买频次、平均客单价、品类偏好熵 |
| 商品属性特征 | 品类、价格带、生命周期、库存 | 处理变量(Treatment)修饰 | 商品折扣深度、历史促销响应率、竞品价格差 |
| 时间与渠道特征 | 促销时段、渠道类型、触达频次 | 工具变量 / 调节变量 | 促销距大促天数、渠道曝光量、跨渠道重叠度 |
关键原则:特征必须与促销处理(Treatment)和结果(Outcome)同时相关,且不能是促销后的结果变量(避免后门路径污染)。
3.2 用户行为特征构建
用户行为特征是因果模型中最重要的混淆因子集合。构建时需区分静态画像与动态行为两类:
3.2.1 静态画像特征
- 用户生命周期阶段:新客、活跃老客、沉默客、流失客(基于最近一次购买时间)
- 价值分层:RFM 评分、历史累计消费金额分桶(高/中/低价值)
- 品类偏好:购买品类占比、品类多样性熵指数
3.2.2 动态行为特征
- 近期行为窗口:近7/14/30天浏览次数、加购次数、下单次数
- 促销响应历史:历史促销点击率、历史促销转化率、上次促销距今天数
- 跨品迁移行为:从浏览到购买的转化时长、跨品类购买关联度
工程技巧:动态行为特征建议使用滑动窗口聚合(如 pandas rolling + groupby),避免数据穿越。窗口大小需根据促销周期调整——日常促销用7天窗口,大促用30天窗口。
# 用户行为特征构建示例(Python伪代码)
import pandas as pd
def build_user_behavior_features(transactions, window_days=30):
# 滑动窗口聚合:近30天购买频次、金额、品类数
features = (transactions
.sort_values('user_id', 'trans_date')
.groupby('user_id')
.rolling(f'{window_days}D', on='trans_date')
.agg({
'order_id': 'count',
'amount': 'sum',
'category_id': 'nunique'
})
.reset_index()
.rename(columns={
'order_id': 'freq_30d',
'amount': 'amount_30d',
'category_id': 'cat_diversity_30d'
})
)
return features
3.3 商品属性特征构建
商品属性特征主要用于修饰促销处理变量,帮助模型理解不同商品对促销的异质性响应。核心特征包括:
| 特征类别 | 具体特征 | 构建方法 | 因果意义 |
|---|---|---|---|
| 基础属性 | 品类、品牌、价格带 | 直接从商品主表映射 | 控制品类间促销效果差异 |
| 促销属性 | 折扣深度、促销类型(满减/直降/赠品) | 从促销活动表关联 | 处理变量的强度与形式 |
| 历史表现 | 历史促销响应率、历史销量弹性 | 按商品聚合历史促销数据 | 商品对促销的敏感度先验 |
| 竞争属性 | 同品类竞品价格差、竞品促销强度 | 外部爬虫或内部比价系统 | 控制市场竞争干扰 |
| 生命周期 | 上市天数、库存深度、季节指数 | 时间戳 + 库存表计算 | 控制商品成熟度影响 |
注意:商品属性特征中,折扣深度与促销类型是处理变量(Treatment)的核心组成部分,在因果模型中需谨慎处理其内生性——折扣深度往往由运营根据商品历史表现决定,存在选择偏差。
3.4 时间与渠道特征构建
时间与渠道特征在因果推断中常扮演工具变量或调节变量的角色,帮助识别促销的因果效应。
3.4.1 时间特征
- 促销时间锚点:距最近大促天数(618/双11)、距上次同品类促销天数
- 时间颗粒度:星期几、是否周末、是否节假日、小时段(早/中/晚)
- 促销时长:促销持续天数、距促销结束剩余天数(紧迫感效应)
3.4.2 渠道特征
- 渠道类型:APP推送、短信、公众号、站内信、线下门店
- 触达强度:曝光次数、点击次数、触达频次(近7天同一渠道触达次数)
- 跨渠道交互:渠道重叠度(用户同时被多少渠道触达)、渠道序列(先APP后短信)
3.5 特征工程避坑清单
基于实际项目经验,以下为促销特征工程中常见的五个陷阱及应对策略:
- 数据穿越(Look-ahead Bias):使用促销之后的用户行为预测促销效果。→ 严格按时间戳划分训练/测试集,特征只使用促销开始前的数据。
- 特征冗余与多重共线性:用户近7天与近30天购买频次高度相关。→ 使用VIF(方差膨胀因子)筛选,保留信息量最大的窗口特征。
- 忽略促销自选择偏差:高价值用户更易被推送促销,导致特征与处理变量相关。→ 引入倾向性评分(Propensity Score)作为特征或权重。
- 渠道归因冲突:同一用户被多个渠道触达,难以区分各渠道贡献。→ 构建渠道序列特征,使用Shapley值或马尔可夫链进行归因。
- 稀疏特征处理:部分商品促销频次极低,导致特征方差小。→ 采用层级贝叶斯收缩或商品聚类后聚合特征。
最佳实践:特征工程完成后,建议进行因果结构检验——使用DAG(有向无环图)检查每个特征是否满足后门准则或前门准则,确保特征集不会引入新的偏差。
3.6 特征存储与版本管理
在工程落地中,促销特征需支持离线训练与在线推理的一致性。推荐采用以下架构:
| 存储层 | 技术选型 | 用途 | 更新频率 |
|---|---|---|---|
| 离线特征表 | Hive / Parquet | 模型训练、回溯分析 | T+1 全量更新 |
| 在线特征缓存 | Redis / Faiss | 实时促销推荐、效果预估 | 实时写入 |
| 特征版本库 | MLflow / Feast | 特征回溯、模型复现 | 每次特征变更打标签 |
特征版本管理是因果建模可复现性的基石。每次促销活动后,需将当时的特征快照与模型结果一并归档,便于后续的增量效果归因与模型迭代。