偷税漏税行为检测:Keras库构建神经网络模型,scikit-learn库构建CART决策树模型

简介: 偷税漏税行为检测企业做假账偷税漏税的行为普遍存在,汽车行业通过“多开发票”、“做双份报表”、“减少支出”等方式进行偷漏税。本任务使用Keras库来构建神经网络模型,使用scikit-learn库构建CART决策树模型,并构建决策树模型预测企业是否漏税。

偷税漏税行为检测
企业做假账偷税漏税的行为普遍存在,汽车行业通过“多开发票”、“做双份报表”、“减少支出”等方式进行偷漏税。本任务使用Keras库来构建神经网络模型,使用scikit-learn库构建CART决策树模型,并构建决策树模型预测企业是否漏税。

通过本任务,您将掌握以下内容:

1、构建LM神经网络模型。

2、构建CART决策树模型,并构建决策树模型。

3、学会分析模型的好坏。

4、对比LM神经网络的ROC曲线比CART决策树的ROC曲线的好坏。

背景和挖掘目标
企业做假账偷税漏税的行为普遍存在,汽车行业通过“多开发票”、“做双份报表”、“减少支出”等方式进行偷漏税。随着企业偷漏税现在泛滥,也影响国家经济基础。通过数据挖掘能自动识别企业偷漏税行为,提高稽查效率减少经济损失。汽车销售行业在税收上存在少开发票金额、少记收入,上牌、按揭、保险不入账,不及时确认保修索赔款等情况,导致政府损失大量税收。汽车销售企业的部分经营指标数据能在一定程度上评估企业的偷漏税倾向。样本数据提供了汽车销售行业纳税人的各种属性和是否偷漏税标识,提取纳税人经营特征可以建立偷漏税行为识别模型。

分析方法和过程
在建立偷漏税识别模型前需要先整理流程(如下图),主要包含以下步骤:

从后台业务系统抽取企业经营指标静态数据,保证建模样本数据稳定性。

对样本数据进行探索性分析,查看指标分布情况。

对样本数据进行预处理,包括数据集清洗、缺失值处理和数据规则化。

选取特征建立样本集和测试集。

构建识别模型对样本数据进行模型训练,并对模型进行评价。

使用多种模型并挑选最优模型进行自动识别。

实验环境
Linux Ubuntu 14.04

Python3.6

实验步骤
1.首先在Linux上新建/data/python4目录,并切换到该目录下。

view plain copy
sudo mkdir -p /data/python4
view plain copy
cd /data/python4
修改/data/python4目录下的所有文件及子目录的所有者和所属的组为:zhangyu

view plain copy
sudo chown -R zhangyu.zhangyu /data/python4
2.使用wge命令,从网址 http://192.168.1.100:60000/allfiles/python4/目录下,将实验所需数据下载到linux本地/data/python4目录下。

view plain copy
sudo wget http://192.168.1.100:60000/allfiles/python4/carsales_data.xls
3.新建一个Python 项目,名为python4

4.在python4项目下,新建一个Python file文件

命名为explore_analyse。

数据探索分析
5.样本数据包含15个特征属性,分别为14个输入特征和1个输出特征,有纳税人基本信息和经营指标数据。数据探索性分析能及早发现样本数据是否存在较大差异和对数据的整体情况有基本的认识。具体代码如下:

view plain copy
import matplotlib
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

fontPath ="/usr/share/fonts/truetype/wqy/wqy-microhei.ttc"
font = fm.FontProperties(fname=fontPath, size=10)
inputfile='/data/python4/carsales_data.xls'
data=pd.read_excel(inputfile,index_col='纳税人编号')

fig, axes = plt.subplots(1, 2)
fig.set_size_inches(12, 4, )
ax0, ax1 = axes.flat
a=data['销售类型'].value_counts().plot(kind='barh', ax=ax0, title='销售类型分布情况',)
a.xaxis.get_label().set_fontproperties(font)
a.yaxis.get_label().set_fontproperties(font)
a.legend(loc='upper right', prop=font)
for label in ([a.title] + a.get_xticklabels() + a.get_yticklabels()):

label.set_fontproperties(font)  

b=data['销售模式'].value_counts().plot(kind='barh',ax=ax1,title='销售模式分布情况')
b.xaxis.get_label().set_fontproperties(font)
b.yaxis.get_label().set_fontproperties(font)
b.legend(loc='upper right', prop=font)
for label in ([b.title]+b.get_xticklabels() + b.get_yticklabels()):

label.set_fontproperties(font)  

print(data.describe().T
plt.show()
6.运行结果如下图所示:

从数据的分布情况上看,销售类型主要集中在国产轿车和进口轿车,销售模式主要集中在4S店和一级代理商。

7.数值变量统计描述

统计结果显示各个数据指标均无缺失值,个别指标数据如(整体税负控制数、办牌率、单台办牌手续费收入等)最小值为零。

8.在python4下新建一个Python file文件

命名为data_analyse。

构建偷税漏税行为识别模型
抽取数据,对数据预处理,在得到预处理数据的样本数据,需要对数据进行划分训练集和测试集,随机选取20%的数据作为测试集,其余80%的数据作为训练集。使用分类预测模型来实现偷税漏税自动识别,比较常用的分类模型:LM神经网咯和CART决策树,两种模型都有优点,故采用两种模型进行训练从中选择最优的分类模型。

9.完整代码如下:

view plain copy
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

inputfile='/data/python4/carsales_data.xls'
data=pd.read_excel(inputfile,index_col='纳税人编号')

print(data)

zhfont1 = matplotlib.font_manager.FontProperties(fname='/usr/share/fonts/truetype/wqy/wqy-microhei.ttc')
data['销售类型']=data['销售类型'].map({'国产轿车': 1, '进口轿车': 2, '大客车': 3, '卡车及轻卡': 4, '微型面包车': 5, '商用货车': 6,'工程车': 7, u'其它': 8})
data['销售模式']=data['销售模式'].map({'4S店':1, '一级代理商':2 ,'二级及二级以下代理商':3 ,'其它':5 ,'多品牌经营店':4})
data['输出']=data['输出'].map({'正常':1,'异常':0})

print(data[['销售模式','销售类型']])

from sklearn.cross_validation import train_test_split
p = 0.2
data= data.as_matrix()
train_x, test_x, train_y, test_y = train_test_split(data[:, :14], data[:, 14], test_size=p)
print(train_x)
print(train_y)

from cm_plot import cm_plot

构建CART决策树模型

from sklearn.tree import DecisionTreeClassifier # 导入决策树模型
from sklearn.externals import joblib
tree_file = 'tree.pkl' # 模型输出路径
tree = DecisionTreeClassifier(criterion='entropy', max_depth=3) # 建立决策树模型
tree.fit(train_x, train_y) # 训练模型
joblib.dump(tree, tree_file) # 保存模型
cm_plot(train_y, tree.predict(train_x)).show() # 显示混淆矩阵可视化图

from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(test_y, tree.predict_proba (test_x)[:,1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of CHAR') # 绘制ROC曲线
plt.xlabel('False Positve Rate') # 坐标轴标签
plt.ylabel('True Postive Rate')
plt.xlim(0, 1.05) # 设定边界范围
plt.ylim(0, 1.05)
plt.legend(loc=4) # 设定图例位置
plt.show() # 显示绘图结果

构建LM神经网络模型

from keras.models import Sequential # 导入神经网络初始函数
from keras.layers.core import Dense, Activation # 导入神经网络网络层函数及激活函数
net_file = 'net.model' #构建的神经网络模型存储路径
net = Sequential() # 建立神经网络
net.add(Dense(10, input_shape=(14))) # 添加输入层(14节点)到隐藏层(10节点)的连接
net.add(Activation('relu')) # 隐藏层使用relu激活函数
net.add(Dense(1, input_shape=(10))) # 添加隐藏层(10节点) 到输出层(1节点)的连接
net.add(Activation('sigmoid')) # 输出层使用sigmoid激活函数
net.compile(loss='binary_crossentropy', optimizer='adam') # 编译模型,使用adam方法求解
net.fit(train_x, train_y, epochs=1000, batch_size=10) # 训练模型循环一千次
net.save_weights(net_file) # 保存模型
predict_result = net.predict_classes(train_x).reshape(len(train_x)) # 预测结果
from cm_plot import cm_plot # 导入 混淆矩阵可视化函数
cm_plot(train_y, predict_result).show() # 显示混淆矩阵可视化图

绘制LM神经网络模型的ROC曲线

from sklearn.metrics import roc_curve # 导入ROC曲线函数
predict_result = net.predict(test_x).reshape(len(test_x)) # 预测结果
fpr, tpr, thresholds = roc_curve(test_y, predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of LM') # 绘制ROC曲线
plt.xlabel('False Positive Rate') # 坐标轴标签
plt.ylabel('True POstive Rate')
plt.xlim(0, 1.05) # 设定边界范围
plt.ylim(0, 1.05)
plt.legend(loc=4) # 设定图例位置
plt.show() # 显示绘图结果
10.在python4项目下,新建一个Python file,

命名为cm_plot.

11.将以下用于构建混淆矩阵可视图的代码写入到cm_plot文件中

view plain copy
def cm_plot(y,yp):

from sklearn.metrics import confusion_matrix  
cm=confusion_matrix(y,yp)  
import matplotlib.pyplot as plt  
plt.matshow(cm,cmap=plt.cm.Greens)  
plt.colorbar()  
for x in range(len(cm)):  
    for y in range(len(cm)):  
        plt.annotate(cm[x,y],xy=(x,y),horizontalalignment='center',verticalalignment='center')  
plt.ylabel('True label')  
plt.xlabel('Predicted label')  
return plt  

12.在data_analyse文件下,右键点击Run "data_analyse",运行data_analyse.py程序,可以在下面对完整代码的分部描述中,查看运行结果(注意:当出来图片以后,必须点击关闭该图,才能执行后续代码)。

数据抽取
13.由于已经有现成的数据集可供使用,故这里省略从后台系统抽取数据集的过程。先用pandas库读取Excel文件的原始数据,具体代码如下:

view plain copy
import pandas as pd
inputfile='/data/python4/carsales_data.xls'
data=pd.read_excel(inputfile,index_col='纳税人编号')
print(data)
数据预处理
14.考虑建模的需要,前面样本数据中类别型特征需要进行转换成数值型特征,故对销售类型和销售模式进行重编码处理,输出特征进行二值化处理。由于数据中并无缺失值,则不需要进行缺失值处理。

view plain copy
data['销售类型']=data['销售类型'].map({'国产轿车': 1, '进口轿车': 2, '大客车': 3, '卡车及轻卡': 4, '微型面包车': 5, '商用货车': 6,'工程车': 7, u'其它': 8})
data['销售模式']=data['销售模式'].map({'4S店':1, '一级代理商':2 ,'二级及二级以下代理商':3 ,'其它':5 ,'多品牌经营店':4})
data['输出']=data['输出'].map({'正常':1,'异常':0})
数据划分
15.使用scikit_learn交叉验证随机将数据集划分为训练集与测试集。具体代码如下

view plain copy
from sklearn.cross_validation import train_test_split
p = 0.2
data= data.as_matrix()
train_x, test_x, train_y, test_y = train_test_split(data[:, :14], data[:, 14], test_size=p)
LM神经网络
16.使用Keras库可以来构建神经网络模型,设定LM神经网络的输入节点数为14,输出节点数为1,隐藏层节点数为10,使用Adam方法求解。在隐藏层使用Relu(x) = max(x, 0) 做为激活函数。构建LM神经网络模型的代码如下:

view plain copy

构建LM神经网络模型

from keras.models import Sequential # 导入神经网络初始函数
from keras.layers.core import Dense, Activation # 导入神经网络网络层函数及激活函数
net_file = 'net.model' #构建的神经网络模型存储路径
net = Sequential() # 建立神经网络
net.add(Dense(10, input_shape=(14))) # 添加输入层(14节点)到隐藏层(10节点)的连接
net.add(Activation('relu')) # 隐藏层使用relu激活函数
net.add(Dense(1, input_shape=(10))) # 添加隐藏层(10节点) 到输出层(1节点)的连接
net.add(Activation('sigmoid')) # 输出层使用sigmoid激活函数
net.compile(loss='binary_crossentropy', optimizer='adam', class_mode='binary') # 编译模型,使用adam方法求解
net.fit(train_x, train_y, nb_epoch=1000, batch_size=10) # 训练模型循环一千次
net.save_weights(net_file) # 保存模型
predict_result = net.predict_classes(train_x).reshape(len(train_x)) # 预测结果
from cm_plot import cm_plot # 导入 混淆矩阵可视化函数
cm_plot(train_y, predict_result).show() # 显示混淆矩阵可视化图
17.运行结果如下图所示

由上图的训练集建模混淆矩阵,算出分类准确率为(56+38) / (56+38+1+4) = 91.9%。

CART决策树
18.使用scikit-learn库构建CART决策树模型,并构建决策树模型,具体的代码如下:

view plain copy

构建CART决策树模型

from sklearn.tree import DecisionTreeClassifier # 导入决策树模型
from sklearn.externals import joblib
from cm_plot import cm_plot
tree_file = 'tree.pkl' # 模型输出路径
tree = DecisionTreeClassifier(criterion='entropy', max_depth=3) # 建立决策树模型
tree.fit(train_x, train_y) # 训练模型
joblib.dump(tree, tree_file) # 保存模型
cm_plot(train_y, tree.predict(train_x)).show() # 显示混淆矩阵可视化图
19.运行结果如下图所示:

训练模型后得到混淆矩阵如下图,分类的准确率为 (57+36) / (57+36+2+4) = 94.9%

模型评价
对于训练集,LM神经网络模型和CART决策树的分类准确率都比较好,分别为91.9%和94.9%。为了进一步评估模型分类的效果,需要使用测试集对两个模型进行评价,采用ROC线评价方法进行评估,优秀的分类器所对应的ROC曲线应该经历靠近左上角。分别画出LM神经网络和CART决策树在测试集下的ROC曲线。

20.LM神经网络对测试集数据的ROC曲线代码如下:

view plain copy

绘制LM神经网络模型的ROC曲线

from sklearn.metrics import roc_curve # 导入ROC曲线函数
predict_result = net.predict(test_x).reshape(len(test_x)) # 预测结果
fpr, tpr, thresholds = roc_curve(test_y, predict_result, pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of LM') # 绘制ROC曲线
plt.xlabel('False Positive Rate') # 坐标轴标签
plt.ylabel('True POstive Rate')
plt.xlim(0, 1.05) # 设定边界范围
plt.ylim(0, 1.05)
plt.legend(loc=4) # 设定图例位置
plt.show() # 显示绘图结果
21.运行结果如下图所示:

22.CART决策树模型测试集数据的ROC曲线代码如下:

view plain copy

绘制决策树模型的ROC曲线

from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(test_y, tree.predict_proba (test_x)[:,1], pos_label=1)
plt.plot(fpr, tpr, linewidth=2, label='ROC of CHAR') # 绘制ROC曲线
plt.xlabel('False Positve Rate') # 坐标轴标签
plt.ylabel('True Postive Rate')
plt.xlim(0, 1.05) # 设定边界范围
plt.ylim(0, 1.05)
plt.legend(loc=4) # 设定图例位置
plt.show() # 显示绘图结果
23.运行结果如下所示:

CART决策树模型ROC曲线图对比两个模型的ROC曲线可以发现LM神经网络的ROC曲线比CART决策树的ROC曲线更加靠近左上角,LM神经网络的ROC曲线下的面积更大,说明LM神经网络模型的分类性能更好,能用来识别偷漏税行为。

目录
相关文章
|
21天前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目DWRSeg是一种高效的实时语义分割网络,通过将多尺度特征提取分为区域残差化和语义残差化两步,提高了特征提取效率。它引入了Dilation-wise Residual (DWR) 和 Simple Inverted Residual (SIR) 模块,优化了不同网络阶段的感受野。在Cityscapes和CamVid数据集上的实验表明,DWRSeg在准确性和推理速度之间取得了最佳平衡,达到了72.7%的mIoU,每秒319.5帧。代码和模型已公开。
【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
|
8天前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
45 5
|
10天前
|
SQL 安全 前端开发
PHP与现代Web开发:构建高效的网络应用
【10月更文挑战第37天】在数字化时代,PHP作为一门强大的服务器端脚本语言,持续影响着Web开发的面貌。本文将深入探讨PHP在现代Web开发中的角色,包括其核心优势、面临的挑战以及如何利用PHP构建高效、安全的网络应用。通过具体代码示例和最佳实践的分享,旨在为开发者提供实用指南,帮助他们在不断变化的技术环境中保持竞争力。
|
14天前
|
监控 安全 网络安全
企业网络安全:构建高效的信息安全管理体系
企业网络安全:构建高效的信息安全管理体系
44 5
|
11天前
|
数据可视化 算法 安全
员工上网行为管理软件:S - PLUS 在网络统计分析中的应用
在数字化办公环境中,S-PLUS 员工上网行为管理软件通过精准的数据收集、深入的流量分析和直观的可视化呈现,有效帮助企业管理员工上网行为,保障网络安全和提高运营效率。
21 1
|
13天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
39 3
|
22天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
15 1
|
16天前
|
存储 安全 网络安全
|
21天前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWRSeg:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测
【YOLO11改进 - C3k2融合】C3k2融合DWRSDWRSeg是一种高效的实时语义分割网络,通过将多尺度特征提取方法分解为区域残差化和语义残差化两步,提高了多尺度信息获取的效率。网络设计了Dilation-wise Residual (DWR) 和 Simple Inverted Residual (SIR) 模块,分别用于高阶段和低阶段,以充分利用不同感受野的特征图。实验结果表明,DWRSeg在Cityscapes和CamVid数据集上表现出色,以每秒319.5帧的速度在NVIDIA GeForce GTX 1080 Ti上达到72.7%的mIoU,超越了现有方法。代码和模型已公开。
|
7天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第40天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术以及安全意识等方面的知识,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议,以保护个人和组织的信息安全。
29 6

热门文章

最新文章

下一篇
无影云桌面