定向技术基础:用户画像构建、上下文定向、行为定向、Look-alike 相似人群扩展

定向技术,说白了就是广告系统的「瞄准镜」。没有它,你的广告就是无差别扫射,钱花了不少,效果却惨不忍睹。我做了这么多年广告系统,见过太多团队在定向这块踩坑,今天咱们就把这四个核心模块掰开揉碎了讲清楚。

一、用户画像构建:给用户贴标签的艺术

用户画像不是玄学,是实打实的数据工程。我习惯把画像构建分成三层:基础层、行为层、预测层。

核心原则:画像不是越细越好,而是越「可用」越好。我曾经见过一个团队给用户打了3000多个标签,结果模型根本用不过来,最后90%的标签都是废的。

1.1 基础画像

这部分相对简单,就是用户的静态属性。性别、年龄、地域、设备型号这些。但要注意一点:很多数据是「脏」的。

  • 性别:用户填的不一定准,我建议用行为反推。比如一个用户天天看美妆视频,大概率是女性。
  • 年龄:注册信息可能过期,结合内容偏好做校准更靠谱。
  • 地域:IP定位有误差,GPS数据更准,但要注意隐私合规。

我的经验:基础画像的准确率能做到80%就不错了,别追求100%。剩下的20%,交给行为数据去补。

1.2 行为画像

这才是重头戏。用户的行为数据,说白了就是「他干了什么」。我一般会关注三类行为:

行为类型 举例 权重建议
显性行为 点击、购买、收藏 高(直接反映意图)
隐性行为 浏览时长、滑动深度 中(需要归一化处理)
社交行为 分享、评论、点赞 中高(传播价值高)

嗯,这里要注意一个坑:行为是有时效性的。用户三个月前买过奶粉,不代表他现在还需要。我一般会引入时间衰减因子,越近的行为权重越高。

1.3 预测画像

这部分是进阶玩法。通过机器学习模型,预测用户「可能感兴趣」的东西。比如用户没搜过「汽车」,但他经常看财经新闻、关注房产,那我们可以预测他可能有购车需求。

// 一个简单的预测画像伪代码
function predictUserInterest(userId) {
  // 1. 获取用户历史行为
  let behaviors = getBehaviors(userId);
  
  // 2. 提取特征向量
  let features = extractFeatures(behaviors);
  
  // 3. 用模型预测兴趣标签
  let interests = model.predict(features);
  
  // 4. 返回Top-5预测标签
  return interests.top(5);
}

避坑指南:我曾经在预测画像上过度依赖模型,结果模型学偏了,把「偶尔看母婴内容」的男性用户全打上了「宝妈」标签。后来加了人工规则兜底,才把准确率拉回来。

二、上下文定向:看场景下菜碟

上下文定向,说白了就是「用户现在在看什么,我们就推什么相关的」。这个思路很朴素,但效果出奇的好。

我举个例子。用户正在看一篇「如何选跑鞋」的文章,这时候你推一双跑鞋广告,转化率能比随机投放高3-5倍。为什么?因为用户此刻的注意力就在这个领域。

2.1 文本上下文

这是最基础的方式。通过NLP技术分析页面内容,提取关键词和主题。我一般会用TF-IDF加主题模型(LDA)的组合方案。

// 文本上下文提取示例
function extractContext(text) {
  // 1. 分词
  let tokens = tokenize(text);
  
  // 2. 去除停用词
  tokens = removeStopWords(tokens);
  
  // 3. 计算TF-IDF
  let tfidf = calculateTFIDF(tokens);
  
  // 4. 提取Top-10关键词
  let keywords = tfidf.top(10);
  
  // 5. 用LDA判断主题
  let topic = ldaModel.predict(tokens);
  
  return { keywords, topic };
}

2.2 视觉上下文

现在很多内容都是图片、视频。光靠文本不够。我建议引入图像识别,分析图片中的物体、场景、颜色。比如一张海滩照片,可以定向推防晒霜、泳衣。

我的经验:视觉上下文和文本上下文要结合使用。有时候图片和文字说的不是一回事,比如「一张猫的图片配文是狗」,这时候以文本为准。

2.3 实时上下文

这个更高级。考虑用户当前的时间、天气、地理位置。比如晚上10点推夜宵,下雨天推雨伞。我做过一个实验,加入实时天气后,相关广告的CTR提升了18%。

三、行为定向:用过去预测未来

