毛典輝,梁秀霞,趙 爽,郝治昊
(北京工商大學 計算機學院,北京 100048)
2008年,中本聰發(fā)表了《Bitcoin: A Peer-to-Peer Electronic Cash System》[1]一文,討論了一個電子現(xiàn)金系統(tǒng),它是以區(qū)塊鏈[2-3]為底層架構(gòu)的虛擬貨幣平臺,由此奠定了區(qū)塊鏈技術(shù)發(fā)展的基礎。由于區(qū)塊鏈具有不依賴于第三方管理機構(gòu),可通過分布式進行數(shù)據(jù)的核算和存儲,具有去中心化、不可篡改、可追溯和匿名性等特點,為區(qū)塊鏈奠定了堅實的“信任”基礎。正是由于去中心化特性,區(qū)塊鏈技術(shù)游走于法律灰色地帶,缺乏有關部門的監(jiān)管;匿名性隱藏了用戶的真實身份,更是增加了區(qū)塊鏈監(jiān)管難度。因此,各種詐騙組織借助區(qū)塊鏈技術(shù)[4]大肆進行金融犯罪,如洗錢[5]、釣魚網(wǎng)址[6-7]和龐氏騙局[8]等。根據(jù)加密分析專家Chainalysis的最新報告[9],以區(qū)塊鏈作為底層技術(shù)的以太坊平臺(ETH)是深受歡迎的二代區(qū)塊鏈,已經(jīng)成為區(qū)塊鏈詐騙的首選加密平臺。因此,加強對以太坊為代表的區(qū)塊鏈平臺的金融詐騙監(jiān)管迫在眉睫。
基于智能合約[10-11]的以太坊詐騙又稱為智能龐氏騙局。在龐氏騙局持續(xù)過程中,隨著投資者的加入,合約將獲得的投資優(yōu)先返還最先加入的人,后續(xù)投資者無法獲得回報而失去他們的投資。前者和后者使用相同的投資金額卻沒有相同金額的回報,這是極其不公平的。顯然,這種合約給大多數(shù)后來者造成了損失,騙取了大量的財富。
對龐氏騙局智能合約進行監(jiān)測時面臨了以下挑戰(zhàn):(1)在特征提取方面,要求提取貼近詐騙本質(zhì)的特征,使龐氏騙局能夠具有更好的區(qū)分度;(2)在檢測分類方面,要求能夠提出減小目標泄漏導致的預測偏移問題,提高分類準確率的算法。
針對上述挑戰(zhàn),該文設計了一種基于智能合約混合特征的龐氏騙局檢測算法,提取交易主體間符合龐氏騙局中回報不公平的金字塔形式交易特征和能夠區(qū)分龐氏騙局的智能合約操作碼特征,并采用Catboost集成學習[12]的分類算法解決算法訓練過程中的梯度偏差以及預測偏移問題。
首先從Etherscan.io爬取智能合約相關交易及合約代碼,從交易記錄中可獲得合約賬戶得到投資的具體金額和時間戳,以及在回報分配上的比例,統(tǒng)計相關信息得到交易特征。由于智能合約以字節(jié)碼的形式保存于以太坊平臺,該文通過反匯編將字節(jié)碼轉(zhuǎn)換為操作碼,利用改進的TF-IDF[13]獲取合約的代碼特征。將交易特征和代碼特征結(jié)合成混合特征向量,進入由若干個弱分類器組成的Catboost[14]集成學習,得到龐氏騙局分類訓練模型,最終實現(xiàn)對新交易合約的預測。因此,設計的龐氏騙局智能合約檢測算法技術(shù)路線如圖1所示。
圖1 整體技術(shù)流程
為吸引更多投資者的加入,前期的龐氏騙局賬戶頻繁與投資者互動,互動形式表現(xiàn)為給前期投資者返還回報利息。因此,龐氏騙局的賬戶余額通常保持在較低水平,而展現(xiàn)在投資者面前的則是一個守信的合約賬戶,它能夠時常給投資者返還回報利息,并且保證所有的投資者都能夠獲得應得的回報。因此,以下交易特征對分類效果有很好的作用:
活躍度:記錄智能合約賬戶與外部賬戶(即投資者賬戶)頻繁交易的特點。
賬戶余額:智能合約賬戶余額。
投資交易數(shù):對智能合約進行投資交易的次數(shù)。
返利交易數(shù):從智能合約獲取返利交易的次數(shù)。
返利者比率:返利者占投資者的百分比。
最大返利次數(shù):參與者獲得返利的最大次數(shù)。
通過觀察交易記錄,發(fā)現(xiàn)在龐氏騙局中,大部分的投資進入合約創(chuàng)建者的口袋,而使得回報總返利金額遠低于總投資金額。完整詐騙過程中,在所有投資者獲得回報之前龐氏騙局便宣告破產(chǎn),使得多數(shù)遲到的投資者得不到回報。此外,獲得回報的投資者,其回報利息的高低也受投資時間影響,使得回報差異呈現(xiàn)出一個高水平。基于此,提取了可結(jié)合投資與回報相關特點的特征,如下:
總投資額:智能合約賬戶獲得的投資總額。
總返利額:智能合約賬戶指出的返利總額(詐騙者需要從合約中獲取利益。大部分龐氏騙局不會將全部投資作為返利返回給參與者,而是將一部分投資作為手續(xù)費返利給合約創(chuàng)建者,因此可以看到龐氏騙局中回報交易的金額高于投資金額)。
總投資人:進行投資的地址賬戶數(shù)。
總返利人:獲得回報的地址賬戶數(shù)(并不是所以投資者都可以獲得相應的回報。所以,獲得返利的賬戶地址會少于投資賬戶地址)。
返利標準差:智能合約賬戶返利的標準差(投資者回報金額的標準差反映了回報的不平衡,并由此判斷處龐氏騙局的回報金額呈現(xiàn)金字塔結(jié)構(gòu))。
以太坊上龐氏騙局以字節(jié)碼的形式存在,字節(jié)碼可反匯編為操作碼。由于龐氏騙局的行為與普通智能合約的經(jīng)濟行為有一定的區(qū)別,在操作碼中表現(xiàn)為對龐氏騙局的重要性不同。獲取操作碼重要指標ITF的準備階段需將從以太坊區(qū)塊鏈瀏覽器上爬取的字節(jié)碼進行反匯編以得到操作碼集合,之后通過ITF算法得到操作碼的重要性。詳細過程如下:
(1)使用pyevmasm工具將EVM字節(jié)碼反匯編成操作碼,通過預處理操作,最終得到可作為研究使用的數(shù)據(jù)集合。
(2)統(tǒng)計在特定合約內(nèi)特定操作碼出現(xiàn)的次數(shù)以及合約操作碼數(shù),通過計算TF實現(xiàn)對于操作碼數(shù)量的歸一化處理。
(3)通過統(tǒng)計特定操作碼在合約數(shù)據(jù)集合中出現(xiàn)的頻率和合約數(shù)據(jù)集內(nèi)操作碼的數(shù)量來度量該詞語對于合約代碼特征的重要程度。
(4)計算特定操作碼的重要指標ITF值,即特定操作碼對特定合同的重要性。
在特定的智能合約操作碼片段中,操作碼出現(xiàn)的頻率呈現(xiàn)一定的概率,高頻率的特定操作碼是龐氏騙局的代碼特征。該文首先對操作碼數(shù)量進行歸一化處理,以得到龐氏騙局中各操作碼的頻率。以操作碼m為例,對m進行歸一化處理,如公式(1):
(1)
其中,TFm為歸一化處理后的頻率;nm為特定操作碼在某一個龐氏騙局中出現(xiàn)的次數(shù);N為特定操作碼在所有智能合約中出現(xiàn)的次數(shù)。
之后,公式(2)通過統(tǒng)計“m”在合約數(shù)據(jù)集合中出現(xiàn)的頻率來度量該詞語對于合約代碼特征的重要程度,即對該詞語的IDF值進行計算:
(2)
其中,S為智能合約數(shù)據(jù)集合中所有操作碼總數(shù);Dm表示智能合約數(shù)據(jù)集合中操作碼“m”的數(shù)量。
最后,在上述基礎上,通過公式(3)即可計算得出詞語“m”的ITF值,若該詞語在龐氏騙局中出現(xiàn)頻率較高,而在智能合約數(shù)據(jù)集合(即其他合約)中出現(xiàn)頻率較低,則認為該詞語對龐氏騙局代碼具有良好的表征能力,有利于與其他智能合約進行區(qū)分并實現(xiàn)分類。
ITFm=TFm*IFm
(3)
其中,TFm和IFm分別來自公式(1)、公式(2)。ITF與傳統(tǒng)的TF-IDF算法并不十分相同,ITF中采用的是結(jié)合操作碼“m”分別在龐氏騙局的詞頻與在所有數(shù)據(jù)集中的詞頻表示其對于龐氏騙局的重要程度,這種算法更適合于提取操作碼的特征。
由于交易是一種復雜的經(jīng)濟行為,龐氏騙局與其他經(jīng)濟行為相似度高,易混淆。普通的機器學習在龐氏騙局檢測上得不到優(yōu)秀的準確率,一般的集成學習也容易在一定程度上產(chǎn)生預測偏離的問題,使得最終的準確率并不讓人信服其分類效果。
該文采用了Catboost集成學習算法來訓練龐氏騙局檢測模型。與其他的集成學習方法相比,Catboost為訓練集生成一個隨機序列處理特征類別,同時使用完全對稱的二叉決策樹[15]作為基礎預測器解決預測偏移的問題,提高了分類效果的準確性。圖2是分類器的技術(shù)框架。
圖2 分類模型技術(shù)框架 把爬取到的數(shù)據(jù)視為一個數(shù)據(jù)集D={(xk,yk)|k=1,2,…,n},其中
是m個特征的隨機向量,yk是數(shù)據(jù)xk的標簽,若yk=1,表示xk是數(shù)據(jù)集里的一個龐氏騙局賬戶,反之則表示xk是其他正規(guī)的賬戶。每個(xk,yk)都是獨立的,它根據(jù)某個未知的分布P(.,.)恒等分布。設置σ=(σ1,σ2,…,σn)對數(shù)據(jù)集進行隨機排列。根據(jù)式(4)得到數(shù)值型特征:
(4)
其中,[xσj,k=xσp,k]是一個艾弗森括號,當xσj,k=xσp,k時可得結(jié)果k=1,否則等于0。這里表示隨機排列的數(shù)據(jù)集與原來的數(shù)據(jù)集進行匹配,p是一個先驗值,其權(quán)值為a,其中a>0。
需要訓練近似函數(shù)F:Rm->R來盡可能降低在特征轉(zhuǎn)換過程的損失:
L(F):=EL(y,F(x))
(5)
其中,L(.,.)是平滑損失函數(shù),(x,y)是獨立于訓練集D的測試集P中的樣例。
根據(jù)近似函數(shù)Ft=Ft-1+?ht,可以得到一系列迭代Ft:Rm->R,其中α是步長,函數(shù)ht是一個基礎預測器,可以將預期的損失降到最低。
使用最小二乘近似,負梯度步近似最小化問題:
(6)
在Catboost的基本預測器中,完全對稱二叉決策樹遞歸地將特征空間Rm劃分為若干個獨立區(qū)域Rj(樹節(jié)點),bj為葉子節(jié)點,每個葉子節(jié)點被分配一個值,該值是被預測的類別。根據(jù)xk>t判斷最終所屬類別。決策樹h可以寫成:
(7)
提取特征及分類模型訓練實驗都是在anaconda內(nèi)使用Python 3.6環(huán)境下來完成的。在實驗過程中,采用Catboost深度學習框架構(gòu)建龐氏騙局檢測模型并進行模型訓練。使用了anaconda自帶的一些工具包數(shù)據(jù)的處理分析,如pandas、numpy等。
獲取的代碼數(shù)據(jù)有重復或破損,手動檢查并刪除了無效地址,最終實際得到1 393個非龐氏騙局的地址和123個龐氏騙局的地址。在數(shù)據(jù)集中交易數(shù)據(jù)與合約數(shù)據(jù)分別保存在不同的文件夾。其中,每個合約地址都有對應的若干個歷史交易。每個交易都含有時間戳、交易金額和手續(xù)費等信息。合約操作碼以文本文檔文件保存,每一個智能合約都是一個字典格式。
需要通過優(yōu)秀的性能指標來判斷分類模型的性能。使用精確率(Precision)、召回率(Recall)和F1分數(shù)(F1-score)來評判分類模型的性能。各項指標計算公式如下:
(8)
(9)
(10)
4.4.1 特征提取結(jié)果
該文利用交易數(shù)據(jù)提取了11個相關特征。提取的特征中不僅有與合約相關的余額、活躍度等特征,同時包含從參與者角度的投資和返利相關數(shù)據(jù)。最后以龐氏騙局和非龐氏騙局為集合分別將提取的特征值計算得到均值和標準差,結(jié)果如表1所示。
表1 交易特征
表1中清楚地展示了各項交易特征的均值和標準值。發(fā)現(xiàn)龐氏騙局各項標準差都小于非龐氏騙局,表示龐氏騙局各項交易特征的值比較接近,更有可能具有相似的行為。例如:龐氏騙局的活躍度標準差小于非龐氏騙局的活躍度標準差,而其均值卻相對大得多?;钴S度越高表示龐氏騙局希望通過與投資者互動返利以吸引越多的投資者。
該文參考了TF-IDF的思想,利用改進的新算法ITF提取合約的操作碼特征。操作碼特征分別在龐氏騙局和非龐氏騙局中的均值如表2所示,其中,Ponzi為1的列數(shù)據(jù)表示龐氏騙局的數(shù)據(jù)。
表2 智能合約部分ITF取值
在表2中最后一項,當Ponzi=1時表示為龐氏騙局,Ponzi=0表示為非龐氏騙局。表中所有的數(shù)據(jù)表示為代碼特征的均值,可以看到此九個操作碼在龐氏騙局的ITF值較非龐氏騙局的高,將其作為特征進行分類有極大可能增加分類的準確率。
4.4.2 分類結(jié)果
使用的Catboost集成學習分別與Knn、SVM[16]、DT、XGBoost[17]和RF[18]做了對比實驗,實驗結(jié)果如表4所示,其中Tra表示分類過程僅使用交易特征進行實驗,Code表示僅使用代碼特征進行實驗,而Com表示用混合特征進行分類實驗。
從表3中可以看到,提出的混合特征和基于Catboost的龐氏騙局檢測方法性能更好,原因在于Catboost對新增的特征有很好的適應性,其完全對稱樹可在最大程度上避免預測便宜問題。提出的Catboost模型雖然在僅使用交易特征的實驗中結(jié)果并不好,但結(jié)合代碼特征卻能夠得出最好的結(jié)果。在使用混合特征的Catboost實驗各項評判指標均達到最優(yōu),因此可以認為Catboost能夠很好地利用交易特征與代碼特征,使得結(jié)果最優(yōu)化。若是僅使用代碼特征進行實驗,XGBoost與RF的表現(xiàn)似乎都不錯,但是不要忽視了在Recall指標上XGBoost比RF高了3個百分點,其表明XGBoost更容易得到龐氏騙局的正確分類。如果僅使用代碼特征結(jié)果都不算好。分析各種模型后,發(fā)現(xiàn)DT在僅使用交易特征的實驗中可以得出相對較好的結(jié)果,尤其在Recall和F1-score指標上明顯強于其他分類模型。在缺少智能合約的龐氏騙局上可能能夠得到最優(yōu)的結(jié)果,因此DT可能更加適應于Bitcoin或其他第一代區(qū)塊鏈的詐騙檢測。
表3 分類結(jié)果對比實驗
采用Catboost在特征提取前后的實驗效果對比如圖3所示。其中,其他交易特征指的是僅與合約相關的余額、活躍度等特征,文中交易特征在其他交易特征的基礎上考慮了提取投資與回報相關特征;其他代碼特征值操作碼詞頻,文中代碼特征是提取操作碼的ITF值;相應的混合特征則是將交易特征與代碼特征混合形成特征向量。
圖3(a)、(b)、(c)表示僅使用交易特征、僅使用代碼特征和使用了混合特征。新提取的特征能夠在各項指標上勝于先前提取的特征,這表明了提取的交易特征與代碼特征都對龐氏騙局有更好的表征能力。且從圖3(d)中可以看到,代碼特征可以輔助代碼特征,使得結(jié)合二者的混合特征可以在代碼特征的實驗上略勝一籌。鑒于此,在所有的詐騙中,即使代碼特征可以很好地作用檢測的特點,也不能忽視交易數(shù)據(jù)的幫助。
圖3 特征提取前后實驗結(jié)果
4.4.3 模型參數(shù)變化影響分析
在使用Catboost模型對龐氏騙局進行檢測分類時,參數(shù)會影響分類模型的性能,需要通過實驗選取最好的參數(shù)值。該文選取對模型性能影響較大的參數(shù)進行實驗,包括交叉驗證的K值、損失函數(shù)、樹的深度depth以及學習率learning rate。各參數(shù)對實驗結(jié)果的影響如圖4所示。
(1)K折交叉驗證(K-fold cross validation)指的是把訓練數(shù)據(jù)D分為K份,用其中的K-1份訓練模型,剩余的1份數(shù)據(jù)用于評估模型的質(zhì)量。將這個過程在K份數(shù)據(jù)上依次循環(huán),并對得到的K個評估結(jié)果進行合并,如回歸問題求平均或分類問題投票。由圖4中可以看到,混合特征各項性能指標隨交叉驗證K值變化而變化。
圖4(a)中,在K=5時,Precision達到最高,然而此時Recall與F1-score指標過低,龐氏騙局大量被誤判為非龐氏騙局,分類模型最好的情況是三項指標均接近1;在K=12時,各指標分別為:Precision=0.90,Recall=0.77,F(xiàn)1-score=0.82,幾乎都已達到最優(yōu)。若K值進一步增加,三項指標迅速下滑,幾乎可以認為,在K=12時提出的分類模型達到最優(yōu)的值。
(2)在loss參數(shù)的選擇上,Catboost適用的loss函數(shù)包括Logloss、CrossEntropy和MultiClassOeaVsAll,Logloss損失函數(shù)能非常好地表征概率分布,對于分類問題可以很好地判斷分類結(jié)果屬于每個類別的置信度,非常適合于該文的分類問題。由圖4(b)可以看出,Logloss函數(shù)對分類確實得到了良好的效果,因此,該文選用Logloss作為分類模型的損失函數(shù)。
(3)在基學習器的分類中,二叉樹的深度對分類效果有一定的影響。過深的depth不僅不會提高分類的效果,同時極有可能造成分類結(jié)果的過擬合。從圖4(c)可以看出,在depth=9之前,隨著depth深度的提高,分類效果呈現(xiàn)先增后減的趨勢,同時在depth=6時達到最優(yōu)的性能,因此,選取depth=6作為實驗過程中的深度參數(shù)。
圖4 參數(shù)對實驗結(jié)果的影響
(4)學習率作為監(jiān)督學習中重要的超參,其決定著目標函數(shù)能否收斂到局部最小值以及何時收斂到最小值。合適的學習率能夠使目標函數(shù)在合適的時間內(nèi)收斂到局部最小值。從圖4(d)可以看出,隨著學習率的遞增,分類效果的三項指標均大致呈現(xiàn)一個遞減的趨勢,雖然在0.3時有一定的提升,但是提升效果沒有超過0.1時的,因此,斷定在learning_rate=0.1分類效果達到最優(yōu)。
在實驗的最后發(fā)現(xiàn),部分龐氏騙局所有投資人都獲得了回報,從交易特征觀察似乎并不符合龐氏騙局。這樣的龐氏騙局占比達到1∶5。查看這些賬戶的源代碼,發(fā)現(xiàn)其回報分配依舊呈現(xiàn)金字塔形態(tài)。另外,這些賬戶的投資者數(shù)量都太小。因此可以判斷,這部分龐氏騙局是被正確分類的,但是由于是創(chuàng)建初期,其仍屬于吸引投資時期,需要靠給投資者分配回報增加它的影響力。
在對以太坊平臺的龐氏騙局進行檢測中,提出了一種新的特征提取方法。在交易特征上還原龐氏騙局的金字塔回報率形式。在代碼特征提取方面,借助TF-IDF的思想,提出了一種結(jié)合頻率的操作碼重要指數(shù)的特征提取方式,提取的代碼特征從數(shù)據(jù)集出發(fā),表示其對龐氏騙局的重要程度。針對訓練過程梯度偏差以及預測偏移問題,提出了新的集成學習方法Catboost,使用完全二叉樹作為基礎分類器在最大程度上解決計算梯度估計時存在目標泄漏導致的預測偏移問題。
該方法在一定程度上仍存在少許不足,如召回率只達到了82%,意味18%的龐氏騙局被遺漏。在未來工作中,需對分類模型進行改進,以期達到更高的準確率。此外,類別不平衡對實驗結(jié)果仍存在一定的影響,后續(xù)工作中不可將類別不平衡問題的處理全部寄托于模型中,可考慮擴大龐氏騙局類別數(shù)量,一定最大限度類別不平衡帶來的影響。