定向技术基础:用户画像构建、上下文定向、行为定向、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%。
三、行为定向:用过去预测未来
行为定向的核心假设是:用户过去的行为,能预测他未来的行为。这个假设在大多数场景下成立,但也有例外。
我习惯把行为定向分成三个层级:
- 单点行为:用户刚搜了「iPhone 15」,马上推iPhone配件。
- 序列行为:用户先搜了「婴儿奶粉」,又搜了「婴儿推车」,推母婴用品。
- 模式行为:用户每周五晚上都会点外卖,推美食优惠券。
关键点:序列行为比单点行为更有价值,模式行为比序列行为更有价值。但模式行为的识别需要更多数据,一般要积累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之间,扩太多质量会下降。
五、四种定向技术的协同
在实际系统中,这四种定向技术不是孤立的。我一般会这样组合:
- 冷启动阶段:用上下文定向,因为新用户没有行为数据。
- 积累数据后:加入行为定向,精准度提升。
- 有种子用户后:用Look-alike做扩展,放大规模。
- 全程:用户画像作为基础数据,支撑所有定向策略。
最终建议:定向技术没有银弹。我见过太多团队一上来就搞复杂的Look-alike,结果基础的用户画像都没做好。我的建议是:先把画像和上下文定向做到80分,再逐步引入行为定向和Look-alike。一步一个脚印,比什么都重要。
嗯,今天就聊到这儿。定向这块内容很多,但核心就四个字:人、场、行、扩。把这四个字吃透了,广告系统的定向模块你就掌握了七八成。