﻿ 多种算法融合的产品销售预测模型应用
 计算机系统应用  2001, Vol. 29 Issue (9): 244-248 PDF

1. 中国科学院大学 计算机控制与工程学院, 北京 100049;
2. 中国科学院 沈阳计算技术研究所, 沈阳 110168;
3. 沈阳高精数控智能技术股份有限公司, 沈阳 110168

Application of Product Sales Forecast Model Based on Multiple Algorithm Fusion
ZHANG Lei-Dong1,2, WANG Song2, LI Dong-Mei2, ZHU Xiang-Ning2, JIAO Yan-Fei3
1. School of Computer and Control Engineering, University of Chinese Academy of Sciences, Beijing 100049, China;
2. Shenyang Institute of Computing Technology, Chinese Academy of Sciences, Shenyang 110168, China;
3. Shenyang Golding NC Technology Co. Ltd., Shenyang 110168, China
Abstract: Sales forecasting has always been a hot research topic and has great significance for all enterprises. In recent years, with the rise of deep learning, there are more and more models for sales forecasting, and the performance of single models is often not ideal. Therefore, there are more and more combinatorial models. In this study, we use Stacking strategy to support XGBoost, Support Vector Regression (SVR), GRU neural network as the basic model, then lightGBM as the final prediction model, with new features are merged. The advantages of several models are condensed, which greatly improves the prediction performance of the model, good enough to be more close to the real sales data, and provide a new prediction method for regression prediction.
Key words: sales forecast     stacking algorithm     ensemble learning     feature engineering     gradient boosting tree

1 引言

2 预测算法核心内容 2.1 预测算法框架

(1) 将整个数据集分为训练集和测试集.

(2) 对所有的特征进行Pearson相关系数计算, 筛选掉冗余的特征, 选择相关性的特征, 作为模型训练的特征向量.

(3) 将SVR、GRU、XGBoost作为Stacking的基础模型, 利用特征向量进行训练.

(4) 将历史信息、均值、价格变化、评价分析和Stacking第一层的输出以及原始的特征进行特征融合, 形成最终预测模型的输入.

(5) 将lightGBM作为Stacking算法的次级预测模型, 进行训练并且在测试集上进行预测, 得到结果.

 图 1 预测算法框架图

2.2 Stacking算法

Stacking算法简单理解就是几个简单的模型, 一般采用将它们进行K折交叉验证输出预测结果, 然后将每个模型输出的预测结果合并为新的特征, 并使用新的模型加以训练.

Stacking通常分为很多层, 每一层的输出作为下一层的输入. 但是伴随着层数的增多, 模型的复杂度也在增加, 训练起来也会慢很多. 所以通常采用两层结构. 在第一层时, 将K–1份数据作为训练集进行训练, 将剩下的一份用来预测. 这样K轮下来以后, 将K轮的预测结果和原始数据进行拼接就形成了新的训练集. 然后, 第二层的模型利用新的数据集进行训练. 最终预测, 输出结果. 如图2所示.

(1) 将处理好的训练集平均分为5份数据量大小相等的数据Di(i∈1, 2, 3, 4, 5);

(2) 在每一轮训练中, 对于每一训练模型, 例如SVR, 在4份数据上进行训练, 剩下一份用来预测得到Pi;

(3) 将第一层预测模型的输出Pi和原始的特征进行拼接, 得到最终的训练数据集D;

(4) 利用最终模型lightGBM在训练集D上进行训练;

(5) 最后在测试集上进行预测, 得到最终的预测结果Prediction.

 图 2 Stacking算法结构图

2.3 LightGBM算法

LigthGBM是Boosting集合模型中的新进成员, 由微软提供, 它和XGBoost一样是对GBDT的高效实现. LightGBM通过使用Gradient-based One-Side Sampling(GOSS)和Exclusive Feature Bundling (EFB)两种方法来解决特征选择的问题, 进而加速训练速度. 伪代码如算法1及算法2.

2.4 数据预处理

(1) 对于缺失值和由于促销引起的销量数据激增, 采用这个月销量的均值代替.

