黃良瑜 王薏婷 詹杭龍 金 健*
1(華東師范大學計算機科學與技術學院 上海 200062) 2(上海大學計算機工程與科學學院 上海 200444) 3(中匯信息技術(上海)有限公司 上海 201203)
隨著中國經濟的快速發展和金融體制改革的不斷推進,中國債券市場已經成為中國金融體系中不可或缺的部分,也成為世界債券市場、世界金融體系中重要的組成部分。截至2019年5月末,中國債券市場的托管規模超過91萬億元,僅次于美國債券市場,已經成為全球第二大債券市場。
目前在我國的債券市場中,銀行間債券市場占主導地位。由于資本的逐利性,金融市場可能發生內幕交易、操縱市場等違規行為;同時,金融機構充分關聯、業務鏈條日趨復雜,單家機構單個環節出現問題可能通過跨機構、跨市場交易而傳染到多家機構,甚至波及整個市場,帶來系統性風險隱患。對此,需要金融市場的運營監管部門能夠進一步研究應用監管科技,提升跨市場、跨業態、跨區域金融風險的識別、預警和處置能力,為金融市場健康平穩運行保駕護航。
2009年,全國銀行間同業拆借中心會同中央國債登記結算有限責任公司聯合制定了《銀行間債券市場債券交易監測工作方案》,方案中的第二條提到銀行間債券市場債券交易一線監測工作主要包括的內容之一便是監測和了解市場債券交易行為,重點監測異常交易和違規交易行為。因此,為了維護市場秩序,防范市場風險,保護市場投資者的合法權益,促進銀行間債券市場的長遠健康發展,檢測并打擊銀行間債券市場中的異常交易行為在金融市場中變得尤為重要。
20世紀80年代初,芝加哥大學塞勒和耶魯大學希勒的研究使行為金融學成為一個新興的學派。行為金融學認為投資者心理與交易行為是有關系的。由于銀行間債券市場的交易主體就是金融機構投資者,所以金融機構投資者的正常交易行為和異常交易行為存在差異。因此,可以使用深度學習模型來檢測銀行間債券市場的異常交易行為。而目前現有的異常行為檢測方法主要是通過傳統的人工檢測方式或者是基于已知交易規則的檢測方式,其中人工檢測過于耗費人力,而已知交易規則的檢測難以檢測出規則外的異常行為。本文試圖用深度學習的方法分析出不同機構在交易行為中的差異,從而識別出異常行為的模式。結合當前業界研究的主流方法,本文使用LSTM模型來檢測銀行間債券市場金融機構的異常交易行為。
G=(V,E,W):銀行間債券市場的交易網絡。其中:V是交易網絡中所有頂點的集合,即該交易網絡中的所有機構;E是交易網絡中所有有向邊的集合;W是交易網絡中所有有向邊的屬性集合。
Px:兩家機構進行交易的債券產品編號。
Ax:兩家機構發生交易的交易量。
tx:兩家機構發生交易的時間。
Vx:機構x的編號,代表一家機構。
Ox:若x=0,則當前機構為買入方;若x=1,則當前機構為賣出方。
由以上定義,可以得到一家機構Vi的一筆交易表示為(Vi,Vj,Px,Ax,Ox)。其中:Vi代表本方機構;Vj代表對手方機構。
近年來,深度學習已經成為很多學者研究的熱門課題,且已有許多學者將深度學習用于不同領域的異常檢測中,如欺詐檢測、入侵檢測、社交網絡異常檢測、時間序列異常檢測、醫療異常檢測和惡意程序檢測等。Jurgovsky等[1]使用長短期記憶神經網絡來識別信用卡欺詐交易序列。Yu等[2]使用卷積自編碼器實現網絡入侵檢測。Sun等[3]結合卷積神經網絡和長短期記憶網絡來實現社交網絡的異常檢測。Park等[4]結合長短期記憶網絡和變分自編碼器來實現時間序列的異常檢測。Cowton等[5]使用門控循環單元神經網絡來實現醫療異常檢測。Kim等[6]使用對抗生成網絡來實現惡意程序檢測。Chouiekh等[7]使用卷積神經網絡來實現移動數據網絡的欺詐檢測。Fajardo等[8]使用變分自編碼器來實現保險欺詐檢測。Lasaga等[9]使用受限玻爾茲曼機來實現醫療欺詐檢測。
上述文獻中均使用了深度學習方法在相應的領域進行異常檢測。因此,利用深度學習進行異常檢測是具有可行性的,目前在我國銀行間債券市場中,還未有使用深度學習的方法對機構的交易行為進行異常檢測的分析。深度學習能夠應用在時間序列、交易序列的異常檢測中,而銀行間債券市場的機構交易行為可以看作是具有時序性的交易序列,所以可以利用深度學習模型來實現銀行間債券市場中的異常交易行為檢測。
銀行間債券市場中各個機構間的交易可以看作是一個龐大的交易網絡,如圖1所示。機構是網絡中的節點,機構間發生的交易則是網絡中的有向邊,機構間發生交易時的交易產品、交易金額、交易時間等信息可以看作是網絡中邊的屬性,一個機構的一筆交易可以由機構節點、邊及邊的屬性表示,交易行為則是基于時序的多筆交易組合得到的。若將邊的屬性看作網絡中的節點,則只要得到網絡中節點的特征表示,就可得到機構的交易行為特征。

圖1 銀行間債券交易網絡示意圖
網絡中的節點特征表示可以通過目前流行的網絡嵌入方法得到,并且網絡嵌入可以有效地保留節點在網絡中的結構特征。網絡嵌入方法從技術的角度主要可以分為基于矩陣分解、基于隨機游走、基于深度神經網絡三類。基于矩陣分解的網絡嵌入方法主要使用一個鄰接矩陣表示網絡的拓撲信息,每一個行與列的信息代表一個節點,并且這個矩陣表示了節點間的關系。常用的矩陣分解方法一種是由Ou等[10]提出的奇異值分解方法,另一種是由Wang等[11]提出的非負矩陣分解方法。前者是因為低階估計最優,后者是因為其加法模型的優勢。基于隨機游走的網絡嵌入方法是類比自然語言處理中的詞向量思想得到的,其目的是尋找比矩陣分解方法更好的節點局部結構特征表示。常見的隨機游走方法有Perozzi等[12]提出的Deepwalk算法和Grover等[13]提出的Node2Vec算法。基于深度神經網絡的網絡嵌入方法是尋找一個非線性學習模型,以期得到更有效的原始網絡空間的低維向量空間表示。常用的深度神經網絡方法有Wang等[14]提出的SDNE(Structural Deep Network Embedding)方法和Cao[15]提出的SDAE(Stacked Denoising Autoencoders)方法以及Wang等[16]提出的SiNE(Signed Network Embedding)方法。
由于銀行間債券交易網絡中,兩家機構可以進行多筆交易,這樣會導致交易網絡中出現兩個節點有多條邊相連的情況,又因銀行間的交易具有時序性,所以可以將一家機構的一天交易行為看作一個有時序的序列。而這樣一個在網絡中的有時序的序列便可以看作基于隨機游走方式的網絡嵌入方法得到的一個游走序列。
本文主要思路體現在以下兩個方面:
(1) 針對銀行間債券市場交易網絡動態演化的特點,提出時序屬性網絡嵌入方法。
(2) 基于長短期記憶網絡模型對銀行間債券市場交易行為序列建模分析,檢測銀行間債券市場中的異常交易行為。
在前面的相關工作中已經說明可以利用深度學習來做異常檢測的工作,在銀行間債券市場中,一方面,需要使用網絡嵌入的方法來獲得銀行間債券市場交易網絡中節點的特征表示,進而得到機構交易行為的特征表示;另一方面,由于銀行間債券市場交易網絡中,交易行為可以看作是具有時序性的交易序列,而深度學習中的循環神經網絡是處理時序數據時的首選網絡,但是循環神經網絡有長期依賴問題,故本文使用可以解決長期依賴問題的長短期記憶網絡模型來進行異常交易行為的檢測。
結合網絡嵌入和長短期記憶網絡模型,提出適用于銀行間債券市場中的異常交易行為的檢測框架,如圖2所示。圖2的左側有三層空間,從下往上分別是原始特征空間、行為嵌入空間和LSTM訓練層。

