基于卷积特征提取的XGBoost营收预测模型

2020-08-11 16:07刘志伟劳南新
网络安全技术与应用 2020年8期
关键词:时间段营收卷积

◆刘志伟 劳南新

(广东工业大学计算机学院 广东 510006)

公司营业收入是衡量公司发展状况的一个重要指标。营业收入的实现关系到公司的再生产活动正常进行。通过加强公司营收管理,可以使企业的各种耗费得到合理补偿,有利于再生产活动顺利进行[1]。

事实上,公司“营收预测”是高维特征数据集下的金融时间序列预测问题。在金融时间序列问题方面,很多学者已经进行了相关研究。从以往的研究成果不难发现[2~6],对于金融时间序列预测问题,大多数学者通常会选择传统的回归模型(如GM(1,1),指数平滑等模型)去解决“营收预测”问题。但从实际问题出发,公司运营市场是一个相对复杂的非线性系统,单一地使用传统回归模型可能并不足以提取数据中相应的非线性特征[7]。随着深度学习技术的不断发展,越来越多的学者青睐于使用深度学习中的神经网络模型对金融时间序列预测问题进行建模分析[8-12]。文献[13、14]指出,神经网络模型具有较强的非线性解释能力,如果给定足够多的神经元,可以对任意连续(光滑)函数以任意精度逼近。虽然深度学习中的神经网络方法具有强大的非线性解释能力,但是由于网络的复杂性使其搜索全局最优值的能力受到限制,并且随着神经网络的深入,要大量增加参数数量。针对此问题,本文提出使用卷积神经网络进行“营收预测”问题建模分析。由于卷积神经网络采用权重共享技术,因此其参数比其他一般神经网络的参数数量要少[15],并且已有学者尝试性地证明了CNN可以有效地提取训练数据中的固有特征[16]。

通常,卷积神经网络由卷积层、池化层和全连接层构成。本质上,卷积层提供了有意义、低维、几乎恒定的特征空间,然后全连接层在该空间中进行非线性系统学习。但是,现实环境下,企业营收的数据量是非常有限的,并且会存在不少噪声,在这种数据量不足和数据质量较差的情况下,CNN对该非线性系统的学习将陷入局部最优情况。基于此,结合数据背景,文章选取XGBoost方法作为最终公司“营收预测”问题的学习预测器,以此替换CNN中的全连接层。XGBoost在训练结果不理想的状况下,可以通过迭代训练来达到降低预测误差的目的。运用此方法,在通过累积效应达到提高模型预测准确度的同时有效控制了模型的复杂度,防止了模型过拟合现象的发生。最后,文章通过一系列的对比实验,证实了文章所提方法的有效性。

1 CNN-XGB模型

1.1 卷积神经网络特征抽取器

在深度学习理论中,卷积神经网络[17]是被使用最多的部分,它在图像识别和模式识别领域取得了许多成就。卷积神经网络的核心是卷积层,其主要包含了各种潜藏特征。同时,卷积层与池化层协作可以大幅度减少参数数量并且可以加快计算速度。在CNN的最后部分,通常会设置一个全连接层以接收卷积核所获取的大量特征信息,该层主要用于组合先前提取的特征以实现最终预测。在本文中,针对“营收预测”问题,本文通过CNN的网络特性在现有的统计特征基础上进行潜藏特征抽取。CNN的构造参数包括卷积核的尺寸,池化层的选择以及卷积层的数量,其主要网络构造如下。

(1)卷积核的尺寸

卷积层是通过在数据上滑动卷积核与覆盖数据做卷积计算来提取特征的(如图1所示)。由于此方法具有共享权重的属性,因此可以降低过拟合的风险并提高计算速度。计算过程如公式1所示。

(2)池化层选择

在CNN设计之初,“池化层”设置的目的是扩大图像的局部特征,加快计算速度并减少过度拟合的可能性。同时,它可以在一定程度上减少数据波动对预测的影响。常用的池化层是最大池化层,其可用公式2表示。

图1卷积神经网络特征抽取器

(3)“卷积层”数量设置

“卷积层”数量太多会造成参数数量过大以及过拟合的风险。但是,“卷积层”数量过少会出现无法保证充分获取“营收数据”潜藏特征信息的情况。通过设置超参数对比实验,文章在训练CNN过程中将采用两层卷积层设计,卷积核大小都设置为1*3,并且设置两个Dropout层,一个Flatten层,一个完全连接的层。

