将信用卡交易数据表示为图,并使用算法自动检测欺诈交易。
数据集
使用的是信用卡交易欺诈检测数据集
由包含2019年1.1到2020.12.31期间合法和欺诈交易的模拟信用卡交易组成,包括与800家商家进行交易的1000名客户的信用卡数据。
每笔交易包含了23个不同的特征,主要利用了以下信息
- index,每一行的唯一标识符
- cc_num,客户的信用卡号
- merchant,商家名称
- amt,交易额
- is_fraud,目标变量,
在开始任何机器学习任务之前尽可能探索和熟悉数据集。
加载数据集并构建图
由于该数据集是一个简单的交易列表,执行一些操作构建信用卡交易图。
选取真实数据的20%和所有的欺诈交易,如下所示:
import pandas as pd
df = pd.read_csv('fraudTest.csv')
df = df[df['is_fraud']==0].sample(frac=0.2, random_state=42).append(df[df['is_fraud']==1])
df['is_fraud'].value_counts()
输出:一共110715 + 2145条数据。
了解如何从数据中构建图,
- 二分法构建图,
- 三分法构建图,
二分法
构建一个加权二分图 G = ( V , E , ω ) G = (V, E, \omega ) G=(V,E,ω),其中节点有两类,代表客户和商家,如果存在客户到商家的交易,则创建边。每条边分配一个权重代表交易金额。
如果客户和商家存在多笔交易,则两个节点建立一条边,权重由所有交易金额的总和给出。
知识点:二分图
二分图又称二部图,是图论中的一种特殊模型,它的顶点可分割为两个互不相交的子集,并且图中的每条边所关联的两个顶点分别属于这两个不同的顶点集。
二分图在复杂网络分析中有很多应用,例如科学家合作网络(作者和论文)、商品网络(商品和购买者)、城市公交网络(线路和站点)等都可以用二分图来进行描述。
NetworkX提供了一些基本的二分图建模与分析功能.
构建二分图的函数
# 定义构建二分图函数
import networkx as nx
def build_graph_bipartite(df_input, graph_type=nx.Graph()):
df = df_input.copy(