胡 玲
(河套学院经济管理系,内蒙古 巴彦淖尔 015000)
我国食用菌产业发展一直处于领先地位[1]。食用菌栽培作为一种投资小、周期短、见效快的农业经济项目,近年来发展势头良好,取得了很好的经济效益,成为了农村增收致富的重要手段。但食用菌栽培者的素质偏低,在大多数地方还是劳动密集型的栽培产业[1]。特别是在互联网科技发展的影响下,食用菌电子商务成为了一种重要的营销手段
在食用菌的销售中,电子商务所占的比重也越来越大,食用菌销量的波动对食用菌产业的影响也越来越大。但食用菌栽培品种多、菌种要求高,食用菌的栽培正向着专业化、规模化、工厂化生产转变。但食用菌销量的影响因素有许多,不仅受传统的菌种、栽培方式等影响,而且还受到国内外市场环境、研发技术和生产管理水平等其它因素影响,多种复杂因素造成了食用菌销量的不确定性[2],如何对食用菌销量进行准确预测,把握食用菌经济发展的内在规律,掌握食用菌产业的发展方向,成为了现代食用菌行业必需面对的问题。
食用菌销量预测卷积神经网络的结构见图1。
如图1所示,食用菌销量预测卷积神经网络的层级结构主要包括数据输入层、卷积计算层、ReLU激励层、池化层和全连接层等[3]。其中卷积层用于学习输入的食用菌销售数据的特征表示,在学习过程中输入特征会被分割成一些区块,每个区块的卷积核相同,输入特征与卷积核做卷积,利用权值共享的方式把结果传递给激活函数,可以大幅减轻食用菌销售模型的复杂度,从而使卷积神经网络的模型更加容易进行训练;而池化层处于连续的卷积层和激励层之间,通过对销售数据的压缩以减小过拟合现象的产生;全连接层实质上是利用BP神经网络进行销量计算的,将销售预测模型的几个卷积层和池化层之后,用一个或多个全连接层,将前一层的神经元与当前层的神经元进行连接,从而形成一个BP神经网络完成具体的计算。
食用菌电子商务平台的在日常的平台交易中,会有许多的电子交易数据[4],还有一些与客户进行沟通交流的数据,从这些提取出与食用菌销量有关的数据,这一过程就是数据预处理的过程。由于在食用菌销量模型的数据来源于真实的食用菌电子商务交易数据,其中含有大量无用的或者是错误的信息,如取消交易和错误交易的信息,这些数据是无法直接应用到预测模型中的。因此,首先要对食用菌电子交易的数据集进行预处理。
数据的过滤目的是为了将食用菌电子交易数据集中存在着冗余数据进行剔除,数据集中还有一些与构建预测模型无关的属性,如地址、邮编等与销量无关的数据,此类信息会对预测模型的准确度产生干扰,因此将这些字段也予以删除。
在数据分析过程中,数据缺失是最常见的问题之一,食用菌销量信息中的数据库表字段数据为空或空值(NULL),如销量数据库表中有销售金额但没有金额的单位;还有一种缺失是整条记录的缺失,如销量数据表中有销售记录,而在供应商表中却没有销售产品的供应商信息。食用菌销量数据集中的缺失值会影响数据挖掘的效果,有时会导致出现匪夷所思的挖掘结果,如出现某个月的销售数据为零,这会严重影响数据统计分析的结果。
第一,人工填充,人工填充主要是由业务人员完成,业务人员根据经验和相关行业知识,对缺失值进行人工填充。第二,删除数据,对于缺失值过多的特征,无法对其进行填补,而这些特征会对模型的准确率造成影响。还有部分具有缺失值的特征,对模型的构建明显没有意义,对于这些特征,可以采用直接删除的方式。第三,统计量填充,对于缺失率较低的特征,根据数据分布的情况使用统计量来对缺失值进行填充。对于数据符合均匀分布的特征,采用均值填补缺失值;对于数据存在倾斜分布的特征,采用中位数填补缺失值;对于离散特征,采用众数进行填充。
目前的深度学习算法主要是对一些数据进行矩阵运算或者概率运算来得到结论,算法的输入通常来讲应该是一组可以表达数据某类特性的数字。特征抽象的目的是将源数据抽象成算法可以理解的数据,对于食用菌销量预测模型来说,如果字段都是二值型的,可以通过两个数值来表示,通常可以表示成0和1。如在销量是否达到往年同期数值,这种销量的预测就可以视为一个二分类问题,用1表示达到,用0表示未达到;对于多值有序类问题,可以采用标签编码法给每个类别一个唯一的整数值;对于多值无序类的特征,采用One-hot编码方式来把文本无序的字符串数据转换成数值[5],对每个可能的类别,产生一个新列(变量),表示该值在具体的某次观测里是否存在。
食用菌销量模型是一个多指标的预测评价体系,各个指标性质不同,有着有不同的量纲和数量级。当各指标之间的水平相差比较大时,如果直接用原始的值进行学习,就会出现指标失真的现象,而且一些数值之间并无可比较的关系,还需要进行无量纲化处理。因此,对食用菌销量预测模型采用最值归一化的方法为:
式中:x为具体的指标项;min(x)表示指标项的最小值;max(x)表示指标项的最大值。在最值归一化后,可以将所有数据都映射到0~1之间。
通过以上数据预处理方式,将原始的食用菌电子交易数据进行清洗整理,从而提取到有效的销量数据集,在Python库中安装Pandas库,用于对数据进行读取以及增、删、查、改等操作。
通过对食用菌电子交易数据的观察和分析,去除一些无关紧要的数据列,如销量预测中的地址、邮编、用户姓名等无关数据列,这些数据对销量预测模型的训练毫无用处。同时,还要从数据集中挖掘出隐含的未知信息以增加销量数据的特征,例如每天的销量的预测时,发现当天销量较高,那么就不仅要从日期这一列的数据中得到当天具体的销量,还要挖掘出为什么当天销量会增加,如当天是节日或者某个商家的结算日期。
将食用菌交易量这一列数据作为重要的数据集标签数据进行预测模型的构建,主要涉及的数据列还有日期、时间、食用菌品种等这几个特征。仅从这几个特征来进行模型的训练显然是不够的,因此需要从食用菌数据集中再进行数据挖掘,找出一些有相互关联的信息。如食用菌销售数据集中的日期字段中,可以进一步挖掘到星期的信息,通过当天的日期是星期几来对销量按周进行预测,还可以挖掘出当天是否为供应商结算日,是否为节假日等,从而得到更多的影响食用菌销量因素。同时,通过对日期字段内容的进一步分解也可以发现一些数据特征,如在节假日,销售金额会比平时增长很多,在“双十一”更是出现了井喷;打折促销期内,销量较平时有较大的增加;在“金九银十”的月份会出现价格上涨的情况。因此,日期字段数值也可作为一个数据特征来加入销售预测模型。根据这些方法,也可对销售时间增加上下午、早晚等时间段,不同的时间段或多或少也会影响销量。
使用Pandas来读取CSV数据集,然后对数据按上述办法进行处理,得到一个已经扩展了特征的数据集进行One-Hot编码对销量数据的特征抽象。进行One-Hot编码的另一个原因是在训练时,One-Hot编码是销量分类的特征先进行整数编码,然后再将其转化为二进制向量表示,即0或1,这种编码比传统的顺序分类编码更方便计算机识别和计算,由于将数值范围变小只有0和1,因此更有利于梯度下降的计算机求解。
为了提高训练出来的预测模型的泛化能力,将全部数据进行打乱,一般需要打乱3次以上。保存数据就得到了食用菌销量预测模型的数据集。对该数据集分成训练集和测试集两部分,比例大概为2:1,使用Pandas提供的to_csv() 命令将数据保存为csv格式。
预测模型的训练过程通过一个四层卷积神经网络来完成,该网络由2个卷积层来完成卷积运算,以便提取食用菌销量数据的各种特征;2个卷积层后连接着1个全链接层,用于将提取到的各种特征进行综合处理,全连接层进行数据传输时需要耗费的内存比较大,最后全连接层的输出值被传递给一个输出层输出。但这个网络容易发生欠拟合,可能是由于卷积神经网络权重太少,导致无法学习到足够的信息。因此,使用Adadelta的优化器来解决学习率的问题,Adadelta避免了神经网络学习速率的衰减,只将网络累积之前剃度的容器限制到一个固定的大小范围内,因此可以忽略学习速率设置的问题。即使进行了许多更新,仍然会依据渐变更新的移动容器调整学习速率,仍然继续学习。
对卷积神经网络进行优化,两层卷积中每个卷积核的尺寸为3×3;第一卷积层的卷积核通道数为64,第二层多加一个卷积核组;神经元个数设置为4 096个,以减少全连接层的内存消耗。具体训练时可以先对预处理后的数据集划分中的训练集提取少量样本开始训练,在测试数据集上每训练3 000次后保存一次模型。减少样本数的目的是为了节省训练时间。理论上准确率当然没有全集数据训练高,但实际的训练结果也能达到99%的准确率,已经基本上达到了预测模型的精度要求,而且还能节约运算时间。
食用菌电子商务中的交易数据类型众多,与销量有关的数据提取和清洗十分必要,食用菌销量的影响因素也很多,有些因素并不是直接显示在已有的数据集中,还需要进行进一步挖掘,为训练集和预测数据集提供更多的销量数据特征,增加销量预测模型的准确度。采用深度学习卷积神经网络来构建食用菌销量预测模型,可以实现食用菌电子交易的数据的特征自动选取,特别是销量数据的特征分类效果良好,能够满足训练集数据的需要。避免了BP神经网络中反向传播时梯度损失过快的问题,可以对未来一段时间食用菌的销量进行更为准确的预测,而且能够节约训练时间。