(2) 将标签特征利用one-hot编码转化为0或1的特征.

2.5 特征工程

2.5.1 特征选择

 ${\rho _{\left( {X,Y} \right)}} = \frac{{{\rm{cov}} \left( {X,Y} \right)}}{{{\sigma _X}{\sigma _Y}}}$ (1)

 ${\rm{cov}} \left( {X,Y} \right) = \sum\limits_{i = 1}^n {\left( {{X_i} - \bar X} \right)} \left( {{Y_i} - \bar Y} \right)$ (2)

 ${\sigma _X} = \sqrt {{{\sum\limits_{i = 1}^n {\left( {{X_i} - \bar X} \right)} }^2}}$ (3)
2.5.2 特征构造

(1) 按照一级类型、二级类型统计该类型产品月销量的均值.

(2) 提取当前月的前第一个月、前第二个月、前第三个月、前第四个月、前年该月的销量数据.

(3) 加入商品的价格变化.

(4) 商品的评价分析: 对评论数据进行分词, 然后构造情感词典, 计算每条评论的情感值, 最后累加每天的评论情感值.

3 实验与结果分析

3.1 评价指标

(1) RMSE均方根误差

 $RMSE\left( {X,h} \right) = \sqrt {\frac{1}{n}\sum\limits_{i = 1}^n {{{\left( {h\left( {{x_i}} \right) - {y_i}} \right)}^2}} }$ (4)

(2) MAE平均绝对误差

MAE是真实值与预测值的差值的平方然后求和平均. 计算公式如下:

 $MAE = \frac{1}{n}{\sum\limits_{i = 1}^n {\left( {h\left( {{x_i}} \right) - {y_i}} \right)} ^2}$ (5)

(3) MAPE平均绝对百分比误差

 $MAPE = \frac{{100\% }}{n}\sum\limits_{i = 1}^n {\left| {\frac{{h\left( {{x_i}} \right) - {y_i}}}{{{y_i}}}} \right|}$ (6)
3.2 特征选择

3.3 实验结果 3.3.1 模型参数设置

SVR模型涉及的核心参数主要有3个: 选用的核函数、惩罚因子以及核系数. 通过Grid Search实验验证最佳的参数见表3.

3.3.2 预测结果分析

 图 3 各个模型最终预测效果图

 图 4 特征融合之后预测结果对比图

4 总结

 [1] 郑琰, 黄兴, 肖玉杰. 基于时间序列的商品需求预测模型研究. 重庆理工大学学报(自然科学), 2019, 33(9): 217-222. [2] 顾涵. 支持向量回归在高频金融时间序列中的应用研究[硕士学位论文]. 南昌: 江西财经大学, 2019. [3] Fan ZP, Che YJ, Chen ZY. Product sales forecasting using online reviews and historical sales data: A method combining the Bass model and sentiment analysis. Journal of Business Research, 2017, 74: 90-100. DOI:10.1016/j.jbusres.2017.01.010 [4] 葛娜, 孙连英, 石晓达, 等. Prophet-LSTM组合模型的销售量预测研究. 计算机科学, 2019, 46(S1): 446-451. [5] 张彤, 徐晓钟, 王晓霞, 等. 基于改进LMD与GRU网络的短期燃气负荷预测. 计算机系统应用, 2018, 28(6): 29-37. DOI:10.15888/j.cnki.csa.006938 [6] 冯晨, 陈志德. 基于XGBoost和LSTM加权组合模型在销售预测的应用. 计算机系统应用, 2019, 28(10): 226-232. DOI:10.15888/j.cnki.csa.007091 [7] 盛杰, 刘岳, 尹成语. 基于多特征和Stacking算法的Android恶意软件检测方法. 计算机系统应用, 2018, 27(2): 197-201. DOI:10.15888/j.cnki.csa.006183 [8] 包志强, 胡啸天, 赵媛媛, 等. 基于熵权法的Stacking算法. 计算机工程与设计, 2019, 40(10): 2885-2890.