凡友榮 楊 濤 孔華鋒 彭如香 姜國慶
1(公安部第三研究所 上海 201204)2(武漢商學院 湖北 武漢 430056)
大數據及其相關技術在案件偵破、社會治理等公安業務領域發揮著巨大的作用,能夠輔助公安各級偵查人員進行情報收集及線索發現[1]。目前電信詐騙案件中積累的通話數據(Call Detail Records, CDR)的數據量龐大,能反映出人們的通話習慣、社會關系、社會屬性等重要信息,然而這些數據的應用仍停留在查詢層面,數據之間的關聯還未被充分挖掘和使用[2]。
Google公司于2012年5月重金收購Metaweb公司,并向外界正式發布其知識圖譜,自此,知識圖譜正式走入公眾視野[3]。知識圖譜是結構化的語義知識庫,描述了物理世界中的概念及其相互關系,其基本組成單位是“實體-關系-實體”三元組,以及實體與其相關屬性的“屬性-值”,實體間通過關系相互聯結,構成網狀的知識結構[4]。知識圖譜能將數據之間的關聯關系構建起來,從而更利于深層知識的挖掘,提高數據的利用率[5]。
本文從仿真通話數據的角度出發,使用知識圖譜、分布式計算等大數據技術構建知識挖掘模型,為電信詐騙案件的數據利用及線索挖掘提供技術支持。首先基于通話數據構建知識圖譜,然后基于圖算法和分布式圖計算引擎,構建通聯特征挖掘模型,挖掘出通聯網絡中的核心人物、聯系鏈路等隱藏線索,并且提取出通話記錄中的9個關鍵特征,建立支持分布式計算的混合高斯模型,挖掘出其中的5類社會關系,以及涉案人員之間的通聯特點,從多個維度為電信欺詐案件的線索挖掘提供技術支持。
本文的技術路線如圖1所示。
本文的研究內容以主流的大數據技術為基礎,使用Python語言對各類存儲格式的數據進行預處理,并存儲在基于Hadoop的Hive數據倉庫中,為知識圖譜的構建提供數據基礎;將處理完成的圖結構數據存儲在基于JanusGraph的圖數據庫中,完成知識圖譜的構建;結合Gremlin和GraphX可進行實時的圖遍歷及全局的圖數據分析,構建基于通聯特征挖掘模型。綜上,本文的技術架構將淺層知識發現和深層知識挖掘相結合,從而實現電信欺詐案件的線索探查和挖掘。
本文采用自底向上的方式進行知識圖譜的構建。從多源異構的數據中抽取實體信息、鏈接和融合實體,推理補全屬性,識別語義并建立關系,最終將知識存儲于知識圖譜數據庫中。此過程是一個迭代更新的過程,每一輪更新包括信息抽取、知識融合、知識加工這三個步驟[3],如圖2所示。

圖2 知識圖譜構建步驟
在知識圖譜的基礎上,通過圖的深層遍歷及圖算法進行信息挖掘,能夠識別特定人員相互之間的通話交互模式。本文基于最短路徑算法(Shortest Path algorithm)、PageRank算法、Centrality算法、混合高斯模型(Gaussian mixture model,GMM)構建通聯特征挖掘模型,模型設計如圖3所示。

圖3 通聯特征挖掘模型
最短路徑算法計算一對點之間的最短路徑,此路徑在連通這對點的所有路徑中邊數最少,本文實驗中中使用的是經典的Dijkstra算法[6]。在基于通話數據的知識圖譜中,通過計算兩個手機號之間的最短路徑,可以挖掘其相互聯系的所有鏈路。例如,兩名涉及同一案件的欺詐人員可能沒有直接聯系,但通過最短路徑計算,可發現其隱藏的聯系鏈路,并挖掘出重要的中間聯系人,提供關鍵的案件線索。
Betweenness Centrality算法基于圖中的所有最短路徑,計算經過每個點的最短路徑數量,當某點的Betweenness Centrality值很高,則說明很多點之間的最短路徑都經過此點。因此Betweenness Centrality值的大小反映了每個點在圖中的必要性,此算法可用于發現社交圈中的必要人物。計算公式如下[7]:
(1)
式中:CB(pi)為點pi的Betweenness Centrality值,gjk為連接點pj和點pk的所有最短路徑的總數量,gjk(pi)是這些最短路徑中經過點pi的數量。
PageRank算法是著名的Google網頁排名算法,其關鍵假設是網頁越重要,則指向此網頁的鏈接越多[8]。在本文中,PageRank算法用來計算圖中每個點的重要程度,從而挖掘通聯網絡中的核心人物,其計算公式如下:
(2)
式中:頁面T1至T2指向頁面A,PR(A)為頁面A的PageRank值。參數d為阻尼因子,取值區間為[0,1],在本文實驗中取值為0.85。C(A)為頁面A指向的頁面數量。
混合高斯模型(GMM)是用高斯概率密度函數(正態分布曲線)精確地量化事物,將一個事物分解為若干基于高斯概率密度函數形成的模型[9]。該算法能高效地得到聚類結果。本文在Spark中實現該模型,主要代碼如下:
#import data
data=spark.sql(′select * from tablename)
#generate vectors of features
vector=data.rdd.map(lambda
line:(line[0],line[1],Vectors.dense(…)))
dataFrame=
spark.createDataFrame(vector,[″main_phone″,″contact_phone″, ″features″])
#normalize the data
normalizer=Normalizer(inputCol=″features″,
outputCol=″normFeatures″, p=1.0)
l1NormData=normalizer.transform(dataFrame)
#running GMM model
gmm=GaussianMixture(featuresCol=″normFeatures″)
model=gmm.fit(l1NormData)
#generate the clustering result
transformed=model.transform(l1NormData).select(″main_phone″,
″contact_phone″, ″features″,″prediction″)
本文使用仿真的通話數據和電信詐騙案件數據。通話數據格式為CSV,電信詐騙案件數據為文本格式,首先根據電信詐騙案件數據在通話數據中進行標注,即標注各手機號是否涉案。將數據進行預處理后的數據描述如表1所示。

