2. 福建省网络安全与密码技术重点实验室(福建师范大学) 福州 350007;
3. 福建省网络与信息安全行业技术开发基地, 福州 350007
2. Fujian Provincial Key Laboratory of Network Security and Cryptology (Fujian Normal University), Fuzhou 350007, China;
3. Fujian Provincial Network and Information Security Technology Development Base, Fuzhou 350007, China
随着经济全球化的发展, 企业面临着生产成本不断增加, 市场销售疲软等考验. 企业要想赢得市场竞争就需要对市场具有敏锐的嗅觉以及精准的决策, 从而控制成本, 降低损耗. 这使得企业借助精准高效的销售预测, 进而做出可靠的决策, 成为现代企业成功的重要手段[1]. 而对时变数据建模是数据科学中的一个基本问题, 应用于医学, 金融, 经济学, 气象学和客户支持中心操作等各个领域. 使用在时间序列数据上训练的模型来预测未来值是一个值得充分研究的领域, 其中应用了诸如ARIMA之类的传统线性统计模型[2]. 最近较为流行的是RNN模型的应用, 特别是在处理时间序列预测的问题上, LSTM模型的选择记忆功能有着独特的优势[3,4]. Xgboost是“极端梯度上升”的简称, 该算法既具有线性模型求解器和树学习算法的能力, 同时也有着可以在单机上并行计算的能力, 能够自动利用CPU的多线程进行并行计算, 同时精度也得到提升, 相比于其他提升树方法更为优越[5]. 目前在商品销售预测上的方法很多, 如果只用传统的线性回归方法来预测, 就忽视了非线性因素的影响, 近年来, 随着深度学习的不断研究与发展, 深度学习的模型被用于时间序列的预测, 例如循环神经网络(RNN)将时序的概念引入到网络结构中, 但RNN模型也有着几点关键性的不足, 梯度的消失和梯度爆炸问题, 长期记忆能力不足等问题, 进而提出了长短期记忆网络模型[6], 基于此, 可以采用不同层次的模型进行组合来提高模型的优越性和泛化性[7].
本文针对商品销售的预测进行研究, 销售预测是一个分析和报告信息的过程, 它能够为管理者提供信息分析和市场研究数据, 在此基础上进行经营决策, 用来解决一些特定的市场问题, 在当代市场竞争中发挥着重要的作用. 中国市场野蛮生长的红利期已经过去, 经济已从速度向质量转变, 企业竞争回归到成本、效率的问题上来. 这更需要利用数据以实现精细化运营, 然而销售预测需以具体产品为预测对象, 在实际场景中更存在着诸多重要的影响销售的因素. 因此, 为提高预测精度, 本文将销售策略量, 天气, 节假日等加入特征变量中, 建立包含相关预测特征条件的多变量模型, 结合ARIMA对平稳序列的较好的预测能力以及LSTM对序列非线性部分的出色拟合性能, 采用基于XGBoost和LSTM的加权组合模型进行预测, 提高预测的精度.
1 相关理论 1.1 ARIMA模型ARMA模型, 即差分自回归移动平均模型, 如下结构可以简记为ARMA(p, q):
$\begin{split} {x_t} = &{\alpha _0} + {\alpha _1}{x_{t - 1}} + {\alpha _2}{x_{t - 2}} + \cdots + {\alpha _p}{x_{t - p}} \\ & + {\varepsilon _t} + {\beta _1}{\varepsilon _{t - 2}} + \cdots + {\beta _q}{\varepsilon _{t - q}} \end{split} $ | (1) |
当
${x_t} = {\alpha _0} + {\alpha _1}{x_{t - 1}} + {\alpha _2}{x_{t - 2}} + \cdots + {\alpha _p}{x_{t - p}} + {\varepsilon _t}$ | (2) |
当
${x_t} = \mu t + {\varepsilon _t} + {\beta _1}{\varepsilon _{t - 1}} + \cdots + {\beta _q}{\varepsilon _{t - q}}$ | (3) |
本文中p, q的取值原则是采用最小信息准则法. 通过该方法来识别平稳和可逆的ARMA过程[8]. 求解p, q在m以内的BIC矩阵, 寻找矩阵中BIC信息量最小的位置, 从而确定合适的p, q的值, 得到ARIMA (p, n, q).
1.2 XGBoost模型XGBoost是一种在梯度提升决策树算法的基础上进行改进而来的集成学习算法[9–11]. 其预测原理如下:
预测值为各样本与其权值乘积的累加和, 即:
${\hat y_i} = \sum\nolimits_j {{w_j}{x_{ij}}} $ | (4) |
其中, 为j样本数,
$\left\{\begin{aligned} &\hat y_i^{(0)} = 0 \\ &\hat y_i^{(t)} = \sum\limits_{k = 1}^t {{f_k}({x_i})} = \hat y_i^{(t - 1)} + {f_t}({x_i}) \end{aligned}\right. $ | (5) |
其中,
$\Omega ({f_t}) = \gamma T + \frac{1}{2}\lambda \sum\limits_{j = 1}^T {w_j^2} $ | (6) |
其中,
$ob{j^{(t)}} = \sum\limits_{i = 1}^n {l\left({y_i},\hat y_i^{(t)} + {f_t}({x_i})\right)} + \Omega ({f_t}) + constant$ | (7) |
其中,
LSTM Networks是递归神经网络(RNNs)的一种. 后经过不断改进, 在处理和预测时间序列相关的数据时会比一般的RNNs表现的更好[12].
对于原始的
${M_j} = ({T_{1j}},{T_{2j}}, \cdots ,{T_{nj}}),j = (1,2 \cdots ,m)$ | (8) |
对于多变量的数据需要转化为监督学习的序列, 即新的数据表示为如下:
$\left\{\begin{aligned} & {M'_j} = ({M_{ij - k}}, \cdots ,{M_{ij - 1}},{M_{ij}}) \\ & i = 1,2 \cdots ,n,\;\;j = 1,2, \cdots ,n \end{aligned} \right.$ | (9) |
LSTM的模型中采用门的结构来解决了长期依赖问题[13], 其具体的神经网络的细胞结构如图1所示.
图1中每个Sigmoid层产生的数字在0和1的范围内. 每个LSTM通过3种类型的门[14]来控制每个单元的状态: 遗忘门决定了上一时刻的单元状态
${i_t} = \sigma ({W_{xi}}{x_t} + {W_{hi}}{h_{t - 1}} + {b_i})$ | (10) |
${f_t} = \sigma ({W_{xf}}{x_t} + {W_{hf}}{h_{t - 1}} + {b_f})$ | (11) |
${o_t} = \sigma ({W_{xo}}x{}_t + {W_{hf}}{h_{t - 1}} + {b_o})$ | (12) |
${\tilde c_t} = \tanh ({W_{xc}}{x_t} + {W_{hc}}{h_{t - 1}} + {b_c})$ | (13) |
${c_t} = {f_t} \circ {c_{t - 1}} + {i_t} \circ {\tilde c_t}$ | (14) |
${h_t} = \tanh ({o_t} \circ {c_t})$ | (15) |
这里
对于实际销售数据中, 数据存在周期性, 季节性的变化, 通常为非平稳的时间序列. 通过差分平稳化后, 虽然在ARIMA模型中表现的较好, 但却丢失了周期性和季节性特征, 并且平稳的数据无法表现出现实销售增量变化, ARIMA模型只依靠内生变量, 模型过于简单, 无法捕捉序列中的非线性因素. 神经网络算法在处理非线性问题具有独特的优势, LSTM模型的加入可以解决以下几个问题, 首先是销售数据的连续性, 通过特殊的数据输入结构使得模型在预测时结合了历史的状态, 其次对比与传统的RNNs解决了输入变长的问题, 再者实际销量的影响因素较多, 而节假日, 策略量的变化会带来销售量的异常变化, 通过多变量的模型可以提升拟合的精度. 此时特征较多, 需要经过处理再放入神经网络的模型中, 本文中使用XGBoost算法进行特征的抓取, 充分利用多维变量中的潜在的特征. 在ARIMA, XGBoost, LST模型3种模型预测的传递过程会出现误差累计的问题, 对此本文对3种模型的预测测结果进行加权处理来减小误差累计对预测结果精度的影响. 具体实验过程如图2所示.
对于收集的原始销售序列
$\left\{\begin{aligned} {T_{n + 1}}& = {T_{n + 1}}(m) + {T_{n + 1}}(k) = \Phi (A(m)) + \Phi (A(k)) \\ m + k& = n \end{aligned} \right.$ | (16) |
其中,
将由ARIAM模型所得的预测序列
$\left\{\begin{aligned} {T_{n + 2}} &= {T_{n + 2}}(m) + {T_{n + 2}}(k) = \Theta ({T_{n + 1}}(m)) + \Theta ({T_{n + 1}}(k)),\\m + k& = n \\ \end{aligned} \right.$ | (17) |
其中,
此时再将新的销售预测序列
${T_{n + 3}} = \psi (M')$ | (18) |
其中,
最后结合3个模型的商品销量预测量
$\left\{\begin{array}{l} T = {d_1}{T_{n + 1}}(k) + {d_2}{T_{n + 2}}(k) + {d_3}{T_{n + 3}}(k) \\ {d_1} + {d_2} + {d_3} = 1 \end{array} \right.$ | (19) |
其中,
步骤1. ARIAM预测: 单变量预测实验, 取出原数据中的实际销售数据列
步骤2. XGBoost预测. 将
步骤3. 多维时间序列预处理. 将
步骤4. LSTM神经网搭建. LSTM模型中, 搭建2个隐藏层, 第一隐藏层有128个神经元, 第二隐藏层有256个神经元, 输出层为1维的列向量, 即销售预测值, 输入变量是一个时间步(t–1)的特征, 损失函数采用Mean Absolute Error (MAE), 优化算法采用Adam, 激活函数采用Sigmoid, 模型采用500个epochs并且每个batch的大小为15.
步骤5. 数据预测. 经过多次的实验, 发现当
$T = 0.2 \times {T_{n + 1}} + 0.4 \times {T_{n + 2}} + 0.4 \times {T_{n + 3}}$ | (20) |
其中, T为最终的销量预测值,
实验所使用计算机的配置如下: 处理器为英特尔酷睿Duo CPU i5-6500, CPU频率为2.20 GHz; 内存为8 GB; 操作系统为Windows 10 (64位); 基于Python 3.6编程; 集成开发环境为PyCharm Community Edition 2016. LSTM的实验使用的是keras深度学习框架.
3.2 实验数据以某地的从2018年4月2号到11月4号的某商品销量数据为研究对象, 数据集中主要包含7个特征, 分别是节假日因素, 气温, 主要策略规格的策略量以及实订量等, 如表1所示.
对于节假日因素, 本文采用虚拟变量来进行量化处理, 记作
在LSTM模型中, n_1为series_to_supervised函数中设置的滞后观察数为1, 即使用上一时刻的销售量来预测当前时刻的销售值, 设置两个隐藏层, 第一层的神经元个数设为128, 第二层的神经元个数设置为256, dropout随机删除一些隐层神经元, 通过不断的调整这两个参数来解决预测过程中的过拟合的问题. 具体参数设置见表2.
在XGBoost模型中, subsimple为训练的实例样本占整体实例样本的比例. max-depth为每棵树的最大深度. booster为设置需要使用的上升模型. objective定义学习任务及相应的学习目标, 本文选的目标函数为“reg: linear”-线性回归. 具体参数设置见表3.
3.4 实验结果及分析
为了更好的体现模型的优越性和实用性, 本文主要采用两个指标来进行模型的评估, 第一个是均方根误差(Root Mean Square Error,RMSE), 以及一个平均准确率(Mean Accuracy, MA), 定义如下:
$RMSE = \frac{1}{N}\sqrt {\sum\limits_{i = 1}^N {{{\left({y_i} - {{\hat y}_i}\right)}^2}} } $ | (20) |
$MA = \frac{1}{N}\left(1 - \frac{{\left| {{{\hat y}_i} - {y_i}} \right|}}{{{{\hat y}_i}}}\right)$ | (21) |
使用四种模型分别预测出后13周的销售值, 导出组合模型的预测值, 图3为组合模型预测值和实际销售值的对比, 销量变化的趋势得到较好的拟合, 预测平均准确率为0.968, 预测误差很好的控制在了0.05以内, 预测相对准确.
图4反映的是单个模型及组合在每周的预测的精度对比, 从图中可以看出, 不同模型预测时的表现的具有一定的差异性, 也存在个别异常时间点在单个模型预测中效果不佳. 首先对比3个模型的预测情况, ARIMA模型预测效果是较弱的, 对于波动的灵敏度较低, XGBoost和LSTM预测效果相对接近, 因此本文主要采用简单平均法来分配权重. 对比每周的预测结果, LSTM比XGBoost模型在预测精度表现较好, 但稳定性相对较差, 因此在分配权重时既要保留XGBoost模型预测稳定的特点, 同时也能提高模型的精度, 因此对于这两种方法赋予相同的权值. 对于数据内生变量的影响通过分配ARIAM模型相对较小的比重进行模型的预测值的调整. 基于该想法进行预测结果的加权分析, 通过计算不同比重下预测结果的平均精度和RMSE的值, 发现在XGBoost和LSTM所占都为0.4时, ARIMA占0.2时, 组合模型整体预测效果表现最佳, 对于非线性部分拟合的效果明显的体现除了加权组合的优势, 对比单个模型出现准确率在0.8附近的异常点, 组合模型的预测准确率都在0.9以上, 对比单独模型预测良好的部分, 组合模型保持了良好的预测精度, 预测结果的精度对比单一模型有很大的提高, 对于其他特征(策略量, 温度, 节假日, 日期)实行了一次复制, 即这些变量会在每个模型行的训练中出现两次, 而结果证明训练集误差几乎一致, 但是验证集误差更小, 表明通过特征的重复训练, 能够减小组合模型的过拟合程度, 模型的泛化性得以提升, 预测效果更佳.
观察不同模型的指标数值, 由导出的预测值和实际值求解出各个预测模型的RMSE指标值和MA指标值. 通过对比不模型的RMSE和MA的值, 来评估各个模型的整体的预测效果. 通过表4不同模型参数的对比, 组合模型的平均预测值达到了96.84%的水平, 相比于ARIAM预测提高了3.28%, 相比于XGBoost的预测提高了1.99%, 相比于LSTM模型提高了2.28%, 综上所述, 组合模型在商品销售的预测中展现了优于其他单一模型的预测效果, 通过加权组合提高了模型的泛化性和有效性.
研究主要策略量对于模型的影响, 在本文的实验中, 结合了主要规格的策略实订量这一特征值, 而在实验前通过观察不难发现, 这一主要策略量跟销售序列有着较为紧密的联系, 首先策略量序列总是小于对应的销售值, 其次, 通过数据可视化可以发现, 当销售增大时, 策略量也增大, 销售量减少时, 策略量也明显的减少, 在此基础上检验策略量的实订量的有无对预测的影响, 通过设计对比实验来验证. 实验结果如表5所示, 在加入了策略量后, 对比于未加入策略量实订量的实验结果相比, 预测的准确率提高了4.05%, RMSE降低了0.64, 说明在其他条件不变的情况下, 策略量对于销售预测的影响较为显著, 可以通过加入该特征来辅助预测.
4 结论与展望
本文提出的基于XGBoost和LSTM加权多变量的加权组合预测模型, 用来解决商品销售的预测, 通过加入天气, 主策略量实订量, 节假日, 日期(年月日)诸多因素来辅助预测, 提高预测的准确率, 提高模型的有效性, ARIMA在处理线性模型效果较好, LSTM神经网络可以通过学习来拟合非线性问题, XGBoost模型则可以挖掘多维变量中不同维度的属性, 通过不同层面的模型的组合, 大大的提高了模型的泛化能力, 不仅针对商品销售的预测, 还可以应用于其他相关的多变量时间序列的预测领域, 提高预测的精度, 解决不同的实际问题. 但在对于该模型中的神经网络来说, 过多的属性存在过拟合的风险, 因此模型还可以在该方面优化.
[1] |
吴鹏. 神经网络在卷烟销售量预测的应用研究. 计算机仿真, 2012, 29(3): 227-230. DOI:10.3969/j.issn.1006-9348.2012.03.056 |
[2] |
Zhang GP. Time series forecasting using a hybrid ARIMA and neural network model. Neurocomputing, 2003, 50: 159-175. DOI:10.1016/S0925-2312(01)00702-0 |
[3] |
姚小强, 侯志森. 基于树结构长短期记忆神经网络的金融时间序列预测. 计算机应用, 2018, 38(11): 3336-3341. DOI:10.11772/j.issn.1001-9081.2018040742 |
[4] |
Fischer T, Krauss C. Deep learning with long short-term memory networks for financial market predictions. European Journal of Operational Research, 2017, 270(2): 654-669. |
[5] |
赵一安. 基于机器学习Xgboost模型解决商店商品销量预测的问题. 通讯世界, 2018(11): 250-252. DOI:10.3969/j.issn.1006-4222.2018.11.163 |
[6] |
Hochreiter S, Schmidhuber J. Long short-term memory. Neural Computation, 1997, 9(8): 1735-1780. DOI:10.1162/neco.1997.9.8.1735 |
[7] |
李俊, 何刚. 基于组合预测的商品销售量预测方法. 统计与决策, 2012(8): 28-31. |
[8] |
吕忠伟. 单变量时间序列模型识别方法的实证研究. 统计与信息论坛, 2006, 21(3): 27-30. DOI:10.3969/j.issn.1007-3116.2006.03.006 |
[9] |
Chen TQ, Guestrin C. XGBoost: A scalable tree boosting system. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. San Francisco, CA, USA. 2016. 785–794.
|
[10] |
周鹏. 基于CNN-XGBoost的PTA平均粒径动态软测量模型. 信息技术与网络安全, 2018, 37(9): 61-64. |
[11] |
贾锐军, 冉祥来, 吴俊霖, 等. 基于XGBoost算法的机场旅客流量预测. 民航学报, 2018, 2(6): 34-37, 33. DOI:10.3969/j.issn.2096-4994.2018.06.009 |
[12] |
于家斌, 尚方方, 王小艺, 等. 基于遗传算法改进的一阶滞后滤波和长短期记忆网络的蓝藻水华预测方法. 计算机应用, 2018, 38(7): 2119-2123, 2135. DOI:10.11772/j.issn.1001-9081.2017122959 |
[13] |
Pascanu R, Mikolov T, Bengio Y. On the difficulty of training recurrent neural networks. eprint arXiv: 1211.5063, 2012.
|
[14] |
Siama-Namini S, Namin AS. Forecasting economics and financial time series: ARIMA vs. eprint arXiv: 1803.06386, 2018.
|