版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章大数据分析的应用案例第一小节
案例背景第二小节
数据说明第三小节
研究过程第四小节
研究结论第五小节
章末小结案例背景现代商业银行管理过程中信贷风险管理是重点,在信贷管理过程中应明确信贷管理的意义和信贷管理的内容。完善的信贷管理体系能够有效降低风险、提高收益。目前比较成熟的上市公司信用风险预测主要是采用公司的财务数据作为主要预测指标。在本章的案例中,将分别展示调用python的sklearn库与spark的Mllib库两种不同方式进行上市公司信用风险预测的过程,同时分别应用逻辑回归算法与支持向量机算法。数据说明数据选取了2015-2019年间制造业、信息传输业、批发和零售业三个行业的上市公司数据作为研究对象,这些数据包含了十五项财务指标与三项非财务指标,具体内容如左表所示。将上市公司是否被ST或*ST(特殊处理)作为公司是否具有高信息风险的判断指标,因此ST/*ST公司组成高信用风险样本组,非ST公司组成低信用风险样本组。案例研究过程01020304指标处理.研究结论.数据处理
模型建立
数据处理数据情况:从wind平台选取了2015-2019年间制造业、信息传输业、批发和零售业三个行业的上市公司数据作为研究对象。将上市公司是否被ST或*ST(特殊处理)作为公司是否具有高信息风险的判断指标,因此ST/*ST公司组成高信用风险样本组,非ST公司组成低信用风险样本组。①脏数据的剔除指标维度:检查所得数据中每个指标的数据缺失率,数据缺失率高于30%时,该指标无法加入模型进行训练,需要从原始数据指标集中剔除出去。数据条维度:检查所得数据中每个数据条中数据的缺失率,若一个数据条中的数据缺失率高于10%,该数据条无法加入模型进行训练,需剔除该条数据。②数据标准化为消除各指标量纲与数量级不一致对研究结果造成的影响,对数据进行标准化处理。选用Z-score标准化方法,公式如下:数据处理③数据平衡化●发现信用风险高的公司比例远小于信用风险低公司的比例,即在三个行业中,ST或*ST公司的数量远小于正常公司数量,这表明所得数据属于非平衡数据。●因为多数类样本属于正常公司,建立的模型容易忽略违约公司的样本数据,即使正常样本的判断准确率很高,但对于违约公司的预测能力却有着很大的影响。因此需要对数据集进行平衡化处理。●选用了SMOTE方法,SMOTE的基本思想是对少数类样本进行分析并根据少数类样本人工合成新样本到数据集中,使得数据集中ST或*ST的上市公司数量与正常上市公司数量一致,消除了不平衡数据集的影响。指标处理原始数据指标集共包含有十八项指标,其中有财务指标十五项,非财务指标三项为了避免维度灾难以及指标间多重共线性对模型稳定性造成影响,需要降低数据的指标维度指标处理①kendall秩相关系数Kendall秩相关系数主要是根据每个样本在某一属性上的取值和因变量构成的数对间的一致性来确定两个指标间的秩相关性。分别对三个行业的数据集计算其Kendall秩相关系数,并根据计算结果绘制热力图如下所示:指标处理②方差膨胀因子计算各指标间的VIF值决定需要剔除的指标结合Kendall秩相关系数和VIF值的检验结果,保留流动比率,剔除速动比率、总资产净利润率、资产报酬率。模型建立(python实现logistic)代码实现如下:(1)读取数据fromsklearnimportdatasetsimportnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('最终数据集.xlsx')#设置X和yX=data.iloc[:,1:]y=data.iloc[:,0]fromsklearn.model_selectionimporttrain_test_split(2)设置训练数据集和测试数据集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33,random_state=0)(3)训练Logistic模型fromsklearn.linear_modelimportLogisticRegressionlr=LogisticRegression(C=10)#lr在原始测试集上的表现lr.fit(X_train,y_train)模型建立(python实现logistic)(4)模型评估#打印训练集精确度print('Trainingaccuracy:',lr.score(X_train,y_train))#打印测试集精确度print('Testaccuracy:',lr.score(X_test,y_test))#计算混淆矩阵,获得真正率与真负率fromsklearn.metricsimportconfusion_matrixy_pred=lr.predict(X_test)confmat=confusion_matrix(y_true=y_test,y_pred=y_pred)print(confmat)#将混淆矩阵可视化fig,ax=plt.subplots(figsize=(2.5,2.5))ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3)foriinrange(confmat.shape[0]):forjinrange(confmat.shape[1]):ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center')plt.xlabel('预测类标')plt.ylabel('真实类标')plt.show()#AUC值fromsklearn.metricsimportroc_curve,aucprobas=lr.fit(X_train,y_train).predict_proba(X_test)fpr,tpr,thresholds=roc_curve(y_test,probas[:,1],pos_label=1)roc_auc=auc(fpr,tpr)print('AUC值为:',roc_auc)模型建立(python实现svm)代码实现如下:(1)读取数据importpandasaspdimportmatplotlib.pyplotaspltfromsklearnimportsvmplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('最终数据集.xlsx')#设置X和yX=data.iloc[:,1:]y=data.iloc[:,0]fromsklearn.model_selectionimporttrain_test_split(2)设置训练数据集和测试数据集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33)(3)建立SVM模型,进行训练classifier=svm.SVC(C=2,kernel='rbf',gamma=10,decision_function_shape='ovo',probability=True)classifier.fit(X_train,y_train.ravel())模型建立(python实现svm)(4)模型评估#计算准确率fromsklearn.metricsimportaccuracy_scoretra_label=classifier.predict(X_train)tes_label=classifier.predict(X_test)print("训练集:",accuracy_score(y_train,tra_label))print("测试集:",accuracy_score(y_test,tes_label))#计算混淆矩阵,获得真正率与真负率fromsklearn.metricsimportconfusion_matrixy_pred=tes_labelconfmat=confusion_matrix(y_true=y_test,y_pred=y_pred)print(confmat)#将混淆矩阵可视化fig,ax=plt.subplots(figsize=(2.5,2.5))ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3)foriinrange(confmat.shape[0]):forjinrange(confmat.shape[1]):ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center')plt.xlabel('预测类标')plt.ylabel('真实类标')plt.show()#计算AUC值fromsklearn.metricsimportroc_curve,aucprobas=classifier.fit(X_train,y_train).predict_proba(X_test)fpr,tpr,thresholds=roc_curve(y_test,probas[:,1],pos_label=1)roc_auc=auc(fpr,tpr)print('AUC值为:',roc_auc)模型建立(python实现朴素贝叶斯)代码实现如下:(1)读取数据importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlib.pyplotaspltfromsklearnimportdatasetsfromsklearnimporttreefromsklearn.treeimportDecisionTreeClassifierplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('最终数据集.xlsx')#设置X和yX=data.iloc[:,1:]y=data.iloc[:,0]fromsklearn.model_selectionimporttrain_test_split(2)设置训练数据集和测试数据集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33,random_state=0)(3)建立朴素贝叶斯模型,进行训练fromsklearn.naive_bayesimportGaussianNBclf=GaussianNB()clf.fit(X_train,y_train)模型建立(python实现朴素贝叶斯)(4)模型评估#打印训练集精确度print('Trainingaccuracy:',clf.score(X_train,y_train))#打印测试集精确度print('Testaccuracy:',clf.score(X_test,y_test))#计算混淆矩阵,获得真正率与真负率fromsklearn.metricsimportconfusion_matrixy_pred=clf.predict(X_test)confmat=confusion_matrix(y_true=y_test,y_pred=y_pred)print(confmat)#将混淆矩阵可视化fig,ax=plt.subplots(figsize=(2.5,2.5))ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3)foriinrange(confmat.shape[0]):forjinrange(confmat.shape[1]):ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center')plt.xlabel('预测类标')plt.ylabel('真实类标')plt.show()#AUC值fromsklearn.metricsimportroc_curve,aucprobas=clf.fit(X_train,y_train).predict_proba(X_test)fpr,tpr,thresholds=roc_curve(y_test,probas[:,1],pos_label=1)roc_auc=auc(fpr,tpr)print('AUC值为:',roc_auc)模型建立(python实现决策树)代码实现如下:(1)读取数据importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlib.pyplotaspltfromsklearnimportdatasetsfromsklearnimporttreefromsklearn.treeimportDecisionTreeClassifierplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('最终数据集.xlsx')#设置X和yX=data.iloc[:,1:]y=data.iloc[:,0]fromsklearn.model_selectionimporttrain_test_split(2)设置训练数据集和测试数据集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33,random_state=0)(3)建立决策树模型,进行训练clf=tree.DecisionTreeClassifier(criterion='entropy')clf.fit(X_train,y_train)模型建立(python实现决策树)(4)模型评估#打印训练集精确度print('Trainingaccuracy:',clf.score(X_train,y_train))#打印测试集精确度print('Testaccuracy:',clf.score(X_test,y_test))#计算混淆矩阵,获得真正率与真负率fromsklearn.metricsimportconfusion_matrixy_pred=clf.predict(X_test)confmat=confusion_matrix(y_true=y_test,y_pred=y_pred)print(confmat)#将混淆矩阵可视化fig,ax=plt.subplots(figsize=(2.5,2.5))ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3)foriinrange(confmat.shape[0]):forjinrange(confmat.shape[1]):ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center')plt.xlabel('预测类标')plt.ylabel('真实类标')plt.show()#AUC值fromsklearn.metricsimportroc_curve,aucprobas=clf.fit(X_train,y_train).predict_proba(X_test)fpr,tpr,thresholds=roc_curve(y_test,probas[:,1],pos_label=1)roc_auc=auc(fpr,tpr)print('AUC值为:',roc_auc)模型建立(python实现随机森林)代码实现如下:(1)读取数据importnumpyasnpimportscipyasspimportpandasaspdimportmatplotlib.pyplotaspltfromsklearnimportdatasetsfromsklearnimporttreefromsklearn.ensembleimportRandomForestClassifierplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsedata=pd.read_excel('最终数据集.xlsx')#设置X和yX=data.iloc[:,1:]y=data.iloc[:,0]fromsklearn.model_selectionimporttrain_test_split(2)设置训练数据集和测试数据集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.33,random_state=0)(3)建立随机森林模型,进行训练clf=RandomForestClassifier(n_estimators=10,max_depth=None,min_samples_split=2)print(clf)clf.fit(X_train,y_train)模型建立(python实现随机森林)(4)模型评价#打印训练集精确度print('Trainingaccuracy:',clf.score(X_train,y_train))#打印测试集精确度print('Testaccuracy:',clf.score(X_test,y_test))#计算混淆矩阵,获得真正率与真负率fromsklearn.metricsimportconfusion_matrixy_pred=clf.predict(X_test)confmat=confusion_matrix(y_true=y_test,y_pred=y_pred)print(confmat)#将混淆矩阵可视化fig,ax=plt.subplots(figsize=(2.5,2.5))ax.matshow(confmat,cmap=plt.cm.Blues,alpha=0.3)foriinrange(confmat.shape[0]):forjinrange(confmat.shape[1]):ax.text(x=j,y=i,s=confmat[i,j],va='center',ha='center')plt.xlabel('预测类标')plt.ylabel('真实类标')plt.show()#AUC值fromsklearn.metricsimportroc_curve,aucprobas=clf.fit(X_train,y_train).predict_proba(X_test)fpr,tpr,thresholds=roc_curve(y_test,probas[:,1],pos_label=1)roc_auc=auc(fpr,tpr)print('AUC值为:',roc_auc)模型建立(spark实现logistic)实验环境为:Python3.6.5Ubuntu16.04内存设置:2GBcpu:1Sparkversion3.0.0Scalaversion2.12.10(JavaHotSpot(TM)64-BitServerVM,Java14.0.2)代码实现如下:(1)引入相关库frompysparkimportSparkContextfrompyspark.mllib.regressionimportLabeledPointfrompyspark.mllib.classificationimportLogisticRegressionWithSGDimportargparse(2)定义方法函数defparsePoint(line):values=[float(s)forsinline.strip().split()]returnLabeledPoint(values[-1],values[:-1])if__name__=="__main__":argument_parser=argparse.ArgumentParser()#数据集路径argument_parser.add_argument("-d","--dataset",required=True,help="pathofinputdataset")#迭代次数argument_parser.add_argument("-i","--iterations",required=True,help="timesofiterations")arguments=vars(argument_parser.parse_args())模型建立(spark实现logistic) #数据集路径path=arguments["dataset"]#迭代次数iterations=int(arguments["iterations"]) #Spark上下文对象sc=SparkContext(appName="logistic_regression") #读取数据集,并提取标签和数据points=sc.textFile(path).map(parsePoint)#创建模型model=LogisticRegressionWithSGD.train(points,iterations) #定义模型评估函数defModelAccuracy(model,validationData):#计算模型的准确率predict=model.predict(validationData.map(lambdap:p.features))predict=predict.map(lambdap:float(p))#拼接预测值和实际值predict_real=predict.zip(validationData.map(lambdap:p.label))matched=predict_real.filter(lambdap:p[0]==p[1])accuracy=float(matched.count())/float(predict_real.count())returnaccuracy(3)调用函数acc=ModelAccuracy(model,validationData)##打印accuracyprint("accuracy="+str(acc))模型建立(spark实现svm)实验环境为:Python3.6.5Ubuntu16.04内存设置:2GBcpu:1Sparkversion3.0.0Scalaversion2.12.10(JavaHotSpot(TM)64-BitServerVM,Java14.0.2)代码实现如下:(1)导入数据:#定义路径globalPathifsc.master[:5]=="local":Path="file:/home/yue/pythonwork/PythonProject/"else:Path="hdfs://master:9000/user/yue/"#读取train.tsvprint("开始导入数据...")rawDataWithHeader=sc.textFile(Path+"data/train.tsv")(2)划分训练集、验证集和测试集(trainData,validationData,testData)=labelpointRDD.randomSplit([7,1,2])(3)训练模型SVMWithSGD.train(data,iterations=100,step=1.0,regParam=0.01,miniBatchFraction=1.0,initialWeights=None,regType="l2",intercept=False,validateData=True,convergenceTol=0.001)模型建立(spark实现svm)##使用SVM分类模型进行训练frompyspark.mllib.classificationimportSVMWithSGD##使用默认参数训练模型model=SVMWithSGD.train(trainData,iterations=100,step=1.0,miniBatchFraction=1.0,regParam=0.01,regType="l2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年小儿肺热咳喘冲剂项目可行性研究报告
- 2024至2030年中国微波炉发热片行业投资前景及策略咨询研究报告
- 2024至2030年中国幕墙材行业投资前景及策略咨询研究报告
- 2024年中国驴鞭市场调查研究报告
- 2024年汽车空调用风机项目可行性研究报告
- 青海大学《中国房地产博观》2023-2024学年第一学期期末试卷
- 青岛远洋船员职业学院《蔬菜作物究法》2023-2024学年第一学期期末试卷
- 青岛幼儿师范高等专科学校《环境科学进展》2023-2024学年第一学期期末试卷
- 企业资产重组与并购策略研究
- 青岛农业大学海都学院《机械工程综合实验》2023-2024学年第一学期期末试卷
- 英国文学史及选读试题及答案
- 情感修复计划书
- 电厂粉煤灰储灰场施工组织设计样本
- 2025届高考语文复习:诗歌形象鉴赏之事物形象
- 控制性低中心静脉压在腹腔镜肝部分切除术的应用
- 体检科年终报告工作总结
- 焊接工艺优化与提高焊接效率
- 视频监控系统维护方案
- 哈利波特与密室课件
- 工商管理就业去向分析报告
- 2024年度医院心胸外科护士长述职报告课件
评论
0/150
提交评论