python案例:金融营销活动中欺诈用户行为分析,,下午学习了pytho


下午学习了python数据分析的应用案例---金融营销活动中欺诈用户行为分析。数据来源于DC竞赛数据:https://www.dcjingsai.com/common/cmpt/2018%E5%B9%B4%E7%94%9C%E6%A9%99%E9%87%91%E8%9E%8D%E6%9D%AF%E5%A4%A7%E6%95%B0%E6%8D%AE%E5%BB%BA%E6%A8%A1%E5%A4%A7%E8%B5%9B_%E7%AB%9E%E8%B5%9B%E4%BF%A1%E6%81%AF.html,详细数据信息可去网站查看,标签为1表“羊毛党”,0表“正常用户”

首先,数据导入

1 import numpy as np2 import pandas as pd3 from collections import Counter4 import matplotlib.pyplot as plt5 from pymining import itemmining,assocrules,perftesting,seqmining6 import pyecharts as pe7 rt=pd.read_csv(r"E:\transaction_train_new.csv",sep=",")8 ro=pd.read_csv(r"E:\operation_train_new.csv",sep=",")9 rtt=pd.read_csv(r"E:\tag_train_new.csv",sep=",")

然后,数据预处理与简单统计

1 #数据处理与简单统计2 rt=pd.merge(rt,rtt)3 ro=pd.merge(ro,rtt)#把标签与行为合并方便结合标签分析行为4 z1=ro.day.astype(np.str)5 z2=rt.day.astype(np.str)#把day转为字符串6 ro.time=pd.to_datetime("2018-01-"+z1+" "+ro.time)7 rt.time=pd.to_datetime("2018-01-"+z2+" "+rt.time)#把time下面单纯的小时改为标准模式的时间8 #统计用户总数,羊毛党数量,交易行为数,操作行为数9 print(len(rtt.UID.values),len(rtt[rtt.Tag==1].UID.values),len(rt),len(ro))

其次,欺诈用户的一般特征分析。

从两个方面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 #多账号羊毛,多个账号公用银行帐号、各种设备号、手机2 def cl(x):3     return set(x.UID.values)4 z2=rt[rt.acc_id2.notnull()].groupby("acc_id2").apply(cl)#统计各转出账号acc_id2下的用户5 p2=Counter(z2.apply(len).values)#acc_id2用户数量类别的计数6 plt.loglog(p2.keys(),p2.values(),"o")#近似为幂函数曲线,数据明显存在问题

技术图片

1 #记录各acc_id2下用户数大于3的用户ID,疑似为羊毛党ID2 z4=set([])3 for i in z2.values:4     if len(i)>3:5         z4=z4|i6 z5=set(rt[rt.Tag==1].UID.values)7 print(len(z4),len(z5),len(z4&z5))#查看预测的羊毛党数量,实际的羊毛党数量,预测对的羊毛党数量
845 3993 725
 1 #同理分析某一标签x0下的用户,>x1的为疑似羊毛党 2 def u1(x0,x1): 3     def cl(x): 4         return set(x.UID.values) 5     z2=rt.groupby(x0).apply(cl) 6     p2=Counter(z2.apply(len).values) 7     plt.loglog(p2.keys(),p2.values(),"o") 8     z4=set([]) 9     for i in z2.values:10         if len(i)>x1:11             z4=z4|i12     return [z4,len(z4),len(z5),len(z4&z5)]

定义函数u1(x0,x1)分析x0标签下,疑似为用户共用情况,共用用户数>x1则认为是羊毛党

在"acc_id1"”acc_id2“"acc_id3""device_code1""device_code2"下分析羊毛党行为

 1 y1=u1("acc_id1",3)#以ip作为分析指标 2 y1[1:4] 3 [845, 3993, 725] 4 y2=u1("acc_id2",2) 5 y2[1:4] 6 [333, 3993, 322] 7 y3=u1("acc_id3",3)#以ip作为分析指标 8 y3[1:4] 9 [298, 3993, 287]10 de1=u1("device_code1",4)#以同-设备号上有>4个用户,疑似为羊毛党11 de1[1:4]12 [1338, 3993, 809]13 de2=u1("device_code2",4)#手机品牌标签下的羊毛党分析14 de2[1:4]15 [1023, 3993, 805]

最后,汇总分析这5个指标的筛选结果

1 w=y1[0]|y2[0]|y3[0]|de1[0]|de2[0]2 print(len(w),len(z5),len(w&z5))3 f0=len(w&z5)/len(w)4 f1=len(w&z5)/len(z5)5 f2=f0*f1*2/(f0+f1)6 print(f0,f1,f2)#仅仅用简单的条件就能达到0.4以上

1967 3993 1282
0.6517539400101677 0.3210618582519409 0.4302013422818792

python案例:金融营销活动中欺诈用户行为分析

评论关闭