1importnumpyasnp2importpandasaspd3fromcollectionsimportCounter4importmatplotlib.pyplotasplt5frompyminingimportitemmining,assocrules,perftesting,seqmining6importpyechartsaspe7rt=pd.read_csv(r"E:\transaction_train_new.csv",sep=",")8ro=pd.read_csv(r"E:\operation_train_new.csv",sep=",")9rtt=pd.read_csv(r"E:\tag_train_new.csv",sep=",")然后,数据预处理与简单统计
从两个方面1,羊毛党通常事务性操作很少,交易性操作较多。2、羊毛党,通常会多个用户共用银行账户、各种设备等信息
1、#行为时序分析plt.plot(ro[ro.Tag==1].groupby("day").size())plt.plot(ro[ro.Tag==0].groupby("day").size())#查看两类用户的事务性数据操作
图中,蓝色为“羊毛党”,黄色为“普通用户。可见,羊毛党的事务操作较少,而交易性操作较多,即以尽可能少的成本获取尽可能多的利益
plt.plot(rt[rt.Tag==1].groupby("day").size())plt.plot(rt[rt.Tag==0].groupby("day").size())#查看两类用户的交易性操作
2、多账户羊毛党行为分析
1#记录各acc_id2下用户数大于3的用户ID,疑似为羊毛党ID2z4=set([])3foriinz2.values:4iflen(i)>3:5z4=z4|i6z5=set(rt[rt.Tag==1].UID.values)7print(len(z4),len(z5),len(z4&z5))#查看预测的羊毛党数量,实际的羊毛党数量,预测对的羊毛党数量84539937251#同理分析某一标签x0下的用户,>x1的为疑似羊毛党2defu1(x0,x1):3defcl(x):4returnset(x.UID.values)5z2=rt.groupby(x0).apply(cl)6p2=Counter(z2.apply(len).values)7plt.loglog(p2.keys(),p2.values(),"o")8z4=set([])9foriinz2.values:10iflen(i)>x1:11z4=z4|i12return[z4,len(z4),len(z5),len(z4&z5)]定义函数u1(x0,x1)分析x0标签下,疑似为用户共用情况,共用用户数>x1则认为是羊毛党
在"acc_id1"”acc_id2“"acc_id3""device_code1""device_code2"下分析羊毛党行为
1y1=u1("acc_id1",3)#以ip作为分析指标2y1[1:4]3[845,3993,725]4y2=u1("acc_id2",2)5y2[1:4]6[333,3993,322]7y3=u1("acc_id3",3)#以ip作为分析指标8y3[1:4]9[298,3993,287]10de1=u1("device_code1",4)#以同-设备号上有>4个用户,疑似为羊毛党11de1[1:4]12[1338,3993,809]13de2=u1("device_code2",4)#手机品牌标签下的羊毛党分析14de2[1:4]15[1023,3993,805]最后,汇总分析这5个指标的筛选结果
1w=y1[0]|y2[0]|y3[0]|de1[0]|de2[0]2print(len(w),len(z5),len(w&z5))3f0=len(w&z5)/len(w)4f1=len(w&z5)/len(z5)5f2=f0*f1*2/(f0+f1)6print(f0,f1,f2)#仅仅用简单的条件就能达到0.4以上196739931282