0%

广告大数据在小米的实践

本文资料主要来自小米的小米商业产品部技术的总监接受媒体采访时的内容,内容主要是广告大数据技术在小米的实践梗概和自己的一些想法。

宋强是时任小米商业产品部技术的总监,在采访中他喜欢将小米看成是一家大数据公司,因为小米强大的生态链,小米的大数据和其他公司相比,最大的特点和优势是“全生态、多样性”。

1.小米的实践经验

首先是广告营销,通过点击预估算法提升广告收入,通过营销DMP帮助广告主进行精准营销等等。其次,大数据在小米金融业务中也广泛应用,包括风控征信分析反欺诈等。在搜索和推荐业务中,大数据对各种算法的提升也起到了至关重要的作用,包括查询理解相关性模型点击预估等。

2.发展趋势

智能化:算法智能化,随着ML和AI的进一步发展,大数据的价值将更加充分挖掘,其次是营销的智能化,通过多维立体的用户标签数据,从性别年龄等基础数据,到APP使用频次时长运动轨迹手机信号等数据形成的兴趣标签,再到精准的时间位置场景化标签,帮助广告主进行更加智能化的广告营销。

3.广告大数据的应用场景

首先是广告算法优化,包括点击率预估反作弊用户体验优化广告主ROI优化等多个方向。其次是营销DMP,小米的营销DMP通过整合媒体、投放平台以及广告主的各方数据,使用大数据技术对用户的特征进行挖掘,为广告主提供了20多个维度、上百个标签的实时用户画像管理。

4.广告平台架构

整个系统架构包括接入层、服务层、算法层和存储层。接入层负责流量的接入、管理、配置和运营。服务层是广告检索的核心,包含广告选取、过滤、排序等核心逻辑,主要的服务有广告交易平台、效果和排期广告服务等。算法层负责点击率预估、预算平滑、精准定向等算法,存储层则是各种广告和用户数据访问层。

广告平台架构在演化过程中,主要思路:

架构为业务服务,每一次架构的迭代都是业务驱动的。我们的团队也是按照业务进行划分的,每个业务团队有明确的目标,通过目标驱动架构的微调和迭代,也许架构并不是完美的但却是最有效的。

其次,业务逻辑配置化+公共逻辑服务化,不同广告业务在产品形态、素材规格、竞价方式方面会有所不同,并且会随着时间不断变化,架构必须灵活来支持业务的变化和差异,通过资源管理平台对广告位进行的自动化管理,使得业务逻辑配置化。同时不同业务总是有一些共性需求,通过对公共逻辑的模块化和服务化, 减少耦合和重复建设,提高系统的稳定性和可靠性。

5.小米的点击预估实践

点击预估是广告算法核心,大部分工作时间都在做做特征挖掘和模型优化。

特征挖掘更像是一门艺术,需要熟悉业务,更需要灵感。算法工程师每天的工作就是搜肠刮肚找出跟用户点击广告相关的信号。大部分可能是弱信号,组合起来才能发挥威力。模型则是兵器库,过去两年我们尝试了离线LR,在线FTRL,非线性模型FM和GBDT,以及正在实验中的深度模型等。

这里分别介绍应用分发、搜索和信息流广告的点击预估工作。

应用分发

移动互联网发展到今天,应用推广仍然是效果广告主的首要诉求。依托于小米应用商店、浏览器和小米视频等app,应用分发成为了小米广告平台收入的重要组成部分,算法优化则是不断提升收入的利器。

特征工程方面,我们尝试了以下几大类的特征:用户特征(人口属性、系统信息等)、广告特征(id、类别、位置等)、用户行为特征(app历史安装、近期下载、近期使用等)、用户广告行为特征(广告的曝光、点击、下载等)、组合特征(用户特征X广告特征等)。其中,用户行为特征被证明为最有效,这也是和业务/产品形态最最密切相关的特征。模型方面,从最开始的LR到天级的FTRL,再到小时级的FTRL,效果逐步提升。

搜索

这里的搜索指的也是应用搜索,主要依托于应用商店和浏览器庞大的搜索流量进行变现。在模型优化方面,最初的模型是一个纯文本相关性的模型,主要考虑搜索关键词和广告文本(包括app的名称、描述等)的相关性。接着我们尝试了行为相关性模型,主要是基于协同过滤的思想来计算两个app的相似性(item-based)。今年开始正式采用了点击率模型,收入也是取得了大幅度的增长。

特征工程方面,和应用分发类似,也是这么几大类的特征。需要重点highlight的是搜索上下文特征在搜索场景最有效,比如搜索关键词、搜索自然结果及分类、搜索来源等。

信息流

信息流广告起源于Facebook,在国内多家平台取得成功(如今日头条,微博等),信息流的广告形式有大图、小图、组图等形式,广告类型包括应用分发、H5和视频等。竞价方式也是多种多样,CPC/CPD/CPM/CPT要啥有啥。小米信息流广告的主要载体是一点资讯和浏览器。

信息流广告的算法优化和应用分发类似,也有一些不同的地方。信息流广告的素材更新频繁,广告数量也比较多。反应到模型方面,小时级的FTRL模型比天级模型有大幅度的提升

6.小米是如何应用机器学习反作弊功能的

首先,移动端的作弊和刷量现象非常严重。据统计,70%的推广渠道存在刷量作弊行为。移动端的作弊手段也是多种多样,主要表现在:

  • 刷机:通过特殊的刷机软件,篡改手机的环境参数,如IMEI/MAC等,模拟多用户下载、激活和使用。

  • 模拟器:通过虚拟机软件(bluestacks,Virtual Box等)自动运行脚本,模拟用户点击、下载、激活、留存等数据。

  • 程序化点击:通过雇佣或者劫持的方式,利用大量真实设备进行程序化的点击、下载、激活等。

反作弊技术的关键

设备真伪识别:

一般是通过SDK的方式采集硬件信息,为每台设备生成唯一的设备id,后续即使刷量者对设备的硬件信息进行修改,唯一的设备id也不会变。市场上有多家公司提供了类似的解决方案。比如数盟、量江湖、maxent等。小米与其中几家公司有紧密的合作,并且自己也开发了一套基于硬件标识的设备真伪识别方案。
用户行为分析:

不管是哪种作弊手段,都是有规律可循的,通过大数据分析和机器学习一定能找到蛛丝马迹(正所谓“魔高一尺,道高一丈”,“天网恢恢,疏而不漏”……)。比如用户IP分布异常、机型分布异常、点击率异常、下载激活时间间隔异常、留存率和使用时长异常等等。作弊的仿真度越高,异常特征就越不明显,对应的反作弊技术和代价也就越高。

客户端:核心模块是反作弊SDK,通过采集系统信息生成设备唯一id,用于机器真伪识别。另外采集其他必要的信息用于服务端的反作弊模型分析。服务端:有两套反作弊系统,实时和离线反作弊。实时反作弊系统收集实时上报的日志,通过实时流计算框架,快速分析作弊情况,一般用于捕捉短期的作弊行为。离线反作弊则是通过收集多维度的数据,经过离线计算和反作弊模型,最大限度发现各种长期和短期的作弊行为。不管是实时还是离线反作弊,都牵涉三个模块:数据收集:设备id,IP,广告点击/下载/激活时间戳等信息特征计算:多维度(如IP、UserAgent等)、多粒度(周、天、小时、分钟)、多指标(CTR、下载数、时间间隔等)的实时/离线计算反作弊模型:分为实时和离线模型实时模型:主要是基于规则的模型离线模型:目前主要也是基于规则的模型,未来会尝试用机器学习模型(比如LR,DNN等)前端:主要提供数据报表、异常监控、智能分析等功能,不展开讲。

7.广告大数据如何为用户优化体验

用户体验优化的目标是减少广告展示来提升用户体验,这里有两个问题需要解决:用户体验的指标是什么?如何平衡广告收入和用户体验?对于用户体验,不同的产品有不同的定义:下滑率,搜索次数,页面点击率等等。为了简化优化目标,我们挑选了几个对大部分产品都饲用的指标:主要指标是留存率和日货率,次要致表示使用次数和时长。

