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

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 条评论
登录 后参与评论

相关文章

来自专栏华章科技

深解读:什么是数据科学?如何把数据变成产品?

据哈尔•瓦里安(Hal Varian)说,统计学家是下一个性感的工作。五年前,在《什么是Web 2.0》里蒂姆•奥莱利(Tim O’Reilly)说“数据是下一...

642
来自专栏飞总聊IT

大数据的起源和错失大数据市场的鼻祖Google

大家好,我是飞总。目前就职与全球领先的大数据可视化公司Tableau。应该有很多人以前就读过我的大数据系列的公众号文章,我今天的这个讲座和以往的嘉宾都有一些不同...

38414
来自专栏云计算D1net

精心策划和管理多云计算需求

当规划一个多云部署时,一定要考虑可能出现的各种管理和整合的问题。 多云计算是组织混合使用来自不同厂商的云计算服务,这提供了许多优点。但采用多云计算的用户也必须小...

35513
来自专栏安恒信息

新形势下的网站安全监管技术与思路

当前的网站安全检查都是通过静态扫描的方式,来检测网站存在的漏洞和后门等安全问题,以是否存在漏洞来判断网站是否“安全”。 但是,黑客攻击的方式越来越隐蔽,利用的更...

3018
来自专栏大数据文摘

档案大数据来袭

2099
来自专栏EAWorld

撇开代码不说,谈谈我对架构的6个冷思考

计算机是个复杂的机器,相比普通的机器(比如小家电、汽车),它可以在使用过程中对其「工作行为」进行「再定义和场景适配」,以解决不同场景下的人的需求和问题,这种「定...

2787
来自专栏CSDN技术头条

如何用数据驱动产品和运营

作者:桑文锋,Sensors Data创始人&CEO,前百度大数据部技术经理。2007毕业于浙江大学计算机系,毕业后加入百度并负责组建并带领团队,从零实现了百度...

1938
来自专栏JAVA高级架构

一个架构师谈什么是架构以及怎么成为一个架构师

架构的定义 先来看看软件架构的普遍定义吧。 一个程序和计算系统软件体系结构是指系统的一个或多个结构。结构中包括软件的构建,构建的外部可见属性以及它们之间的相互关...

3257
来自专栏大数据文摘

【案例】如何用数据驱动产品和运营

2224
来自专栏数据猿

【案例】恒丰银行——运营风险监测系统

数据猿导读 在当前金融大背景下,我国商业银行正处于大幅调整阶段,面临不确定、不稳定因素正在不断增加,监管机构与公众日益认识到运营风险正成为金融机构面临的最大威胁...

2915

扫码关注云+社区