分享

今日头条用户定向预估的实现方案

看到今日头条的广告投放平台,可以选择各种维度的用户定向条件,并根据不同的条件组合实时给出预估覆盖用户量,感觉把各种维度组合存储下来这个数据量太大了,尤其App行为定向几乎涵盖了市场上所有的App,还有商圈定向,所有维度组合得上亿条吧?有没有人知道这块的技术是如何实现的呢?
1.如何存储?2.如何快速查询?
WX20180425-183830.jpg

已有(13)人评论

跳转到指定楼层
hello2018 发表于 2018-4-25 20:48:14

首先这个问题比较有深度和思考。这里回答下。
首先直接回答楼主的问题:
1.采用的是什么存储
这个相信我们都知道大数据,那么头条的数据,相信没有阿里的多,既然阿里使用大数据框架都没有问题,所以头条也没有问题。那么它用什么存储这个也只能猜测,不出意外,肯定是用的hadoop相关组件,比如hbase或则hive。这二者可能都用到了。比如数据仓库hive用来存储多维度数据。




2.快速查询,楼主可能所说的应该是为什么能快速的推荐。这个他们有自己的推荐算法。

 今日头条的个性化推荐算法原理
5.jpg
  如上图,有3篇文章,让3个用户投票(注:这3个用户是一类人,有相同属性(喜好和偏好)),那第4个用户应该被系统推荐的文章是那篇呢?第4个用户与前3个用户都是一类人,答案显而易见是第一篇文章。
  没错,今日头条的个性化推荐算法原理就是基于投票的方法,其核心理念就是投票,每个用户一票,喜欢哪一篇文章就把票投给这篇文章,经过统计,最后得到结果很可能是在这个人群下最好的文章,并把这篇文章推荐给同人群用户过程就是个性化推荐,实际上个性化推荐并不是机器给用户推荐,而是用户之间在互相推荐,看起来似乎很简单,但实际上这需要基于海量的用户行为数据挖掘与分析。

那么他们的推荐具体用了哪些技术,如下图,首先需要有数据,然后各种处理
1.jpg

处理之后,在推荐系统中应用
2.jpg
为什么那么快,其实如下,这些使用hadoop离线处理,对于过去信息处理,如下图。

3.jpg

当然相信也有实时处理,他们使用的是storm
4.jpg



回复

使用道具 举报

erbin 发表于 2018-4-25 20:56:37
本帖最后由 erbin 于 2018-4-25 20:57 编辑
hello2018 发表于 2018-4-25 20:48
首先这个问题比较有深度和思考。这里回答下。
首先直接回答楼主的问题:
1.采用的是什么存储

我上面的表述可能不是很清楚,我说的是头条的广告投放后台系统,面向广告主使用的,支持广告主选择不同的用户定向组合进行投放广告,比如 男+北京+华为手机,并且根据广告主选择的定向组合条件实时给出头条能覆盖的人群数。
我的问题是 头条如何实现这个功能的?如何存下千万级(可能更多)的定向组合?或者是否需要存下所有的定向组合?又如何支持秒级的查询?
回复

使用道具 举报

hello2018 发表于 2018-4-25 22:03:10
erbin 发表于 2018-4-25 20:56
我上面的表述可能不是很清楚,我说的是头条的广告投放后台系统,面向广告主使用的,支持广告主选择不同的 ...

这个原理首先对用户有多少,是可以事先统计好存储下来:比如男+北京+华为手机,这个例子,我们事先统计好男有多少用户,北京有多少用户,华为手机多少用户。这些用户数量都是固定的,然后条件组合,其实就是过滤的过程。由于这方面的技术头条并没有说,这里猜测如下:这里面有两个办法实现1.把所有的组合条件,都计算好,实现存储。

男+北京+华为手机这是一个组合,也可以视为一条记录
女+北京+华为手机这是一个组合
相信组合加起来也就是几百条或作上千条。
如果是这样实现的话,那就太简单了,因为这只是在数据库中查询一条数据记录而已。关系数据库就可以实现。这个效率那肯定也是相当的快。
唯一存在的问题就是,可能数据有所增减,不过这个也没有关系,修改量如果是实时的改变也不会太大。

2.第二个办法,也就是楼主认为的办法。
我每一个组合,都需要亿万条去统计,那么它是如何实现查询的,为什么这么快。
其实第一种方案,感觉效率更高。
对于第二个方案,如果每一个操作都去遍历查询,那么这个计算太惊人了,反映很快,这需要相当的技术。当然也是可以实现的。比如百度,谷歌查询,我们输入条件,毫秒级就可以出现结果。
hbase+es或则solr也可以实现。特别是如果rowkey设计好,应该也是可以的。
回复

使用道具 举报

erbin 发表于 2018-4-26 09:33:09
hello2018 发表于 2018-4-25 22:03
这个原理首先对用户有多少,是可以事先统计好存储下来:比如男+北京+华为手机,这个例子,我们事先统计好 ...

谢谢你。组合条件里有一个是用户的装的App。也就是说我输入若干个App,需要返回装了其中任意一个App的用户数,这个组合数很大啊。或者这个能通过事先预计算搞定吗?
WX20180426-093222@2x.jpg
回复

使用道具 举报

willgo 发表于 2018-4-26 09:39:35
三种方案:
1. 预聚合      优点:线上查询响应快  缺点:维度组合不能太高,预计算压力大,实时数据难以处理    比如:kylin
2. 明细查询   优点:维度可以任意组合,处理实时数据难度相对较小  缺点:线上查询压力大   比如:palo/clickhouse/这类
3. 采用抽样估算处理    优点:查询速度快  缺点:存在误差   类似Google Analytics中的处理
广告主投递客群预估,只是一个量级预估,感觉第三种方案更靠谱   头条怎么搞的就不知道了 哈哈。。。
回复

使用道具 举报

fly2015 发表于 2018-4-26 11:51:36
我就知道这种方案 适合kylin  但是实时更新确实做不到
回复

使用道具 举报

hyj 发表于 2018-4-26 14:33:35
willgo 发表于 2018-4-26 09:39
三种方案:
1. 预聚合      优点:线上查询响应快  缺点:维度组合不能太高,预计算压力大,实时数据难以 ...

大神能否详细说说,指教,预聚合,这个是指?

广告主投递客群预估,只是一个量级预估
量级预估是指?


回复

使用道具 举报

erbin 发表于 2018-4-26 17:14:57
fly2015 发表于 2018-4-26 11:51
我就知道这种方案 适合kylin  但是实时更新确实做不到

kylin预计算的确查询速度快,不过这个场景下维度组合有点多啊。
回复

使用道具 举报

erbin 发表于 2018-4-26 17:17:13
本帖最后由 erbin 于 2018-4-26 17:25 编辑
willgo 发表于 2018-4-26 09:39
三种方案:
1. 预聚合      优点:线上查询响应快  缺点:维度组合不能太高,预计算压力大,实时数据难以 ...

这个定向预估一定的误差是可以接受的,毕竟展示给客户看的也是到万级别了。不过抽样统计在这种大量条件组合的情况下能适用吗?不是很了解这个抽样的具体方式。
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条