干货 | 结构化多元时序模型在携程业务量上的预测应用

作者简介

Yiwen,携程数据分析师,专注用户增长、因果推断、数据科学等领域。

团队热招岗位:高级数仓工程师高级数据分析师数据运营专员

本文主要介绍SCNN模型及其代码的具体实现,以及如何将其应用在预测业务量上的实际操作过程,旨在面对一些拥有复杂时空结构的多元变量数据时,能更准确地进行预测。首先对模型原理进行简要阐释,随后展示代码逻辑,最后介绍在具体业务场景上的实践应用。

  • 一、背景

  • 二、现有方法及潜在问题

  • 三、模型介绍

  • 3.1 多元序列生成过程

  • 3.2 结构分解

  • 3.3 结构预测

  • 3.4 结构融合

  • 3.5 损失函数&残差项处理

  • 四、模型应用与代码实现

  • 4.1 代码实现

  • 4.2 最佳模型选取

  • 4.3 模型参数

  • 4.4 模型对比

  • 五、业务场景实践

  • 5.1 数据选取&模型训练

  • 5.2 代码实现&结果解读

  • 5.3 落地应用&未来改进

  • 六、方法拓展

  • 七、总结

一、背景

多元时间序列(MTS)预测一直是业务中的一个重要问题,科学地预测下单量或用户数能够协助财务制定预算、协助客服安排人员、帮助业务方更好地评估某个活动上线的效果。在预定类业务,例如电商平台、OTA行业等,一段时间内的下单人数或是订单量背后其实蕴藏着一定的时间规律或者某种特定的时空结构,也就是其本身近似于一个有着较复杂结构的时间序列。如何对未来一定时间内的下单用户或是业务量进行预测,其核心问题就是如何有效地对这类复杂的时空结构建模,最大程度地模拟出数据背后的结构特征,进而得到对于未来有效的预测。

本文主要将介绍SCNN模型及其代码的具体实现,以及如何将其应用在预测业务量上的实际操作过程,旨在面对一些拥有复杂时空结构的多元变量数据时能更准确地进行预测。下文将首先对模型原理进行简要阐释,随后展示代码逻辑,最后介绍在具体业务场景上的实践应用。

二、现有方法及潜在问题

目前针对时序数据的预测一般是通过同比或者环比的方式加上业务方自己对业务增长的理解进行,或是使用ARIMA等较简单的时序模型进行预测,并没有使用非常贴合数据结构规律的模型。因此较难对一些复杂的时序数据有较精准科学的刻画。

之前介绍过的BSTS结构模型也是一种针对结构化时序数据的模型,能够拆解出数据背后的结构因子。但是因为融入了贝叶斯的思想,考虑的都是参数的分布形式,最终给出的预测结果也都是包含置信区间的“区间估计”,不能满足业务方想要一个“具体预测值”的需求。且BSTS模型普遍情况下适合单维变量的预测情况,不能很好地捕捉到不同变量之间的相关性。而实际上,大多数的变量都会受到外界各种其他变量的影响,因此使用多元时序的预测模型是一个更好地选择。

同时,为了满足业务方想要一个更具体的预测结果,我们需要一类“点估计”的预测模型。结合上述两点要求,SCNN模型是一个不错的选择。下文中我们将详细介绍这一模型的思想原理以及其具体使用的场景和方法。

三、模型介绍

结构化时间序列数据在日常生活中并不少见,尤其像携程这样的OTA行业,平台的下单情况其实就具有一定时间规律,例如周末往往是一周内的下单高峰期;节假日是一年内的下单高峰期等等。

SCNN模型(Structured Components-based Neural Network)全称为“基于结构化组件的神经网络模型”,正如其名,它的主要特点体现在:(1)将数据分解为多个结构;(2)适用于多元序列数据;(3)应用了神经网络的建模思想。

在时间序列预测中,基于分解的建模思路也并不少见,常见地,将序列分为周期项;季节项等等。SCNN模型也类似这样的思路:将时序数据分为4个模块:长周期项(long-term);短周期项(short-term);季节性项(seasonal-component)以及序列间相关性项(co-evolving component),随后对各个结构模块进行解耦再分别建模,分别预测;最终将结果通过卷积方式融合在一起,进而输出对未来数据的预测。多元时间序列可以表示为一簇{ Yn,t}n∈N,t∈T,其中{ Yn,t}表示在t时间的第n个变量的数值。那基于现有数据,对未来序列的预测即可表示为如下概率公式:

5b854d009c39941712cdbe17cbfddc44.png

简答来说,SCNN模型的主要思想就是将一个多元时序数据分解成4个模块,每个模块可以从不同的角度提供数据信息,以此让模型能够更好地“学习”到原序列内在的结构规律,并更好地作出对未来的预测。

a44cd5296c3dba1facd9f863f2df7f20.png

图3-1展示了某一个时序数据通过SCNN拆解后得到的4个模块,最上方的蓝线表示原有的数据,下方的四种曲线分别表示一种结构。可以看出一个表面有着某种规律的数据背后其实可以细分拆解出多个不同的结构模块。

3.1 多元序列生成过程

基于上述的分解思想,原始的序列数据被有序地拆分为了4个模块,分别是长周期项、季节项、短周期项以及序列间相关性项。具体过程可以表示为以下的公式:

73edf180f8d57c4d6802540c615e6fdc.png

其中,6d93ae1514fc84b7e0588673769bc43a.png表示原始的序列数据;28cbb2e8554b6594dc4f933b18eb508e.png表示经过一层层分解之后的数据。相应的ec9c08a0e79ae562edff0882519a05e9.png表示针对于long-term;short-term;seasonal-term;co-evolving-term状态下的均值和标准差;最后的Rn,t 表示原数据经过4层分解后的剩余项。

更具象地,可以用“交通密度数据“来模拟这一过程,不同的模块可以反映出影响交通数据的不同方面:长周期项能够体现一个城市的交通总体趋势,例如人口的增长导致的拥堵或整个城市经济发展导致的交通变化,是一个较长时间范围内的影响;季节性项体现在某固定周期内的交通变化,例如每天上下班的高峰时段会带来交通的拥堵或是周末带来的拥堵;短周期项则能够捕捉由一些突发事件导致的短暂瞬时变化,例如突发的交通事故或是突然的恶劣天气等导致短时间内的交通变化;序列间相关性项则反应不同交通道路之间的相互影响程度,例如突然的交通事故可能会加大邻近道路的拥堵情况;最终的剩余项(残差项)则会保留一些随机效应或是系统误差等等。

需要注意的是,不同项之间会存在互相流动的情况,例如突发的交通事故如果一直持续,可能会发展成“短周期项”,如果持续的时间更长,则可能会转移成长周期项,这种流动性就要求模型能够更加灵活,从而准确地把握每一个结构的流动情况。

3.2 结构分解

本节将介绍如何对4个模块进行分解建模以及预测:

1)长周期项:如前文所示,长周期反映的是序列数据在较长时间范围内的变化。因此选择构建一个较大的滑动窗口,取每个窗口内的均值与标准差作为长周期项的两个参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值