行为定向的核心假设是:用户过去的行为,能预测他未来的行为。这个假设在大多数场景下成立,但也有例外。

我习惯把行为定向分成三个层级:

  1. 单点行为:用户刚搜了「iPhone 15」,马上推iPhone配件。
  2. 序列行为:用户先搜了「婴儿奶粉」,又搜了「婴儿推车」,推母婴用品。
  3. 模式行为:用户每周五晚上都会点外卖,推美食优惠券。

关键点:序列行为比单点行为更有价值,模式行为比序列行为更有价值。但模式行为的识别需要更多数据,一般要积累2-4周的行为日志。

3.1 行为序列建模

我推荐用LSTM或者Transformer来处理行为序列。但要注意,用户的行为序列可能很长,而且有大量噪声。我一般会做两步处理:

  • 降噪:去掉那些无意义的点击(比如误触)。
  • 聚合:把同类行为合并,比如「浏览A商品3次」合并成一条记录。

3.2 行为衰减

用户的行为会「过期」。我一般用指数衰减函数:

// 行为权重衰减函数
function decayWeight(behavior, currentTime) {
  let timeDiff = currentTime - behavior.timestamp;
  let halfLife = 7 * 24 * 3600; // 7天半衰期
  let weight = Math.pow(0.5, timeDiff / halfLife);
  return weight;
}

这个函数的意思是:一个行为每过7天,权重就减半。30天后,基本可以忽略不计了。

避坑指南:我曾经把半衰期设得太短(3天),结果用户周末的行为到周三就几乎没权重了,导致周末的投放效果很差。后来改成7天,平衡了短期和长期行为。

四、Look-alike 相似人群扩展:从种子用户出发

Look-alike,说白了就是「找到和你的老客户长得像的人」。这是广告系统里ROI最高的定向技术之一。我做过一个案例,用Look-alike扩展后,转化量翻了4倍,成本只增加了30%。

4.1 种子用户选择

种子用户的质量,直接决定Look-alike的效果。我建议:

  • 不要用全部老客户:只选那些高价值、高活跃的用户。
  • 种子数量:1000-10000个比较合适。太少模型学不到规律,太多会引入噪声。
  • 正负样本:除了正样本(高价值用户),也要准备负样本(流失用户、低价值用户)。

4.2 特征工程

Look-alike的核心是特征。我一般会构建三类特征:

特征类别 具体特征 说明
画像特征 年龄、性别、地域、设备 基础属性,区分度一般
行为特征 点击率、购买频次、活跃时段 区分度高,但要注意时效性
交叉特征 年龄×品类偏好、地域×消费力 能发现隐藏模式

4.3 模型选择

我试过很多模型,最后常用的就两种:

  • 逻辑回归:可解释性强,适合业务方需要「讲清楚为什么」的场景。
  • XGBoost:效果更好,但像个黑盒。我一般用在效果优先的场景。
// Look-alike 模型训练伪代码
function trainLookalike(seedUsers, allUsers) {
  // 1. 构建训练数据
  let X = extractFeatures(allUsers);
  let y = allUsers.map(u => seedUsers.includes(u) ? 1 : 0);
  
  // 2. 训练模型
  let model = new XGBoost();
  model.train(X, y);
  
  // 3. 对所有用户打分
  let scores = model.predict(X);
  
  // 4. 返回Top-N相似用户
  return getTopN(scores, allUsers, 100000);
}

我的经验:Look-alike不是一次性的。我建议每周重新训练一次模型,因为用户的行为在变,种子用户也在变。另外,扩展比例要控制,一般从1:100到1:1000之间,扩太多质量会下降。

五、四种定向技术的协同

在实际系统中,这四种定向技术不是孤立的。我一般会这样组合:

  1. 冷启动阶段:用上下文定向,因为新用户没有行为数据。
  2. 积累数据后:加入行为定向,精准度提升。
  3. 有种子用户后:用Look-alike做扩展,放大规模。
  4. 全程:用户画像作为基础数据,支撑所有定向策略。

最终建议:定向技术没有银弹。我见过太多团队一上来就搞复杂的Look-alike,结果基础的用户画像都没做好。我的建议是:先把画像和上下文定向做到80分,再逐步引入行为定向和Look-alike。一步一个脚印,比什么都重要。

嗯,今天就聊到这儿。定向这块内容很多,但核心就四个字:人、场、行、扩。把这四个字吃透了,广告系统的定向模块你就掌握了七八成。