摘要: 本文是一篇pandas/networkx圖分析入門,對所舉的欺詐檢測用例進行了簡單的圖論分析,便於可視化及操做。
對於圖論而言,你們或多或少有些瞭解,數學專業或計算機相關專業的讀者可能對其更加清楚。圖論中的圖像是由若干給定的點及鏈接兩點的線所構成的圖形,這樣的圖像一般用來描述某些事物之間的某種特定關係,用點表明事物,用兩點之間的鏈接線表示兩者具備的某種關係,在互聯網與通訊行業中應用普遍。圖論分析(Graph analysis)並非數據科學領域中的新分支,也不是數據科學家目前應用的經常使用首選方法。然而,圖論能夠作一些瘋狂的事情,一些經典用例包括欺詐檢測、推薦或社交網絡分析等,下圖是 NLP中的非經典用例——處理主題提取。git
假設如今你有一個客戶數據庫,並想知道它們是如何相互鏈接的。特別是,你知道有些客戶涉及複雜的欺詐結構,可是在我的層面上可視化數據並不會帶來欺詐證據,欺詐者看起來像其餘普通客戶同樣。github
只需查看原始數據,處理用戶之間的鏈接就能夠顯示更多信息。具體而言,對於一般的基於機器學習的評分模型而言,這些特徵不會被視爲風險,但這些不會被認爲存在風險的特徵可能成爲基於圖表分析評分模型中的風險特徵。算法
示例:三個具備相同電話號碼的人,鏈接到具備相同電子郵件地址的其餘人,這是不正常的,且可能存在風險。電話號碼自己沒有什麼價值,並不會提供任何信息(所以,即便最好的深度學習模型也不能從中獲取任何價值信息),但我的經過相同的電話號碼或電子郵件地址鏈接這一問題,多是一種風險。
下面在Python中進行一些處理:數據庫
設置數據、清理和建立圖表網絡
(構造的仿真數據)機器學習
首先從一個pandas DataFrame開始(它基本上是Python中的Excel表)學習
從代碼中看到,先加載數據,以df表示。下面對其作一些準備,須要鏈接具備相同電話號碼和相同電子郵件的我的(由其ID表示)。首先從電話號碼開始:spa
處理的數據看起來像這樣:3d
從圖中看到,裏面有一些聯繫,但存在兩個問題:code
• 我的與本身聯繫在一塊兒
• 從數據中看到,當X與Y鏈接時,Y也與X鏈接,有兩行數據用於同一鏈接。下面讓咱們清理一下:
下面,數據看起來像這樣:
從圖中看到,1和3鏈接,5和6也鏈接。咱們對電子郵件地址也進行一樣的處理。下面構建一個圖表,將在這裏只分享代碼的一部分,由於添加所有代碼比較棘手,項目代碼地址在文末給出。
下面進行數據可視化
簡單的nx.draw(G)代碼就能得到如下內容:
從圖中看到,這是一個至關有趣的形式!可是咱們看不出圖中的每一個點表明的是誰,誰和誰之間有什麼鏈接。下面將其具體化:
從圖中能夠看到, 4我的經過2個不一樣的電話號碼和1個電子郵件地址鏈接在一塊兒,後續還應該進行更多的調查!
讓咱們回顧一下咱們前面作過的事情:
• 根據用戶數據庫建立圖表
• 自定義可視化,幫助咱們發現潛在奇怪的模式
若是你是業務驅動的,並但願一些專家使用你已經完成的工做,那麼你的下一個重點應該是:
• 將查找多我的鏈接在一塊兒的這一過程自動化,或風險模式檢測
• 經過圖形可視化和原始數據自動建立可視化和建立自定義儀表板的過程
本文不會在這裏詳細介紹上述內容,可是會告訴你如何繼續進行上述兩個步驟:
這裏有兩種方法:
• 從你認爲有風險的人(或你被發現爲欺詐者的人)那裏開始,檢查他們與其餘人的關係。這與機器學習相關,這是一種「有監督」方法。更進一步,你還能夠從機器學習評分(例如,使用XGBoost)開始,尋找他們之間存在的緊密聯繫。
• 從奇怪的模式(太多的鏈接、密集的網絡...),這是「無監督」的方法。
在咱們舉的例子中,咱們沒有已知的欺詐者,因此咱們將採用上述的第二種方法。
Networkx已經實現了徹底正確的算法:degree( )、centrality( )、pagerank( )、connected_components( )......這些算法可讓你以數學的形式定義風險。
對於大多數數據科學家來講,這內容聽起來是老派,但快速作到這一點的方法就是使用Excel。
Xlsxwriter軟件包可幫助你粘貼風險人物圖表中的數據,並將咱們建立的圖表圖像直接粘貼到Excel文件中。經過這種操做以後你將得到每一個風險網絡的儀表板,以下所示:
對於每一個具備潛在風險的網絡,你均可以自動地建立儀表板,讓專家完成他們的工做。一樣你也能夠在信息中心中添加一些指標:涉及的人數、不一樣電話號碼的數量及電子郵件地址等。
全文源碼在此,但願這篇文章對你有所幫助。
本文做者:【方向】
本文爲雲棲社區原創內容,未經容許不得轉載。