一.数据加载
首先我们进行导入以下4个包
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
通过代码:frame = pd.read_csv(' ',header = 0)可以将数据读取到Python中
二.数据预处理
1:数据格式处理
我们的数据表格如下所示:
我们的数据其实是有问题的,这些数据里有本应为数值型数据确填写非数值型的数据,还有空值,我们应当如何找到它们呢?
首先我们通过下面代码读取数据
frame = pd.read_csv(r'C:\Users\Administrator\Desktop\新建文件夹\audit_risk1.csv',header = 0)
之后我们通过代码查看哪些列有非数值型数据
results = frame.applymap(np.isreal).all(0)
可以得到下面结果,我们发现LOCATION_ID列里含有非数值型数据
我们可以通过to_numeric方法将其强制转换为数据格式,如有异常则换为空值,代码如下:
frame['LOCATION_ID']=pd.to_numeric(frame['LOCATION_ID'],errors='coerce')
这时候我们再次查看是否还有显示False的非数值型数据,发现已经没了,可以得到下图的结果:
2:空值处理
我们输入下面的公式,来判断那些列有空值:
result = frame.isnull().any(0)
可得到下面结果:
可发现里面MoneyValue里面有空值,可输入下面公式将所有空值位填充为0:
frame=frame.fillna(0)
再次查询我们便可以发现所有列里面已经没有空值
3:规范化处理
由于各数据列的取值范围不同,波动幅度不同,各数据不在一个标准线上,这时可以使用标准化处里,使用方法StandardScaler.fit_transform()可提高准确率,会在完整的代码中出现
三.数据划分
1:数据列划分为两类,分别是特征列(按什么数据进行预测分类),预测列
特征列是按照数据进行预测,判断结果的列,预测列则是判断的结果,数据中的最后一列为是否有欺诈的可能性,1为有,0为无,是给出的条件,我们令y=预测列,x=特征列,可输入下列代码:
y=frame[frame.columns[len(frame.columns)-1]]
frame.drop(frame.columns[len(frame.columns)-1],axis=1,inplace =True)
x=frame
2:数行划分为两类,分别是训练集,测试集
训练集主要是用来训练程序的数据,让程序通过找规律,来判断结果,测试集为用来检测程序预测效果的,预测的越准,我们训练的ai识别正确率就越高,等遇到了未知结果的数据,就可以用其预测结果了
x_train,x_test,y_train,y_test = train_test_split(x,y) #其是数据会将训练集,测试集自动分为比例3:1
四.模型训练
使用命令生成分类器,在去使用分类器训练x,y的训练集
estimator = KNeighborsClassifier() #生成分类器
estimator.fit(x_train,y_train) #使用分类器训练x,y的训练集
五.效果评估
用训练好的程序去预测测试集,并观察其准确率
y_predicted = estimator.predict(x_test) #将x测试集预测结果存入到y_predicted 变量中
print('准确度:{:.1f}%'.format(np.mean(y_test == y_predicted)*100)) #用y_predicted对比y_test,计算预测准确率
最终结果
最终结果如下所示:
我们可得知,若用这个结果去预测未知的企业数据,得到的欺诈判别结果正确率约为98.5%
若有未知数据直接用程序预测即可得到答案