独家揭秘微信朋友圈广告背后的技术

1.起源

朋友圈广告项目于2015年1月对外发布,我们第一个非商业广告是龙哥想出来的创意,大家应该都有印象,为我们的“与众不同”奠定了基调,也为后面的商业广告预热了气氛。

第一批投放商业广告有三个,分别是宝马,可乐,Vivo手机。在发布当天便引起了广大网友的热烈讨论,不少网友以“你刷到了哪一条”进行调侃,甚至有网友将三则广告集合在一起评论:“开宝马,喝可乐,用vivo才是人生赢家”,“看到宝马广告的是土豪,看到vivo的是中产,看到可乐的是屌丝,啥都没有看到的,很抱歉,你已经被抛弃了”……

当时很多人问我广告系统到底是什么样的?是不是整个系统只是几行代码随机投放一个广告给用户就好?下面我将大致介绍一下朋友圈广告系统的架构,研发中遇到的问题,以及联合团队小伙伴们做出的一些优化。

2.系统总览

这是朋友圈广告后台系统的主要模块图,下面将挑选部分展开分析。

3.社交计算

朋友圈广告与传统广告最大的不同就在于引入了社交元素,而如何将社交元素与广告选择结合起来,是我们要思考的问题。

量化指标

要解决问题,首先就得有一个指标去衡量好坏。前一段时间,尼尔森对Facebook的Feeds广告进行了用户调研,发现当用户看到一个有好友互动的广告之后,对广告品牌的记忆率和认知度有68%的提升。其实这也是一个很自然的感觉,那么就首先定一个与之相关指标:扩散度。

系统实现

首先,要注意到朋友圈广告的生命周期都是短的,所以如果采用离线数据计算再反推到在线系统之上的方案,就会使得整个投放阶段效果很差。其次,广告系统对延时要求非常高,如果每次直接拉取每个好友的实际评论情况,也不切实际。因此,最终选择了用户互动信息实时写入到每个好友身上。

这里会遇到2个工程上的问题:

  • 微信的用户好友数据都是分布存储在不同的IDC上的,如何实时将各个IDC间数据打通。
  • 有的微信用户可能有几千个好友,如果一个个写,就算是扔到异步队列也效率太低了。

其他因素

只是看用户好友的评论与点赞次数,这个就足够了吗?显然是不行,下面列出3个主要要考虑的要素:

  • 用户之间的亲密度
  • 好友的权威影响力
  • 评论的正面影响 这其中涉及到数据挖掘,自然语言处理的应用,以及如何与在线系统打通,鉴于篇幅,后面有机会再深入展开。

4.广告质量预估

朋友圈广告的展现形式,决定它有很多关注点,并不像传统广告只关注点击那一个动作。下面将我们要考虑的因素列出来,这是一个多目标预测问题,

这么多目标,传统常见的多目标预测方法可能是训练出多个模型,但是这样在线系统使用时候就面临一个时耗的问题。所以我们的经验是根据训练数据累积预测不同行为,离线模型可以直接训练出综合的质量因子。使用神经网络和多元线性回归融合。

那么在预测时候,需要考虑哪些因素呢?下面给出一个Features的大类:

5.速度控制

这个也是朋友圈广告与传统效果广告不同的地方。传统广告,当一个用户看到之后,90%以上的用户在一个小时之内就会点击(公众号广告为例),并且不会延迟太久。

而朋友圈广告则很不同,因为一个用户在拉取朋友圈Feeds之后,他可能不会往下拉着去看完所有的Feeds,也许到了第二天,第三天才去往下翻着看,此时也要产生扣费。另外就是朋友圈广告有评论点赞提醒功能,假如你的好友第二天对广告评论点赞通知到你,你再回头去看广告时候,也会产生一次扣费(当然不是无限的)。

这个就给系统进行投放时候的广告主余额控制带来了很大的麻烦,我们也为此更改了很多的版本上线实验才能做到目前较为精准的控制。其中关键环节是要保证曝光数据实时回流参与计算。另外经过多次投放,我们可以分析得出大部分用户在不同时间段上的行为规律,这样结合广告消耗的不同阶段去制定不同的速度控制策略,便可解决问题。

我们还针对这个给产品运营同学做了相关运营观察页面:

6.人群控制

在设计朋友圈广告系统初期,我们陷入了传统效果的广告系统架构的误区,即实现了检索—>广告初选à广告ctr预测à广告精选者这种经典的方案。可是朋友圈广告与之前业务并不同,因为一些时候,只有一个广告在投(高逼格路线嘛),所以用传统的各种选择和预测方法是没用的。

这个本质就是从人选广告变为了广告选人。

这其实是一个很复杂的问题,主要有这么3个因素要考虑:

  • 前期投放哪些用户,他们最可能参与广告互动?他们最可能带动好友?
  • 那些确定要投放的用户,他们是否满足拉取条件?是否被用户体验屏蔽掉?
  • 精品用户范围太窄或者限制时间过长,广告主到时间投放太少不满足需求怎么办?

