李 杰,王玉霞,赵旭东
(河北工业大学 经济管理学院,天津 300401)
目前,许多销量预测研究是用历史销量来预测未来销量,主要考虑销量本身历史数据的影响,较少考虑不同因素之间的相互影响。李俊等(2012)[1]将GM(1,1)模型、非线性三次指数平滑预测模型和二次回归预测模型相结合组成了组合预测模型,依据某企业前10个月的销量,预测后两个月的销量。Singh等(2014)[2]将人工神经网络和模糊时间序列相结合,确定历史时间序列的间隔期,将不同间隔期的时间序列分为不同组进行预测。Li等(2015)[3]建立了动态自适应的BP神经网络学习算法来预测四川省消费产品的总销售额,提高了预测的准确度。Chen等(2017)[4]基于径向基函数神经网络提出了一种进化算法,并利用该算法对电脑的销量进行预测。尽管也有销量预测研究考虑到了产品销售的影响因素,但在进行销量预测之前,并未对影响因素进行筛选,导致许多无关变量加入销量预测模型,降低了模型的准确度。王大溪等(2015)[5]通过问卷调查方法,找到了可能影响孔塞销售的主要影响因素,把所有可能的影响因素都带入了基于混沌果蝇支持向量机回归的产品销量预测模型中,导致模型的预测精度较低。
为此,本文提出一种基于Granger因果检验和XGBoost算法的电商企业商品销量预测方法。首先对Granger因果检验和XGBoost算法的基本原理进行了介绍,而后给出了销量预测算法的具体实现步骤,最后通过对2014年10月27日至2015年2月27日某电商企业一种生活用品的销量及其影响因素历史数据进行建模和预测,验证了该方法的有效性。
Granger因果检验是用于检验两个变量之间因果关系的一种常用方法,该方法于1969年由Granger提出,70年代Hendry和Richard等加以发展。该方法的一个重要概念是Granger原因。存在两个时间序列 Xt和Yt,若 Xt的滞后项在Yt的预测中有帮助,即利用Xt比不利用Xt可以更好的预测Yt,则称 Xt是Yt的Granger原因。
检验Xt是否为Yt的Granger原因,需构建不含滞后项X的受约束回归模型和含有滞后项X的无约束回归模型,分别如式(1)和式(2)所示:
其中,Xt表示待检验的Granger原因(外生变量),Yt表示待检验的Granger结果(内生变量),αi和βi分别表示Yt和Xt各阶滞后项的系数,α0表示常数项,εt表示残差。
对式(1)和式(2)进行估计,构建F统计量检验的联合假设H0:
如果在选定的显著性水平α上计算的F值大于临界Fα值,则拒绝零假设,即 Xt是Yt的Granger原因。
从上述Granger因果关系检验方法分析中可以看出,Granger因果关系检验方法的前提假设是Xt和Yt都是平稳(单整)序列,或者两序列协整。因此,本文在进行Granger因果关系检验之前,先对各指标序列进行了ADF检验,验证各序列的平稳性。各序列通过平稳性验证之后,再进行Granger因果关系检验。
2015年Chen等提出了XGBoost算法,算法全名eX-treme Gradient Boosting,该算法是在Gradient Boosting Decision Tree(GBDT)基础上发展起来的[6]。GBDT的算法流程与一般的Boosting算法类似,是一个迭代的过程,每一次迭代是为了减少上一次的残差[7]。相比于GBDT算法只利用了一阶导数的信息,XGBoost算法采用二阶泰勒公式展开损失函数,求得模型最优解的效率更高。
1.2.1 XGBoost算法原理
XGBoost算法是一种boosting算法,它的基分类器为CART决策树,最后的预测结果为K棵决策树的预测结果之和,反映在如式(4)所在的等式中。其中表示数据样本,̑(t)代表i样本在模型t次迭代后的预测结果,ft(xi)代表i样本在第t棵决策树的预测值:
利用二阶泰勒展开式将式(5)中的损失函数展开得到式(6)。其中
在第t次迭代后,得到一个不带有常数项的简单目标函数如式(7)所示:
在第t棵决策树中,存在一个映射函数Ij={i| q(xi)=j}能够把一个样本映射到某个叶子节点,所以目标函数可以从样本求和转化为叶子求和。通常正则化惩罚函数,T表示树中包含T个叶子,γ和λ表示正则化惩罚函数的两个系数。因此,可以将式(7)转化为式(8)的形式,式中 ft(xi)=wj。
在创建决策树时,一棵树的obj的值越小,该树的结构越好。也就是说,一个叶子节点分裂后的信息增益Gain越大,该树结构越好。Gain的计算如式(11)所示:
1.2.2 XGBoost算法流程
XGBoost算法流程如下:
(1)对所有特征的特征值分别进行排序,依次扫描所有样本,根据式(11)计算每个分裂点的信息增益。
(2)选择信息增益最大的分裂点进行分裂。
(3)当达到预先设定树的最大深度时停止分裂,转到步骤(4);否则,转到步骤(1)。
(4)按照自底向上的顺序进行剪枝,如果某个节点之后存在负的信息增益,则除去这个分裂。
(5)当达到预先设定的迭代次数t时停止,否则,转到步骤(1)。
在上述分析的基础上,给出销量预测算法的具体实现步骤:
(1)商品销量初始影响因素的选择。通过调查和访谈发现电商企业产品销量的可能影响因素包括:商品的浏览次数、流量、被加购次数、加购人次、收藏夹人次、拍下笔数、拍下金额、拍下件数、成交金额、成交笔数、成交件数、成交人次等24个影响因素。设n=24表示影响因素的个数,则初始影响因素集可表示为:
(2)剔除与商品销量无关的影响因素。对各影响因素和销量序列分别做Granger因果关系检验,删除无关影响因素,形成新的影响因素集:
(3)数据的预处理。剔除与商品销量无关的影响因素数据后,对数据进行预处理。在原始数据中,产品的销量及各影响因素的数值均按天给出。对实验数据分析中发现,各影响因素距离预测时间越近对预测结果的准确性影响越大。本文以周为单位,采用滑窗采样的方法,统计该窗口前1天、2天、3天、5天和7天各种影响因素数据的总值和均值,将得到的值作为新的特征加入到数据集。同时,考虑到产品销量具有时序性的特点,统计该窗口前1天、2天、3天、5天和7天产品销量的总值和均值以及该窗口前7天日销量中的最大值、最小值和标准差也作为特征加入到数据集。
(4)设置合适的XGBoost算法参数,训练XGBoost模型。分析该模型对于测试集的拟合误差,并和其他常用的算法模型相比较。
选取某电商企业中生活用品2014年10月27日至2015年12月27日时间段内产品日销量及24个可能影响因素的数据,如表1所示。由于篇幅所限,表1只展示了部分日期和影响因素的数据。需要特别说明的是,本文的销量特指非聚划算支付件数。
表1 生活用品日销量及可能影响因素数据
数据从2014年10月27日至2015年12月27日共包含427个样本,从表1商品日销量的走势来看,“双11”和“双12”的销量骤增,被认定为异常点,因此分别删除2014年和2015年“双11”和“双12”的4个样本点,剩余样本总数为423个。
本文使用EVIEWS6.0统计软件,对24个可能影响因素和销量的时间序列分别做ADF检验,以验证各序列的平稳性。在做ADF检验的过程中均采用修正的AIC准则判断滞后期,所得结果如表2所示。
通过上述ADF检验结果可知,在5%显著性水平下,24个影响因素和销量序列均通过了平稳性检验,可以直接进行Granger因果关系检验。在进行Granger因果关系检验时,通过建立VAR模型找到最优滞后阶数。Granger因果关系检验结果如表3所示。
从Granger因果关系检验结果可以看出,在5%的显著性水平下,被加购次数、加购人次、收藏夹人次、淘宝客引导浏览次数、淘宝客引导浏览人次、直通车引导浏览次数、直通车引导浏览人次不是销量的Granger原因,剩下的17个影响因素都是销量的Granger原因。因此,在进行销量预测时,剔除7个无关影响因素的数据。
在删除了“双11”“双12”和7个无关影响因素的数据之后,以周为单位,利用滑窗采样的方法对数据进行预处理。以周为单位滑窗采样,是因为要预测的是该产品一周中的总销量。统计该窗口前1天、2天、3天、5天和7天17种影响因素和产品销量的总值和均值,同时统计该窗口前7天日销量中的最大值、最小值和标准差,将这些统计数据作为销量预测的特征变量。将该窗口在这一周的产品销量总和作为标签值。经过这样的预处理后特征变量由最初的17个变为183个,样本数量由423变为60个。在滑窗采样过程中2015年12月21日至2015年12月27日产品销量的滑动窗口为1,2015年12月14日至2015年12月20日产品销量的滑动窗口为2,依此类推,2014年11月3日至2014年11月10日产品销量的滑动窗口为60。因此,数据从2014年10月27日至2015年12月27日的423个日样本数量变为了60个周样本数量。表4给出了预处理后部分滑窗和特征变量的数据。
表2 日销量及24个可能影响因素时间序列ADF检验结果
表3 Granger因果关系检验结果
表4 预处理后部分滑窗和特征变量的数据
表4中Watch指滑窗数,Label指标签值,Pi指浏览次数,sn指销量(非聚划算支付件数)。Pi_avg_1指该窗口前1天浏览次数的均值,Pi_sum_1指该窗口前1天浏览次数的总值,Pi_avg_2指该窗口前2天浏览次数的均值,Std_sn指该窗口前7天日销量的标准差。
本文选取2014年10月27日至2015年12月20日的数据作为训练集,2015年12月21日至2015年12月27日的数据作为测试集,即预处理后滑窗2~60的数据作为训练集,预处理后滑窗1的数据作为测试集。用训练集来拟合XGBoost模型,对2015年12月21日至2015年12月27日产品周销量进行预测,并将该模型的预测结果和常用GBDT、RF算法模型的预测结果进行比较,所得预测结果如表5所示。
表5 各算法模型预测精度比较
从表5的对比结果可以看出,无论是否进行Granger因果检验,XGBoost算法模型预测的相对误差都小于GBDT和RF算法。当进行Granger因果检验剔除无关影响因素后,各算法的相对误差都有所下降。在进行Granger因果检验,并用XGBoost算法模型拟合后,该预测的相对误差最小为2.5%,充分说明了该销量预测方法的有效性。
本文对电商企业商品销量预测问题进行了研究,在综合分析了产品销量时序特征和外部影响因素的基础上,提出了基于Granger因果检验与XGBoost算法的电商企业商品销量预测方法。该方法通过Granger因果分析剔除了无关的销量影响因素,在数据预处理中充分考虑了影响因素距离预测时间越近对预测结果准确性影响越大的特点,并将产品销量的时序特征也考虑在内。在数据预处理完成之后,用XGBoost模型进行拟合。该销售预测方法的应用表明,所提方法能够较好的解决电商企业商品销量预测的问题。同时,也可以考虑将该种销量预测方法推广到实体企业商品销量预测中去。