摘要: 本文是一篇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文件中。经过这种操做以后你将得到每一个风险网络的仪表板,以下所示:
对于每一个具备潜在风险的网络,你均可以自动地建立仪表板,让专家完成他们的工做。一样你也能够在信息中心中添加一些指标:涉及的人数、不一样电话号码的数量及电子邮件地址等。
全文源码在此,但愿这篇文章对你有所帮助。
本文做者:【方向】
本文为云栖社区原创内容,未经容许不得转载。