表1 數據集成后的數據示例
本實驗使用的測試數據量如表2所示。

表2 測試數據概覽
4.2.1知識圖譜構建
以表1所示數據為基礎,使用圖4所示的步驟進行知識圖譜的構建。將源數據經過實體抽取、關系抽取、知識融合,得到點數據集和邊數據集,其中:案件檔案的點數據示例如表3所示;CDR的點數據示例如表4所示;案件檔案的邊數據示例如表5所示;CDR的邊數據示例如表6所示。將點邊數據導入至Janusgraph中形成知識圖譜。

圖4 通聯數據知識圖譜構建

fileId:IDfile name:LABELB310??????5fraudfile

表4 CDR點數據示例

表5 案件檔案邊數據示例

表6 CDR邊數據示例
如圖5所示,知識圖譜中包含案件、人員兩類實體的網絡結構,包含案件與人員的關系,人與人之間的通話關系。基于該知識圖譜,可進行多維度的應用分析,例如聯系鏈路的拓展、團伙發現、關鍵人員發現等,從而為電信欺詐案件提供淺層和深層的破案線索。

圖5 基于通聯數據的電信欺詐案知識圖譜
4.2.2通聯特征挖掘
1) 聯系鏈路發現。通過以下代碼調用最短路徑算法,計算并返回兩個欺詐人員之間的聯系鏈路。
MATCH Paths=allShortestPaths((suspect1: Person
{ Phone:″1312***″})-
[:contacts*..]-(suspect2: Person
{ Phone:″1305***″}) )
RETURN Paths;
上述代碼的返回結果如圖6所示,涉及同一案件的人員“suspect1”和“suspect2”之間的聯系鏈路只包含圖中的5個實體,且實體之間的聯系較為緊密,這些中間聯系人可能是隱藏的作案團伙,能為案件偵查提供重要線索。

圖6 最短算法的實驗結果
2) 必要人物發現。通過以下代碼調用Betweenness Centrality算法,計算并返回子圖中Betweenness Centrality值最高的點。
MATCH(suspect2:phone {name:″15317***″})
CALL apoc.path.subgraphAll(suspect2,
{maxLevel:5}) YIELD nodes
WITH collect(nodes) AS nodes
CALL apoc.algo.betweenness([′contacts′], nodes, ′BOTH′) YIELD nodes, score
RETURN nodes, score
ORDER BY score DESC
計算欺詐人員suspect1和suspect2的通聯子圖中每個節點的Betweenness Centrality值,按值的高低排序可發現其中的關鍵人員。如圖7所示, 點a和點b為該子圖中Betweenness Centrality值最高的兩個點,其在兩名欺詐人員的聯系鏈路中起著橋梁作用,每條聯系路徑都必須經過點a和點b,因此這兩個點為該子圖的必要節點,即這兩名人員是該通聯網絡中不可或缺的關鍵人物。

