总结 : 论文--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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel