金融数据分析 课件 第11章 深度学习与数据分析_第1页
金融数据分析 课件 第11章 深度学习与数据分析_第2页
金融数据分析 课件 第11章 深度学习与数据分析_第3页
金融数据分析 课件 第11章 深度学习与数据分析_第4页
金融数据分析 课件 第11章 深度学习与数据分析_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十一章

深度学习与数据分析

学习目标

熟悉不同类型的神经网络模型的特点与区别掌握神经网络模型搭建原理并能将其应用于金融市场分析中

本章导读

深度学习是机器学习的一个分支,其主要采用的模型是神经网络模型,因此,本章节将主要介绍有关人工神经网络和深度学习的基本概念、相关模型以及优化策略。人工神经网络(artificialneuralnetworks,ANN),简称神经网络(neuralnetwork,NN),是一种模拟人脑神经元网络处理信息的数学模型。从机器学习的角度来看,神经网络模型本质上是由具有非线性激活函数的神经元组成的模型。通过大量神经元之间的连接,神经网络成为一种高度非线性的模型,神经元之间的连接权重就是需要学习的参数。11.1神经元11.2BP神经网络11.3卷积神经网络11.4循环神经网络11.5深度学习模型优化策略11.6

专题11基于深度学习的上市公司财务风险预警研究目录CONTENTS神经元11.1

11.1神经元一个典型的神经元学习训练模型可抽象为如下过程

11.2BP神经网络1.前馈神经网络

前馈神经网络至少有三层,第一层为输入层,最后一层为输出层,其他中间层为隐藏层。

11.2BP神经网络

11.2BP神经网络通常可由梯度下降法求解上述优化问题。即首先初始化参数,然后根据式(11.4)和式(11.5)迭代更新,逐渐缩小误差:其中α为学习率,决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。

11.2BP神经网络2.BP算法

11.2BP神经网络

11.2BP神经网络图11-3BP神经网络预测效果例11.1

BP神经网络应用实例以沪深300股指为例,建立BP神经网络模型。预测步长设为15天,即用前15天的数据通过滑动窗口不断预测下一天的收盘价及涨跌情况。特征变量包括开盘价、收盘价、最高价、最低价、交易量和交易额。为消除异常值和量纲影响,对数据进行归一化处理。在Python中可利用tensorflow库调用KerasAPI构建BP神经网络。模型预测效果如图11-3所示,可以看到股票涨跌在训练集与测试集上的误差,模型在测试集上的MAE、MSE较训练集高,MAPE较训练集低,测试集的整体预测准确率为67%,模型预测效果较好。

11.2BP神经网络Python代码演示#读取数据df1=pd.read_excel(r'E//jrj1/Chapter10/hs300.xlsx',0)#df1=df1.iloc[3600:-10,1:]df1=df1.iloc[:,1:]df1.tail()##进行数据归一化fromsklearnimportpreprocessingmin_max_scaler=preprocessing.MinMaxScaler()df0=min_max_scaler.fit_transform(df1)df=pd.DataFrame(df0,columns=df1.columns)#构造训练集测试集y=pd.DataFrame(y.values,columns=['goal'])x=Xcut=10#取最后cut=10天为测试集X_train,X_test=x.iloc[:-cut],x.iloc[-cut:]y_train,y_test=y.iloc[:-cut],y.iloc[-cut:]X_train,X_test,y_train,y_test=X_train.values,X_test.values,y_train.values,y_test.valuesX=df.drop('close',axis=1)y=df['close']

11.2BP神经网络#建立BP模型训练:fromtensorflow.keras.modelsimportSequentialfromtensorflow.keras.layersimportDense,Activationfromtensorflow.keras.optimizersimportAdammodel=Sequential()#层次模型model.add(Dense(16,input_dim=5))#输入层model.add(Activation('relu'))#添加激活函数model.add(Dense(4))#中间层model.add(Activation('sigmoid'))#添加激活函数model.add(Dense(1))#输出层pile(loss='mean_squared_error',optimizer='Adam')#编译模型model.fit(X_train,y_train,epochs=50,batch_size=256) #模型拟合:#在训练集上的拟合结果y_train_predict=model.predict(X_train)y_train_predict=y_train_predict[:,0]y_train=y_train#在测试集上的拟合结果y_test_predict=model.predict(X_test)y_test_predict=y_test_predict[:,0]fromsklearn.metricsimportmean_absolute_errorfromsklearn.metricsimportmean_squared_errorimportmathdefmape(y_true,y_pred): returnnp.mean(np.abs((y_pred-y_true)/y_true))*100print('训练集上的MAE/MSE/MAPE')print(mean_absolute_error(y_train_predict,y_train))print(mean_squared_error(y_train_predict,y_train))print(mape(y_train_predict,y_train))print('测试集上的MAE/MSE/MAPE')print(mean_absolute_error(y_test_predict,y_test))print(mean_squared_error(y_test_predict,y_test))print(mape(y_test_predict,y_test))#预测涨跌y_var_test=y_test[1:]-y_test[:len(y_test)-1]y_var_predict=y_test_predict[1:]-y_test_predict[:len(y_test_predict)-1]txt=np.zeros(len(y_var_test))foriinrange(len(y_var_test-1)): txt[i]=np.sign(y_var_test[i])==np.sign(y_var_predict[i])result=sum(txt)/len(txt)print('预测涨跌正确:',result)