圖7 Betweenness Centrality算法的實驗結果
3) 核心人物發現。在團伙欺詐案中,需查找該團伙的核心人員。在一個團伙的聯通子圖中計算每個節點的PageRank值,該值的大小代表指向該點的邊的多少,反映了該點在子圖中是否具有核心地位。調用代碼如下:
MATCH(n:phone) WHERE n.name=″15317***″
CALL apoc.path.subgraphAll(n, {maxLevel:2}) YIELD nodes
CALL apoc.algo.pageRank(nodes) YIELD node, score
RETURN node.name AS name, score
ORDER BY score DESC
LIMIT 10;
計算結果如表7所示,可視化結果如圖8所示。PageRank值最高的點a、b、c在圖中處于核心位置,說明這三人在此社交圈中為核心人物,是抓獲該團伙的關鍵線索。

表7 PageRank計算結果示例

圖8 PageRank算法可視化結果
4) 社會關系識別。欺詐案件中的人員社會關系是重要線索,本實驗從通聯數據中提取特征并構建聚類模型,從通話模式聚類的角度來識別不同的社會關系。
(1) 特征提取。不同的社會關系具有不同的通話特征,例如大部分工作同事之間的通話行為發生在工作時間,并且保持聯系的時間較長,而家庭關系中大多數的通話發生在業余時間,并且通話的頻率相對較高。本文從通話記錄中提取具有代表性的通話特征。5種典型的通話模式如圖9所示,代表了5種社會關系。

圖9 五種典型通話模式
圖9中包含5種通話模式在12天中的通話記錄,每一天被均分為48個時間片段,每個片段為30分鐘。其中:標注a的數據為涉及同一案件的兩個人之間的通話記錄,其通話行為僅發生在凌晨0點至6點之間,且通話頻率較高;b為兩個同事之間的通話記錄,通話多發生在工作時間,且通話頻率較高;c為暫時的工作關系,通話發生在工作時間,且僅發生一次;d為兩個朋友之間的通話記錄,通話發生在工作時間或者休息時間,通話頻率相對較低;e為一對情侶的通話記錄,通話均發生在休息時間,且通話頻率很高。從這5個典型的通話模式中可以發現,當通話雙方均涉及案件,其通話模式區別于其他社會關系的明顯特征為通話多發生在凌晨。
將一天劃分為3個時間段,凌晨時段(0點至6點)、工作時間(7點至18點)、休息時間(19點至23點)。通過計算這三個時段的通話時間占比,可以從通話時間段的角度分析不同社會關系的通話特點。
基于上述計算及分析過程,從通話數據中提取出9個特征,根據這些特征構建能區分不同社會關系的聚類模型。這9個特征的具體描述如表8所示。

表8 通話記錄中的九大特征
(2) 聚類分析。將特征數據導入到GMM模型中進行計算。為提高計算效率,本模型在基于Hadoop 2.7.3和Spark 2.0.1的分布式環境中運行。
聚類結果如圖10所示,從9個維度來顯示聚類結果,從而能體現上述9個特征對聚類產生的影響,所有通話數據被聚類為5個簇。

圖10 聚類結果的可視化
對每簇的特征進行分析,總結如下:
0簇:通話雙方保持聯系時間長,通話次數最多,通話時長較長,并且通話行為常發生在凌晨。
1簇:通話雙方保持聯系時間較短,通話次數較少,通話時長很短,通話行為多發生在凌晨。
2簇:通話雙方保持聯系時間較長,通話次數較少,通話時長相對較短,通話行為多發生在休息時間。
3簇:通話雙方保持聯系時間較長,通話次數較多,通話時長相對較長,通話行為多發生在工作時間。
4簇:通話雙方保持聯系時間最短,通話次數最少,通話時長最短,通話行為多發生在休息時間。
詐騙團伙在聚類中分布在0簇和1簇,說明這兩簇中的通話雙方是一種特殊的社會關系;2簇的通話雙方是家人關系或者關系緊密的朋友關系;3簇的通話雙方是工作同事關系;4簇代表的是一種短暫關系,例如推銷電話、泛泛之交等。因此,此聚類分析方法能輔助分析人員從通話模式的角度發現欺詐人員,并為社會關系的識別提供技術支持。
綜上,本實驗在通話數據的知識圖譜之上,從聯系鏈路發現、必要人物發現、核心人物發現、社會關系識別這4個維度進行分析挖掘,為電信欺詐人員和團伙的發現提供了重要線索。
結合仿真的通話數據和電信欺詐案件數據,本文使用知識圖譜、分布式計算等大數據技術構建通聯特征挖掘模型,挖掘出了通聯網絡中的聯系鏈路、必要人物、核心人物等隱藏線索;提取出了通話記錄中的9個關鍵特征,聚類得到了5類典型的社會關系,并且發現涉案人員之間的通話模式具有一定的特殊性,即通話次數多且多發生在凌晨、通話時間較長且保持聯系的時間較長。
綜上,本文提出的通聯特征挖掘方法能輔助挖掘電信欺詐案的重要線索。