图结构
整体结构
在设计xFraud时,我们受到了Transformer和HGT的启发。具体结构如下图所示:
1)detector的输入为一个异质图,包括目标和源节点特征
X
v
t
X_{v_t}
Xvt,
X
v
s
X_{v_s}
Xvs,目标和源结点类型
τ
(
v
t
)
\tau(v_t)
τ(vt),
τ
(
v
s
)
\tau(v_s)
τ(vs),以及边类型
ϕ
(
e
)
\phi(e)
ϕ(e)
2)L层异质卷积层利用self-attention机制来处理图:输入层
L
(
0
)
L^{(0)}
L(0)将交易特征,结点类型embedding,边类型embedding作为输入,这些embedding被处理为query, key和value向量,对源和目标结点计算出attention分数然后进行layer-wise的归一化,然后输入ReLU激活函数中发给下一个卷积层。
3)在经过
L
L
L层异质卷积层后,我们激活函数tanh处理输出的representation。然后这些representation与原始的交易特征concat起来然后喂给一个两层的隐藏层,在这两层中应用了dropout, layer normalization和ReLU来计算出risk score和label。
4)xFraud detector的loss是交叉熵loss
异质卷积
具体看下上一节中提到的异质卷积:对于一个三元组
<
τ
(
v
s
)
,
ϕ
(
e
)
,
τ
(
v
t
)
>
<\tau(v_s), \phi(e), \tau(v_t)>
<τ(vs),ϕ(e),τ(vt)>,其中
e
=
(
v
s
,
v
t
)
e=(v_s, v_t)
e=(vs,vt),我们用零向量来给结点类型embedding和边类型embedding初始化,给结点的attention权重矩阵用均匀分布随机初始化,对key, query和value向量也用均匀分布进行随机初始化。总体来说,结点
v
t
v_t
vt的异质卷积结果由三部分组成:attention, message和聚合函数:
H
l
[
v
t
]
←
A
g
g
r
e
g
a
t
e
(
A
t
t
e
n
t
i
o
n
(
v
s
,
v
t
)
⋅
M
e
s
s
a
g
e
(
v
s
)
)
H^l[v_t] \leftarrow Aggregate(Attention(v_s, v_t) \cdot Message(v_s))
Hl[vt]←Aggregate(Attention(vs,vt)⋅Message(vs))
对每个target结点
v
t
v_t
vt,为构建它的query vector,我们利用它的交易特征和结点类型embedding来生成multi-head attention的query:
Q
i
(
v
t
)
=
Q
−
L
i
n
e
a
r
τ
(
v
t
)
i
(
X
τ
(
v
t
)
t
x
n
+
τ
(
v
t
)
e
m
b
)
Q^i(v_t) = Q-Linear^i_{\tau(v_t)}(X^{txn}_{\tau(v_t)}+\tau(v_t)^{emb})
Qi(vt)=Q−Linearτ(vt)i(Xτ(vt)txn+τ(vt)emb) 对第
H
(
l
−
1
)
H^{(l-1)}
H(l−1)层,我们计算的方法是
Q
(
v
t
)
i
=
Q
−
L
i
n
e
a
r
τ
(
v
t
)
i
(
H
(
l
−
1
)
[
v
t
]
)
Q^i_{(v_t)} = Q-Linear^i_{\tau(v_t)}(H^{(l-1)}[v_t])
Q(vt)i=Q−Linearτ(vt)i(H(l−1)[vt]) 下面的计算方法也类似这样,对于第一层是将交易特征和结点类型embedding直接相加。
为了构建源结点
v
s
v_s
vs的key vector,我们利用如下公式:
K
(
v
s
)
i
=
K
−
L
i
n
e
a
r
τ
(
v
s
)
i
(
X
τ
(
v
s
)
t
x
n
+
τ
(
v
s
)
e
m
b
+
ϕ
(
e
)
e
m
b
)
K^i_{(v_s)} = K-Linear^i_{\tau(v_s)}(X^{txn}_{\tau(v_s)} + \tau(v_s)^{emb} + \phi(e)^{emb})
K(vs)i=K−Linearτ(vs)i(Xτ(vs)txn+τ(vs)emb+ϕ(e)emb) 构建结点
v
s
v_s
vs的value vector是跟上面一样的方法。
attention的部分公式如下:
α
−
h
e
a
d
i
(
v
s
,
e
,
v
t
)
=
(
K
i
(
v
s
)
W
τ
(
v
s
)
a
t
t
+
Q
i
(
v
t
)
W
τ
(
v
t
)
a
t
t
)
d
k
\alpha-head^i(v_s, e, v_t) = \frac{(K^i(v_s)W^{att}_{\tau(v_s)} + Q^i(v_t)W^{att}_{\tau(v_t)})}{\sqrt{d_k}}
α−headi(vs,e,vt)=dk(Ki(vs)Wτ(vs)att+Qi(vt)Wτ(vt)att) 然后target结点的query vector和source结点的key vector的交互为
α
(
v
s
,
e
,
v
t
)
=
s
o
f
t
m
a
x
v
s
∈
N
(
v
t
)
(
∣
∣
i
∈
[
1
,
h
]
α
−
h
e
a
d
i
(
v
s
,
e
,
v
t
)
)
\alpha(v_s, e, v_t) = softmax_{v_s \in N(v_t)}(||_{i \in [1, h]}\alpha-head^i(v_s, e, v_t))
α(vs,e,vt)=softmaxvs∈N(vt)(∣∣i∈[1,h]α−headi(vs,e,vt)) 其中
N
(
v
t
)
N(v_t)
N(vt)表示
v
t
v_t
vt的邻居,
h
h
h代表attention的头数,||代表vector concat。
最后,
H
(
l
)
H^{(l)}
H(l)和
H
(
l
−
1
)
H^{(l-1)}
H(l−1)层的message传递为
m
s
g
(
v
s
,
e
,
v
t
)
=
∣
∣
i
∈
[
1
,
h
]
(
V
i
(
v
s
)
⋅
d
r
o
p
o
u
t
(
α
−
h
e
a
d
i
(
v
s
,
e
,
v
t
)
)
)
msg(v_s, e, v_t) = ||_{i \in [1, h]}(V^i(v_s) \cdot dropout(\alpha-head^i(v_s, e, v_t)))
msg(vs,e,vt)=∣∣i∈[1,h](Vi(vs)⋅dropout(α−headi(vs,e,vt)))
xFraud Detector+
我们实现了xFraud detector和detector+,两者在采样阶段有所区别。在detector中,我们沿用了HGT的实现,并且发现HGT的采样方法时间开销很大。因此我们将采样方法替换成了GraphSAGE的采样方法。在detector+中,算法首先为结点采样出k-hop邻居,然后聚合邻居的feature信息,最后让GNN利用聚合后的信息预测label。HGT尝试在采样后保留差不多数量的 τ ( v ) \tau(v) τ(v)和 ϕ ( e ) \phi(e) ϕ(e)类型的结点和边,然后在子图中最小化information loss和sample variance,然而在我们的数据集中图更加稀疏,因此HGT采样比GraphSAGE采样更加稀疏。在下面的章节中我们会主要评估xFraud detector+