讯飞AI营销平台广告点击率预估架构
综述
随着互联网的发展,互联网的流量变得越来越大,流量变现是互联网大多数厂商的营收来源,产生于互联网的计算广告是流量变现的主要模式,广告点击率预估是计算广告的一个核心研究领域,它使用机器学习算法,提高广告点击率,最终提升广告的收入。
点击率预估系统是讯飞AI营销平台投放系统的核心功能之一,本文主要介绍讯飞AI营销平台点击率预估系统的架构,目前系统能够支持每天上亿级新增数据的小时级训练。
点击率预估简介
本文重点介绍讯飞AI营销平台投放系统的点击率预估系统,投放系统的本质是一个DSP(Demand-Side Platform, 需求方平台),它一方面需要向流量平台ADX出价购买广告展示,另一方面需要向广告主收费,在交易过程中,如果向ADX出价高于广告主出价,DSP就会亏钱。DSP为了降低风险,在竞价之前,需要预估各个流量的点击率,从而对流量进行评估,对于不同质量的流量,给出不同的出价,用高价去竞拍高质流量,而对低质流量出较低的出价。
点击率预估系统在整个讯飞AI营销平台中位置如下图所示。点击率预估系统从大数据平台读取数据进行训练,并向投放平台提供点击率预估服务,辅助投放平台向流量平台出价。
DSP平台的广告点击率预估系统的技术难点主要有以下几点:
- 数据量巨大,平台需要有对每日上亿新增数据的处理能力。
- 平台对点击率预估服务的请求量很大,对单个请求的预测效率要求很高。
- 流量来源众多,流量的用户量级、稳定性差异很大,算法模型要解决流量的长尾问题,同时流量分布变化快,还要保证模型更新的时效性。
- 要基于预估的点击率向媒体和ADX出价,需要预估的点击率和实际的点击率尽可能接近,对于预估误差的容忍度非常低。
算法基础架构
基于讯飞AI营销平台投放系统的业务需求和要面对的技术难点,在技术选型上选择基于spark搭建离线训练系统,基于Spring框架搭建线上点击率预估服务。
Spark平台能够处理大数据集,同时其自带的mllib提供了丰富的机器学习模型,基于spark平台我们可以方便的进行数据预处理、特征生成、模型训练等工作。Spring框架可以方便的对模型进行封装,并对外提供服务。
点击率预估平台的架构如下:
离线训练系统基于将数据存储在HDFS上,spark从HDFS集群读取数据并进行处理,spark不仅保证了数据处理的效率,还提供了丰富的样本特征预估功能,如缺失值补全、特征归一化等。基于spark首先对数据进行预处理,生成样本和特征,然后调用mllib进行模型训练,并在模型训练完成后对模型进行评估,对于评估指标符合要求的模型,同步到线上进行使用。
线上服务系统基于spring框架,对外提供预估服务,为了验证模型的效果,还开发了一套A/B测试系统对模型效果进行评估。同时线上服务会接入到运营系统,让运营人员能够为不同的业务选择合适的算法模型进行投放。
离线训练系统和线下服务系统之间通过配置中心进行交互,线上服务系统基于配置中心的相应配置,从离线系统的HDFS指定路径读取训练好的模型,对模型进行解析后对外提供服务。
此外离线训练系统和线上服务系统都接入了投放业务的监控系统,对模型生成时间、服务可用性、系统的资源占用等进行监控。
模型选择
在模型选择上,有两个技术路线,维稀疏特征+LR/FM和低维稠密特征+GBDT。高维稀疏特征+LR/FM对尾部流量能够有更好的刻画,而低维稠密特征+GBDT能够更好的拟合头部流量。由于投放平台的业务更偏向于长尾流量,且流量的变化很大,我们最终选择的是FM模型。
FM(factorization machine,因式分解机)模型是一种基于矩阵分解的机器学习模型,对于稀疏数据具有很好的学习能力。FM模型引入隐变量来对特征之间的交叉进行表达,模型的形式化表示如下:
由于,隐变量的表示相当于一种矩阵分解,因此被称为因式分解机模型,FM对特征做了二阶组合,省去了人工特征工程的工作。FM模型的训练基于LBFGS,训练速度很快,训练完的模型只需要存储各个特征的权重和特征交叉项的矩阵。线上服务对外提供预测服务时,可以通过矩阵运算和数学累加计算结果,由于输入特征非常稀疏,模型预测效率非常高,可以在1ms之内完成预测。
模型实时更新
平台每天新增样本1亿以上,FM使用一周数据训练一次的时间大约是4个小时。要实现模型的实时更新,我们在离线FM训练的基础上引入在线学习(Online Learning)实现模型的小时级训练。
在线学习使用最广的算法是google提出的FTRL(Follow The Regularized Leader)算法,它在FTL算法(Follow The Leader)的基础上加入了正则化,FTL思想是每次找到让之前所有损失函数之和最小的参数,它能够有效的产生稀疏解。
在实际应用中,我们只需要把FTRL当成一种模型参数的更新方法,每小时用上一个小时的数据依次对模型的参数进行更新。用FTRL的训练流程如图所示。
首先我们在一天数据生成后,用7天的数据天级别训练一个FM模型,作为每天FTRL更新的基础模型;然后每小时定期用上一个小时的数据对当前的FM模型进行更新。之所以这样做的原因是FTRL本质上是一个贪婪求解的过程,如果长时间一直用FTRL更新参数,模型容易进入局部最优解。因此我们用一个天级别的FM模型作为基础模型保证模型参数在全局最优解附近,用FTRL小时级更新保证模型对线上数据变化有尽可能快的反馈。
模型评估
在点击率预估系统中,离线训练系统和在线服务系统都会对模型进行评估。在离线评估中,我们评估模型常用的指标是AUC和logloss,使用AUC评估模型的区分度,使用logloss评估模型的预估准确度。在线上系统我们会用A/B测试系统对模型效果进行评估。在进行A/B-test时需要注意的是,流量的划分必须是无偏的,即对CTR模型切分的流量和对照组除了模型不同以外,其他因素应该都是基本一致的,给实验组和对照组分配不同的媒体流量是不行的,这样的A/B-test没有意义。
在某些比较大的算法版本上线,如从FM模型切换成基于FTRL的小时级更新时,由于有一定的模型效果风险,为避免影响线上评估,我们会先进行离线测试,再进行线上A/B测试。如上图所示,我们会先使用近期数据模拟线上流量,观察模型在近期流量上表现,再将模型放到线上进行小流量A/B测试。
总结
本文介绍了讯飞AI营销平台点击率预估架构,并重点介绍了我们基于FM模型和FTRL的一些实现经验。希望可以帮助读者对点击率预估系统的架构设计、技术选型和模型选择有一定了解。本篇文章也是《讯飞AI营销平台算法实践》系列的第一篇,后续会对讯飞AI营销平台的点击率预估系统的特征优化和模型演进等进行更加详细的介绍。