R语言侦测欺诈交易.doc_第1页
R语言侦测欺诈交易.doc_第2页
R语言侦测欺诈交易.doc_第3页
R语言侦测欺诈交易.doc_第4页
R语言侦测欺诈交易.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

r语言侦测欺诈交易背景考虑到在经济和社会领域中经常存在欺诈交易等非法活动,因此欺诈检验是数据挖掘技术的一个重要应用领域。从数据分析的角度,欺诈行为通常和异常的观测值相关联,因为这些欺诈行为是偏离常规的。在多个数据分析领域,这些偏离常规的行为经常成为离群值。数据挖掘的结果有助于公司的事后检查活动,能够提供某种欺诈概率排序作为输出结果,可以使公司以最佳方式来利用其事后检查资源。目的侦测欺诈交易的目的是找到“奇怪的”交易记录报告,它可能指出某些销售员涉嫌欺诈。这里用的数据是一个较短时期内的销售数据,销售员可按照自己的策略和公司情况来自由设置销售价格。我们的目的是根据公司过去发现的交易报告中的错误和欺诈企图,帮助公司完成核实这些销售报告真实性的工作。1.加载数据:共401 146行数据,每一行包括来自销售员报告的信息。id:说明销售员id的一个因子变量。prod:说明销售产品id号的一个因子变量。quant:报告该产品销售的数量。val:报告销售记录的总价值。insp:有3个可能值的因子变量ok表示公司检查了该交易并认为该交易有效;fraud表示发现该交易为欺诈;unkn表示该交易未经过公司审核。2.数据集探索: sum(is.na(sales$quant) & is.na(sales$val)1 888从数据的统计特征初步可以看出v431号雇员录入的数据最多,p1125号产品卖出最多,可以看到产品销售的数量和总价值的四分位数据,公司已检查承认有效的数据有14462,已发现欺诈的数据有1270,未经过审查的有385414,说明大量数据还未经过审核,需要接下来的数据分析来检查其中的欺诈数据。数据中有大量缺失值,当重要产品销售数和销售总价值同时缺失时,就无法进行分析,这样的数据有888条,在40万组数据中可以忽略不计。判断数据框中每个变量的属性:str(sales)data.frame: 401146 obs. of 5 variables: $ id : factor w/ 6016 levels v1,v2,v3,.: 1 2 3 4 3 5 6 7 8 9 . $ prod : factor w/ 4548 levels p1,p2,p3,.: 1 1 1 1 1 2 2 2 2 2 . $ quant: int 182 3072 20393 112 6164 104 350 200 233 118 . $ val : num 1665 8780 76990 1100 20260 . $ insp : factor w/ 3 levels ok,unkn,fraud: 2 2 2 2 2 2 2 2 2 2 .可以看到id,prod,insp是因子型变量, quant整数型,val数值型。table(sales$insp)/nrow(sales)*100 ok unkn fraud 3.6124200 96.0702847 0.3172953在只考虑已检查过的销售记录,看到欺诈比例较小。绘制每个交易人员的交易数量和每个产品的交易数量图形tots - table(sales$id)totp - table(sales$prod)barplot(tots,main=transactions per salespeople,names.arg=,xlab=salespeople, ylab=amount)barplot(totp,main=transactions per product,names.arg=,xlab=products, ylab=amount)看到所有销售人员的数据相当不同,对于每个产品,波动性较大。sales$uprice - sales$val/sales$quantsummary(sales$uprice) min. 1st qu. median mean 3rd qu. max. nas 0.00 8.46 11.89 20.30 19.11 26460.00 13248检查产品单位价格的分布,看到有明显的变动性。out tots totp nas props propsorder(props,decreasing=t)1:10 v1237 v4254 v4038 v5248 v3666 v4433 v4170 13.793103 9.523810 8.333333 8.333333 6.666667 6.250000 5.555556 v4926 v4664 v4642 5.555556 5.494505 4.761905可以考虑直接剔除同时在两个变量有缺失值的交易sales nnasqp propnasqp propnasqporder(propnasqp,decreasing=t)1:10 p2442 p2443 p1653 p4101 p4243 p903 p3678 1.0000000 1.0000000 0.9090909 0.8571429 0.6842105 0.6666667 0.6666667 p4061 p3955 p4313 0.6666667 0.6428571 0.6363636p2442和p2443两个产品所有的交易数量是缺失的,因此我们无法计算其标准价格,所以这些产品的交易信息不可能进行任何分析。一共54份报告,标记为ok的报告,意味着检查员掌握了比这个数据集更多的信息,或者我们得到的数据有输入错误,因为从这些交易中似乎不可能得到任何结论,基于此,将删除这些交易报告: sales nlevels(sales$prod)1 4548 sales$prod nlevels(sales$prod)1 4546观察是否有销售人员的所有交易数量为缺失值: nnasqs propnasqs propnasqsorder(propnasqs,decreasing=t)1:10 v2925 v5537 v5836 v6058 v6065 v4368 v2923 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 0.8888889 0.8750000 v2970 v4910 v4542 0.8571429 0.8333333 0.8095238从结果上看,有几个销售人员没有在报告中填写交易的数量信息。我们只要有其他销售人员报告的相同产品的交易,就可以尝试使用此信息来填补那些缺失值,所以不删除这些交易。对剩余的交易,用每个产品单位价格的中位数作为产品的标准价格:tprice-tapply(salessales$insp!=fraud,uprice,list(salessales$insp!=fraud,prod),median,na.rm=t)用标准单价计算缺失值quant和val,填补所有缺失值noquant-which(is.na(sales$quant)salesnoquant,quant-ceiling(salesnoquant,val/tpricesalesnoquant,prod)noval-which(is.na(sales$val)salesnoval,val-salesnoval,quant*tpricesalesnoval,prod重新计算uprice列的值来填充先前未知的单位价格sales$uprice notf ms-tapply(upricenotf,list(prod=prodnotf),function(x)+ bp ms head(ms) median iqrp1 11.346154 8.575599p2 10.877863 5.609731p3 10.000000 4.809092p4 9.911243 5.998530p5 10.957447 7.136601p6 13.223684 6.685185上面的代码使用函数boxplot()获得中位数、第一个四分位数和第三个四分位数。对每个产品的所有交易,计算这些统计量,从分析中剔除有欺诈的交易。有了这些统计量以后,得到含有每个产品的中位数和四分位距的一个矩阵。par(mfrow=c(1,2)plot(ms,1,ms,2,xlab=median,ylab=iqr,main=)plot(ms,1,ms,2,xlab=median,ylab=iqr,main=,col=grey,log=xy)smalls - which(table(prod) 20)points(log(mssmalls,1),log(mssmalls,2),pch=+)许多产品的中位数和iqr大致相同,我们可以看到,那些有少数交易的产品中有很多和其他产品很相似。但是难以判断这些产品是否为欺诈交易。对于交易数量少于20的产品,我们将寻找与它的单位价格分布最相似的产品,然后用kolmogorow-smirnov检验来检查两个产品是否在统计意义上相似。下面的代码用来获得一个矩阵(similar)。矩阵中存储的事这种少于20个交易的每个产品的检查信息,用对象ms来保存前面获得的每个产品的单位价格的中位数和iqr。dms - scale(ms)smalls - which(table(prod) 20)prods - tapply(sales$uprice,sales$prod,list)similar - matrix(na,length(smalls),7,dimnames=list(names(smalls), c(simil,ks.stat,ks.p,medp,iqrp,meds,iqrs)for(i in seq(along=smalls) d - scale(dms,dmssmallsi,false) d - sqrt(drop(d2 %*% rep(1,ncol(d) stat - ks.test(prodssmallsi,prodsorder(d)2) similari, = 0.9)1 117对于这117个产品,我们可以把更多的交易纳入决策,提高检验的统计显著水平。4.用无监督技术进行数据挖掘:我们面临的不是预测任务,而是一个描述性的数据挖掘任务。对于未被检验的报告,insp列没有任何信息,所以它对分析没有影响。对于这些观测值,我们只有对交易的描述。这意味着这些销售报告仅仅有描述他的自变量,这种类型的数据适用于非监督学习技术。聚类方法师徒对一组观测值形成多个聚类,一个聚类内的个案相似,从而找到这些观测值的“自然”组别。相似性概念通常要求由描述观测值的变量所定义的空间给出一个距离定义,这个距离定义是衡量一个观测值和其他观测值之间距离的函数,距离靠近的个案通常认为属于同一个自然组。有些异常值检验方法假定数据的预期分布,把背离这一分布的任何标记值记为异常值。另一个常见的异常值检验策略是假定一个变量空间的距离度量,然后把距离其他观测值“太远”的观测值标记为异常观测值,我们的目标是得到一组观测值的异常值排序,这个排序作为公司内检验决策的基础。5.评价准则library(rocr)data(rocr.simple)pred-prediction(rocr.simple$predictions,rocr.simple$labels)perf-performance(pred,prec,rec)plot(perf)prcurve - function(preds,trues,.) require(rocr,quietly=t) pd - prediction(preds,trues) pf - performance(pd,prec,rec) pfy.values - lapply(pfy.values,function(x) rev(cummax(rev(x) plot(pf,.)prcurve(rocr.simple$predictions,rocr.simple$labels)标准价格的标准化距离:为了避免不同价格对异常值排名的影响,对单位价格和标准价格之间的距离进行标准化。 是产品p的标准单位价格,是该产品交易的单位价格的中位数,是该产品单位价格的四分位距avgndtp - function(toinsp,train,stats) if (missing(train) & missing(stats) stop(provide either the training data or the product stats) if (missing(stats) notf - which(train$insp != fraud) stats - tapply(train$upricenotf, list(prod=train$prodnotf), function(x) bp - boxplot.stats(x)$stats c(median=bp3,iqr=bp4-bp2) ) stats - matrix(unlist(stats), length(stats),2,byrow=t, dimnames=list(names(stats),c(median,iqr) statswhich(stats,iqr=0),iqr - statswhich(stats,iqr=0),median mdtp - mean(abs(toinsp$uprice-statstoinsp$prod,median)/ statstoinsp$prod,iqr) return(mdtp)6.计算离群值排序:这里用局部离群值因子系统。ho.lof-function(form,train,test,k,.)ntr-nrow(train)all-rbind(train,test)n-nrow(all)ups-split(all$uprice,all$prod)r-list(

温馨提示

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

评论

0/150

提交评论