写点什么

基于 LSTM 模型的广告库存预估算法

  • 2020-01-03
  • 本文字数:3194 字

    阅读完需:约 10 分钟

基于LSTM模型的广告库存预估算法

爱奇艺广告算法团队结合广告业务特点,提出基于 LSTM(Long short-term memory,长短期记忆)模型的广告库存预估深度学习算法。在节省训练资源的同时,构建更具泛化性的模型,并将预测时间进行工作日、节假日等更精细化的多类标签,体现出节假日特征对库存波动的影响,从而对广告库存进行更为精确的预估。

背景

广告仍然是互联网流量变现及商业模式的重要手段,随着互联网高速的发展,广告服务愈加精细化,需要提前预知用户的访问量来保证广告的策略,这就需要理解和预测广告库存量,这就是广告库存预估。广告库存预估属于时间序列预测任务,主要利用历史库存来预测未来一天或多天的广告库存,从而预估出更为准确的库存,对广告售前询量、离线分配等工作有极为重要的指导作用。


广告库存预估作为时间序列预测算法的业务场景之一,其数据拥有时间序列数据的基本特点,趋势性与随机性并存,在长期的规律性中蕴含了短期的波动性;同时,广告库存预估有以下几个业务特点和难点:


  1. 样本较少:广告库存往往以天为单位结算,相对而言样本较少,若建立复杂的时序预估模型时易出现过拟合的问题;

  2. 库存的波动受节假日影响较大:在寒暑假、春节等节假日,甚至在每一个周末,广告库存量都会有大幅上升,这一特点需要利用时序模型进行捕捉;

  3. 广告主的特殊定向需求:预估维度需精确到站点、平台、城市、频道等维度,这给预估工作带来了资源和效率等方面的挑战。

解决方案

1.1 常用方案

时序预测方法主要可以分为两种方法:传统时序建模方法和机器学习。


最初的传统时序预测,可以追溯到移动平均法、指数平滑法,这类方法基于某段时间的历史数据拟合曲线,对于周期性的波动或方差较大的数据模拟效果较差;之后,随着移动平均与自回归的 ARMA,ARIMA 等模型出现,时序预测与此相结合。ARIMA 模型[1],全称差分整合移动平均自回归模型,其中 AR 是自回归,I 为整合,MA 为滑动平均,模型主要采用三个参数分别表示时序数据的滞后数、达到稳定状态需要的差分阶数、预测误差的滞后数。[1] 该模型简单易实现,对近期数据波动规律捕捉较好。但是 ARIMA 模型要求观测数据本身或是其差分后的数据是稳定的,且模型重点关注内生变量,不易添加外部特征,尤其与时序关联较小的特征。


随着人工智能的发展,机器学习方法开始普及,SVM、XGBoost 等方法也被运用于时序预测任务中。深度学习作为机器学习中的一种被不断提及,其中,循环神经网络 RNN 逐渐被证明在时序预测中能获得较好的效果,在捕捉长期数据规律上更有不错的表现。


在调研 LSTM 算法模型之前,爱奇艺广告算法团队采用 Adaptive-ARIMA 模型(后文简称为 A-ARIMA 模型),进行广告库存预估。A-ARIMA 模型将传统 ARIMA 算法和库存预估背景相结合,主要流程如下:



其中,A-ARIMA 算法对于传统 ARIMA 的改进主要在于缺失值、异常值等处理,另外,在后续处理时加入了进出节假日及周末的预估偏差矫正,以更好地描述实际流量波动。实验结果显示:在库存预估场景下,A-ARIMA 模型较传统算法预测效果更好,偏差率下降 1.16pp。

1.2 基于 LSTM 模型的预估算法

LSTM(Long short-term memory,长短期记忆)模型[2],属于 RNN(Recurrent neural network,循环神经网络)模型的一种,在长序列预测过程中相比普通 RNN 有更好的效果。在确定采用 LSTM 模型作为基础网络模型后,需要构建基本数据集:以过去 N 天的历史库存数据作为训练集,设置时间滑动窗口为 t,则每个维度每 t 天的数据可作为一个训练样本,而随后的一天数据则作为标签值,同时,为了保证参数训练方向的随机性,在选择训练样本时,我们采用随机选取样本的方式,而不是将单一维度的样本依次放入训练。LSTM 整体网络结构如下:



该结构基于 LSTM 网络模型主要有以下几个优化点:


  • 数据归一化


数据归一化是机器学习中的常见方法,在此进行归一化的主要原因是为了使得不同样本能训练同一组模型参数。具体针对这一问题,库存预估在不同维度下库存量级差距巨大,热门维度库存量可达到近千万,而部分维度则只有个位数的库存,而且同一维度下也可能存在库存水平随时间区间的变化而大幅浮动的情况。因此,在数据输入至 LSTM 网络前,需要对数据进行归一化。


我们分析了对数函数转换、min-max 标准化、z-score 标准化、最大值标准化等不同的归一化方法,发现最大值标准化在归一化效果和预测效果上都更加稳定。值得注意的是,相对于 min-max 方法在归一化时扣减训练数据最小值从而改变数据偏移量,直接采用最大值标准化能避免改变时序数据的相关性。最大值标准化方法具体可描述为:设一个维度可被划分为 M 个 RNN 样本,其中第 m 个样本为



对应 label 为



则归一化后的样本数据可表示为



其中



  • 维度聚类


正如库存预估业务特点中所描述,预估维度通常需要精确到站点、平台、城市、频道等维度。若对各维度采用相同参数的 LSTM 网络,模型则很难准确地描述各个维度;反之,如果每一个维度单独训练,样本数不够,模型将失去泛化性,且训练成本过大。


本文希望通过聚类的方法,选择波动趋势近似的维度组成同一类,进而训练相同的模型参数,因此,首先需计算 IAE 误差并完成层次聚类[3],组成所需数据集。


IAE(Integrated AbsoluteError) ,综合绝对误差,公式表示为:



t 为时间周期,表示某时刻两条库存曲线之间的误差,由于实际问题中库存值不连续,体现为离散的点,故该公式可表示为:



从几何角度分析,该误差公式可理解为两条库存曲线相交部分的面积大小,以此表示维度之间的“距离”。得到各维度两两之间的“距离”后,可利用该结果进行聚类,聚类过程可视为将库存曲线波动趋势相似的维度放入同一类。


下图展示了两个类的聚类效果:




可以明显看出,这两类间的各个维度曲线整体波动趋势差异明显,而同一类内的曲线波动趋势比较近似。因此,根据聚类结果,对不同类训练不同参数的 LSTM 模型能更好地描述各维度库存波动趋势,而且这也不需要占用过多的训练资源。


  • 节假日特征


正如我们所预见,广告库存跟日期特征有很强的相关性:如下图所示,寒暑假、法定节假日、周末等日期的流量明显上涨,广告库存也大幅提升。由此可得,在模型中加入节假日特征能有效提升预测正确度。



通过在 LSTM 模型外增加了一层全连接层,将 LSTM 预测的输出与节假日特征拼接。在设置节假日特征的方法上,我们通过观察上图流量波动的特征,大致将日期分为普通工作日、节假日前一天、节假日等多种类别。

实验结果

通过上述方案构建基于 LSTM 模型的库存预估方法后,我们需要对模型的准确性进行评估。本文的主要比较对象为 LSTM 模型单天预估结果和 A-ARIMA 模型预估结果,采用来自 2019 年 6、7、8、9 四个月,共 49 天的数据,包含了暑假期间及暑假前后,同时每星期的数据包含了工作日与周末,样本具有较好的代表性与随机性。评估指标采用加权偏差率,描述如下:



实验数据表明:在维度加权偏差率方面,LSTM 模型相较于 A-ARIMA 模型整体日均下降 0.72pp。而在全维度总库存预估上, LSTM 预测偏差率日均下降 1.48pp,效果更为明显。基于以上实验结果,我们可以判断基于 LSTM 的广告库存预估算法较 A-ARIMA 算法有更好的预测效果。

总结与展望

