《数据挖掘与财务决策》课件 第8章 财务决策案例-财务舞弊识别_第1页
《数据挖掘与财务决策》课件 第8章 财务决策案例-财务舞弊识别_第2页
《数据挖掘与财务决策》课件 第8章 财务决策案例-财务舞弊识别_第3页
《数据挖掘与财务决策》课件 第8章 财务决策案例-财务舞弊识别_第4页
《数据挖掘与财务决策》课件 第8章 财务决策案例-财务舞弊识别_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

第8章财务决策案例—财务舞弊识别《数据挖掘与财务决策》目录8.1财务舞弊概述8.2

财务舞弊数据收集8.3

财务舞弊数据预处理8.4财务舞弊建模8.1财务舞弊概述8.1.1财务舞弊概念8.1.2财务舞弊数据挖掘意义我国《独立审计具体准则第8号——错误与舞弊》则将舞弊定义为“无法真实反映会计报告信息的故意行为”。财务舞弊本质上是一种信息披露违规行为,即在信息披露过程中违反相关法律法规、对外提供虚假信息或隐瞒重大事项的行为。财务舞弊可分为虚假陈述和延迟披露两种类型。虚假陈述是指管理者在资本市场上对重大事实提供与实际情况不相符的虚假记载、误导性陈述或者发生重大遗漏的违规操作。虚假陈述可进一步细分为虚假记载、误导性陈述和重大遗漏三种手段类型。8.1.1财务舞弊概念(1).虚假记载虚假记载是指实际未发生的事项被信息披露者加以编造或违规保留、导致年报上出现违背客观事实的事项记录,具体包括虚构利润、虚列资产、一般会计处理不当和披露不实。(2).误导性陈述误导性陈述可以看作为虚假记载行为的特例,是一种让投资者产生误判做出存在潜在重大影响的错误决策的陈述行为。(3).重大遗漏重大遗漏是指披露文件者为谋取不正当利益而隐瞒全部或部分与投资者利益高度相关的重大事项,即披露年报中存在应当记录而实际未记载的重要客观事实。8.1.1财务舞弊概念8.1.1财务舞弊概念

图8-1财务舞弊手段8.1.2财务舞弊数据挖掘意义财务舞弊识别大多从上市公司披露的年报数据中选取财务指标或非财务指标数据进行研究。传统统计模型大多采用Logistic回归等传统方法建立舞弊异常检测模型。采用Logistic统计方法识别财务舞弊具有如下优点:对舞弊数据的分布没有要求。对自变量的数据类型没有要求简单易用适应于小样本数据8.1.2财务舞弊数据挖掘意义

采用Logistic统计方法识别财务舞弊具有如下缺点:(1)舞弊识别指标选择困难。(2)是否舞弊难以判断。(3)识别准确率较低。

近年来,随着数据挖掘技术的发展,越来越多的研究将相关技术应用于财务舞弊识别中。

与基于传统统计方法的舞弊识别模型相比,基于数据挖掘的识别模型可以解决非线性可分问题,但容易出现欠拟合、过拟合、泛化能力差等问题。8.2财务舞弊数据收集8.2.1财务指标数据选取8.2.2财务指标数据下载8.2.1财务指标数据选取依照Wind数据库的分类来区分舞弊与非舞弊企业,选取A股上市公司的相关数据。其中非舞弊企业选取了2021年国际四大会计师事务所出具了标准无保留意见审计报告的企业,这类企业共374家。对于舞弊企业的选择,在Wind违规库设定相关字段并从中选取2010-2021年记录在案的企业并将具体违规原因和处分类型一并导出,后期再通过人工复筛,最终确定700家舞弊企业。舞弊企业获取具体路径为:2010-2020内地股市专题统计-公司研究-违规-信息披露违规导致重大误导性称述。选择33个指标,其中财务指标29个,非财务指标4个,财务指标通过PythonTushare接口爬取并经过后续指标计算取得,非财务指标由CSMAR数据库取得。8.2.1财务指标数据选取所收集的29个财务指标共分为4大类:静态指标、趋势指标、联动指标和舞弊异常指标。1.静态指标静态指标选取了流动比率、速动比率、股东权益报酬率、毛利率、营业利润率、净利润率、总资产周转率、存货周转率、应收账款周转率和固定资产周转率这10个指标。2.趋势指标趋势指标选取了应收占比增长率、总资产周转率增长率、毛利率增长率、资产负债率增长率、TATA增长率、折旧比率增长率、预付账款比重增长率、资产减值比率增长率、资产质量比率增长率等共9个指标。3.联动指标联动指标包括货币资金与短期债务匹配率、净现比和投资现金流占投资比。4.舞弊异常指标舞弊异常指标包括正常增长乘数、异常存货、异常毛利润、异常其他应收款、异常应收款和异常销售管理费用。5.非财务指标非财务指标包括董事与高管重合度、独立董事占比、女性董事的比例、第一大股东持股比例等共4个指标。8.2.2财务指标数据下载1.财务指标通过

Tushare接口从wind数据库下载。首先从wind违规库中下载舞弊公司信息,保存为excel文件,文件命名为company_f.xlsx。然后从Python导入相关的软件包,并初始化Tushare。(相关代码见8.2.2节)2.下面开始获取趋势指标。先循环计算舞弊当年财务指标数据,再循环计算舞弊前年财务指标数据,这两步的代码很相似。(相关代码见8.2.2节)8.3财务舞弊数据预处理8.3.1数据清洗8.3.2数据归一化8.3.3特征降维8.3.1数据清洗收集的原始数据存在缺失值、无穷大值、零值等情况,且每个特征的数据之间的量纲也不一致,特征之间也存在数据冗余的情况,因此需要先对原始数据进行预处理。预处理的过程主要包括数据清洗、数据归一化和特征降维等步骤。1.异常值处理有部分财务指标在计算的过程中产生#DIV/0!这样的异常值,用以下代码替换异常值:

df=df.replace('#DIV/0!','');2.重复值处理

证监会可能会因为某公司舞弊在同一年份出示多次有关该公司的公告,导致在统计舞弊公司时可能会出现重复样本,需要删除重复的观察值。删除重复值的主要代码如下:

print(df[df.duplicated()])#检查是否存在重复的观察值df=df.drop_duplicates()#删除重复值8.3.1数据清洗3.缺失值处理先采用isnull方法查看哪些列存在缺失值,主要代码如下:

print(df.isnull().any())#查看存在缺失值的列

然后用dropna方法代码删除缺失值大于30的列,主要代码如下:

df=df.dropna(axis=0,thresh=30)#非缺失值的数量小于30,则删除这一条记录

对于剩余的缺失值,我们用对应指标的均值来填充,填充的主要代码如下:

foriinrange(2,len(df.columns)):df.iloc[:,i:i+1]=df.iloc[:,i:i+1].fillna(df.iloc[:,i:i+1].mean())4.无穷大处理部分指标中存在inf(无穷大),针对该指标中的inf,我们选择通过删除对应指标以保证数据的有效性,主要代码如下:

df=df.replace([np.inf,-np.inf],np.nan).dropna(axis=1)

至此,所收集的数据集已经清洗完毕。8.3.2数据归一化收集的特征数据往往具有不同的量纲和量纲单位,这样的情况会影响到数据挖掘的结果。为了消除指标之间的量纲影响,需要进行数据归一化处理,使得所有的财务指标之间具有可比性。常用的归一化方法有最大-最小规范化、零均值规范化、小数定标规范化等。舞弊公司可能因为其舞弊行为导致财务指标中存在“合理”的极端值,这有可能是舞弊识别点之一,不能随意将极端值进行平滑处理。因此,考虑到离群点的影响,采用对离群点不敏感的零均值规范化进行数据处理。“零均值”规范的主要代码如下所示:

fromsklearnimportpreprocessingimportjoblibscaler=preprocessing.StandardScaler().fit(df.iloc[:,2:-5])df.iloc[:,2:-5]=scaler.transform(df.iloc[:,2:-5])joblib.dump(scaler,"scaler.pkl")#保存归一化参数print(df.iloc[:,:-5])df.to_excel('ProcessedData.xlsx',index=False)8.3.3特征降维数据集中的特征数量较多时,可能会存在模型训练时间过长,内存不够的问题,也更容易产生过拟合问题。另外,有些模型对指标有较高的要求,例如,朴素贝叶斯假定一个指标值对给定类的影响独立于其他指标值,指标之间不存在依赖关系。如果存在两个相关度过高的指标,朴素贝叶斯模型就会“过度计算”某些特定的证据,很容易过高估计某些方面特征的影响。对于一些模型而言,相关度过高的指标代表着存在特征冗余,模型只需要依赖部分指标就能实现。综合以上原因,需要对数据集进行降维处理。降维之前,先绘制热力图,观察指标之间的相关性系数,并剔除冗余的特征。8.3.3特征降维由热力图可以看到,部分指标之间存在相关系数较大的情况,例如:流动比率和速动比率之间的相关系数较大,营业利润率和净利润率之间的相关系数也较大。将相关系数绝对值大于0.8的指标删除掉,代码如下:df=df.drop(['流动比率','净利润率','折旧比率增长率','折旧比率增长率','资产减值比率增长率','总资产周转率增长率','第一大股东持股比例'],axis=1,inplace=False)删掉这些指标之后,再计算剩余指标的相关系数,绘制热力图,会发现剩余指标之间的相关系数都较小了。降维后的数据集以'特征降维后数据.xlsx'命名保存,用于下一步的财务舞弊建模。图8-2数据集各特征之间关系的热力图8.4财务舞弊建模8.4.1决策树建模8.4.2朴素贝叶斯建模8.4.3K-最近邻建模8.4.4支持向量机建模8.4.5随机森林8.4.6XGBoost建模8.4.7模型的评价指标8.4.1决策树建模决策树的主要参数如下:classsklearn.tree.DecisionTreeClassifier(criterion='gini',splitter='best',max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None,class_weight=None,presort=False)criterion:string类型,该参数定义了决策树分支的依据,参数可以设置为"gini"或"entropy"。