1.2 CNN-XGB模型

上文已经介绍,卷积神经网络具有三种类型的隐藏层:卷积层,池化层和完全连接层。全连接层的作用是集成经过多次卷积计算后高度抽象的功能。通过完全连接层以简单的方式学习这些非线性组合特征,以预测输出。本质上,卷积层提供了有意义的,低维的,几乎恒定的特征空间,然后全连接层在该空间中进行非线性系统学习。但是,当数据量不足或数据质量较差时,对该非线性方系统地学习将陷入局部最优情况。

1.2.1 XGBoost

XGBoost算法[18]自2014年由陈天奇先生提出以来,已经在机器学习领域进行了大量成功的运用。在梯度提升决策树[19]的基础上,XGBoost对boosting算法进行了改进。在一个拥有n个样本,m个特征的数据集中。与梯度提升决策树模型相同,包含k棵树的模型可表示为:

这里,损失函数为:

为了防止过拟合学习,XGBoost在损失函数中加入了合理项来控制模型的复杂程度。Ω(f)表示生成的回归树的复杂度,也是损失函数中的正则项,其表示形式为:

上式中,T表示叶子结点个数。

在进行模型优化过程中,与梯度提升决策树模型只使用一阶导数进行优化不同,XGBoost使用了损失函数L(φ)二阶近似进行迭代优化,对整个优化过程起到了加速作用。

1.2.2 CNN-XGB模型构造

CNN-XGB模型分别由卷积神经网络CNN及XGBoost模型构建而成。这里,卷积神经网络的主要作用为通过设置多组滤波器有效地获取输入训练数据中的潜藏特征。为了能更加准确地解决公司“营收预测”问题,在卷积神经网络的基础上,进一步使用XGBoost模型替换CNN中的全连接逻辑回归层作为最终的公司“营收预测”器,通过调整网络模型参数,让模型具有更加精准的回归预测性能。在整个网络训练过程中,主要包括两个阶段:CNN网络和CNN-XGB参数微调。其中,CNN过程中,将原始训练数据集划分为80%,10%,10%的训练集,验证集以及测试集,在与最终模型相同训练集的基础上进行卷积神经网络预训练,并在训练完成后将网络结构和参数进行固定。整体模型结构如图2所示,计算过程如下所示。

(1)原始数据数据拼接后进行归一化处理,接着进行监督学习时间序列构建。在此,使用 min- max 归一化方法进行数据去量纲化,计算方法为

其中,x表示原始样本指标值,min表示样本指标最小值,max表示样本指标最大值。

2)将构建好的时间序列特征训练集输入到构建的CNN模型中进行预训练,得到卷积层及全连接层参数;

3)冻结CNN网络中的卷积层参数,将第一步中构造的时间序列特征集进行卷积操作,完成特征提取工作。卷积操作主要通过在第二步中训练好的滤波器来完成对“营收预测”潜藏特征的提取,如公式7所示。

其中,ω为卷积核,h为卷积核的尺寸,x为i到i+h-1个特征组成的特征向量,b为偏置项,通过卷积层后,得到特征矩阵C,

4)将卷积操作获取的特征进行Flatten操作后与原始特征向量进行连接组成新的特征向量;

5)将4中组成的新特征训练集输入到XGBoost中,重新进行模型训练;

统筹协调 加大投入 着力构建现代化水利职教体系……………………………………………………… 鲁 昕(22.5)

6)在完成5中的模型训练后,使用最终模型预测测试集数据,对结果进行反归一化计算,然后输出最终预测结果。

图2模型结构

2 实验与分析

2.1 数据描述

本文研究使用的数据是在“和讯”网络获取的3495家A股上市公司中的一般工商业类型公司的财务报表数据和股市行情交易数据,以及从统计局网站获取的宏观经济数据。数据的时间跨度均为2008年12月31日到2018年3月31日。

数据基本信息如下:

(1)财务报表包括三大类报表:资产负债表、利润表以及现金流表。其中,资产负债表包括127个指标,获取原始数据总计209873条;利润表包括74个指标,获取的原始数据总计207816条;现金流表包括88个指标,获取的原始数据总计208134条。报表数据均按季度给出。

(2)宏观数据包括67个指标信息,获取的原始数据总计46821条。宏观数据时间单位不统一,存在按天、按周、按月和按年多种时间单位给出的数据。