这里给出我们目前的解决思路和方案,只是一个示意图,其中需要涉及到前面讲的行为预测以及广告保量的知识,后续这里可以着重展开再写。

7.朋友圈后台架构支持

在原先朋友圈后台中,每条Feeds的评论点赞信息都是存储在一个objectid上,它存储于kv存储系统中,每次拉取与更新都是对这些数据全存全取。但是现在一个广告Feed,它类似于一条公共Feeds,一个广告下面的评论可能是百万量级,如果继续沿用之前的方案,每次存取量都会太大。

于是,微信后台团队改为将点赞评论数据分布存储在每个用户身上。当有读取时候,则需要将用户每个好友的评论点赞信息都读取出来(可以想想为什么不用上面社交计算中提到的写扩散方式)。

但是这样会引进两个工程问题:

  • 每次读取数据量十分大
  • 后端调用kv扩散出的链接数是随着kv集群规模扩大而扩大的

最终我们通过引入版本号的机制,在手机客户端中存储每次拉取的版本号,并将版本号这种轻量级数据写扩散到所有好友身上,方便快速感知变化。最终比较好的解决了这个问题。

8.客户端支持

微信朋友圈广告能够快速上线,很大得益于微信客户端同事高效率的工作,ios和Android两个平台并行开发。

广告Feeds有些特别的地方,比如它支持用户不感兴趣的反馈,支持外链的分享,发表帐号要和公众号体系打通等。

另外,广告Feeds不能像用户普通Feeds一样,一直存在于用户的Feeds流中,因为假如用户回顾以往,发现一条条广告时候,那一定会很扫兴的,于是我们会对用户没有特别感兴趣的广告进行定期删除。另外,用户的Feeds发表之后就只有删除的动作了,而一个广告的Feeds假如其中某个图片需要临时更新,我们也要提供一种快速更新的机制,不能让广告主删掉广告。

广告最重要的就是计费和效果分析,这里的数据重担都在客户端上了,需要对用户对广告相关的操作都进行收集并上报。这里涉及到实时且稳定的数据上报通道(与之前的数据统计需要上报数据机制的完全不同的)。关于各个统计点和路径分析上报,也做了有规划的整理。

9.结束语

得益于这一年辛勤的努力,微信朋友圈广告项目中的小伙伴在研发道路上都积累了很多经验,不止是技术与算法上,也包流程与质量上的。未来一年也将继续保持积极的学习心态,让微信朋友圈广告成为社交广告的标杆!杆!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

陈功的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏TEG云端专业号的专栏

腾讯 FPGA 云 : 背后的技术

FPGA云是云计算的核心算力,同时也是一种新型的行业解决方案。首先,它是一种异构计算平台的体系结构,另一方面,它通过云服务方式为用户提供高附加值的服务,让用户能...

1.4K3
来自专栏MixLab科技+设计实验室

如何设计一款理解用户需求的智能语音产品

对话是人与人之间交换信息的普遍方式。人可以在交流时通过判别对方的语气、眼神和表情判断对方表达的情感,以及根据自身的语言、文化、经验和能力理解对方所发出的信息,但...

3003
来自专栏机器之心

入门 | 如果是个穷光蛋:如何从零开始学习成为一个数据科学家?

去年,我自学了数据科学,搜集了几百个在线资源,每天学 6~8 个小时。与此同时,我白天还在日托中心上班,拿着最低的薪资水平。

1112
来自专栏软件测试经验与教训

如何设定性能测试的目标?

5366
来自专栏杨建荣的学习笔记

对待运维平台,要有「疯狗」一样的执行效率

从去年发起里程碑来做自动化平台的事情到现在,已经几个月过去了。在这段时间里,其实我的心态是很焦灼的。 其实从很多维度来说,做运维平台的事情,从不明朗的需求和定位...

3575
来自专栏知晓程序

深度解读!小程序新增 8 大基础能力,玩法更多了

但其实还有更多,我们知晓程序仔细看了更新日志,这一次小程序的更新,还让视频播放不再出现卡顿之类的不爽现象。

952
来自专栏吉浦迅科技

NVIDIA发布全新OpenACC工具套件

减少编程工作、更多地关注科学本身 全球视觉计算技术行业领袖NVIDIA®(英伟达™)今日发布了全新OpenACC工具套件,通过这款全新的套件,未来科学研究将可以...

3295
来自专栏PPV课数据科学社区

【译文】什么是数据可视化?②

Have you heard about data visualisations, wondered what a visualisation is, why ...

3014
来自专栏姬小光

技术文章如何选题?

前一阵我在公司组织了“翻译与写作”兴趣小组。翻译这个东西,对于有些人来说感觉很简单,而对于英文不好或者对英文没信心的同学来说,其实是很难的一件事情。即便对于自以...

1273
来自专栏北京马哥教育

用Python玩GTA 5—使用OpenCV读取游戏面面

原文名称:Reading game frames in Python with OpenCV - Python Plays GTA V 原文链接:https:/...

5338

扫码关注云+社区

领取腾讯云代金券