面向智能营销的 Lookalike 人群拓展:从 5000 万候选用户中寻找高价值人群

总阅读量 加载中... 次

1. 项目背景

在广告投放、用户增长和精细化运营中,业务通常已经积累了一批高价值种子用户。Lookalike 的目标,是从更大规模的候选人群中找到与种子用户相似、并且更可能在未来转化的新用户。

这个项目来自“面向智能营销的目标客群拓展算法挑战赛”。给定某个历史窗口中的种子用户、候选用户及脱敏后的画像和行为特征,模型需要为候选用户生成排序分数,并选出 Top-20 万作为最终扩展人群。

比赛地址:面向智能营销的目标客群拓展(Lookalike)算法挑战赛

它并不是普通的二分类任务。真正的业务问题是:在固定触达预算下,让有限的人群包覆盖尽可能多的未来高价值用户,同时保证命中效率。

2. 任务与评价指标

训练、验证和测试分别对应连续的三个时间窗口:

数据集 候选日期 当前窗口种子 下一窗口标签
train 2026-03-03 20,122 9,208(03-04)
dev 2026-03-04 15,693 10,651(03-05)
test 2026-03-05 未公开 隐藏标签

当前窗口已经是种子的用户不属于待发现的新用户,因此训练、评估和预测时都必须将其排除。对于候选集合中的用户,正样本定义为:

Y+=Ucandidate∩Snext

负样本则从以下集合中采样:

Y−=Ucandidate∖(Scurrent∪Snext)

比赛主要考察 Top-20 万用户上的召回率与命中效率:

Recall@K=|TopK∩Y||Y| Precision@K=|TopK∩Y|K

再用候选池中的正例先验对 Precision 进行归一化:

Efficiency@K=Precision@KBestRate,BestRate=|Y||U′|

最终得分由 Recall@200K 和归一化后的 Efficiency@200K 各占一半组成。因此,模型优化的核心是排序质量,而不是固定阈值下的分类准确率。

3. 端到端方案

项目采用 Polars + LightGBM 构建完整方案,整体分为五个阶段:

  1. 按时间窗口关联当前种子与下一窗口种子,构造正负样本并剔除已知人群;
  2. 对数千万候选用户进行流式扫描,依次生成基础聚合、序列形状、Target Encoding、用户画像和图结构特征;
  3. 将各阶段结果合并为统一的 96 维用户特征,确保训练、验证和预测口径一致;
  4. 使用 LightGBM 完成排序学习,并通过五折 OOF 与跨日 dev 集同时评估;
  5. 对测试候选池全量打分,排除当前种子后选取 Top-20 万作为最终扩展人群。

这条链路的关键不是堆叠复杂模型,而是保证时间窗口、标签、特征和评估之间没有信息穿越,并让整个方案能够在数千万规模的数据上稳定执行。

4. 面向大规模数据的流式特征工程

候选数据达到数千万行,并且包含多层 list/struct 嵌套字段。如果直接使用 Pandas 或一次性把完整 Parquet 物化到内存,很容易出现内存峰值过高甚至任务失败。

方案使用 Polars LazyFrame 进行延迟计算,只扫描当前阶段需要的列,并在结果落盘时采用 streaming 引擎。这样可以利用谓词下推、列裁剪和流式执行,避免把“数千万行 × 多层嵌套结构”整体载入内存。

每个数据分区最终只保留一份统一特征文件,训练和推理共享同一套特征定义。这一设计减少了中间文件数量,也降低了多阶段特征口径不一致的风险。

5. 96 维特征体系

最终特征由七个阶段构成,可归并为六组:

特征组 维度 主要内容
基础特征 51 静态画像、标签统计、广告位请求/曝光、平台响应、出价和派生比值
Target Encoding 21 类别/标签、广告位/平台、小时及小时×广告位编码
序列形状 10 小时分布、峰值、集中度及活跃时段结构
用户画像 8 流行度统计、用户画像聚合与种子中心相似度
图结构 6 用户—广告位二分图的重复度、熵与凝聚特征
合计 96 统一写入单个特征文件

5.1 基础聚合与行为强度

基础特征把嵌套行为压缩为稳定的用户级统计量。例如:

  • 请求和曝光的总量、最大值、覆盖广告位数;
  • 最近七天的平台响应总量与极值;
  • 出价均值、范围和离散程度;
  • 请求峰值占比、曝光峰值占比;
  • log1p 变换后的长尾统计量;
  • 厂商、机型、省份和城市的类别编码。

这些特征建立了一个强而稳定的树模型基线,也为后续 Target Encoding、序列特征和图特征提供聚合入口。

5.2 防泄漏的 目标编码

Target Encoding 是整个方案最重要的特征来源。对于类别、标签、广告位、平台和小时等离散键,项目计算训练样本中的平滑种子率:

TE(k)=npos(k)+α⋅priorntotal(k)+α

其中 prior=0.0843,类别、标签和广告位相关编码使用 α=20,小时相关编码使用 α=50。没有在训练集中出现的新键回退到全局先验。

为了避免未来信息泄漏,所有编码表都只从 labels_train.parquet 学习,再应用到 train、dev 和 test。项目没有利用 dev/test 标签反向构造特征。