(3)选取的股市行情数据包括9个指标,获取的原始数据总计333138条。股市行情数据均按月给出。

2.2 数据预处理

为了能获得相对理想的预测结果,需要通过特征工程去获得适合于模型训练的数据集。获取了相对应公司的负债表、利润表、现金流表等财务报表数据以及一定时间段内我国宏观经济数据和相对应公司股市数据之后,本文按以下特征工程步骤构造适合训练CNN-XGB营收预测模型的训练数据集。假设负债表指标信息表示为利润表指标信息表示为现金流表指标信息表示为都表示报告发布时间,都表示报告截止日期,x3',x3'',x3'''都表示报告更新时间,都表示公司股市代码。同时我们设定,Xi为第i个指标所有数据集合;Q1,Q2,Q3,Q4分别表示第一季度、第二季度、第三季度和第四季度时间段;分别表示半年和前三个季度时间段;A表示全年时间段;对于则表示年份n的t季度时间段的第i个指标数据,并且有表示财务报表合并后的数据集;XM为宏观经济数据集;XS为上市公司股市行情数据集。

(1)通过公司股市代码及数据披露时间连接资产负债表、利润表和现金流表,对财务报表数据进行融合。即对的指标数据进行连接,把三张表合并成一张财务总表XF,则

(2)去除重复值。因为在发布财务报告中,除了会披露本期的数据,还会同时披露上期的数据或者更早之前还没有更正的数据信息,所以同一个年份的同一个季度可能存在多条数据。本文中所选取的数据为最新披露的财报数据,即我们所选取的财务数据XF为x'3最新的数据。

(4)整合宏观经济数据。我国对上市公司的要求是:需要在规定时间范围内分别公布第一季度财报、半年报、前三季度报和全年报。因此,每年财务报表的数据信息对应时间段分别是第一季度(1Q),半年(S2)、前三季度(S3)和全年(A)。然而,宏观经济数据对应的时间单位并不一致,所以需要把每年1~3月份的数据通过“加和求平均”表示成第一季度数据(XM)TQ1、1~6月份的数据通过加”和求平均”表示成半年的数据(XM)TS2、1~9月份的数据通过“加和求平均”表示成前三个季度数据 (XM)TS3和1~12月份的数据通过“加和求平均”表示成全年数据” (XM)TA。”

(5)整合股市数据。股市数据以月为时间单位,所以同样需要把每年的对应时间段的数据通过“加和求平均”的方式表示出第一季度时间“段数据”(XS)TQ1、半年时间“段数据”(XM)TS2、前三个季度时间“段数据”(XS)TS3和全年时间“段数据”(XS)TA。

(6)对所有数据进行融合。财务报表数据XF先与整合好的宏观经济数据XM以相同的报告发布时间进行匹配,接着再与股市数据以公司股市代码x4

(7)缺失数据处理:

(a)统计特征缺失情况。

(b)删除数据缺失严重的特征。对于特征的删除,会造成数据信息的损失,但是大量地对数据缺失严重的特征进行填补。最终,我们选择保留数据缺失小于50%的特征,总计179个特征。

(c)缺失数据填补。经过对特征的数据缺失情况分析,结合时间序列距离越近相关性越大的性质,对主要存在的以下三种缺失情况进行数据填补:

①同一年中前后季度时间段存在数据,但中间季度缺失;填补方法:对相邻的前后两个数据进行相加并取平均值进行填补。即:

②同一年中,出现连续季度缺失;填补方法:寻找前后两年数据,缺失数据使用相邻的前后两年数据相同季度加和求平均。即:

③连续两年存在数据缺失;

这里设(Rm)n表示年份为n,时间段为m的营业收入值,其中填补方法:前面缺失的一年数据使用更前面一年的数据乘以这两年相同时间段营业收入比值;后面缺失的一年数据使用更后面一年的数据乘以这两年相同时间段营业收入比值。即:

(8)抽取每个公司最长连续时间的数据。在这里,设定(XT)n表示某个公司n年份T时间段的数据,假如有不连续数据集:

在所获取的数据中,会出现很多相邻“时间段”特征数据缺失的情况。对此,我们需要对每个公司抽取不连续数据中最长连续的部分作为我们的训练数据,最终抽取完成后训练集数据总数量为76483条。

(9)构造监督学习时间序列。在实验中,由于需要通过过去指标值来预测下一时间的营收预测值,所以需要在前面抽取最长连续时间数据前提下通过滑动窗口方法整理训练数据集。为了方便说明,设表示t时刻的第i个特征、yt表示t时刻预测值。本文实验通过前三个时间段的指标情况预测当前时间营收预测值,则每个训练样本的特征可表示为训练标签表示为ty。

2.3 实验结果与分析

本文实验是对一般工商业上市公司进行营收预测,通过前三个时间段历史数据信息预测下一时间段营业收入。实验中分别使用训练数据集对CNN、DNN、XGBoost、SVM及CNN-XGB模型进行训练并使用训练好模型进行营业收入预测,使用数据时间跨度为2008年12月31日~2018年3月31日。实验采用了交叉验证的方法,其中80%数据作为训练集,10%数据作为验证集,剩下10%数据作为测试集。为保证实验对比结果的合理,每种方法均采用相同测试集、验证集及训练集。考虑到本文预测的数据为上市公司营业收入,所预测的数值相对会较大。如果单纯地使用均方误差作为预测值与真实值误差的计算方法,对于某些不可控的异常事项导致财务数据变化过大的数据,可能会对整体的结果分析带来较大影响,所得出的结果分析结论也会相对缺乏客观性。在此,此次试验使用公式(8)计算公司的相对预测误差。

其中,n为预测公司i数目,yi为第i个公司的财务报表发布的营收数值,为对第个公司的预测营收。在此为防止个别公司财务数据变化过大,将误差上限定在0.8。

2.3.1对比实验及模型参数设置

由于为了防止模型过拟合现象发生,文章中在CNN网络中添加了Dropout层和训练早停机制,因此文章中的实验结果具有一定的随机性。为了保证预测结果的公平性,文章对每种模型进行了10次训练,以避免一次预测结果偶然性的发生。同时,文章通过在实验中对模型输入相同数据来保证模型评估标准的有效性。针对模型的超参数选择,文章使用网格搜索进行超参数确定,从而保证了模型学习的有效性。表1总结了实验中使用的所有模型的关键参数。

在相同的误差计算方法下,各模型回归预测误差值如表2所示。

表1模型参数选择

表2模型回归预测误差值

2.3.2 实验结果分析

对预测结果误差值进行分析,虽然深度学习模型与XGBoost和SVM相比具有不同程度的优势,但从结果中可以看出在训练集更复杂的情况下使用机器学习方法不足以完全学习数据中非结构特征,并且也比较难对结果预测准确。尽管在误差结果中,混合集成学习模型有部分结果不如CNN,但总体来看集成学习模型要在现有的数据中预测结果表现得更好。对实验误差结果进一步分析可以看出,单独使用CNN或DNN的效果比单独使用XGBoost效果要差,但当使用CNN-XGB集成学习模型后模型预测效果要比单独使用XGBoost效果要好。这从一方面可以简单说明小样本数据集使用神经网络进行任务预测的预测准确率要比传统的机器学习方法要差。这也证明了当训练数据集质量不好时,深度学习方法在模型学习时容易过拟合。

3 结语

针对公司营收预测问题,文章提出CNN-XGB集成学习模型以实现更高的预测准确率。通过实验中不同模型的预测误差值对比,验证了通过CNN提取原始营收数据潜藏信息并使用XGBoost融合特征信息进行公司营收预测的方法可以提高预测模型的鲁棒性。

文章所提模型的局限之一是,无论是独立模型CNN、XGBoost还是集成模型CNN-XGB,都无法完全保证在异常训练数据和错误数据中模型性能的鲁棒性。虽然与单模型相比,集成模型还是能够保证更加稳定,但是需要消耗更多的计算资源。在本文中,文章的主要目的是探索集成方法在公司营收预测中的性能,在后续的研究任务中,将针对文章所提及模型进行算法改进研究,以降低模型的算法复杂度,减少计算资源的消耗。

猜你喜欢
时间段营收卷积
No.2 知乎2021年全年营收29.59亿元,同比增长119%
基于3D-Winograd的快速卷积算法设计及FPGA实现
夏天晒太阳防病要注意时间段
卷积神经网络的分析与设计
疯狂的“盲盒”要掏空年轻人的钱包,背后公司半年营收1.6亿!
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
发朋友圈没人看是一种怎样的体验
“三天后”是啥时候?
9.58亿美元AMD营收连续5个季度下跌