时间跨度与粒度
MMM 的统计功效取决于数据量。数据量 = 时间跨度 × 粒度。你需要在这两者之间找到平衡。
时间跨度
| 跨度 | 能否建模 | 限制 |
|---|---|---|
| < 52 周 | 不推荐 | 无法捕捉年度季节性,参数估计不稳定 |
| 52-104 周(1-2 年) | 最低要求 | 只有 1 个年度周期,季节性估计粗糙 |
| 104-156 周(2-3 年) | 推荐 | 2-3 个年度周期,季节性较稳定 |
| > 156 周(3 年+) | 理想 | 多周期验证,但需处理结构变化 |
SparkX 最低要求
Instant Mode 要求至少 52 行数据(周粒度 1 年,或日粒度 52 天)。Expert Mode 建议至少 104 周以达到推荐质量。
粒度选择
- 日粒度:适合短期 campaign 分析,但噪音大、Adstock 参数难拟合
- 周粒度(推荐):平衡了噪音和平滑度,是大多数 MMM 项目的主流选择
- 月粒度:数据点太少(12-36 个),只适合高层趋势分析
花费数据格式
每个渠道的花费数据应该是一列数值,单位统一(建议美元或人民币)。格式要求:
必需列
| 列名 | 类型 | 说明 |
|---|---|---|
| date | 日期 | YYYY-MM-DD 格式,周粒度时用每周一 |
| revenue / sales | 数值 | 目标变量(因变量),不含税 |
| google_spent | 数值 | Google Ads 周花费 |
| meta_spent | 数值 | Meta (Facebook/Instagram) 周花费 |
| tiktok_spent | 数值 | TikTok Ads 周花费 |
| ... | 数值 | 其他渠道花费列 |
常见问题
- 零值 vs 空值:某周没有投放填 0,不要留空。空值会导致 SparkX 自动列识别失败
- 单位不统一:有些渠道从平台导出的是人民币,有些是美元。上传前统一换算
- 时间对齐:所有列必须对齐到同一个时间轴。如果 Google 用周一-周日,Meta 也必须用周一-周日
- 含税问题:revenue 列建议用净收入(不含税),否则广告效应会被税率变化干扰
变量选择
MMM 的核心原则:所有影响销售的因素都要有对应变量。缺少变量会导致模型把那个因素的效果错误归因到广告花费上。
广告花费变量(自变量)
每个投放渠道一列。常见渠道:
- 数字广告:Google Search、Google Display、Meta Ads、TikTok Ads、YouTube、Amazon Ads
- 社交内容:小红书种草、KOL 合作、品牌自播
- 传统媒体:线性电视、CTV/OTT、户外广告、电台
- 促销:折扣力度、优惠券发放量
有机变量(非广告因素)
这些变量不是广告花费,但会影响销售。不包含它们会导致模型高估广告效果。
| 变量 | 为什么需要 |
|---|---|
| 价格/定价指数 | 降价会直接拉动销售,与广告无关 |
| 分销覆盖(门店数/SKU 数) | 渠道扩张带来的自然增长 |
| 季节性指数 | 节假日效应(双11、黑五、春节) |
| 竞争对手活动 | 竞品促销会分流你的销售 |
| 天气数据 | 对饮料、服装等品类影响显著 |
| 宏观经济指标 | GDP、CPI 影响整体消费力 |
| 新产品发布 | 新品上市自带销售动能 |
控制变量
SparkX MMM 自动生成以下控制变量,但你也可以手动提供:
- 趋势项 (Trend):线性或多项式趋势,捕捉长期增长/衰退
- 季节性 (Seasonality):傅里叶项或 STL 分解,捕捉周期性波动
- 节假日虚拟变量:双11、黑五、春节等脉冲效应
- Covid 虚拟变量:2020-2022 年的异常波动(如果你的数据覆盖这段时间)
过度拟合风险:不要加太多变量。经验法则是变量数不超过数据点数的 1/5。52 周数据最多 10 个变量(含花费列和控制变量)。
质量控制检查
上传数据前,对照以下检查清单逐项确认:
1. 完整性检查
- 没有空行或缺失值
- 日期列连续无断档(不要跳周)
- 每个花费列的零值是有意为之(确实没投放),不是数据丢失
2. 异常值检查
- revenue 列有没有突增/突降?如果有,确认是否对应已知事件(大促、断货)
- 花费列有没有异常高值?某周花费是平均值的 5 倍以上需要确认
- 检查是否有负值(花费不应为负)
3. 相关性预检
- 渠道花费之间高度相关(相关系数 > 0.9)会导致多重共线性
- SparkX Instant Mode 会自动检测共线性并合并或剔除冗余变量
- Expert Mode 中可以手动设置共线性阈值
4. 平稳性检查
- 如果 revenue 有明显的趋势性(持续增长或下降),需要确保模型包含趋势项
- 如果 revenue 有单位根(非平稳),差分后再建模可能更稳定
数据准备清单
上传前最终检查
- 至少 52 行数据(推荐 104+)
- date 列格式统一(YYYY-MM-DD)
- revenue 列无空值、无负值
- 每个渠道花费一列,列名含
_spent后缀 - 空白填 0,不留空
- 所有列时间对齐(同一周定义)
- 单位统一(全美元或全人民币)
- 至少包含 3 个广告渠道
- 如果有促销活动,包含折扣/促销力度列
- 异常值已确认或修正
SparkX Instant Mode 会在上传后自动执行以上所有检查,并在 9 步 Pipeline 的第 1 步(数据质量检查)中展示检查结果。如果检查不通过,系统会标注具体问题并建议修正方式。