max_depth:int类型,表示树的最大深度。如果是"None",则节点会一直扩展直到所有的叶子都是纯的或者所有的叶子节点都包含少于min_samples_split个样本点。min_samples_split:int,或floast,该参数是区分决策树一个内部节点需要的最少的样本数。如果是int,将其最为最小的样本数;如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是每个分类需要的样本数,ceil是取大于或等于指定表达式的最小整数。min_samples_leaf:int或float,默认为1,该参数定义了一个叶节点所需要的最小样本数。.如果是int,则其为最小样本数;如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。max_leaf_nodes:int,默认为None。在最优方法中使用max_leaf_nodes构建一个树,如果是None则对叶节点的数目没有限制。8.4.1决策树建模用决策树建立财务舞弊识别的模型代码如下。fromsklearnimporttreeclf=tree.DecisionTreeClassifier(criterion=’gini’)clf=clf.fit(X_train,Y_train)clf_pred=clf.predict(X_train)clf_pred1=clf.predict(X_test)clf_score=metrics.accuracy_score(Y_test,clf_pred)print(‘clf’,clf_score)其中:第一行代码是从PTYHON的sklearn机器学习库中导入决策树模块tree;第二行建立决策树的一个实例clf;第三行对决策树进行拟合;第四行对训练集数据进行预测;

第五行对测试集数据进行预测;第六行计算决策树模型的准确率;第七行打印决策树模型识别的准确率。8.4.2朴素贝叶斯建模朴素贝叶斯是基于贝叶斯定理对数据进行分类,它的建模过程基于各特征条件独立的基础上实现。该算法比较简单,容易理解,能够处理小样本问题,但是在实际应用中,数据集各特征之间很难满足独立性的假设。Sklearn提供了三种朴素贝叶斯的实现方法,包括高斯朴素贝叶斯GaussianNB、多项式朴素贝叶斯MultinomialNB和伯努利朴素贝叶斯BernoulliNB。高斯朴素贝叶斯主要用于连续值特征分类。8.4.2朴素贝叶斯建模用朴素贝叶斯建立财务舞弊识别的模型代码如下:fromsklearn.naive_bayesimportGaussianNBgnb=GaussianNB()gnb=gnb.fit(X_train,Y_train)gnb_pred=clf.predict(X_train)gnb_pred1=clf.predict(X_test)gnb_score=metrics.accuracy_score(Y_test,clf_pred)Print(‘gnb’,gnb_score)其中:第一行代码是从PTYHON的sklearn机器学习库的朴素贝叶斯模块naïve_bayes中导入高斯贝叶斯方法;第二行建立朴素贝叶斯的一个实例gnb;第三行对朴素贝叶斯进行拟合;第四行对训练集数据进行预测;第五行对测试集数据进行预测;第六行计算朴素贝叶斯模型的准确率;第七行打印朴素贝叶斯模型识别的准确率。8.4.3K-最近邻建模KNN的主要参数如下:classsklearn.neighbors.KNeighborsClassifier(n_neighbors=5,*,weights=‘uniform’,algorithm=‘auto’,leaf_size=30,p=2,metric=‘minkowski’,metric_params=None,n_jobs=None)n_neighbors:k值,该参数是算法的关键参数,定义了邻居的个数,默认为5。weights:权重项,默认uniform方法。Uniform:所有最近邻样本的权重都一样。Distance:权重和距离呈反比,距离越近的样本具有更高的权重。Callable:用户自定义权重。algorithm:用于计算最近邻的算法。ball_tree:球树实现;kd_tree:KD树实现,是一种对n维空间中的实例点进行存储以便对其进行快速搜索的二叉树结构;brute:暴力实现。默认为auto:自动选择,权衡上述三种算法自动选择最优算法。leaf_size:空值KD树或者球树的参数,停止建子树的叶子节点的阈值。p:距离的计算方式。当P=1为曼哈顿距离,当p=2为欧式距离。metric:用于树的距离度量。metric_params:用于比较复杂的距离的度量附加参数。8.4.3K-最近邻建模用KNN算法建模的代码如下:

fromsklearn.neighborsimportKNeighborsClassifierKnn=KNeighborsClassifier()Knn=Knn.fit(X_train,Y_train)Knn_pred=Knn.predict(X_test)Knn_pred1=Knn.predict(X_train)Knn_score=metrics.accuracy_score(Y_test,Knn_pred)print('Knn:',Knn_score)其中:第一行代码是从PTYHON的sklearn机器学习库的最近邻模块neighbors中导入K最近邻方法KneighborsClassifier。第二行建立K最近邻方法的一个实例Knn。第三行对Knn进行拟合。8.4.4支持向量机建模支持向量机的参数如下:sklearn.svm.SVC(C=1.0,kernel='rbf',degree=3,gamma='scale',coef0=0.0,shrinking=True,probability=False,tol=1e-3,cache_size=200,class_weight=None,verbose=False,max_iter=-1,decision_function_shape='ovr',break_ties=False,random_state=None)C:默认值为1.0,它是一个惩罚系数,用于平衡最大化分类间隔和误分类惩罚间隔之间的关系。较大的C意味着对误分类的惩罚更大,模型会倾向于将更多的训练数据点分类正确,但可能会导致间隔变小,可能出现过拟合;较小的C则更关注间隔的大小,而允许更多的误分类,从而提高模型的泛化能力。kernel:默认值为‘rbf’;这个参数指定了要使用的核函数,支持不同的非线性映射方法。该参数可选的值包括linear、sigmoid、rbf和poly。Linear定义了使用线性核函数,即不进行任何非线性映射;sigmoid:类似于神经网络的激活函数,较少使用;rbf:径向基函数(RadialBasisFunction),又称高斯核,是最常用的非线性核函数;poly:多项式核函数,通常用于多项式可分的情况。degree

:默认值为3。当

kernel='poly'

时,该参数指定多项式核的多项式次数。gamma:默认值为'scale';它是核函数系数,适用于

'rbf'、'poly'

'sigmoid'

核函数。gamma

值越大,模型越倾向于拟合训练数据,但可能会导致过拟合;gamma

值越小,模型更倾向于平滑。8.4.4支持向量机建模用支持向量机建模的代码如下:fromsklearnimportsvmSVM=svm.SVC(kernel='linear')SVM=SVM.fit(X_train,Y_train)SVM_pred=SVM.predict(X_test)SVM_pred1=SVM.predict(X_train)SVM_score=metrics.accuracy_score(Y_test,SVM_pred)print('SVM:',SVM_score)其中:第一行代码是从PTYHON的sklearn机器学习库导入支持向量机模块SVM。

第二行建立支持向量机法的一个实例SVM。第三行对SVM进行拟合。8.4.5随机森林随机森林的参数如下:RandomForestClassifier(bootstrap=True,ccp_alpha=0.0,class_weight=None,criterion='gini',max_depth=None,max_features='auto',max_leaf_nodes=None,max_samples=None,min_impurity_decrease=0.0,min_impurity_split=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,n_estimators=100,n_jobs=None,oob_score=False,random_state=None,verbose=0,warm_start=False)sklearn中随机森林的许多参数是用于限定集成的弱分类器(一般采用决策树作为弱分类器)模型的,这部分参数和决策树模型中的许多参数相同,这里不再重复进行详细说明了。8.4.5随机森林用随机森林建模的代码如下:fromsklearn.ensembleimportRandomForestClassifierRFR=RandomForestClassifier(n_estimators=10,random_state=123)RFR.fit(X_train,Y_train)RFR_pred=RFR.predict(X_test)RFR_pred1=RFR.predict(X_train)RFR_score=metrics.accuracy_score(Y_test,RFR_pred)print('RFR:',RFR_score)其中:第一行代码是从sklearn机器学习库ensemble中导入随机森林模块RandomForestClassifier;第二行生成随机森林的一个实例RFR。

8.4.6XGBoost建模XGBoost的参数很多,常用参数如下:XGBClassifier(max_depth=3,learning_rate=0.1,n_estimators=100,objective='binary:logistic',booster='gbtree',gamma=0,min_child_weight=1,max_delta_step=0,subsample=1,colsample_bytree=1,reg_alpha=0,reg_lambda=1,seed=None)。XGBoost的许多参数是用于限定集成的弱分类器(一般采用决策树作为弱分类器)模型的,这部分参数和决策树模型中的许多参数相同,这里只介绍几个没有在决策树中出现的参数。N_estimators定义了弱分类器(一般采用决策树作为弱分类器)的数量。objective定义学习任务及相应的学习目标。booster定义了使用哪种弱评估器,可以选择gbtree(树模型)、gblinear(线性模型)或dart。8.4.6XGBoost建模用XGBoost建模的代码如下:fromxgboostimportXGBClassifiermodel=XGBClassifier(max_depth=3,n_estimators=100,learning_rate=0

温馨提示

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

评论

0/150

提交评论