圖2 異常交易行為檢測框架
(1) 原始特征空間。該空間中存放的是原始的交易行為序列。將現有的交易數據進行預處理,提取出模型需要的交易特征并按一定的格式和時序排列后組合成原始的交易行為序列,該過程即為圖2中的步驟1(特征預處理)。每一個原始的交易行為序列由一家機構一天之內發生的所有交易組成,而每一筆交易又包括四個交易要素,即交易機構、交易產品、交易量、交易方向。不同機構的交易序列用不同英文字母編號的柱體表示,每個帶有英文字母編號的柱體代表一筆交易,其中用橫線分隔的柱體代表一組交易序列,即某家機構某天的交易序列。
(2) 行為嵌入空間。該空間存放的是機構交易行為的嵌入表示。交易行為的嵌入表示是結合銀行間債券市場的交易網絡動態演化的特性,將原始的交易行為序列進行變換后得到的,變換后的表示具有交易網絡的時序特性及交易的屬性。時序特性表示金融機構的交易具有時間先后的特性,屬性則是金融機構交易的交易要素。這一對原始交易行為序列進行變換并嵌入的過程即為圖2中的步驟2(行為嵌入)。
(3) LSTM訓練層。該層主要研究如何訓練深度學習模型并用來檢測銀行間債券市場的異常交易行為,是異常交易檢測框架中對應的深度學習模型部分。模型的輸入部分來源于行為嵌入空間。因為每一家機構一天的交易筆數是不一樣的,所以每一家機構的交易行為序列的長度是不同的。但是長短期記憶網絡模型中要求輸入序列的長度是一致的,故采用前向序列填充的方法,取所有銀行中一天交易數量的最大值作為所有序列的長度,若一家機構一天的交易行為序列長度小于最大值,則在該機構的交易行為序列的最前面補零達到最大的交易行為序列長度。用于填充的“零”在圖2中表現為白色柱體。
首先將金融機構的交易行為的嵌入表示作為深度學習模型的輸入,然后求得深度學習模型輸出的預測結果(正常交易行為用0表示/異常交易行為用1表示)與真實結果的誤差,最后通過誤差反向傳播算法反復調整深度學習模型的權重參數得到最后的深度學習模型。該空間中的特征填充和訓練的過程即為圖2中的步驟3(特征填充并訓練)。
最后使用訓練好的模型進行機構的交易行為異常檢測,即可判斷出一家機構的交易行為是異常交易行為還是正常交易行為,該過程對應于圖2中的步驟4(行為預測)。
銀行間債券市場交易網絡如圖1所示,該圖演示了5家機構一天發生的一系列交易,每一條有向邊代表兩家機構進行的一筆交易,箭頭的起始端代表賣方機構,箭頭末端代表買方機構。目前,可以看到每一條有向邊上給出了三個屬性:Px,Ax,tx。因此,可以定義一家機構Vi與對手方交易機構Vj的一筆交易信息為[對手方交易機構,交易產品,交易量,交易方向],即[Vj,Px,Ax,Ox]。所以,一家機構一天的交易行為可按時間順序由當天發生的所有交易組成交易行為序列。例如,對機構V5,當天的交易行為按時間順序可表示為{[V3,P2,A4,O0],[V3,P3,A9,O0],[V3,P2,A10,O0],[V4,P5,A8,O0]}。類比可得到其他所有機構的原始交易行為表示。
在使用深度學習對機構的原始交易行為進行分析之前,需要對機構的原始交易行為表示進行變換,得到更適合深度學習處理的交易行為表示。例如,與在自然語言處理中需要將詞語訓練成詞向量之后再進行后續分析一樣,在進行交易行為分析之前,也需要將機構間交易行為中的機構編號與債券編號先進行向量化。一方面機構的交易行為中機構編號或債券編號之間會有先后順序,另一方面交易網絡中的機構節點表示應具有網絡的結構特征,而原始的機構編號或債券編號不能包含這些信息,所以需要尋求更好的交易行為表示。目前,已經有很多學者應用網絡嵌入的方法來得到網絡中節點的結構信息,因此,又考慮到銀行間債券市場的交易網絡中交易行為的序列具有時序動態性,根據Node2Vec算法進行改進,得到適用于銀行間債券市場的時序屬性網絡嵌入方法,利用時序屬性網絡嵌入來得到銀行間債券市場的交易行為嵌入表示。時序屬性網絡嵌入方法的詳細過程見算法1。主要的思路是首先根據原始的銀行間債券交易網絡G=(V,E,W),將交易量歸一化為0到1的范圍之后得到所有機構的原始交易行為序列walks;然后去掉這些序列中交易的交易量與交易方向的屬性,并把交易中的對方交易機構編號與交易產品編號屬性拼接在一起得到新的“交易行為”序列walks_train;接著利用隨機梯度下降進行優化得到所有“對方交易產品編號+交易產品編號”對應的嵌入表示f;最后再將所有機構的原始交易序列行為中的對方交易產品編號與交易產品編號替換成對應的“對方交易產品編號+交易產品編號”嵌入表示,即可得到最終所有機構的交易行為嵌入表示results。
算法1時序屬性網絡嵌入方法
Learn Transaction Behavior Features
(Transaction Network:G=(V,E,W), Deal Time:T,
Deal Product:P, Deal Amount:A, Dimensions:d, Context size:k)
G’=(V,E,T,P,A)
Initialize walks, walks_train to Empty
A=normalize(A)
for alluinVdo:
walk=TANEWalk(G’,u)
Append [walk] towalks
walks_train_pre=walks
for allbehaviorinwalks_train_predo:
Initializewalkto Empty
for alldealinbehaviordo:
walk=[str(deal[0])+ str(deal[1])]
Append [walk] to walks_train
f=StochasticGradientDescent(k,d,walks_train)
results=get_last_embedding(walks,f)
returnresults
TANEWalk (G’=(V,E,T,P,A), Start nodeu){
Initializewalkto Empty
t=set(get all edges’T.daywhereuis on the edge)
#變量edge在集合E中
for alltimeintdo:
Initializewalk_dayto Empty
temp_set=list(get all edges (where u is on the
edge andT.day=time))
temp_set=sort(temp_set)[by edges’T]
for alledgeintemp_setdo:
Initializewalk_tto Empty
Append [edge’sv] towalk_t
#變量v是除u外在變量edge上的另一個節點
Append [edge’s p] towalk_t#變量p在集合P中
Append [edge’s a] towalk_t#變量a在集合A中
ifuis buyer:
Append [0] towalk_t
else:
Append [1] towalk_t
Append [walk_t] towalk_day
Append [walk_day] towalk
returnwalk}
get_last_embedding (walks,f){
Initializewalks_embeddingto Empty
for allbehaviorinwalksdo:
Initializewalkto Empty
for alldealinbehaviordo:
Initializewalk_tto Empty
walk_t=[get the embedding(str(deal[0])
+str(deal[1])) fromf]
walk_t=walk_t+[deal[2],deal[3]]
Append [walk_t] towalk
Append [walk] towalks_embedding
returnwalks_embedding}
銀行間債券交易網絡的交易行為可以看作是有時序的交易序列,而長短期記憶網絡可以較好地處理具有時序屬性的數據,因此可以使用該網絡模型在銀行間債券交易網絡中進行異常交易行為檢測。長短期記憶網絡最早是由Hochreiter等[17]引入,之后便有很多學者進行應用并改進。長短期記憶網絡與標準的循環神經網絡一樣也是鏈式結構,每一個重復的單元里有四個網絡層,長短期記憶網絡結構的詳細描述可參考文獻[18]。
本文基于LSTM模型來實現異常交易行為的檢測,如圖3所示,其中該模型主要由輸入層、嵌入層(emdedding層)、LSTM層、輸出層組成。

圖3 基于LSTM網絡的異常交易行為檢測模型
(1) 輸入層。將原始特征序列作為整個模型的輸入。原始特征序列由三個維度組成,最外層代表的是所有機構的交易行為序列,這些交易行為序列又可細分為某家機構某天的交易行為序列,即圖3中原始特征空間中的一排柱體。一天的交易行為序列中包含有多筆交易,每個柱體就是一筆交易,每筆交易有對手方機構、交易產品、交易量和交易方向四個交易要素,即[Vx,Px,Ax,Ox]。這種嵌套的關系可以用一個三維張量表示,這就組成了模型的輸入。
(2) 嵌入層。該層的主要工作是將輸入層輸出的原始交易行為序列通過時序屬性嵌入方法得到交易行為的嵌入表示,得到的交易行為嵌入表示即為LSTM層的輸入。
(3) LSTM層。本文使用LSTM網絡層進行訓練。這是因為LSTM網絡可以較好地處理具有時序的數據,非常適合應用于交易行為這類有時序性的數據集。本文用不同的網絡大小對交易行為進行訓練,選擇的網絡大小有16、32、64和128四種。
(4) 輸出層。本文使用Sigmoid激活函數[19]作為輸出層的激活函數,這是因為異常交易行為的檢測只有異常和正常兩種結果,屬于二分類問題,而Sigmoid激活函數相較于其他激活函數更適合二分類問題。
(5) 評價指標。銀行間債券市場中金融機構交易行為的異常檢測本質上是一個二分類問題,且在實際的交易市場中異常交易行為的數量比正常交易行為的數量小得多,所以,銀行間債券市場中金融機構的異常行為檢測是一個不平衡的二分類問題。故本文采用F1指標值來評價本文的銀行間債券市場中金融機構的異常交易行為檢測模型的精確度。
(6) 損失函數。依舊是出于二分類問題的考慮,本文使用Binary_crossentropy[19](二分類的交叉熵損失函數)作為該模型的損失函數。
本文實驗數據集用的是我國銀行間債券市場的模擬交易數據。在本次實驗中,主要選取了交易時間、買入方、賣出方、債券編號、交易量這五個交易要素。其中,交易時間是指本次交易發生的時間,精確到分鐘;買入方和賣出方分別指的是本次交易的買方機構和賣方機構,選用機構的數字編號表示;債券編號是指本次交易產品的債券品種編號,同樣使用數字編號表示;交易量是指本次交易的交易量,單位為元。
銀行間債券市場中金融機構的交易行為異常檢測本質上是一個二分類問題,且由于異常交易行為的數量在實際中比正常交易行為的數量小得多,因此這里的異常檢測是一個不平衡的二分類問題。故采用適合不平衡二分類的評價指標——F1值。在本文中,異常的交易行為稱之為正例(positive),正常的交易行為稱之為負例(negative)。因此,可以有如下定義:
TN:預測結果為負例,實際上也是負例的個數。
FP:預測結果為正例,實際上是負例的個數。
FN:預測結果為負例,實際上是正例的個數。
TP:預測結果為正例,實際上也是正例的個數。
由以上定義進一步可以得到精準率(precision)的定義為:
(1)
召回率(recall)的定義為:
(2)
F1指標值定義為:
(3)
F1指標值在0到1之間,其值越接近于1說明該模型在異常檢測中能更好地區分正常交易和異常交易。
實驗參數的設置主要包括網絡嵌入部分和LSTM網絡兩部分的參數設置,具體參數設置如表1所示。