其中,按用户历史交互聚合的广告位与平台 TE 是最大的单一增益来源。它将“这个用户是否接触过种子用户高度集中的平台或广告位”直接转化成模型可以使用的连续信号。

5.3 序列、嵌入表示 与图结构

项目没有直接训练重型序列模型,而是从小时级请求和曝光序列中提取分布形状、峰值、活跃跨度和集中度,以较低成本表达时序行为。

用户画像特征进一步统计广告位和标签流行度,并计算用户与种子画像中心的相似程度。图结构特征则把用户与广告位看作二分图,通过重复请求占比、流行度熵等指标区分“集中在少量强兴趣广告位”和“兴趣分散”的用户。

从最新的特征重要性汇总看,Target Encoding 的 gain 占比最高,其次是图结构和基础特征,说明高价值人群识别既依赖种子条件信号,也依赖用户行为结构。

6. 模型训练与可信评估

最终模型使用 LightGBM 二分类目标,并以 Average Precision 和 Binary LogLoss 作为训练监控指标。训练集由 9,208 个正样本和 100,000 个随机负样本构成,按照正负样本比例提高正样本权重,缓解类别极度不平衡的问题。

模型采用较保守的树容量、叶节点最小样本约束、特征与样本随机采样以及 L2 正则化,训练 400 轮,并使用五折 OOF PR-AUC 评估同分布泛化能力。

这里有一个重要经验:in-sample 指标很高并不代表泛化能力强。 早期大叶子数和更多迭代轮数可以让训练集指标接近满分,但随机特征也能被高容量树模型记忆。项目因此将 num_leaves 下调为 63、增加叶子最小样本数和 L2 正则,并把五折 OOF 指标作为可信依据。

项目还通过两组 sanity check 排查泄漏:

  1. 用随机高斯特征训练,五折 AUC 回落到 0.5;
  2. 打乱真实标签训练,五折 AUC 同样回落到 0.5。

这说明高训练分主要来自模型记忆能力,而不是特征或标签穿越。

7. 验证结果

在一个阶段性版本中,dev 候选池包含 53,683,050 个可圈选用户和 10,651 个未来正例:

K Recall@K Precision@K 相对随机命中效率
100,000 0.4056 0.0432 217.5
200,000 0.5643 0.0301 151.5
500,000 0.7387 0.0157 79.3
1,000,000 0.8299 0.0088 44.6

该阶段的 FinalScore 为 0.6608。随着用户画像与图结构等特征补齐,项目 README 的最新 96 维特征汇总记录了:

  • 5-fold OOF PR-AUC:0.9811;
  • dev FinalScore:0.9502;
  • Target Encoding 的 gain 占比:69.4%;
  • 图结构特征的 gain 占比:15.7%。

这些结果也揭示了 Lookalike 任务与普通小样本分类的差异:即使 CV 排序指标很高,在数千万候选中截取最前面的 0.4% 仍然非常困难,跨日分布漂移也会进一步放大误差。

8. 全量预测与提交

预测阶段加载测试特征和最终 LightGBM 模型,先排除当前窗口的已知种子用户,再对全量候选打分。

选择 Top-20 万时不对数千万条分数执行完整排序,而是先通过部分选择算法找出 Top-K 集合,再只对入选的 20 万条候选稳定排序。这种方案将主要选择过程控制在近似 O(n) 的复杂度,比全量排序更节省时间和内存。最终提交结果采用流式写出,避免在内存中一次性构造全部记录。

9. 没有效果的尝试

项目不仅保留了有效方案,也记录了多组失败实验:

  • 交叉 Target Encoding:训练 CV 明显提升,但跨日 dev 分数下降,说明高基数组合记住了单日分布;
  • Hard Negative Mining:从 dev 候选池挖掘困难负样本后 Recall 大幅下降,负样本分布与目标窗口耦合过强;
  • LambdaRank:在当前分组和采样方式下不如 binary log-loss,需要更合理的组内负样本;
  • 曝光侧小时 TE:只有很小的 CV 增益,但 dev Recall 下降;
  • 超参数搜索:局部 CV 增益没有稳定迁移到跨日验证集。

这些实验说明,时序漂移场景下最危险的不是模型“不够复杂”,而是验证集上的微小提升无法跨时间泛化。与其持续扩大模型容量,不如优先检查样本构造、编码口径和跨日稳定性。

10. 项目总结

这个项目最有价值的地方,不只是训练了一个 LightGBM 模型,而是搭建了一条可复现、可扩展的大规模 Lookalike 流水线:

  1. 用时间窗口构造符合真实业务定义的未来标签;
  2. 用 Polars LazyFrame 和 streaming 控制数千万行嵌套数据的内存占用;
  3. 用平滑 Target Encoding 将种子人群信息注入用户、平台、广告位和时段特征;
  4. 用五折 OOF、随机特征和打乱标签实验区分真实泛化与训练记忆;
  5. 用部分选择和流式输出完成大规模 Top-K 推理;
  6. 系统记录失败实验,避免用单日 CV 提升替代跨日业务收益。

对于大规模营销人群拓展任务,可靠的数据与评估管线往往比盲目追求复杂模型更重要。只有先保证标签、特征、验证和推理口径一致,模型分数才真正具有业务意义。