记者:请介绍下自己和目前从事的工作,以及关注哪些技术领域?
宋强:我是宋强,2014年加入小米,目前在小米商业产品部担任架构师和研发主管,主要负责小米自有流量和移动网盟业务的变现,包括系统架构、算法策略和数据平台相关的工作。之前在微软中国必应广告部门从事大数据分析、反作弊相关工作。再之前在IBM中国开发中心从事数据库和查询优化相关的工作。我个人比较关注的技术包括分布式高并发的系统架构、海量数据分析与处理、数据挖掘和机器学习等。
记者:依托于强大的 MIUI 系统、2亿手机用户和完善的生态链布局,小米在过去几年积累了海量用户数据。那么与社交网络、搜索和游戏等网站相比,小米的用户流量有哪些特点?
宋强:小米是一家硬件公司,也是一家移动互联网公司,但我更愿意把小米看成一家大数据公司。硬件方面,在过去几年中,小米一共售出了超过两亿部手机和1500万台电视和盒子,另外路由器和手环等生态链产品的销量也非常好。软件方面,深受用户喜欢的 MIUI 是一个深度定制的安卓系统。依托于强大的硬件销量和 MIUI 等软件系统,小米在过去几年积累了大量的用户数据,包括 APP 使用、搜索、购物、社交、娱乐等。小米是一家真正的大数据公司,小米的大数据和其他公司相比,最大的特点和优势是“全生态、多样性”。
记者:在时下这个业务变更频繁的背景下,可否为我们分享下小米大数据的实践经验?
宋强:小米大数据在小米多个业务中得到了充分的应用和实践。首先是广告营销,通过点击预估算法提升广告收入,通过营销 DMP 帮助广告主进行精准营销等等。其次,大数据在小米金融业务中也广泛应用,包括风控和征信分析、反欺诈等。在搜索和推荐业务中,大数据对各种算法的提升也起到了至关重要的作用,包括查询理解、相关性模型和点击预估等。
记者:目前小米广告大数据已发展较为成熟,您觉得未来会朝着哪些趋势发展?
宋强:未来的趋势应该是更加智能化。首先是算法的智能化,随着机器学习和人工智能的进一步发展,大数据的价值将得到更加充分的挖掘。其次是营销的智能化,通过多维立体的用户标签数据,从性别、年龄等基础数据,到 APP 使用频次和时长、运动轨迹、手机信号等数据形成的兴趣标签,再到精准的时间、位置、场景化标签,帮助广告主进行更加智能化的广告营销。
记者:数据应用场景是数据商业化过程中重要的方面之一。小米的广告大数据有哪些应用场景?
宋强:小米广告大数据的应用场景有很多,首先是广告算法优化,包括点击率预估、反作弊、用户体验优化、广告主 ROI 优化等多个方向。其次是营销 DMP,小米的营销 DMP 通过整合媒体、投放平台以及广告主的各方数据,使用大数据技术对用户的特征进行挖掘,为广告主提供了20多个维度、上百个标签的实时用户画像管理。
记者:与搜索的基础架构相比广告平台要求更高的实时性反馈,小米广告平台的架构是怎样的?
宋强:小米广告平台负责小米应用商店、浏览器、一点资讯、小米电视等全线软硬件几十个业务的变现。支持应用游戏下载、信息流、搜索、开屏、视频贴片、电视画报等十余种主流和创新的移动广告形式。总的说来,小米广告的业务比较复杂和多样化,小米广告平台的架构也是随着业务的发展不断的迭代和优化。
目前整个系统架构包括接入层、服务层、算法层和存储层。接入层负责流量的接入、管理、配置和运营。服务层是广告检索的核心,包含广告选取、过滤、排序等核心逻辑,主要的服务有广告交易平台、效果和排期广告服务等。算法层负责点击率预估、预算平滑、精准定向等算法,存储层则是各种广告和用户数据访问层。
广告平台架构在演化过程中,我们一直秉承以下几个思路:
首先,架构为业务服务,每一次架构的迭代都是业务驱动的。我们的团队也是按照业务进行划分的,每个业务团队有明确的目标,通过目标驱动架构的微调和迭代,也许架构并不是完美的但却是最有效的。
其次,业务逻辑配置化+公共逻辑服务化。不同广告业务在产品形态、素材规格、竞价方式方面会有所不同并且会随着时间不断变化,架构必须足够灵活来支持业务的变化和差异化。通过资源管理平台对广告位进行自动化的管理,使得业务逻辑配置化。同时,不同业务总是有一些共性的需求,通过对公共逻辑的模块化和服务化,减少耦合和重复建设,提高系统的稳定性和可靠性。
记者:准确的广告点击率预估可以提高真实的广告点击率,增加收益。能否为我们详细介绍下小米的点击预估实践?
宋强:点击预估是广告算法的核心,我们的点击预估工作大部分时间都是在做特征挖掘和模型优化。特征挖掘更像是一门艺术,需要熟悉业务,更需要灵感。算法工程师每天的工作就是搜肠刮肚找出跟用户点击广告相关的信号。大部分可能是弱信号,组合起来才能发挥威力。模型则是兵器库,过去两年我们尝试了离线 LR,在线 FTRL,非线性模型 FM 和 GBDT,以及正在实验中的深度模型等,有很多收获,也碰到了很多坑。由于小米广告的业务比较多,我这里分别介绍应用分发、搜索和信息流广告的点击预估工作。
应用分发:移动互联网发展到今天,应用推广仍然是效果广告主的首要诉求。依托于小米应用商店、浏览器和小米视频等 app,应用分发成为了小米广告平台收入的重要组成部分,算法优化则是不断提升收入的利器。
特征工程方面,我们尝试了以下几大类的特征:用户特征(人口属性、系统信息等)、广告特征(id、类别、位置等)、用户行为特征(app 历史安装、近期下载、近期使用等)、用户广告行为特征(广告的曝光、点击、下载等)、组合特征(用户特征 X 广告特征等)。其中,用户行为特征被证明为最有效,这也是和业务/产品形态最最密切相关的特征。模型方面,从最开始的 LR 到天级的 FTRL,再到小时级的 FTRL,效果逐步提升。
搜索:这里的搜索指的也是应用搜索,主要依托于应用商店和浏览器庞大的搜索流量进行变现。在模型优化方面,最初的模型是一个纯文本相关性的模型,主要考虑搜索关键词和广告文本(包括 app 的名称、描述等)的相关性。接着我们尝试了行为相关性模型,主要是基于协同过滤的思想来计算两个app的相似性(item-based)。今年开始正式采用了点击率模型,收入也是取得了大幅度的增长。
特征工程方面,和应用分发类似,也是这么几大类的特征。需要重点 highlight 的是搜索上下文特征在搜索场景最有效,比如搜索关键词、搜索自然结果及分类、搜索来源等。
信息流:信息流广告起源于 Facebook,在国内多家广告平台取得成功(如今日头条,微博等)。信息流的广告形式有大图、小图、组图等形式,广告类型包括应用分发、H5 和视频等。竞价方式也是多种多样,CPC/CPD/CPM/CPT 要啥有啥。小米信息流广告的主要载体是一点资讯和浏览器,也是我刚进小米之后接手的第一块业务。
信息流广告的算法优化和应用分发类似,也有一些不同的地方。信息流广告的素材更新频繁,广告数量也比较多。反应到模型方面,小时级的 FTRL 模型比天级模型有大幅度的提升。
记者:时下机器学习、人工智能等新技术越发火爆,小米毋庸置疑也应用了这些技术。请问小米应用的机器学习反作弊功能是怎样实现的?
宋强:首先,移动端的作弊和刷量现象非常严重。据统计,70%的推广渠道存在刷量作弊行为。移动端的作弊手段也是多种多样,主要表现在:
刷机:通过特殊的刷机软件,篡改手机的环境参数,如 IMEI/MAC 等,模拟多用户下载、激活和使用。
模拟器:通过虚拟机软件(bluestacks,Virtual Box 等)自动运行脚本,模拟用户点击、下载、激活、留存等数据。
程序化点击:通过雇佣或者劫持的方式,利用大量真实设备进行程序化的点击、下载、激活等。
反作弊的关键技术:
设备真伪识别:一般是通过 SDK 的方式采集硬件信息,为每台设备生成唯一的设备 id,后续即使刷量者对设备的硬件信息进行修改,唯一的设备 id 也不会变。市场上有多家公司提供了类似的解决方案,比如数盟、量江湖、maxent 等。小米与其中几家公司有紧密的合作,并且自己也开发了一套基于硬件标识的设备真伪识别方案。
用户行为分析:不管是哪种作弊手段,都是有规律可循的,通过大数据分析和机器学习一定能找到蛛丝马迹(正所谓“魔高一尺,道高一丈”,“天网恢恢,疏而不漏”……)。比如用户 IP 分布异常、机型分布异常、点击率异常、下载激活时间间隔异常、留存率和使用时长异常等等。作弊的仿真度越高,异常特征就越不明显,对应的反作弊技术和代价也就越高。
记者:对于服务商而言用户体验非常关键,基于广告大数据的小米在用户体验优化上做了哪些努力?
宋强:首先,用户体验优化的目标是通过减少广告展现来提升用户体验,但这里有两个问题需要解决:用户体验的指标是什么?如何平衡广告收入和用户体验?对于用户体验,不同的产品有不同的定义:下滑率,搜索次数,页面点击率等。为了简化优化目标,我们挑选了以下几个对于大部分产品都适用的指标:主要指标是留存率和日活率,次要指标是使用次数和时长。
用户体验模型综合考虑了几个方面的因素来决定广告最终是否展现给用户:首先是广告质量分模型。最简单的质量分模型只考虑广告效果,比如 CTR,RankScore(综合考虑 CTR/CVR 和出价的广告排序分数)等。基于这些数据可以做简单的“断尾计划”(也就是对于 CTR 或者 RankScore 做一个阈值控制)。这种方案实现简单,但效果一般。目前我们正在实验用户容忍度模型和用户影响力模型,以后有机会再展开来讲。
记者:为了获取真实可用的数据从而提升收益,小米提出了广告主 ROI 算法模型。那么能否详细介绍下这一模型?
宋强:点击预估模型的优化目标是 eCPM 和收入,但是广告主的投放目标是 ROI,两个目标是不完全一致的。另外,不同的广告主对于 R 的定义也不一样,有的是激活/留存(新闻资讯),有的是用户注册(金融理财),有的是下单/消费(电商购物)。
广告主 ROI 优化牵涉两方面的工作:数据收集和模型优化。
数据收集:广告数据的完整生命周期包括曝光、点击、下载、激活、留存、注册、消费等。其中曝光/点击/下载是发生在流量方的数据,可以很容易获取并用于点击预估模型,提升广告收入。激活和留存是广告主 app 的使用数据,通过 MIUI 系统可以获取。注册和消费则是广告主 app 内部使用数据,很难通过系统的方式获取,需要和广告主进行数据合作。
小米宋强:生态化大数据平台的深度应用实践
模型优化:以激活率模型为例,可以结合 CTR 模型进行,通过激活数据修改 CTR 模型的正样本来调整点击预估结果。也可以单独训练激活率模型,然后在广告排序中同时考虑 CTR 和 CVR。
记者:前面讲了很多大数据在广告算法中的应用,能否总结一下经验?
宋强:我们的算法团队在过去将近两年的时间里,从点击预估开始,逐步拓展到反作弊、用户体验优化、广告主 ROI 优化、智能出价、预算平滑等方向。取得了一些成绩,也踩过了很多坑。由于人力有限,我们的算法工作绝大部分时间都是在特征工程和模型优化两方面,我这里就围绕这两块做一些经验总结:
特征工程:首先,和业务本身相关的行为特征是最有效的,比如“用户在商店的安装列表”相比用户属性(比如年龄性别),对点击预估更有效。其次,保持数据的“原汁原味”,二次加工反而容易丢失信息。比如将用户的历史浏览加工成用户的静态兴趣分布,还不如直接用原始的历史浏览有效。最后,组合特征才能发挥最大威力。
模型优化:首先,不要轻易放弃线性模型,通过适当的组合特征一般来说效果会非常好。离线实验了 FM 等非线性模型,效果并不明显。其次,线性模型+深度模型可能是未来的方向,比如 Google 最近的 Wide&Deep Learning,我们正在线下实验,已经看到一些效果。
记者:您在分布式系统架构、大数据分析、数据库和查询优化方面都有着丰富的经验,可否分享下您学习新知识或技能的方法?以及在日常生活中是通过哪些方式来提升个人技能的?
宋强:我个人对技术比较有热情,以前学习新知识和提升技术的主要方式就是看书和写代码,现在有一部分时间花在了团队管理上面,但仍然保持着“学习-实践-交流”这样一种方式来不断提升自己的技术。
学习:活到老学到老,主动学习仍然是获取新知识最重要的方式。现在技术的发展日新月异,每天都有新的东西出来。当然不需要也没有精力都去学,但是和业务相关的技术,我一般都会花一些时间去了解和学习。
实践:最好的技术提升在实践中,离开了业务实践,空谈系统架构和算法优化都是没有意义的。我每天会花大量的时间和同事一起讨论系统设计并进行代码 review,让自己保持对业务和技术的敏感性。
交流:我们团队内部定期会有技术交流,比如 druid 实时数据分析,redis 优化等。我们团队有很多技术大牛,他们对技术非常热衷并乐于分享,每次技术交流都让我受益匪浅。另外,我也参加一些业界的技术交流,向大牛学习的同时也分享自己的一些经验。