表1 實驗參數設置
本次實驗首先針對不同的LSTM網絡大小及網絡嵌入維度對LSTM異常交易行為檢測模型的精確度進行了對比。其中:LSTM網絡大小的選取范圍為16、32、64、128四種;網絡嵌入維度的選取范圍為16、32、53、96四種。為了控制變量,在本次對比中,與實驗相關的其他參數將統一設置為表1的參數設置,其中優化器選擇的是RMSprop。
表2給出了不同LSTM網絡大小以及網絡嵌入維度下的實驗結果,表中的第一行數字代表銀行間債券市場中一筆交易中的“機構編號+債券編號”的嵌入維度,嵌入維度為0代表直接使用的原始交易行為序列作為LSTM網絡的輸入,所以表2中的每一列代表著給模型的輸入數據不一樣,表2右下部分的小數值表示在使用不同輸入數據時,不同LSTM網絡大小對應的LSTM異常交易行為檢測模型的精確度指標F1指標值。可以看到在嵌入維度為0的情況下,LSTM網絡大小為128時的LSTM異常交易行為檢測模型的精確度最高。雖然這里使用網絡嵌入對數據預處理后,LSTM異常交易行為檢測模型的精確度比未經處理的要低,但這并不意味著使用網絡嵌入對數據進行預處理的步驟就無意義了。首先可以看到表2中的F1值的差值都不大,且在LSTM網絡大小為128時,嵌入維度為64的LSTM異常交易行為檢測模型比嵌入維度為0的精確度僅差0.01。其次,由于LSTM異常交易行為檢測模型的復雜度較高,所以有可能在嵌入維度不為0的情況下找到的只是局部最優解。所以可以在未來的工作中繼續調整LSTM異常交易行為檢測模型的參數,以期得到更好的異常行為檢測精確度。

