基于卷积神经网络的在线产品销量预测分析研究
2019-03-29荣飞琼郭梦飞
荣飞琼,郭梦飞
(兰州财经大学 信息工程学院,甘肃 兰州 730020)
在激烈的市场竞争环境中,准确的产品销量预测对于企业决策者做出合理决策有着重要的意义。近年来电子商务的发展规模和潜力有目共睹,如何针对网络产品销售进行有效、准确的市场销量预测是电子商务发展的一个重要课题。
一、文献回顾与评述
目前,关于产品销量预测的研究成果比较丰富,采用的研究方法各不相同。毕建涛,魏红芹利用主成分分析方法和粒子群优化算法对BP神经网络从样本质量和初始权值两个方面进行了改进[1];蒋兴恒和朱素蓉采用改进BP神经网络Levenberg-Marquardt算法,建立了卷烟销量神经网络预测模型[2]。采用时间序列预测方法的研究成果也比较常见,如洪鹏和余世明基于时间序列分析,采用RBF神经网络对产品销量进行预测,并对预测模型进行了优化[3];王建伟根据产品销售共性提取出产品聚类簇,从而建立了基于销售数据的产品重分类时间序列销量预测模型[4]。也有学者采用了支持向量机预测法,如武牧、林慧苹等以具体烟草企业的卷烟销量为研究对象,提出了基于支持向量机的卷烟销量预测混合方法SHPM[5]。以上文献的研究方法各有优势,但也存在不少弊端:第一,在线产品数据样本往往具有多样化特征,而大部分模型不具备多样化数据处理能力;第二,随着在线产品销售规模越来越大,由此产生的海量销售数据既是销量预测的基本依据,但同时也反映出传统预测方法在处理大规模数据方面能力不足的缺陷。其中毕建涛、蒋兴恒的两篇文献采用的是浅层神经网络,在大数据处理方面具有优势,但是预测精度有待提高。
刘晶、和述群及朱清香等在充分考虑涉农电商销售数据特点的基础上,建立了基于深度学习算法的皇冠模型(ICM),并运用此模型实现了线上农产品销量的分类预测[6]。深度学习算法在在线产品销量预测方面有其独到的优势。首先,深度学习是在BP神经网络的基础上改进了训练算法,梯度消失问题得到有效解决,使训练的有效时间更长。其次,在线产品销量预测需要高泛化性的模型支撑,具备高复杂度容量(capacity)的深度学习模型在大数据环境下具有较好泛化性。第三,相比一般模型,深度学习能在海量数据中提取到更多、更有效的信息。最后,深度学习具备逐层构建的特征,能在现有数据中提取到更高层次的特征,并将相互作用的影响因子分解成相互独立的且更为有效的因子,提高了模型预测精度。基于以上优势,本文旨在建立一套较为完善的在线产品销量影响因素指标体系,并运用深度学习算法构建全类在线产品销量预测模型。由于基于深度学习算法的在线产品销量预测模型通常会进行产品分类,根据某一类产品的特征进行模型设计。这样的模型适应性差,一旦产品类型发生变化,就必须对影响因素指标和模型进行重新设计。因此,本文除了对模型预测精度及泛化能力进行评估以外,还要重点评估模型的适应能力。
二、深度学习的理论优势
卷积神经网络是深度学习中的一种有效结构。深度学习是一种包含多个隐含层感知器的深度学习结构,它非常善于提取和计算具有复杂结构对象或问题的特征值,寻找潜在的复杂规则而无需破坏对象或问题的有用结构信息。考虑到神经网络浅层结构函数表示能力方面的局限性,深度网络多层非线性映射的深层结构,不仅可以实现复杂函数的有效逼近,也可以通过逐层学习算法获取输入数据的主要驱动变量。这些都是深度学习理论优势的体现。
(一)分布式表示
分布式表示是机器学习和神经网络研究中的一个基础性概念。它的出现对于解决“维度灾难”和局部泛化性的缺陷有很大帮助,它也是深度学习理论比传统机器学习算法具有优势的一个重要原因。分布式表示是一种紧凑的编码方式,这对于机器学习意义重大。它不仅可以降低运算量,而且能有效使用样本数据,从而起到避免过度拟合现象发生的作用。
图1 分布式表示区域划分
此外,对于同样的模型结构,分布式表示的紧凑程度与其他局部表示方法呈指数倍关系。图1说明的是单一决策树可以对输入空间进行线性划分,而划分出的区域(后称之为子区域)的数量等于参数的个数,也就是决策树叶子的数量;而多个树组合(即随机森林)能够划分的区域的数量与“树”的数量是指数倍关系,即为随机森林中参数总数的指数倍。那么,每一个子区域都对应于随机森林中任意树的任意一片叶子。由此可见,以上算法构建的分布式表示,所需参数数目和样本数量明显小于子区域数量,这也是能够避免数据泛化的主要原因。
(二)深度结构的优势
深度结构的学习算法能够对函数进行有效表达,其学习进程能够学习到一些其他算法不能有效学习的函数。这是深度学习的一大理论优势,也是其他浅层结构,如SVM、随机森林和BP算法等的潜在局限性。
所谓函数的有效表达,是指函数的表述具有紧凑性,即当模型中需要用来学习参数的自由度较低时,该模型表达是紧凑的。对于样本数量有限且外来先验知识缺乏的情况下,目标函数的紧凑表述会产生较好的泛化性。更准确的说,一个能被深度为k的结构表达的函数,在k-1深度下所需的计算单元是呈指数级增长的。这是因为一个学习结构能够负担的计算元素的数量取决于能够用来学习该结构参数的样本数量。当使用层次较浅的结构来描述函数时,必然会造成泛化性差的结果。这里需要说明的是,深度结构对于复杂函数的紧凑表示,在三个方面体现出优势:第一,能有效利用样本数据;第二,计算单元的数目很少;第三,需要的外来先验知识很少[7-8]。
(三)无监督预训练(Unsupervised Pre-training)
现有的深度学习的标准训练模式倾向于将参数置于一个泛化性比较差的参数空间。这种方法在实验训练过程中经常会用到。基于这种思想,在2006年出现了深度信念网络(DBN)和堆栈式自编码器(SAE)方法,它们是深度学习训练策略的一个有效突破。DBN和SAE都使用了相似的算法策略,即在贪婪式逐层无监督预训练之后,对深度结构进行一次基于梯度优化算法的有监督微调。这是由于每一层的无监督训练都能够学习到输入特征中主要因子的非线性映射关系,而无监督预训练就等于为有监督训练条件下的深度结构微调设置了一个初始阶段。
从本质上来说,无监督预训练是一种不常见的正则形式。它能最小化方差,并引入偏置,从而促使深度学习进程进入到一个对无监督训练有用的参数空间中。此外,在高度非凸的深度学习结构中,也可以定义一个特殊的初始化点,这样做能够增强参数约束。这是因为该初始化点能够在成本函数中明确哪些最小值点(在大量可能的最小值点之外)是可以被接受、允许的[9]。
三、数据来源及影响因素评价指标体系构建
(一)构建影响因素指标体系
由于在线产品交易模式与传统交易模式有很大区别,因此在线产品销量的影响因素相较于线下产品更为复杂。另外,本文旨在构建一个全类在线产品销量预测模型,所以在影响因素指标选择上就不能太过突出某类产品的特征,要综合考虑大部分产品的共有特征,以保证模型的可靠性和适应性。因此,本文从产品属性、商家属性、买家属性、同行业竞争者属性及产品的主要营销渠道五个方面来选择销量影响因素指标。
1. 产品属性
产品本身的特征是影响销售量的主要因素,本文最终确定的产品属性指标有如下几个:价格(I1)、好评率(I2)、质量等级(I3)、收藏量(I4)、累计评论量(I5)。其中,除“质量等级”以外的指标都可以从产品隶属的淘宝或天猫平台店铺页面上直接获取样本数据,而“质量等级”指标的具体构成方法见表1。
2. 商家属性
本文通过经营时间(I6)、店铺等级(I7)、销量(I8)、评分(I9)这几个属性来描述商家特征。其中“评分”一个指标就包括了“产品描述相符程度评分”“物流服务水平评分”“综合服务评分”三方面的打分结果,因此本文用向量来表示该指标的输入值,具体见表1。商家属性指标的样本数据都直接来源于商家店铺页面。
3. 买家属性
由于客户基本信息,如性别、年龄、学历、曾经购买过的产品信息及在线交易金额等等都涉及个人隐私问题,所以在各大电商平台上均无渠道获取。因此,本文选取买家忠诚度(I10)来反映客户对产品的满意程度及其个人消费偏好,具体构成方法见表1。
4. 同行业竞争者属性
本文选取了行业平均质量指数(I11)、产品平均价格(I12)两个指标来表示产品行业竞争者的特征属性,具体构成见表1。
表1部分影响因素指标
5. 产品主要营销渠道
适合产品特征及市场定位的营销渠道是产品销量增加的关键因素。本文将在线产品的常规营销渠道归纳为搜索引擎、社交网络、邮件和信息、电商平台及传统线下渠道五类,并根据各营销渠道对产品销量的提升效果分别赋值,以此作为营销渠道(I13)指标的样本数据,具体见表2。
表2营销渠道分类取值
基于以上影响因素指标,本文所构建的在线产品销量预测模型的的输入特征向量表示为:
Ia=(I1,I2,I3……,I13),向量维度为13。
(二)数据来源及处理
1. 数据来源及技术手段
阿里巴巴是国内最大的电商平台,其C2C电商平台淘宝(含天猫)所涵盖的产品种类丰富,涉及领域全面。另外,该平台成立时间较早,各个产品门类的交易数据在国内C2C电商平台中属于相对完整、全面,并且其交易数据连续性明显。因此,本文以淘宝(含天猫)电商平台为主要对象进行了数据抓取工作,其中网络爬虫程序用Python编写。由于淘宝平台技术环境复杂,考虑到数据抓取的可行性及稳定性,数据抓取技术采用Selenium框架。基本思路为:将淘宝产品搜索的关键字作为入口,逐页遍历该关键字下搜索结果中显示的所有产品。最终以影响因素指标体系为依据进行样本采集,具体爬取步骤见图2。
图2 数据爬取及加工流程
本文从众多产品领域中选取了农牧、服装、个人消费品、家具、二手车、食品六个领域作为一级分类,并在每个领域下设计了若干关键字作为二级类别,见表3。需要说明的是,有些产品、关键字可再细分出多个关键字,文中没有一一考虑。文中采用的划分方法仅供本文研究之用,其他学者可根据实际需要做相应调整。
表3产品分类划分
2. 数据清洗
由于淘宝技术环境非常复杂,抓取的数据重复率较高,而且存在属性有缺失值的情况。因此,需要对数据进行清洗,此过程分为两个阶段。第一,数据去重阶段。本文将产品标题及所属店铺名称这两个属性作为识别重复产品的关键字段。数据中只要在这两个属性上出现相同值的样本,则按抓取的时间先后顺序,仅保留先抓取到的样本。第二,数据缺失值处理阶段。将样本中每个缺失值按照该属性平均值进行添补,即将每个分类的该指标平均值作为缺失值。
3. 数据描述
经过数据清洗后,样本数量为13 000个。为了进一步描述数据,本文将影响因素指标绘制成直方图。由于每个指标都含有一定数量的极端值,为避免极端值影响数据分布的可视化效果,遂将每个指标按取值大小排序并去除占总数5%的最大(小)极端值。此处列举部分指标的直方图来说明数据,见图3。从图3中“销量”指标的数据分布可以看出,大部分产品的销售量并不大,只有很少量产品的销量非常大,数据呈现长尾型分布。长尾型分布的样本对于模型训练效果会有影响,可以通过增加样本数量量级,来改善数据分布形态。
另外,由于价格影响因素对产品销售量的影响程度较大,所以特别将各个一级分类产品的价格分布和销量分布绘制成了直方图,如图4所示。从图4可以看出,不同分类下的产品销量大致服从长尾型分布,产品本身的差异性仅仅导致了量级的不同。且图4中“二手车”分类,价格分布相当极端,而销量却仍然服从长尾型分布。
图3 指标分布图
图4 产品分类及销量对比图
四、在线产品销量预测模型
(一)模型结构
1. 全连接网络
全连接层作为深度学习中最初始的结构,网络每一层都是稠密层,层与层之间神经元完全连接,其结构图如图5所示。
图5 全连接模型结构
在该结构中,隐藏层数量可为任意数量,输入层接收特征向量XI∈Rn,其中n为向量的维度。在隐藏层中,将每个神经元的输入向量的线性组合传入激活函数,通过激活函数使网络具备学习非线性关系的能力,即Xi+1=f(WiXi),其中Xi+1代表第i+1层的输入,Wi={Wzl|z=1,2,3…,m;l=1,2,3,…,n}代表第i层所有神经元与第i+1层所有神经元的连接的权值,激活函数一般采用Relu函数,即f(x)=max(0,x)。
2. 卷积神经网络(CNN)
卷积神经网络是受到生物视觉系统启发而创造出来的深度学习结构,在视觉领域有着相当出色的性能。卷积神经网络含有输入层、输出层、卷积层和池化层四个不同的层类型,整体结构与全连接层相似,由多个层堆叠而成。卷积层和池化层可根据具体任务任意组合并放置在隐藏层中以达到最佳的模型性能。卷积层可共享卷积核的参数,这样大大减少了模型参数量。池化层能进一步提取有用特征,并再次减少模型参数。所以,相对于全连接网络,卷积神经网络大大精简了模型参数,使模型训练更容易进行[10-12]。
另外,去掉池化层后的全卷积网络在视觉领域仍然有较好的表现,甚至在某些图像识别任务中能达到领先水平,卷积核步长为2的卷积层可充当池化层的角色[13],故本文决定采用全卷积结构作为卷积神经网络的主要结构,其卷积的公式如下所示:
(1)
其中f和g代表两个不同的函数,当f代表输入向量时,g即为卷积核,该式子可解释为通过g对f进行加权平均,t代表时间步。当输入信号为离散信号时,将式中积分符号变成求和符号即可。
(二)模型训练
1. 模型训练方法
鉴于无监督预训练能使深度学习模型产生更好的训练效果,本文引入降噪自编码器(Denoising Autoencoder,DAE)来预训练网络。
单层自编码器(Autoencoder ,AE)在输入层与输出层间加入一层具有非线性映射能力的隐藏层,训练目标是使输入层输入的向量与输出层输出的向量完全相等以实现输入重构,故对于隐藏层有X1=f1(X),而对于输出层有Y=f2(X1)。由于隐藏层的神经元个数与输入特征的维数不相等,故AE并不是简单地做了一个恒等映射。它中间隐藏层能够提取样本的统计特征,获取到输入特征中最有效的影响因子。当预训练完成以后,会去掉输出层,并按照监督学习的需要加上新的输出层,便可进行正常的监督学习[14]。但是,当隐藏层的神经元数量大于输入特征的维度时,会导致AE产生过完备现象,提取到很多与特征无关的信息,而DAE可以使隐藏层神经元数取任意值。因此,DAE可以对输入样本进行腐化,即按照一定概率使输入值的某一个或多个特征值为0[15]。其余做法与AE完全相似。这也是本文采用DAE方法进行无监督预训练的原因。
当模型需要引入多层隐藏层时,每一层隐藏层后面都会加一个输出层,同时会将上一层隐藏层的输出当作本层的输入,并重构上一层隐藏层的输出向量。基于此,模型可引入任意数量的隐藏层[15]。
2. 训练步骤
本文所构建模型的基本训练步骤如图6所示:
图6 模型训练流程
如图6所示,当模型完成了无监督预训练后,在此模型参数上进行监督训练,即微调(fine-tune),即可得到最终的分类模型,而当模型不需要无监督预训练时,可直接进入监督训练阶段。另外,在模型评估阶段,由于本文并非连续值预测,属于分类预测,故采用accuracy指标来评估模型的训练性能。
五、实证研究与结论
基于上文提出的在线产品销量预测影响因素指标体系及模型训练算法,本文针对清洗后的13 000个样本进行了实证研究。同时,为表明模型在不同行业产品销量上的预测精度和适应能力,本文对模型训练结果进行了深入分析。
(一)实证研究
1. 数据预处理
由于选取指标的量纲不一致,容易导致模型训练不稳定,为此,本文对所有指标数据进行了标准化处理,处理公式如下:
(2)
2. 模型结构及训练参数
本文选取了深度学习模型中的全连接模型和CNN模型,统一采用提早停止(Early Stop)和学习速率衰退策略进行训练。其中,提早停止策略可使模型在训练时,当验证集上的损失值连续30次回响(epochs)下都不再降低时,便停止模型训练。而学习速率衰退策略可以使学习速率在每个epoch后按某比率降低。在本实验中降低比率为0.000001。学习速率为0.0001。
对于全连接模型,它包含三层隐藏层,每层都有512个神经元。每个隐藏层和输入层都设置了失活策略(dropout),除了输入层的dropout概率设置为0.5,其余均设置为0.3。模型在训练时会使神经元“失活”,不参与本次训练,从而有效防止过拟合现象。
对于CNN模型,采用了全卷积结构。所以,利用步长为2的卷积核来替代原有的池化层效果,且非池化位置的卷积层步长均为1。由此产生了步长值为1和步长值为2的相互交替的四层卷积隐藏层,它们的卷积核数量分别为60、60、120和120。为了防止过拟合,每层隐藏层仍然设有dropout,其设置规则与全连接模型一致。
在模型预训练阶段,对两个深度学习模型结构中的每一层都进行了无监督预训练,并在预训练阶段对所有层都做了微调(fine-tune),使所有层都可以在监督信号下得到训练。
(二)CNN模型和全连接模型训练结果
本文对一级分类下的产品样本进行CNN及全连接模型训练,引入了无监督预训练。每个一级分类产品样本每次实验都可以得到2个模型训练结果,其中每个分类产品分别进行了5次实验。另外,模型进行销量分类预测,每隔500个销售量增加一个等级,也就是说当销售量<=500时,取值为1;位于500~1 000之间的销售量,取值为2;位于1 000~1 500之间的销售量取值为3。以此类推,总共分为11个等级,当销售量>5 000时,取最大值11。
为简化论述,选取农牧产品分类和个人消费品分类两个行业的训练结果进行重点分析,如图7所示。其他行业产品的训练结果会在接下来的模型适应性分析部分给出。选取农牧产品和个人消费品作为分析重点的原因是:这两个行业产品门类复杂,覆盖面广,产品的差异性明显,而且淘宝及天猫平台上这两个行业产品的商家经营时间长,销售已成规模,因此获取的样本偶然性小,具有代表性;另外,模型训练结果如果在这两个行业产品上表现出色,那么对模型整体的适应性水平就有一定的说服力。
在模型结果分析中,本文引入了精确度(accuracy)指标来说明预测结果的准确程度。精确度在一级分类产品上的计算公式如下:
(3)
其中TC代表了正确分类的样本数量,TS代表了总样本数量。由图7可以看出,农牧产品及个人消费品的2个模型,每次实验的训练结果精度都在80%以上,且均值大于0.85。其中农牧产品的精确度更是达到了95%以上,这是一个非常让人满意的结果。这个结果与农牧产品样本丰富,种类多样,且价格与销量的概率分布相对集中是有关系的。由此可见,在个人消费品及农牧产品分类上,模型精度均可接受,且表现出了不错的适应性。另外,本文accuracy指标是在验证集上计算得出的。验证集上模型表现出良好的准确度,说明模型在未知数据上的性能也有保证,避免了过拟合现象。
图7 农牧产品及个人消费品模型训练结果
(三)模型分析与结论
通过对每个行业数据单独训练以及对全行业所有数据的训练,得到各个模型在使用预训练和不使用预训练情况下的精确度评估结果,结果如表4所示。为使评估更具客观性,实验更严格,除了随机抽样出10%样本作为验证集,且只用作评估而不参加训练外,还对每个模型重复进行了五次抽样和训练。最后,将五次实验的精确度均值作为模型评估的依据,具体见表4。为了更好地反映模型精度和泛化能力,本文还选取了运用相当广泛的非深度学习模型Adaboosting作为对比模型,并选择决策树作为基础分类器以使Adaboosting模型性能达到最佳。在对样本进行了重复实验后,将结果与深度学习模型结果进行比较分析,以此考察深度学习CNN和全连接模型的预测效果。
表4模型精确度汇总表
表4分别列举了AdaBoosting、全连接、CNN模型在6个一级分类产品上的精确度,也就是它们在不同行业产品上的销量预测精度,其中“全行业”代表的是不同模型精确度的均值。分析表4中accuray指标,得出以下结果:第一,深度学习模型在各个行业上的性能都优于AdaBoosting模型;第二,全行业预测精确度均值都达到了0.75以上,其中深度学习模型(全连接和CNN)的accuracy指标都在0.8以上;第三,无监督预训练的优势在CNN模型上体现的更为明显。
由以上分析结果得出结论:第一,AdaBoosting模型作为对比模型,反映出本文所构建的全连接和CNN深度学习模型在不同行业产品销量预测上的优势;第二,在较为完善的指标体系支撑下,全连接和CNN模型普遍适用于不同行业产品的销量预测,而且在预测精确度上有绝对的优势;第三,在多数预测中经过预训练的全卷积模型(CNN)比全连接模型更有效,说明经过无监督预训练的全卷积神经网络(CNN)在销量预测问题上更有效,更能捕获输入值与销量输出值的之间的非线性映射关系。
此外,要增加深度学习模型的复杂度并不困难,所以从理论上看,深度学习模型能适应较大的数据量级,这是很多预测模型所不具备的。在本文实验训练过程中,仅仅使用了一万多个训练样本,在这样一个相对较小的量级样本下,模型就表现出较佳的性能。那么,在真正的大量级数据上其性能优势会更加明显。可见,本文所构建指标体系和模型在实际应用中会有更好的表现,适用于不同行业产品销量预测的实际操作。
本文基于深度学习的优势,结合在线交易模式中产品销售特点,构建了在线产品销量影响因素指标体系,及深度学习模型来进行不同行业在线产品的销量预测。根据选取的影响因素指标,从电商平台淘宝(含天猫)上抓取了大量样本,采用自动编码器方法(AE)挖掘出不同行业在线产品的深层特征,并构建CNN模型对产品销量进行了预测。分析结果表明,CNN模型具有很好的预测精度和泛化能力,适用于不同行业在线产品的销量预测。
就样本呈现长尾型分布的问题而言,虽然没有明显影响到模型的训练结果。但在实际应用中,可以利用企业资源,扩大数据来源;同时调整爬虫算法来避免样本出现类似问题。通过获取更大数量级的样本,可使处在“长尾”上的产品的销售特征得到有效提炼。这对模型性能的提升有很大帮助,也更符合产品销量预测的实践要求。另外,在无监督预训练方法上,还可以选择限制玻尔兹曼机(RBM)等其他无监督预训练算法和降噪自编码器(DAE)进行预训练效果对比,以实现最佳模型训练效果。这也是未来研究中实现模型进一步优化的潜在突破点。