python案例:金融營銷活動中欺詐用戶行為分析


下午學習了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 np
2 import pandas as pd
3 from collections import Counter
4 import matplotlib.pyplot as plt
5 from pymining import itemmining,assocrules,perftesting,seqmining
6 import pyecharts as pe
7 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,疑似為羊毛黨ID
2 z4=set([])
3 for i in z2.values:
4     if len(i)>3:
5         z4=z4|i
6 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|i
12     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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM