广告是互联网行业最清晰的一种商业模式,也是大数据时代被热捧的宠儿。计算广告学旨在找到“情境”、“用户”和“广告”之间的最佳匹配,它将计算理论和经济学结合在一起,涉及博弈论、自然语言处理、机器学习等多门学科的融合。
斯坦福大学对计算广告学的描述是:“计算广告学是一个综合学科,涉及大规模搜索、文本分析、信息检索、统计建模、机器学习、分类、优化和微观经济学。计算广告的核心问题是要找到在给定的环境下,用户与广告的最佳匹配”。其中,“给定的环境”可以是用户在搜索引擎中输入的查询词(搜索广告),可以是用户正在浏览的网页(上下文广告),可以是用户正在观看的电影/电视剧(视频广告),还可以是用户活跃的社区(社交广告、Feeds 广告)等等。
在线广告模式
按展现付费(cost per mille, CPM)
显示广告是指用户在浏览网页时看到的以图片或视频形式出现的互联网广告。它的主要作用是品牌推广。
按点击付费(cost per click, CPC)
搜索广告
搜索广告是指用户在使用搜索引擎进行搜索时,在结果页面上看到的广告。一般来说,当搜索广告展示给用户后,只有当用户点击了某个广告时,广告平台才会向广告主收取一定的费用。
与显示广告的应用场景不同,用户在搜索时通常具有相当明确的意图,而这些意图通常是通过查询词的形式传达出来的。为了精准匹配用户的搜索意图,广告主通常事先提交想要竞买的关键词,以及愿意付出的最高费用。
查询词扩展
- 基于推荐的方法:挖掘(session, query)矩阵找到相关query。(利用的是搜索数据)
- 基于语义的方法:用topic model或概念化的方法中找语义相关query。(利用的是其他文档数据)
- 基于收益的方法:根据实际eCPM统计得到变现能力最好的相关query。(利用的是广告数据)
广告筛选
因为只有用户点击和竞价拍卖才会为广告平台带来利润,所以这种匹配也必定为点击和竞价拍卖服务。在选择关键词以匹配给定的查询词时需要考虑竞买这些关键词的广告本身是否有足够的吸引力引起用户的点击、广告的竞价情况以及如果将广告展示出来,按照系统内部的拍卖机制是否会为广告平台创造效益等
广告点击率(click-through rate, CTR)预测
点击预测通常被建模成一个分类问题模型:给定用户查询词、广告、用户信息以及其它上下文信息,来预测是否会发生一次点击。
点击率可以用广告被点击的次数除以广告展示的次数计算得出。
点击率预测模型:Regression比Ranking更合适一些,广告的实际排序是根据eCPM,因此需要尽可能准确估计CTR,而不仅仅是各候选的CTR排序正确。
广告拍卖
在工业界中被广泛使用的广义二价拍卖机制按照点击率和竞价的乘积来对广告进行排序,如果排在第 k 个位置的广告被点击,它将向该广告商收取排在第 k+1 位广告的竞价(更准确地讲,还要乘以第 k+1 位广告的点击率,再除以第 k 位广告的点击率)
按转化付费(cost per action, CPA)
(广告的期望收益等于广告主出价(Bid)和广告预估转化率(pConversion,广告展现时发生转化行为的概率)的乘积)
广告主更乐于见到点击并真正转化成用户的实际购买行为以后才收取费用的模式,但并未取得积极的效果,原因是广告平台无法直接检测到转化的发生。
收益计算:广告的点击率、 用户在广告投放者的目标页面上执行动作的概率、被执行动作的价格 三者相乘。
推荐系统
在线商店(如亚马逊)中选择商品广告。
这一类广告并非由广告商品的生产者来付费,而是由在线商店选出,以最大化顾客对商品感兴趣的概率。
竞价广告
广告算法
离线算法(off-line):将算法所需要的所有数据准备好,然后进行学习。
在线算法(on-line):我们只能保存有限的流数据,当由要求时必须应答整个流上的查询。
广告需要实时性,所以需要使用一个在线算法来将广告分配给查询。我们可以使用过去的一些信息,但是我们无法预知未来,因此无法保证在线算法和离线算法的效果总是一样好。
- 贪心算法:很多在线算法都属于贪心算法(greedy algorithm)
通过最大化当前输入元素和历史信息的某个函数 ,对每个输入都做出决策。
以搜索广告为例:一次广告的收益时每个选出广告的价值之和,其中每条广告的价值等于对应查询的出价和广告点击率的乘积。而一个在线算法的绩效时一个月(预算所假设的时间)内的总收益。
对于每条搜索查询,贪心算法会选择厂家最高的广告商。
- Balance算法:对贪心算法做了简单改进,将查询分配给出价最高且预算最多的广告商。(假设所有广告商出价相同,不是0就是1)
- 一般性的Balance算法:选择时需倾向于出价高的广告、对剩余预算的处理不能那么绝对。
假设某个查询q到达,广告商对q的出价是x,预算中的结余比例为f。则计算公式为下式,将q分配给具有最大值的广告商。
- 改进的Balance算法:还需要考虑不同广告的点击率不同这种可能性。最简单的情况是计算\psi时将出价和点击率相乘(即上式中的x),最终使该预期收益最大化。
算法实现还涉及到投标关键字与查询的匹配、投标关键字与文档(如email、微博)的匹配、投标关键字词集合的哈希存储(低频优先)、投标匹配中的文档处理(低频优先)。
算法度量
竞争率:对于同一问题,在线算法不如最佳的离线算法效果那么好。我们最高的期望就是,存在一个小于c的常数,使得对于任意输入,一个具体的在线算法的结果至少是最优离线算法结果的c倍。常数c如果存在的话,将被称为在线算法的竞争率。
我们可与在所有可能的输入情况下,通过 最小化在线算法与最优离线算法的收益比 来度量在线算法的质量。
如何搭建一套高性能、可扩展、高可用、柔性的广告引擎?
Redis广告平台示例
https://github.com/josiahcarlson/redis-in-action/blob/master/python/ch07_listing_source.py
《Mining of Massive Datasets》 8 P207
http://www.flickering.cn/category/ads/
http://blog.sina.com.cn/s/blog_4caedc7a0102eshz.html
https://web.stanford.edu/class/msande239/
http://study.163.com/course/courseMain.htm?courseId=321007#/courseDetail
《Redis in Action》 7.3 P166