11.3卷积神经网络卷积神经网络一般由卷积层、池化层和全连通层组成,如图11-4所示图11-4

CNN网络流程图

11.3卷积神经网络

卷积神经网络中卷积层(Convolutionallayer)由若干卷积核(即可学习的权重向量)组成,每个卷积单元的参数都经由反向传播算法优化得到。

卷积层的特点在于局部连接性与权值共享。如图11-5所示,卷积层中的每一个神经元都只和前一层中某个局部窗口内的神经元相连,构成一个局部连接网络,可以大幅减少训练的参数。图11-5全连通神经网络与卷积神经网络对比

11.3卷积神经网络2.池化层

池化层(PoolingLayer),也叫汇聚层、子采样层(SubsamplingLayer),其作用主要就是压缩数据和参数的量,或者说是保留最显著的特征,通过特征映射去除其中不重要的样本,进一步减少参数数量。

由于卷积层可以减少网络中连接的数量,但特征映射组中的神经元个数并没有显著减少,如果后面接一个分类器,分类器的输入维数依然很高,很容易出现过拟合。为了解决这个问题,可以在卷积层之后加上一个池化层,从而降低特征维数,避免过拟合。目前,池化的方法有很多,常用的池化方法有最大池化和平均池化两种。

11.3卷积神经网络3.全连通层

全连通层(fullyconnectedlayer,FC),即前面一层的每个神经元都与后面一层的相连接,在整个卷积神经网络中起到“分类器”的作用。卷积层与池化层的作用在于提取分布式特征,而全连通层则将学到的“分布式特征表示”映射到样本标记空间,对多次卷积后高度抽象化的特征进行整合。在CNN中,它可以直接把图像降维成一堆序列。全连通层主要通过总层数、单个全连通层的神经元数和激活函数三个参数影响模型。

11.3卷积神经网络例11.2CNN模型实例

卷积神经网络(CNN)模型被广泛应用于图片识别技术,本例将采用内置手写数字集作为示例数据,通过keras模块搭建CNN模型来进行手写数字体识别。内置数据集已划分出训练集与测试集,训练集中的输入信息x为手写数字的图片,输出信息y为图片的标签。如图11-6所示,训练集的第一张图片为数字“5”的手写体,其对应的y标签也是类别数字“5”。图11-6手写数据集示例

11.3卷积神经网络Python代码演示importnumpyasnp;importpandasaspd;importmatplotlib.pyplotaspltfromkeras.datasetsimportmnistfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Activation,Flattenfromkeras.optimizersimportadam_v2fromkeras.layers.normalization.batch_normalization_v1importBatchNormalizationfromkeras.utilsimportnp_utilsfromkeras.layersimportConv2D,MaxPooling2D,ZeroPadding2D,GlobalAveragePooling2Dfromkeras.layers.advanced_activationsimportLeakyReLUfromkeras.preprocessing.imageimportImageDataGenerator#图像基本变换(X_train,y_train),(X_test,y_test)=mnist.load_data()#划分训练集和测试集plt.imshow(X_train[0],cmap='gray')plt.title('Class'+str(y_train[0]))#尺寸转换X_train=X_train.reshape(X_train.shape[0],28,28,1)#尺寸变换X_test=X_test.reshape(X_test.shape[0],28,28,1)X_train=X_train.astype('float32')#类型转换X_test=X_test.astype('float32')X_train/=255;X_test/=255;X_train.shape;number_of_classes=10Y_train=np_utils.to_categorical(y_train,number_of_classes)#类别变换Y_test=np_utils.to_categorical(y_test,number_of_classes)

