3. 特征生产与归因逻辑

特征生产与归因逻辑是归因系统的核心骨架。特征生产决定了归因计算的数据质量与时效性,而归因键(Attribution Key)与归因模型则直接决定了转化功劳的分配方式。本节将系统讲解特征生产流程、归因键设计原则以及主流多触点归因模型。

3.1 特征生产流程:实时与离线

特征生产通常分为离线批处理与实时流处理两条链路,两者在延迟、吞吐量与计算复杂度上各有侧重。实际生产环境中,通常采用 Lambda 架构将两者融合,以兼顾历史回溯与实时响应。

维度 离线特征生产 实时特征生产
计算引擎 Spark / Hive / MapReduce Flink / Kafka Streams / Spark Streaming
延迟要求 T+1 或小时级 秒级 ~ 分钟级
数据源 HDFS / 数仓分层表 Kafka / Pulsar 消息队列
典型特征 用户画像、历史 LTV、长期行为聚合 当前会话、点击流、设备状态
存储介质 Hive / ClickHouse / HBase Redis / Aerospike / 内存状态
适用场景 归因回溯、模型训练、报表分析 实时归因、动态出价、在线推理
生产实践要点:离线特征需关注数据倾斜与分区裁剪;实时特征需设计水位线(Watermark)与超时机制,防止乱序数据导致归因偏差。
特征生产双链路架构(Lambda 架构) 原始数据源 离线批处理(Spark/Hive) 实时流处理(Flink) 离线特征存储(Hive/ClickHouse) 实时特征存储(Redis) 统一特征服务层 归因引擎 / 在线推理

3.2 归因键(Attribution Key)设计原则

归因键是连接用户行为与转化事件的唯一标识。设计不当的归因键会导致归因结果混乱、数据膨胀或匹配失败。以下是归因键设计的核心原则:

  1. 唯一性(Uniqueness):归因键必须在全局或指定时间窗口内唯一,避免不同用户或不同触点共用同一键值。
  2. 稳定性(Stability):归因键不应随用户行为或设备状态变化而改变,例如设备 ID(IDFA/GAID)比 IP+UA 组合更稳定。
  3. 可追溯性(Traceability):从归因键应能反向定位到原始点击/曝光日志,便于问题排查与数据校验。
  4. 时效性(Timeliness):归因键应包含时间戳或版本信息,支持窗口内去重与过期清理。
  5. 紧凑性(Compactness):避免过长的拼接键,优先使用哈希或整数 ID 以减少存储与传输开销。
推荐实践:采用 source_type + campaign_id + user_id + timestamp 的复合键结构,兼顾可读性与唯一性。对于高并发场景,可对复合键做 MurmurHash 后存储为 64 位整数。
归因键类型 示例 优点 缺点
设备 ID IDFA:1A2B3C4D 稳定、跨渠道 iOS 限制获取、用户重置
点击 ID (Click ID) click_20250315_abc123 精确、可追溯 需服务端生成、存储成本高
用户登录 ID uid:987654 业务语义强 未登录用户无法归因
复合键 src:fb|camp:101|uid:987|ts:1710508800 信息完整 键值过长、解析开销

3.3 多触点归因模型

多触点归因模型决定了在用户转化路径中,各个触点(Touch Point)应分配多少功劳。不同模型适用于不同的业务场景与数据分析目标。

3.3.1 主流归因模型对比

模型名称 分配逻辑 适用场景 局限性
Last Click 100% 功劳归最后一个触点 效果广告、直接转化 忽略前期品牌曝光价值
First Click 100% 功劳归第一个触点 品牌认知、拉新评估 忽略后续促成转化触点
Linear 所有触点均分功劳 品牌曝光与效果并重 无法区分触点重要性
Time Decay 越接近转化的触点权重越高 长决策周期、高客单价 衰减系数需业务调参
Position Based 首尾各 40%,中间均分 20% 品牌+效果混合投放 固定比例不够灵活

3.3.2 Time Decay 权重计算示例

Time Decay 模型通常使用指数衰减函数计算每个触点的权重:

# 假设衰减半衰期为 7 天
import math

def time_decay_weight(touch_time, convert_time, half_life_days=7):
    delta_days = (convert_time - touch_time).days
    weight = math.pow(0.5, delta_days / half_life_days)
    return weight

# 示例:转化前第 1 天触点权重 = 0.5^(1/7) ≈ 0.906
#       转化前第 7 天触点权重 = 0.5^(7/7) = 0.5
#       转化前第 14 天触点权重 = 0.5^(14/7) = 0.25
注意:Time Decay 的衰减速率对归因结果极为敏感。建议通过 A/B 实验或历史数据拟合确定最优半衰期,避免主观设定导致归因偏差。
多触点归因模型对比(5 触点转化路径) T1 T2 T3 T4 T5 (转化) Last Click 100% First Click 100% Linear 20% 20% 20% 20% 20% Time Decay 8% 12% 18% 27% 35% 说明:Time Decay 示例采用半衰期 7 天,T5(转化当天)权重最高,T1 权重最低。 Position Based 模型通常固定首尾各 40%,中间触点均分剩余 20%。

3.4 归因模型选择决策矩阵

在实际工程中,归因模型的选择需要结合业务目标、数据质量与计算成本综合判断。以下决策矩阵可作为选型参考:

业务场景 推荐模型 关键考量
短期促销、应用下载 Last Click 转化路径短,最后触点决定性高
品牌曝光、新品上市 First Click + Time Decay 重视首次触达与近期触达
高客单价、长决策周期 Time Decay / Position Based 需平衡品牌认知与最终促成
数据驱动、无先验偏好 Linear / Shapley Value 公平分配,但计算成本较高
合规受限、ID 缺失严重 Last Click + 聚合归因 减少对精确 ID 的依赖
工程建议:不要在生产环境中只部署单一归因模型。建议同时运行 2~3 种模型(如 Last Click + Time Decay + Linear),通过归因差异分析发现数据异常或渠道作弊行为。归因模型的可切换性应作为特征服务架构的基本要求。