将 LSTM 模型运用于广告库存预估的背景下,通过比对 A-ARIMA 模型与 LSTM 模型的预测结果,实验数据表明 LSTM 模型在广告库存预估上具有更高的准确度。为了更好地适应业务特点,主要在以下几个方面进行优化:


  1. 数据归一化:将各个维度历史库存数据归一化,并根据归一化后的结果聚类,在节省训练资源的同时,尽可能地构建更具泛化性的模型;

  2. 预测日期精细化分多类标签:将普通工作日、普通节假日、节假日第一天等多类标签,embedding 后与 LSTM 模型输出连接,体现出节假日特征对库存波动的影响。


基于 LSTM 预估模型的模型,广告库存预估深度学习算法取得了较好的预估结果。在未来的工作中,会不断的优化和探索更加准确有效的方法,如构建更准确的节假日特征,更准确地捕捉到库存波动曲线的特征等,将不断提升广告库存预估结果的精确度。


2020-01-03 10:212504

评论 1 条评论

发布
用户头像
给广告算法团队点赞
2020-01-03 10:57
回复
没有更多了
发现更多内容

【kafka原理】Kafka生产者 (分区策略和ACK应答机制)

石臻臻的杂货铺

kafka Kafka实战 10月月更

Java 编程之标记语句

魏铁锤

10月月更

Baklib协作文档平台|企业如何进行文档协同?

Baklib

效率工具 企业 文档 协作 协作文档

面试官竟然问我订单ID是怎么生成的?难道不是MySQL自增主键?

一灯架构

Java 10月月更

c++11基础

雪芙花

c c++ 10月月更

进制转换、原码、反码、补码及位运算详解

夏志121

Java 后端 进制转换 10月月更

“程”风破浪的开发者|OpenHarmony设备开发之路【01】-helloword

坚果

OpenHarmony 10月月更 “程”风破浪的开发者

【Java深入学习】一个关于“锁”的程序-中

Geek_65222d

10月月更

2022年9月中国网约车领域月度观察

易观分析

网约车

牛客刷题系列之进阶版

雪芙花

c c++ 10月月更

TiDB5.0.0-rc性能测试

TiDB 社区干货传送门

版本测评 新版本/特性发布

企业是如何搭建帮助中心的?

Baklib

效率 产品 企业 帮助中心 产品文档

基于Jmeter压测IoT物联网平台的性能——实践类

阿里云AIoT

Java 物联网 存储 网络性能优化 测试技术

“程”风破浪的开发者|OpenHarmony短信登录及倒计时实现

坚果

OpenHarmony 10月月更 “程”风破浪的开发者

Web3.0 杂谈 -#007(54/100)

hackstoic

Web3.0

运算符号

魏铁锤

10月月更

立即升级 NGINX 以应对漏洞风险

NGINX开源社区

nginx 安全 漏洞

c++11面试宝典(final,delete,deault,explicit,lambda表达式)

雪芙花

c c++ 10月月更

一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推

一灯架构

Java 10月月更

“程”风破浪的开发者|程序员必备的这些学习方法与技能你能get到嘛?

浅羽技术

Java 学习方法 “程”风破浪的开发者

iphone14到手了?你还需要一个专职管家!

淋雨

iphone 备份

技术内幕 | StarRocks Pipeline 执行框架(下)

StarRocks

数据库

语法结构

魏铁锤

10月月更

Java基础(九)| ArrayList详解与应用

timerring

Java ArrayList 10月月更

长安链源码分析之网络模块 net-liquid(8)

长安链源码分析之网络模块 net-liquid(9)

长安链源码分析之网络模块 net-liquid(10)

图解Kafka中的数据采集和统计机制

石臻臻的杂货铺

kafka Kafka实战 10月月更

HTTP - HTTP/2 知识点

懒时小窝

HTTP http2

如何通过数字体验平台(DXP)更好的为客户提供客户服务

Baklib

知识管理 数字体验

MySQL索引底层为什么用B+树?看完这篇文章,轻松应对面试

一灯架构

Java 10月月更

基于LSTM模型的广告库存预估算法_架构_广告算法团队_InfoQ精选文章