【机器学习】情侣、基友、渣男和狗-基于时空关联规则的影子账户挖掘
故事從校園一卡通開始,校園一卡通是集身份認證、金融消費、數據共享等多項功能于一體的信息集成系統,也就是學生卡。積累了大量的歷史記錄,其中蘊含著學生的消費行為和財務狀況等信息。是一個數據分析比賽的數據,很多報告都是從消費金額、消費地點、消費時間等角度分析,比較常規。但是數據,其實還可以更有趣。
本次使用南京理工一卡通的消費明細,我會從一個全新的角度出發,挖掘其中的情侶、基友、渣男、單身狗,大家可以把類似的方法擴展到風控領域使用,這種挖掘思路可以用到反欺詐、反舞弊等場景,思路比較新穎,具有較大的研究價值。
那我們開始,看看時序數據怎么利用關聯規則進行挖掘,使用的數據集地址如下:https://github.com/Nicole456/Analysis-of-students-consumption-behavior-on-campus
如果沒時間看看全文,直接跳到第五數據解讀的環節。
一、數據集介紹
附件是某學校 2019年 4月 1 日至 4月 30日一共30天的一卡通數據,一共3個文件,數據字段和含義分別如下
data1.csv:校園卡基本信息
包含的字段有:['序號', '校園卡號', '性別', '專業名稱', '門禁卡號']
data2.csv:校園卡消費明細
['流水號', '校園卡號', '校園卡編號', '消費時間', '消費金額', '存儲金額', '余額', '消費次數', '消費類型', '消費項目編碼', '消費項目序列號', '消費操作編碼', '操作編碼', '消費地點']
data3.csv:進出門禁詳情
['序號', '門禁卡號', '進出時間', '進出地點', '是否通過', '描述']
二、數據讀取
#?數據讀取 import numpy as np import pandas as pd import ospd.set_option('display.max_columns',?None) os.chdir('/Users/wuzhengxiang/Documents/DataSets/students') data1?=?pd.read_csv("data1.csv",?encoding="gbk") data2?=?pd.read_csv("data2.csv",?encoding="gbk") data3?=?pd.read_csv("data3.csv",?encoding="gbk")data1.columns = ['序號', '校園卡號', '性別', '專業名稱', '門禁卡號'] data2.columns = ['流水號', '校園卡號', '校園卡編號', '消費時間', '消費金額', '存儲金額', '余額', '消費次數', '消費類型', '消費項目編碼', '消費項目序列號', '消費操作編碼', '操作編碼', '消費地點'] data3.columns = ['序號', '門禁卡號', '進出時間', '進出地點', '是否通過', '描述']print(data1.head(3)) 序號 校園卡號 性別 專業名稱 門禁卡號 0 1 180001 男 18國際金融 19762330 1 2 180002 男 18國際金融 20521594 2 3 180003 男 18國際金融 20513946print(data2.head(3)) 流水號 校園卡號 校園卡編號 消費時間 消費金額 存儲金額 余額 消費次數 \ 0 117342773 181316-女 20181316 2019/4/20 20:17 3.0 0.0 186.1 818 1 117344766 181316-女 20181316 2019/4/20 8:47 0.5 0.0 199.5 814 2 117346258 181316-女 20181316 2019/4/22 7:27 0.5 0.0 183.1 820 消費類型 消費項目編碼 消費項目序列號 消費操作編碼 操作編碼 消費地點 性別 0 消費 49 NaN NaN 235 第一食堂 女 1 消費 63 NaN NaN 27 第二食堂 女 2???消費??????63?????NaN?????NaN????27??第二食堂??女??print(data3.head(3))序號 門禁卡號 進出時間 進出地點 是否通過 描述 0 1330906 25558880 2019/4/1 0:00 第六教學樓[進門] 1 允許通過 1 1330907 18413143 2019/4/1 0:02 第六教學樓[出門] 1 允許通過 2??1331384??11642752??2019/4/1?0:00????飛鳳軒[進門]?????1??允許通過三、數據處理
我們首先需要把數據處理成關聯規則能識別的格式,每5分鐘分割成一個數據片段,里面是去重后的用戶明細,大家可以類比,這里的用戶ID就是商品ID,每5分鐘就是一個訂單,這樣就能和常規的關聯規則算法聯系起來了,把時空數據轉換成關聯規則的應用方式,初學者還是比較難理解的,如果看不懂,大家可以看看我之前介紹原理的文章。
data2 = data2.merge(data1[['校園卡號','性別']],on='校園卡號')data2['校園卡號'] = data2['校園卡號'].apply(lambda x: str(x))+'-'+data2['性別']# 時間格式調整,轉換成比較標準的格式,方便后面的處理 import datetime def st_pt(x):#'2019/4/20 20:17'=>'2019-04-20 20:17:00'return str(datetime.datetime.strptime(x, "%Y/%m/%d %H:%M"))# 時間離散化,每個五分鐘一個類型 def time_5(s):#'2022-02-22 17:46:07'=>'2022-02-22 17_9'a = str(round(int(s.split(':')[1])/5))return s.split(':')[0]+'_'+a# 數據處理,處理成標準的格式 df = data2 df = df.sort_values(by='消費時間',ascending=True) df['消費時間_F'] = df['消費時間'].apply(st_pt) df['消費時間_5'] = df['消費時間_F'].apply(time_5) all_list = [] for v in df['消費時間_5'].unique():one = df[df['消費時間_5']==v]['校園卡號'].unique().tolist()all_list.append(one)print(len(all_list))#可以看到,有6176個時間片段,可以類比6176個訂單 6176all_list # 看看list長什么樣子 [['181735-女','180015-女'],['181058-男', '181374-男', '182044-女', '182581-女', '180052-女', '182729-男'],['181405-男','180078-男'],···]#數據保存起來 df.to_csv('df.csv',header=True,index=False)?
四、關聯規則挖掘
有了上面構造的數據,我們就可以進行關聯規則的挖掘
#加載包,沒有的自行安裝 #pip install efficient-apriorifrom efficient_apriori import aprioriitemsets, rules = apriori(all_list, min_support=0.005, min_confidence=1)itemsets[2]('183305-女', '183317-女'): 38,('183308-女', '183317-女'): 42,('183310-女', '183314-女'): 31,('183315-女', '183324-女'): 32,('183338-男', '183345-男'): 40,('183343-男', '183980-女'): 44,('183385-女', '183401-女'): 40,('183386-女', '183409-女'): 34,('183408-女', '183415-女'): 42,('183414-女', '183418-女'): 41,('183419-女', '183420-女'): 56,('183419-女', '183422-女'): 59,··· len(itemsets[2]) # 一共有三百多對,我們下面挑一部分來分析 378我們可以看到,挖掘出來的關聯規則,2元的組合一共有378條,數據是2019-04月一個月的,就是30天的。前面是用戶對,后面是30天內出現的次數,30多次到50多次,基本上每天出險一次以上,都是比較強關聯的。?
數據對我們都加上了性別,基本可以推斷,男女一般都是情侶,男男基本就是好基友,女女都是好閨蜜,而被我們排除的數據,里面很多就是單身狗了。
五、結果解讀
上面挖掘的,都是匯總數據,為了更加具體,我們挑一對男女的消費明細來看看,這一對同學,一個月內出現了44次的關聯,基本上每天都一起出入了,并且是男女組合。
('181597-男','183847-女'):44
2019/4/1 ?07:49 ?男生女生一起去吃早餐,男生吃了3塊錢的,女生吃了6.5的,在第一食堂,多年后可能還能記起這一頓早餐
2019/4/1 ?11:18 ?男生女生一起去吃午飯,男生吃了8塊錢的,女生也吃了8的,估計吃的餃子,或者是麻辣燙,這次在第四食堂,可能是上課的教室就在這附近
2019/4/2 ?07:42男生女生一起去吃早餐,男生吃了7.5塊錢的,女生吃了3.5的,估計昨天點多了,沒吃完,今天少吃點
2019/4/17 ?20:43 ?估計剛剛約會好了,在紅太陽超市,女生估計買了個酸奶,男生餓了,買個個老壇酸菜牛肉面,買完,操場上一個大大的擁抱,各自回宿舍了,帶著滿滿的甜蜜和力量,大學的美好,不過如此了·····
·······
數據挖掘,我們不應該機械冰冷,應該通過數據,洞察后面的細節與故事,有時候,數據挖掘,是多么美妙的故事呢。
除了這一對,還有很多對的情侶,也是類似的生活軌跡。
通過分析,我們也發現兩個渣男,啊呸,打死算了,細節我就不看了,你們去看
('180624-男', '181013-女'): 36 ('180624-男', '181042-女'): 37('180780-女', '181461-男'): 38 ('180856-女', '181461-男'): 34還有我們挖掘的數據,剔除部分,有大量的單身狗的含量,沒有人和他一起吃飯
更多的是,基友和閨蜜,可以看看下面的
itemsets[2]('183247-女', '183254-女'): 32,('183302-女', '183306-女'): 31,('183303-女', '183307-女'): 48,('183303-女', '183314-女'): 31,('183305-女', '183308-女'): 38,('183305-女', '183317-女'): 38,('183308-女', '183317-女'): 42,('183310-女', '183314-女'): 31,('183315-女', '183324-女'): 32,('183338-男', '183345-男'): 40,('183343-男', '183980-女'): 44,('183385-女', '183401-女'): 40,('183386-女', '183409-女'): 34,('183408-女', '183415-女'): 42,('183414-女', '183418-女'): 41,('183419-女', '183420-女'): 56,3元的數據
itemsets[3]{('180363-女', '181876-女', '183979-女'): 40,('180711-女', '180732-女', '180738-女'): 35,('180792-女', '180822-女', '180849-女'): 35,('181338-男', '181343-男', '181344-男'): 40,('181503-男', '181507-男', '181508-男'): 33,('181552-男', '181571-男', '181582-男'): 39,('181556-男', '181559-男', '181568-男'): 35,('181848-女', '181865-女', '181871-女'): 35,('182304-女', '182329-女', '182340-女'): 36,('182304-女', '182329-女', '182403-女'): 32,('183305-女', '183308-女', '183317-女'): 32,('183419-女', '183420-女', '183422-女'): 49,('183419-女', '183420-女', '183424-女'): 45,('183419-女', '183422-女', '183424-女'): 48,('183420-女', '183422-女', '183424-女'): 51,('183641-女', '183688-女', '183690-女'): 32,('183671-女', '183701-女', '183742-女'): 35,('183713-女',?'183726-女',?'183737-女'):?36}4元的數據,一般都是一個宿舍的,關系非常好的宿舍
itemsets[4] {('183419-女', '183420-女', '183422-女', '183424-女'): 42}六、風控應用
我們分析用的是校園刷卡數據,這樣的時序數據,隨處可見
訂單下單數據
領券明細數據
信用卡刷卡數據
····
非常多的這種數據,我們可以通過時序關聯的方法挖掘出來其中的時空關系,從而確定多個有一致行動的用戶,達到一起打擊的目的。
當然,這種方法也是有缺陷的,有些相隔時間近但是不再同一個5min中內的,不會產生關聯,其實有更先進的算法去解決,我們后面慢慢介紹,因為比較抽象。
往期精彩回顧適合初學者入門人工智能的路線及資料下載(圖文+視頻)機器學習入門系列下載中國大學慕課《機器學習》(黃海廣主講)機器學習及深度學習筆記等資料打印《統計學習方法》的代碼復現專輯 AI基礎下載機器學習交流qq群955171419,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【机器学习】情侣、基友、渣男和狗-基于时空关联规则的影子账户挖掘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用中断后不停止_乔丹体育公司构成侵权,
- 下一篇: 【Python】面向小白的Python可