总结 : 论文--Financial Distress Prediction

2023-12-29 23:58

本文主要是介绍总结 : 论文--Financial Distress Prediction,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 前言
    • 数据获取与处理
    • 实验方法与模型
    • 论文写作技巧
    • Word使用技巧

前言

    本文对近期完成的一篇小论文做些总结,以后大论文估计也是基于此研究来进行改进,现对论文完成的整个经过包括实验部分以及论文写作等部分做出总结,以防忘却。论文题目为:《Adaboost ensemble with PSO-SVM for financial distress prediction》。主要思想是将粒子群算法(PSO)优化过的支持向量机(SVM)作为弱分类器,通过集成的方式,将弱分类器集合成强分类器从而提高预测分类精度。

数据获取与处理

    本实验所使用的数据来自于CSMAR经济金融研究数据库。取上市公司的财务指标数据作为研究样本。

    本实验利用python进行数据处理:

(1)导出Excel格式创建Matlab数据,即.xls格式的数据,然后直接用 pd.read_excel() 将数据读取出。在读.csv格式的数据时遇到一个Bug:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

这里的意思是read_csv以utf-8的编码格式不能正确读取数据,在用linux file 命令查看过数据文件的编码格式后,设置encoding='UTF-16’后就能正确读出数据来了。
(2)使用 pd.concat() 将经营受损(AB)和两年亏损(AD)的公司进行合并,从而得到标签数据集。
(3)python的pandas库中的 isin() 函数很好用,可以用来做各种判断。~ 符号通常可以和isin()搭配使用,可以起到反向选取的作用。详解参考:pandas.DataFrame.isin
(4)to_datetime() 函数能够将数据转换成时间日期。时间日期之间也是可以直接比较滴。详解参考:pandas.to_datetime
(5)保存文件时,可以通过变量转字符串的方式 str(i) 插入到文件名中,代码如下:

for i in range(2014,2019):st = st_target_1418[(st_target_1418['Annoudt'] >= pd.datetime(i,1,1)) & (st_target_1418['Annoudt'] <= pd.datetime(i,12,31))]st.to_csv('./data/ST/st_target_' + str(i) + '.csv', encoding='UTF-8-sig')

(6)可以用 dataframe.columns.valuesdataframe.index.values 来获取dataframe的行索引名值和列名值。tolist( ) 可以将这些数据转换成列表。
(7)pd.merge() 函数可以让python实现数据库方式的数据合并,包括内、外连接等。详解参考:pandas.DataFrame.merge
(8)describe(include=‘all’) 可以对所有类型的数据进行描述。
(9)使用 lambda 表达式实现标签数据的0、1转换,代码如下:

data_2014['ST'] = data_2014.Stkcd.apply(lambda x: 1 if x in id_2014_st_ else 0)

(10)random.sample(sequence,k) 可以从指定序列中随机获取指定长度的片段。sample函数不会修改原有的序列。
(11)通过groupby函数,按照对应年份分组后求各列值的平均值,代码如下:

columns_data_2015 = data_2015.columns.values.tolist()[4:]
data_2015_new = data_2015.groupby('Stkcd')[columns_data_2015].mean()

(12)corr() 函数检查变量之间的相关性,本文采用Pearson相关系数法对变量之间的相关性做出检验。详解参考:corr
(13)np.percentile() 可以获取数列的百分比点的数。

实验方法与模型

1、数据降维

    本实验首先使用主成分分析法(PCA)对数据进行降维处理。相关代码如下:

from sklearn.decomposition import PCA
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X_data, y_data, random_state=123)
pca = PCA(n_components=0.9, whiten=True).fit(X_train)# 使用pca的transform方法获得降维之后的数据 
X_train_pca = pca.transform(X_train)
X_test_pca = pca.transform(X_test)

2、模型方法
    (1)调用sklearn中的SVM模型,time可以用来计算代码块运行的时间,代码如下:

