R语言实现偷漏税行为识别

发布时间 / 2018-07-19 02:35:29

推荐好友杏佛小志(知乎号)的文章;

数据分析部落:连接1000名数据科学自媒体作者

一、背景与挖掘目标

目前,企业偷漏税现象泛滥,严重影响国家的经济基础。为了维护国家的权利与利益,应该加大对企业偷漏税行为的防范工作。如何利用数据挖掘的思想,智能地识别企业偷漏税行为,有力的打击企业偷漏税的违法行为,维护国家的经济损失和社会秩序。

汽车销售行业,通常是指销售汽车整车的行业。汽车销售行业在税收上存在少开发票金额、少计收入、上牌、按揭、保险等一条龙未入账,不及时确认保修索赔款等多种情况,导致政府损失大量税收。汽车销售企业的部分经营指标能在一定程度上评估企业的偷漏税倾向,样本数据提供了汽车销售行业纳税人的各个属性和偷漏税标识,结合汽车销售行业纳税人的各个属性,总结衡量纳税人的经营特征,就可以建立偷漏税识别模型,识别偷漏税纳税人。

二、分析方法与过程

偷漏税纳税人识别流程图如下图,主要包括以下步骤:

1)从汽车销售业务系统抽取纳税人销售类型、销售模式、汽车销售平均毛利、维修毛利等原始数据;

2)对样本数据探索分析,初步得到正常纳税人和偷漏税纳税人的经营特征;

3)对样本数据进行预处理,包括数据清洗、缺失值处理和数据变换;

4)根据经营特征构建样本集和测试集

5)构建多种偷漏税纳税人识别模型;

6)使用样本数据进行模拟训练,并对模型进行评价;

R语言实现偷漏税行为识别

三、数据抽取

将数据集另存为csv格式的文件,然后读取csv文件的原始数据,具体代码如下:

# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间 setwd("F:/数据及程序/chapter6/拓展思考") Data <-read.csv("./拓展思考.csv")
R语言实现偷漏税行为识别

四、数据探索分析

数据探索分析是对数据进行初步研究,发现数据的内在规律特征,有助于选择合适的数据预处理和数据分析技术。本例的样本数据包含纳税人识别号和15个特征属性,包括14个输入特征和一个输出特征。具体代码如下:

#计算销售类别用户数 SaleType <- table (Data[,2]) #基础绘图 p <- barplot(SaleType, space = 0, ylim = c(0, 70), col = rainbow(8), ylab = "计数", main = "销售类型分布分析") #添加数据标签 text(p, SaleType, labels = SaleType,pos = 3) 

从数据的分布情况上看,销售类型主要集中在国产轿车和进口轿车

R语言实现偷漏税行为识别
SaleMode <- table (Data[,3]) #基础绘图 p <- barplot(SaleMode, space = 0, ylim = c(0, 80), col = rainbow(5), ylab = "计数", main = "销售模式分布分析") #添加数据标签 text(p, SaleMode, labels = SaleMode,pos = 3) 

从数据的分布情况上看,销售模式主要集中在4S店和一级代理商

R语言实现偷漏税行为识别

统计结果显示各个数据指标均无缺失值,个别指标数据为负数或零值。

R语言实现偷漏税行为识别R语言实现偷漏税行为识别R语言实现偷漏税行为识别

五、数据预处理

建模需要前面样本数据中类别型特征需要进行转换成数值型特征,故对销售类型和销售模式进行重编码处理,输出特征进行二值化处理。由于数据中并无缺失值,则不需要进行缺失值处理。

六、构建偷税漏税识别模型

得到预处理数据后,需要划分测试样本和训练样本,随机选取20%作为测试样本,80%作为训练样本。偷漏税识别可以通过构建分类预测模型来实现,比较常用的分类模型有神经网络和CART决策树,各个模型都有各自的优点,故采用这两种方法构建偷漏税识别,并从中选择最最优的分类模型。

(1)数据划分

对样本数据随机选取20%作为测试样本,剩下的80%作为训练样本。代码如下:

# 数据命名 colnames(Data) <- c("A", "B", "C", "D", "E", "F","G","H","I","J","K","L","M","N","O","P") # 数据分割 set.seed(1234) # 设置随机种子 # 定义序列ind,随机抽取1和2,1的个数占80%,2的个数占20% ind <- sample(2, nrow(Data), replace = TRUE, prob = c(0.8, 0.2)) trainData <- Data[ind == 1,] # 训练数据 testData <- Data[ind == 2,] # 测试数据 # 数据存储 write.csv(trainData, "./trainData.csv", row.names = FALSE) write.csv(testData, "./testData.csv", row.names = FALSE)

(2)设定神经网络的数据节点数为14,输出节点数为1,隐层节点数为10,权值的衰减参数为0.05。训练样本模型的混淆矩阵如图所示,分类准确率为(56+41)/(54+4+2+41)*100=94.17%,代码如下:

# 读取数据 trainData <- read.csv("./trainData.csv") # 将P列转换为factor类型 trainData <- transform(trainData, P= as.factor(P)) # 神经网络模型构建 # 加载nnet包 library(nnet) # 利用nnet建立神经网络 nnet.Data <- nnet(P~ B+ C+ D + E + F + G + H + I + J + K + L + M + N + O, trainData, size = 10, decay = 0.05) summary(nnet.Data) # 建立混淆矩阵 confusion <- table(trainData$P, predict(nnet.Data, trainData, type = "class")) accuracy <- sum(diag(confusion)) * 100 / sum(confusion) # 保存输出结果 output_nnet.trainData <- cbind(trainData, predict(nnet.Data, trainData, type = "class")) colnames(output_nnet.trainData) <- c(colnames(trainData), "OUTPUT") write.csv(output_nnet.trainData, "./output_nnet.trainData.csv", row.names = FALSE) # 保存神经网络模型 save(nnet.Data, file = "./nnet.Data.RData")
R语言实现偷漏税行为识别

(3)利用训练样本构建CART决策树模型,得到的据册数模型和混淆矩阵如下所示,分类准确率为(52+41)/(52+8+2+41)*100 = 90.29%。构建决策树的代码如下:

# 读取数据 trainData <- read.csv("./trainData.csv") # 将P列转换为factor类型 trainData <- transform(trainData, P= as.factor(P)) # 构建CART决策树模型 library(tree)#加载tree包 # 利用tree建立CART决策树 tree.Data <- tree(P~ B+ C+ D + E + F + G + H + I + J + K + L + M + N + O, trainData) summary(tree.Data) # 画决策树图 plot(tree.Data) text(tree.Data) # 建立混淆矩阵 confusion <- table(trainData$P, predict(tree.Data, trainData, type = "class")) accuracy <- sum(diag(confusion)) * 100 / sum(confusion) # 保存输出结果 output_tree.trainData <- cbind(trainData, predict(tree.Data, trainData, type <- "class")) colnames(output_tree.trainData) <- c(colnames(trainData), "OUTPUT") write.csv(output_tree.trainData, "./tmp/output_tree.trainData.csv", row.names = FALSE) # 保存CART决策树模型 save(tree.Data,file = "./tree.Data.RData")
R语言实现偷漏税行为识别R语言实现偷漏税行为识别

七、模型评价

对于训练样本,神经网络和CART决策树的分类准确率相差不大,均达到90%以上。为了进一步评估模型分类的性能,故利用测试样本对两个模型进行评价,评价方法采用ROC曲线进行评估。一个优秀分类器所对应的ROC曲线应该是尽量靠近左上角。分别画出神经网络和CART决策树在测试样本下的ROC曲线,如下图所示。神经网络和CART决策树对测试数据集的测试代码如下:

# 读取数据 testData <- read.csv("./testData.csv") # 读取模型 load("./tree.Data.RData") load("./nnet.Data.RData") # ROC曲线 library(ROCR) # 加载ROCR包 # 画出神经网络模型的ROC曲线 nnet.pred <- prediction(predict(nnet.Data, testData), testData$P) nnet.perf <- performance(nnet.pred, "tpr", "fpr") plot(nnet.perf) # 画出CART决策的ROC曲线 tree.pred <- prediction(predict(tree.Data, testData)[, 2], testData$P) tree.perf <- performance(tree.pred, "tpr", "fpr") plot(tree.perf)
R语言实现偷漏税行为识别R语言实现偷漏税行为识别

经过对比发现CART决策树的ROC曲线比神经网络的ROC曲线更加靠近单位方形的左上角,CART决策树ROC曲线下的面积更大,说明CART决策树的分类性能更好,能用于偷漏税行为识别。

数据分析分析部落免费学习小组

1、数据分析基础小组

2、数据库小组

3、SPSS小组

4、R语言实战小组

5、Python数据分析小组

6、数据竞赛小组

如何加入?

公众号首页点击免费社群


阅读延展