表2 LSTM異常交易行為檢測模型評價F1值
除了不同維度和不同網絡大小的對比,還嘗試了不同優化器的對比實驗。表3主要展示了固定LSTM網絡大小的異常交易行為模型,嵌入維度分別為0、16時,使用不同優化器訓練LSTM異常交易行為檢測模型的精確度。可以看到在嵌入維度固定時,使用RMSprop優化器訓練的LSTM異常交易行為檢測模型的精確度最高,說明在固定訓練次數下,RMSprop優化器比其他的優化器可以更快地找到較好的LSTM異常交易行為檢測模型。

表3 不同優化器的LSTM異常交易行為檢測模型評價F1值
此外,本文取嵌入維度為16時測試集中的700條交易行為數據,選取LSTM網絡大小為16情況下的模型來預測得到這700條交易行為的檢測結果,并利用TSNE降維展示了異常交易行為檢測的結果,如圖4所示。圖中的圓點表示檢測結果為正常交易行為,星號表示檢測結果為異常交易行為。可以看出,所有正常交易行為較為集中,而異常交易行為與正常交易行為距離較遠且不集中。經與業務人員討論,這些異常交易行為產生的背后原因包括債券本身價格的波動、交易對手方的變化,以及機構自身較大的倉位調整等。

圖4 異常交易行為檢測結果
銀行間債券市場的異常檢測對于該市場健康平穩的運行有著不可忽略的作用。鑒于目前銀行間債券市場缺乏有效的基于深度學習的異常檢測系統,而傳統的人工檢測方法存在大量的人力資源消耗問題,且基于已知交易規則的檢測方法存在難以檢測出規則未知的異常交易行為問題,本文提出一種基于深度學習實現的較為有效的異常檢測方法,旨在提高異常檢測的準確度和效率。本文首先使用時序屬性網絡嵌入方法得到銀行間債券市場機構的交易行為嵌入表示,然后利用長短期記憶網絡模型來檢測銀行間債券市場的異常交易行為。F1值大于0.7這一實驗結果也表明本文使用的方法可以提高異常交易行為檢測模型的精確度。
在以后的研究中,一方面,可以將更多的交易要素加入機構的交易行為表示中,以期得到更好的機構交易行為表示;另一方面,銀行間債券市場中的金融機構有大小之分,可以在長短期記憶網絡模型中加入注意力機制來提高深度學習模型的檢測精度。