本节书摘来异步社区《Storm技术内幕与大数据实践》一书中的第9章,第9.3节,作者: 陈敏敏 , 黄奉线 , 王新春
责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。
9.3 广告投放的精准化
广告投放的精准化其实和个性化推荐本质是一样,都是在合适的时间、地点以及场景下,把用户最需要的信息推荐给他。不算黑暗互联网,广告、秀场/游戏和电商被认为是互联网的三大变现模式(也有说,移动互联网多了增值服务第四大变现模式),其中广告对收入的驱动力最直接,商业驱动技术的发展,造就了精准化营销发展的相对比较好;而推荐对电商的收入贡献是间接的(要知道现在电商的盈利模式不是通过差价,目前主要的盈利模式还是基于阿里巴巴的租金和渠道的流量模式,以及唯品会的清理尾货的模式),对于比较标准化的产品,互联网的信息对称让价格变得透明,通过差价来盈利目前还是比较困难的,除非有通过政策或者合同壁垒,只能独家销售的产品。广告投放区别于推荐和搜索主要见表9-4。
9.3.1 点击率预测
互联网广告的蓬勃发展,让广告的精准化需求越来越大,计算广告学正在成为一个兴起的分支学科。2009年由Yahoo!的资深研究员Andrei Broder提出的计算广告学涉及大规模搜索和文本分析、信息获取、统计模型、机器学习、分类、优化以及微观经济学。计算广告学所面临的最主要挑战是在特定语境下特定用户和相应的广告之间找到“最佳匹配”。语境可以是用户在搜索引擎中输入的查询词,也可以是用户正在读的网页,还可以是用户正在看的电影,等等;用户相关的信息可能非常多也可能非常少;潜在广告的数量可能达到几十亿。但核心的思想都是为了市场参与者的利益平衡与最大化。
广告的收费模式主要有CPM(cost per thousand impressions,按每千次的展示进行付费)和CPC(cost per click,按点击付费),通常用eCPM(effective cost per mille, 每一千次展示可以获得的广告收入)来反映网站盈利能力,见表9-5。
在CPC环境中,通过eCPM对广告进行排名。eCPM=bidPrice×CTR,其中bidPrice是指广告主给出的竞拍价格,CTR(Click Through Rate)是我们预估的该广告的点击率,总体结果越高越容易被展示。广告的bidPrice可事先确定,然后根据每个广告的最大价值和历史bidPrice,不断调整最新的bidPrice。广告的最大价值由CTR、客户愿意支付的CPC和毛利率目标来计算得到,其中最关键的是根据广告创意等特征估算广告的CTR。一般做法是通过逻辑回归等机器学习模型,根据查询和广告的特征来预估CTR。逻辑回归几乎是所有广告系统和推荐系统中点击率预估模型的基本算法,可以用来判断是否是垃圾邮件,是不是金融欺诈,等等,逻辑回归同时也是目前互联网广告的三大机器学习系统之一(另外两个是隐含主题模型和深度神经网络系统)。
逻辑回归的模型将多维特征根据其训练得到的权重和当前计算得到的值回归到(0, 1)区间上的一个概率值,对于预估点击率来说,即表示用户可能点击广告的概率。它是一个非线性的sigmoid模型,本质上还是一个线性回归模型,因为除去sigmoid映射函数关系,其他的步骤和算法都是线性回归的,一般采用如下公式:
Logistic曲线如图9-9所示,逻辑回归就是通过拟合Logistic曲线,最终得到不同特征的权重,从而预测某个事例出现的概率。
其中X是输入变量,y是输出,theta是特征权向量,X可以是用户,广告,上下文组成的数据对<用户,广告,上下文>。预测CTR中,y=1代表用户会点击该广告,y=−1代表用户不会点击该广告。X中<用户,广告,上下文>数据对可以由数据对相应的特征向量构成,其特征可以达到10亿数量级,比如图9-10的组合。
其问题转换为通过历史中用户是否点击广告的情况,作为训练集来求解theta,从而得到模型。可以利用极大似然法估算模型的参数:
转换为使得以上公式的结果概率最大,因为前面线性回归中梯度下降法是求最小值,通过对公式取负log,转换为求最小值问题,给theta赋予随机值,通过反复迭代得到极小值,作为最终的theta。
CTR除了用在搜索的竞价广告中,在目前的实时竞价中也有广泛应用,实时竞价过程一般通过cookie映射(cookie mapping)技术关联用户,我们把实时竞价中的各方简化成ADX和DSP。
- ADX:Ad exchange。互联网广告交易平台,联系的是广告交易的买方和卖方,也就是广告主方和广告位拥有方。谷歌、百度、淘宝、腾讯等拥有自己的ADX。
- DSP:Demand Side Platform。可以看作流量的购买方,为广告主服务。广告主可以通过DSP购买流量,达到营销的目的。DSP通过接入ADX中,参与竞价,购买所需要的广告位。
当用户访问一个加入应用ADX服务的网站,网站上相关栏位出租广告,各个DSP通过cookie映射和ADX建立映射,识别为同一用户,然后DSP根据从ADX或者广告主等得到的用户信息,自动对广告进行出价,ADX也通过用户历史数据,预测CTR,对各个DSP出价的广告进行排名,显示收入最高的广告。实时竞价的过程如图9-11所示。
当然有些用户经常关闭cookie功能或者清空cookie,现实当中除了通过cookie映射来关联用户,还有很多种方式,具体可以参考访客追踪的开源项目evercookie,它可以通过standard HTTP cookies、Flash cookies、HTTP Etags、window.name.caching、userDatastorage、你强制缓存的PNG的RGB值、Web history、HTML5一些特有的存储特性等来关联用户的行为,但是切勿用于非法用途。
实时的CTR预测主要通过加快更新用户历史点击率的数据,越及时,预估出来的点击率就越准确。实际生产环境中,更新频次依赖于训练数据的规模、日志数据的回流速度以及集群规模等因素。在数据稀疏的情况下,可以通过经典的贝叶斯方案对点击率做平滑,贝叶斯需要通过先验概率训练参数。为提高实时性,也可以用一些简单的平滑公式做点击率平滑来提高性能。
9.3.2 搜索引擎营销
目前提高流量的方式有搜索引擎营销(Search Engine Marketing,SEM)、网盟、搜索引擎优化(Search Engine Optimization,SEO)等。各大互联网巨头抢占流量入口,目前搜索引擎仍然是主要的流量入口之一,每天十几亿的PV,应用得当,会让网站跨上千万级的PV。SEM的优化工作分为关键词选取、创意登录页面设计、网站结构优化等,在一个电商网站中,关键字又主要分为品牌词、竞品词、通用词、商品词等,其中商品词是流量的主要来源。一个网站拥有百万的SKU,通过人工管理代价很大,同时一些热门事情,如果处理不及时,会让几个热门词几分钟会花完网站一天的预算,所以需要一套智能的系统自动做SEM。SEM包含预警模块,用来实时监控投放数据、库存、热门关键字等,保证投放的时效性;还有爬虫模块,用来实时爬取投放关键字在搜索引擎中的排名,判断什么时候可以降低出价,让关键词出现在最好的位置,平衡高排名关键字的成本和转换率。当然,数百万的关键词,往往性能是很大的瓶颈。目前Storm在实时监控数据和实现爬虫上,都有不少的应用,利用Storm和内存数据库可以很好地解决SEM中实效性的问题。
9.3.3 精准化营销与千人千面
腾讯等公司在投放广告的时候,可以根据用户标签信息、用户原始行为和商圈等定向地投放广告,如图9-12和图9-13所示。
而下层的支持很大一块是准实时的用户画像系统,结合不同的场景用不同的算法展现广告或者物品。通过Storm的Spout实时收集不同的数据源的行为,从而屏蔽不同数据源的差异性,通过Bolt提取各种行为的标签,对各类标签进行去噪、补充近义词/同义词等进行数据清洗,然后把统计次数存入存储引擎中,最后根据历史统计的次数,实时计算得到的用户的兴趣度。通过图9-14可以看到,为了在海量数据下达到实时性,腾讯设计的实时计算的算法不是很复杂,没有对用户当前类目的其他相关类目的兴趣度进行降权,甚至没对当前类目的兴趣度根据日期变化进行相关衰减等,算法精准性、数据量、实时性总是一个相互制约的过程,腾讯牺牲了部分算法的精准性提高了实时性。
(截取自腾讯广点通网站e.qq.com,图中相关内容的著作权归属原著作权人所有)
阿里通过阿里妈妈达摩盘来做消费者洞察和精准化营销,如图9-15和图9-16所示,商家或运营通过选取用户画像标签、商品信息以及天气、时间等上下文信息,对用户进行分群投放广告,或者对新客、半新客等不同生命周期的用户采取不同的引导,从而达到精准化营销。
其他大型手机制造商,可以根据收集到的用户的详细行为,为应用开发者提供相应的广告接口,应用开发者开发相应的应用时,只需要调用它们的广告API,填入基本的用户群标签信息和广告的位置、大小等信息,就可以完成精准化的广告投放。
亚马逊等网站的千人千面基本也是基于用户标签、用户浏览、购买、搜索、加车等行为来让运营或者商家选取用户群,在非广告的栏位通过后台算法筛选出最优的产品展示在栏位上,这样运营和商家根据自己的产品特点,可以自己来选取人群(比如:一个月前买过洗发水,最近一月没有买过洗发水的用户;最近一周浏览和收藏过手机,但是没有购买的用户)。对于广告栏位,广告主通过选取用户群和栏位进行竞价,展示在用户前面的商品也是另外一种形式的千人千面。电商网站的精准化营销和千人千面可以基于如图9-17所示的统一平台来完成。
(1)根据用户画像和用户历史数据生成用户维度的基础表,在索引平台建立用户维度的索引。
(2)抽取商品的各种属性建立选品中心,在索引平台建立商品的索引。
(3)根据天气、地域等上下文信息和用户基础表,通过Apriori、FP-Growth等关联规则挖掘算法,挖掘出和类目或品牌经常一起出现的属性集合(称为频繁项集),然后在索引平台建立类目和品牌的索引。
(4)设置索引平台用户和商品等维度的Schema,选人、选品应用根据这些Schema的属性组合生成唯一的键。
(5)新建栏位或者短信、邮件等精准化营销的应用名,绑定到相应的键(通过这些键找到具体的查询条件)。
(6)精准化营销的产品或者千人一面的栏位就可以根据上一步的应用名,找到选人或选品需要的具体的属性条件,然后通过搜索平台精准的找出商品或用户。
(7)对于千人千面的栏位可以通过用户基础表找出用户的属性,然后根据之前设置的键,筛选出需要的属性,最后通过搜索平台找出相应的商品个性化的展现在栏位上。
基于目前流行的ElasticSearch或Solr建分布式索引和搜索平台,前端每个千人千面栏位哪怕只访问一次索引往往也需要较多的机器,也可以通过给栏位设置相应的选人和选品的属性条件,每天离线生成每一个栏位的用户到产品的映射关系,关存到MySQL或HBase中,前端栏位根据访问的当前用户,直接读取用户-产品的映射表来实现千人千面的个性化推荐。