11.3卷积神经网络model.summary()#模型汇总pile(loss='categorical_crossentropy',optimizer=adam_v2.Adam(),metrics=['accuracy'])gen=ImageDataGenerator(rotation_range=8,width_shift_range=0.08,shear_range=0.3,height_shift_range=0.08,zoom_range=0.08)#图像变换test_gen=ImageDataGenerator()#图像处理train_generator=gen.flow(X_train,Y_train,batch_size=64)test_generator=test_gen.flow(X_test,Y_test,batch_size=64)#模型训练model.fit_generator(train_generator,steps_per_epoch=60000//64,epochs=5,validation_data=test_generator,validation_steps=10000//64)score=model.evaluate(X_test,Y_test)#模型评估print('Testaccuracy:',score[1])#准确率得分predictions=model.predict(X_test)#模型预测classes=np.argmax(predictions,axis=1)predictions=list(predictions)actuals=list(y_test)#输出预测值与实际值sub=pd.DataFrame({'Actual':actuals,'Predictions':predictions})sub.to_csv('./output_cnn.csv',index=False)

11.4循环神经网络1.RNN单隐藏层的简单循环网络在时刻t的更新公式为h(t)=f(Whh(t-1)+Wxx(t)+bh)(11.9)其中,Wh为状态-状态权重矩阵,Wx为状态-输入权重矩阵,bh为偏置向量,f(·)为激活函数。将最终时刻输出的隐藏层状态h(T)看作整个序列的最终表示,输入到分类器g(·)进行分类,即y(t)=g(h(T))(11.10)

11.4循环神经网络2.LSTM

11.4循环神经网络三个门it、ft、ot的取值均在0到1之间,表示以一定的比例允许信息通过。计算公式分别如下:it=σ(Wxi·xt+Whi·ht-1+bi)ft=σ(Wxf·xt+Whf·ht-1+bf)ot=σ(Wxo·xt+Who·ht-1+bo)其中σ(·)为Logistic函数,其输出区间为(0,1),W为对应的权重矩阵,bi为偏置矩阵。

11.4循环神经网络图9-15LSTM原理图

11.4循环神经网络3.GRU模型

11.4循环神经网络图9-16GRU原理图

深度学习模型优化策略11.511.5深度学习模型优化策略在应用深度学习模型时通常面临网络优化与网络正则化两大难题。一方面,神经网络模型的优化目标是能找到一个全局最优解或较好的局部最优解;另一方面模型优化达到最优解时可能带来过拟合问题。11.5深度学习模型优化策略网络优化:改善神经网络优化的目标是找到更好的局部最小值和提高优化效率。目前比较有效的优化思路有如下几种:使用更有效的优化算法来提高梯度下降优化方法的效率和稳定性。通过参数初始化和数据预处理来提高优化效率。通过逐层归一化来提高优化效率。使用更好的超参数优化方法。11.5深度学习模型优化策略网络正则化,即通过限制神经网络模型复杂度,避免模型过拟合并提高模型泛化能力。在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如可通过约束参数的L1和L2范数来减小模型在训练数据集上的过拟合现象。在训练深度学习模型时,除L1和L2正则化外还会使用其他正则化方法:数据增强。主要应用于图像数据,通过算法对图像进行旋转、翻转、缩放、平移等转变,或引入噪声等方法来增加数据多样性。提前停止。其基本思想是设置一个和训练集独立的样本集合,即验证集(ValidationSet),并用验证集上的错误来代替期望错误,当验证集上的错误率不再下降或满足停止条件时,停止迭代。丢弃法(Dropout)。在训练时,随机丢弃一部分神经元及其对应的连接边,以避免过拟合。专题11基于深度学习的上市公司财务风险预警研究

11.6基于深度学习的上市公司财务风险预警研究我国“十四五”规划将“健全金融风险预防、预警、处置、问责制度体系”列为实施金融安全战略的重要举措之一,2021年中央经济工作会议同样指出要“正确认识和把握防范化解重大风险”,并“完善金融风险处置机制”。近年来黑天鹅事件时有发生,全球系统性风险隐患不断凸显,进一步加剧企业的财务风险。在此背景下,结合系统性风险指标与前沿的深度学习算法,优化我国企业财务危机的预测模型,提升企业财务风险预警效力,对优化投资决策、强化企业风险管理、健全风险监测预警机制、完善金融风险处置机制均有重要显示意义。

11.6基于深度学习的上市公司财务风险预警研究传统的财务风险预警方法通常基于统计分析和规则模型,这些方法往往依赖于研究者对财务指标之间关系的猜测和经验判断。然而,随着大数据技术的迅速发展和深度学习在各个领域的成功应用,越来越多的研究者和从业者开始关注和探索利用深度学习技术改进财务风险预警的方法和模型。深度学习是一种以人工神经网络为基础的机器学习方法,通过多层次的抽象和表示学习,能够从大规模、非结构化、高维度的数据中提取有用的特征和模式。这使得深度学习在图像识别、自然语言处理等领域取得了显著的成就。基于此,本专题将结合深度学习构建上市公司财务风险预警模型,对我国上市公司的财务风险水平进行监测与评估。