from sklearn.svm import SVC
from time import timet0 = time()
svm_clf = SVC(kernel='rbf')    # 训练SVM分类器的时候,可以通过网格调参搜索后得到最优拟合器。
svm_clf.fit(X_train_pca, y_train)
print("done in %0.3fs" % (time()-t0))

    (2)粒子群优化算法优化SVM的参数c和g,再将优化过的参数重新构建SVM模型,其中PSO算法参考github:https://github.com/shiluqiang/PSO_python/blob/master/PSO_RBF_SVM.py。
    (3)Adaboost-SVM模型:条用sklearn.ensemble模块中的AdaboostClassifier方法,通过调整方法中的超参数base_estimator为指定的svc,svc需要设置probability=True才可被adaboost接受,即可构建adaboost-svm算法模型,参考:adaboost with svm。构建的代码如下所示:

from sklearn.ensemble import AdaBoostClassifier
from sklearn.model_selection import GridSearchCV# 接下来我用网格调参来选择adaboost的两个参数,n_estimators和learning_ratesvc=svm.SVC(kernel='rbf', C=6.7143, gamma=0.0152, probability=True)
adaboost_with_svc = AdaBoostClassifier(n_estimators=15, base_estimator=svc, learning_rate=0.5)Ada_Grid = {'n_estimators': [5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,150,200,300,400,500],'learning_rate': [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]}estimator = adaboost_with_svcAdaboost_with_grid_search = GridSearchCV(estimator, Ada_Grid).fit(X_train_pca, y_train)
print(Adaboost_with_grid_search.best_params_)
print(Adaboost_with_grid_search.best_score_)

    (4)模型的评价方法:包括roc曲线、auc值、精确度、分类报告、混淆矩阵。这些方法都集成在sklearn.metrics中,导入方法如下:

from sklearn.metrics import roc_curve, auc
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

论文写作技巧

1、参考文献的格式转化
    为了符合IEEE参考文献的输入格式,本文编写时使用在线格式转化工具对所用参考文献进行符合EI格式的转化。

Word使用技巧

    论文使用Word 2016 for mac编写,期间各种格式问题困扰的不要不要的,在此记录一些使用的技巧。
1、行间距再次缩小
    word2016 for mac即使设置了1.25倍行距,看起来依然行间距较大,那是因为它默认的每页显示的行数只有33行,这样自然导致了行距过大,通过设置:格式-文档-文档网格-行数 可进行调整,每页多加几行就可以缩小行距了。
2、word中纸张的设置
    布局-大小-纸张选择。
3、word中分栏的设置
    选中需要分栏的内容,然后布局-分栏。
4、word表格的设置
    选中表格-布局-自动调整,可设置根据内容/窗口自动调整表格。
    选中表格-段落-缩进和间距-行距设置为固定值*磅可以将表格内的行间距进行缩小。
5、word内容不垮
    对所写内容选择对齐文本,可以使得文字内容左右对齐。配合在段落-中文版式-不勾选允许西文在单词中间换行,可以保证每行的内容不夸。
6、word中插入LaTeX公式
    参考:word插入LaTeX公式。使用Mathpix Snipping tool工具对公式进行截图,就能转换成LaTeX公式,copy后在mac自带的Pages插入-方程-粘贴LaTeX公式,就能转变成可编辑的公式,再复制公式到word中。
7、word中公式对齐
    可插入一个一行三列的表格,左右各占15%(通过右击-表格属性-列-指定宽度为15%,度量单位百分比),中间列插入公式居中对齐,右边列插入编号右对齐。
8、word中输入希腊字母
    使用百度输入法自带的数学符号键盘进行输入。
9、参考文献的格式

(1)把准备好的参考文献粘贴到记事本中,在标号和正文之间添加一个制表符/tab键

如下图所示:


(2)把第一步处理好的参考文献粘贴到word中进行如下设置:

        开始=》段落=》常规=》对齐方式:两端对齐;

                                     缩进=》特殊格式:悬挂缩进为2个字符


(3)调整后的参考文件就完美对齐了,如下图所示:


这篇关于总结 : 论文--Financial Distress Prediction的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/551096

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自