微信号:DataScientistUnion

介绍:数盟(数据科学家联盟)隶属于北京数盟科技有限公司,数盟致力于成为培养与发现“数据科学家”的黄埔军校. 数盟服务包括:线下活动、大数据培训. 官网:http://dataunion.org,合作:contact@dataunion.org

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

2017-07-31 22:02 数盟

作者:陈功 

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.结束语

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

End.

文章来源:36大数据

媒体合作请联系:

邮箱:contact@dataunion.org




 
数盟 更多文章 米少熬好粥—数据有限时怎样调优深度学习模型 如何让深度学习在手机应用上也能加速跑?看完这篇文章你就知道了 看AI侦探如何破解深度学习的黑箱 深度神经网络(DNN)是否模拟了人类大脑皮层结构? 如何用深度学习推荐电影?教你做自己的推荐系统!
猜您喜欢 微信小程序畅想曲 正确理解DTO、值对象和POCO 平安金融科技移动技术周报(第三十期) 【近日热论】谷歌机器人业务引专家热议,您怎么看? Apache Kylin - 大数据时代的OLAP利器