企业欺诈识别

1.企业欺诈识别

(本节内容的数据见电脑F:/python数据/audit_risk 或腾讯微云文件”python数据\audit_risk “)
在这里插入图片描述
最后一列是预测列,预测是否存在风险;前面的列是特征列。
我们要把特征列和预测列单独分开。

第一步先阅读数据
在这里插入图片描述
第二步:数据预处理
我们要把非数值型数据处理为数值型
第三步:模型划分(把数据划分为特征列和预测列,最后一列是预测列,预测是否存在风险;前面的列是特征列。)

import  pandas as pd

frame=pd.read_csv('F:/python数据/audit_risk.csv',header=0)
y=frame[frame.columns[len(frame.columns)-1]] #Risk是预测列,我们要单独提出来
#frame.columns[len(frame.columns)-1]得到的就是最后一列的列名称“Risk”
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) #Risk是预测列,我们要删除预测列“Risk”
X=frame
print(X)

'''我们之所以没有用frame['Risk']直接定位最后一列,是因为我们有时候见到的数据是没有列名的'''

在这里插入图片描述
第四步:数据训练

import  pandas as pd
from sklearn.model_selection import train_test_split

frame=pd.read_csv('F:/python数据/audit_risk.csv',header=0)
#frame.columns[len(frame.columns)-1]就是"Risk"
y=frame[frame.columns[len(frame.columns)-1]] #Risk是预测列,我们要单独提出来
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) #Risk是预测列,我们要删除预测列“Risk”
X=frame

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 
#依次是特征训练集,特征测试集,预测训练集,预测测试机
#test_size=0.1就是说训练集和测试集比例为9:1

第五步:效果评估

import  pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier #使用最近邻模型
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv',header=0)
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 
X=frame

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 

estimator=KNeighborsClassifier()
estimator.fit(X_train,y_train)
y_predicted=estimator.predict(X_test)

print('准确度为:{:.1f}%'.format(np.mean(y_test==y_predicted)*100))

在这里插入图片描述

2.企业欺诈识别的完善

(本节内容的数据见电脑F:/python数据/audit_risk 或腾讯微云文件”python数据\audit_risk “)
在这里插入图片描述
1.数据预处理
在这里插入图片描述

①非数值的处理

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
results=frame.applymap(np.isreal)
#applymap(函数a)可以将DtaFrame中所有元素都应用一下“函数a”的运算,np.isreal判断是不是数字
#只要某一列中存在一个非数字型数据,那么这一列就全是False
print(results)

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
results=frame.applymap(np.isreal).all() #加上.all()就可以只显示我们需要的信息
print(results)

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
results=frame.applymap(np.isreal).all()
print(results[(results==False)]) #只显示有问题的列

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 
#将我们检索出来的异常列全部用数值填充那些异常数值,pd.to_numeric就是转为数值的意思,errors='coerce'就是用空值填充非数字的数据

results=frame.applymap(np.isreal).all() #再次检索看看还有没有非数字列
print(results)

在这里插入图片描述
②空值的处理

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 
#将我们检索出来的异常列全部用数值填充那些异常数值,errors='coerce'就是用空值填充异常数据

results=frame.isnull() #返回一个和原始DataFrame一样大小的矩阵,其中True表示该数字为空值
print(results)

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 

results=frame.isnull().any(0) #使用any(0)当这一列内在任何一个空值则这一列返回True
print(results)

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 

results=frame.isnull().any(1) #使用any(1)当这一行内在任何一个空值则这一行返回True
print(results[results==True])

在这里插入图片描述

import  pandas as pd
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 
frame=frame.fillna(0) #使用0来填充对应的空值
results=frame.isnull().any(0)
print(results)

在这里插入图片描述

import  pandas as pd
from sklearn.impute import SimpleImputer

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 
imp=SimpleImputer(strategy='mean') #利用空值所在列的数据平均值来填充空值
newframe=imp.fit_transform(frame)
print(newframe)

在这里插入图片描述

import  pandas as pd
from sklearn.impute import SimpleImputer

frame=pd.read_csv('F:/python数据/audit_risk.csv')
print(frame)  #数据是DataFrame类型
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce') 
print(frame)  #数据还是DataFrame类型
imp=SimpleImputer(strategy='mean') #利用空值所在列的数据平均值来填充空值
newframe=imp.fit_transform(frame)
print(newframe)  #经过这一步处理,数据变成了numpy类型

'''我们有一步是划分特征数据与预测数据
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 
这一步必须趁着还是DataFrame类型时处理'''

在这里插入图片描述

import  pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier #使用最近邻模型
from sklearn.impute import SimpleImputer
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce')  #把异常数值处理为空值
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 

imp=SimpleImputer(strategy='mean') #利用空值所在列的数据平均值来填充空值
newframe=imp.fit_transform(frame)
X=newframe

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 

estimator=KNeighborsClassifier()
estimator.fit(X_train,y_train)
y_predicted=estimator.predict(X_test)

print('准确度为:{:.1f}%'.format(np.mean(y_test==y_predicted)*100))

在这里插入图片描述
③数据规范化处理

import  pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier 
from sklearn.preprocessing import StandardScaler
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce')  #把异常数值处理为空值
frame=frame.fillna(0) #用0来填充空值
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 

X=frame
X=StandardScaler().fit_transform(X) #这一步就是数据规范化处理,用来处理那些“过激”的数据

X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 

estimator=KNeighborsClassifier()
estimator.fit(X_train,y_train)
y_predicted=estimator.predict(X_test)

print('准确度为:{:.1f}%'.format(np.mean(y_test==y_predicted)*100))

在这里插入图片描述
2.交叉验证
①将训练集和测试集交换一下

import  pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier 
import numpy as np

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce')  #把异常数值处理为空值
frame=frame.fillna(0) #用0来填充空值
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 

X=frame
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 

estimator=KNeighborsClassifier()
estimator.fit(X_test,y_test) #交换了训练集和测试集来交叉验证
y_predicted=estimator.predict(X_train)  #交换了训练集和测试集来交叉验证

print('准确度为:{:.1f}%'.format(np.mean(y_train==y_predicted)*100))

在这里插入图片描述
②用cross_val_score

import  pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier 
import numpy as np
from sklearn.model_selection import cross_val_score

frame=pd.read_csv('F:/python数据/audit_risk.csv')
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce')  #把异常数值处理为空值
frame=frame.fillna(0) #用0来填充空值
y=frame[frame.columns[len(frame.columns)-1]] 
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace=True) 

X=frame
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1) 

estimator=KNeighborsClassifier()
scores=cross_val_score(estimator,X,y,scoring='accuracy',cv=10) #scoring='accuracy'评估指标是“精准度”,cv=10交叉分组的次数是10
print(np.mean(scores))

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你的甲乙丙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值