11.6基于深度学习的上市公司财务风险预警研究1.数据来源及预处理(1)数据来源及样本选取本专题选取2020年到2022年A股上市公司为初始样本,剔除金融行业公司后,“财务状况异常”而首次被ST的上市公司总计115家。为正确预警公司财务困境,要通过比较ST公司与正常公司相关指标的异同,并且利用模型将两类公司准确识别并且区分出来。本专题将以ST公司:非ST公司=1:2的比例选取正常公司作为配对样本进行研究,配对时采用资产规模相当(总资产上下相差不超过20%)、所属行业相同、会计年度一致的原则。最终样本包含了115家ST公司和与之配对的230家正常公司,即总体的样本公司数量为345家,三年样本数据共1035个数据行。本专题中使用的公司财务数据来源于Wind数据库。

11.6基于深度学习的上市公司财务风险预警研究(2)

变量构建本专题将采用公司是否被实施ST作为公司财务风险的衡量标准。根据证监会规定,若上市公司连续两个会计年度净利润为负或者最近一个年度的每股净资产低于股票面值,公司将被执行ST处理。基于此,模型中的输入数据和预测变量数据间隔设为两年,即使用T年的财务数据和财报文本数据,来预测T+2年公司是否会被实行ST。参考国内学者的研究成果,从反映上市公司盈利能力、成长能力、营运能力、偿债能力、现金流量五个方面选取了35个财务指标作为特征变量。2.神经网络模型设计(1)BPNN模型:基于反向传播算法来训练模型,并采用梯度下降法来调整网络中的参数,以最小化损失函数。(2)CNN模型:卷积层-池化层-卷积层-池化层-Flatten层-Dense层--Dropout层-全连接层-全连接层,第一层卷积层的神经元个数为256,卷积核大小为3,第二层卷积层的神经元个数为128,卷积核大小为3。池化层使用MaxPooling1D处理。最后一层Dense层的神经元个数为1。(3)RNN模型:RNN层-Dropout层-RNN层-Dropout层-Flatten层-Dense层,其中第一层RNN神经元个数设置为128个,第二层RNN神经元个数设置为100个,第一层Dropout层丢弃0.2。第二层Dropout层丢弃0.3,最后搭建Flatten层和全连接层。

11.6基于深度学习的上市公司财务风险预警研究2.神经网络模型设计(4)GRU模型:GRU层-Dropout层-Dense层--Dropout层-Dense层-Dropout层-Dense层,其中第一层GRU神经元个数设置为256个,第一层Dropout层丢弃0.2,第二层Dropout层丢弃0.2,最后添加Dense层。(5)LSTM模型:LSTM层-Dense层-Dropout层-LSTM层-Dense层-Dropout层-Dense层-Dense层,其中第一层神经元个数设置128个,添加全连接层,激活函数选择relu,第一层Dropout层丢弃0.2,第二层Dropout层丢弃0.2,最后使用一个具有1个神经元和使用sigmoid激活函数的全连接层,用于进行二分类任务。所有模型使用develop_pile编译模型,其中loss参数设置为binary_crossentropy表示二元交叉熵损失函数,optimizer参数设置为adam表示使用Adam优化器进行参数更新,metrics参数设置为accuracy表示评估指标为准确率。

11.6基于深度学习的上市公司财务风险预警研究3.模型比较与结果分析本专题研究基于Python3.0框架,使用Tensorflow搭建神经网络模型。

首先以7:3的比例将数据集划分为训练集与测试集,基于训练集训练模型,然后基于搭建设计好的深度学习模型,对测试集进行预测。

预测窗口长度设为7,即用前7天的股票交易数据预测未来一天的股票收盘价。

为考察不同模型对财务风险的预测效果,选择Accuracy、precision、recall、f1-score、roc值作为评价指标,对比不同模型在训练集与测试集上的预测效果。

11.6基于深度学习的上市公司财务风险预警研究如表11-1所示,在本专题中,CNN模型在测试集上准确率最高,达到了81%,对财务危机的预警较为准确;其次是GRU模型,准确率为79%,且AUC值较高,达到了86%,预警也较为准确。除LSTM模型外,基于神经网络的深度学习模型预测准确率均在75%以上,而逻辑回归模型准确率最低,预测准确率为73%,不如多层迭代训练的深度学习模型。

11.6基于深度学习的上市公司财务风险预警研

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论