用户体验模型综合考虑了几个方面的因素来决定广告最终是否展现给用户:首先是广告质量分模型。最简单的质量分模型只考虑广告效果,比如CTR,RankScore(综合考虑CTR/CVR和出价的广告排序分数)等。基于这些数据可以做简单的“断尾计划”(也就是对于CTR或者RankScore做一个阈值控制)。这种方案实现简单,但效果一般。目前我们正在实验用户容忍度模型和用户影响力模型,以后有机会再展开来讲。

分桶测试把流量切分成3大块,用来收集不同的用户体验方案对于收入和用户体验的影响。先来看一下某app“无广告”vs“有广告”的A/B测试结果,结论:广告对用户体验有一定影响的(~3%)。

用户体验模型综合考虑了几个方面的因素来决定广告最终是否展现给用户:广告质量分模型:最简单的质量分模型只考虑广告效果,比如CTR,RankScore(综合考虑CTR/CVR和出价的广告排序分数)等。基于这些数据可以做简单的“断尾计划”(也就是对于CTR或者RankScore做一个阈值控制)。这种方案实现简单,但效果一般。下图是基于RankScore的“断尾”实验结果,对收入影响比较大:

用户容忍度模型和用户影响力模型:目前还处于实验阶段,先不细讲了。

8.为了获取真实可用的数据从而提升收益,小米提出了广告主ROI算法模型。对此模型的简单介绍。

点击预估模型的优化目标是eCPM和收入,但是广告主的投放目标是ROI,两个目标是不完全一致的。另外,不同的广告主对于R的定义也不一样,有的是激活/留存(新闻资讯),有的是用户注册(金融理财),有的是下单/消费(电商购物)。

广告主ROI优化牵涉两方面的工作:数据收集和模型优化

数据收集:广告数据的完整生命周期包括曝光、点击、下载、激活、留存、注册、消费等。其中曝光/点击/下载是发生在流量方的数据,可以很容易获取并用于点击预估模型,提升广告收入。激活和留存是广告主app的使用数据,通过MIUI系统可以获取。注册和消费则是广告主app内部使用数据,很难通过系统的方式获取,需要和广告主进行数据合作。

模型优化:以激活率模型为例,可以结合CTR模型进行,通过激活数据修改CTR模型的正样本来调整点击预估结果。也可以单独训练激活率模型,然后在广告排序中同时考虑CTR和CVR。

曝光、点击、下载:发生在流量方的数据,可以很容易获取并用于点击预估模型,提升广告收入。
激活和留存:广告主app的使用数据,通过MIUI系统可以获取。
注册和消费:广告主app内部使用数据,很难通过系统的方式获取,需要和广告主进行数据合作。

广告主ROI算法模型(以激活数据为例)
样本修正:修改CTR模型正样本,下载得分1,激活得分k(k>1),然后按得分复制正样本个数
阈值控制:单独训练激活率模型,设定阈值p,当激活率低于阈值时,不参与竞价
组合模型:单独训练激活率模型,然后修正CTR,CTRPrice=>CTR(1+AR^λ)*Price

9.总结

我们的算法团队在过去将近两年的时间里,从点击预估开始,逐步拓展到反作弊、用户体验优化、广告主ROI优化、智能出价、预算平滑等方向。取得了一些成绩,也踩过了很多坑。由于人力有限,我们的算法工作绝大部分时间都是在特征工程和模型优化两方面,我这里就围绕这两块做一些经验总结:

特征工程:

业务相关的用户行为特征一般来说最有效
用户在商店的安装列表 vs 用户的年龄性别,前者更有效
保持数据的“原汁原味”,二次加工反而容易丢失信息
用户浏览记录 vs 用户画像兴趣标签,前者更有效
组合特征才能发挥最大威力

模型优化:

线性模型+组合特征效果很好
离线实验了FM等非线性模型,效果不明显
线性模型+深度模型是未来的方向
正在线下实验,已经看到一些效果


这边依旧留下一个偶然看到的问题,是关于网站的幂等问题