由于比特幣采用基于公鑰的錢包地址作為用戶在區(qū)塊鏈網(wǎng)絡(luò)上的身份,且錢包地址由用戶自由生成,與用戶身份特征無關(guān),因此比特幣的匿名性導(dǎo)致人們很難推測(cè)用戶的真實(shí)身份信息。
目前為止,有許多嘗試推測(cè)比特幣地址身份的方法,其中最常用的推測(cè)方法是基于多輸入交易地址和挖礦交易地址,通過遞歸算法的進(jìn)行的判斷,準(zhǔn)確率幾乎可以達(dá)到100%,是非常有效的追尋比特幣地址擁有者的方法。
但是隨著比特幣在全球范圍內(nèi)的普及,目前比特幣的整個(gè)區(qū)塊已非常龐大(截止2018年8月28日,區(qū)塊高度為538862,大小接近180G),如果使用該方法所依靠的遞歸算法對(duì)整個(gè)區(qū)塊鏈上的地址進(jìn)行計(jì)算,需要消耗大量計(jì)算資源和時(shí)間,限制了對(duì)該方法的使用范圍;另外這種方法只能通過設(shè)置一定條件追蹤部分滿足條件的比特幣地址擁有者,而無法涵蓋所有比特幣地址。
火幣研究院在該算法的研究成果上,通過從比特幣區(qū)塊鏈中提取特征分析不同賬戶的鏈上轉(zhuǎn)賬信息,使用隨機(jī)森林(Random Forest)的機(jī)器學(xué)習(xí)算法對(duì)地址類別進(jìn)行歸類。該機(jī)器學(xué)習(xí)算法并非替代原有的聚類算法,而是對(duì)原有的聚類方法應(yīng)用范圍的補(bǔ)充。犧牲一小部分的準(zhǔn)確性,以適用于更廣泛的比特幣區(qū)塊鏈轉(zhuǎn)賬研究。
本文主要分為兩個(gè)部分:第一部分1)簡(jiǎn)述比特幣交易系統(tǒng)及交易過程2)基于多輸入交易地址以及挖礦交易地址的分類方法3)通過隨機(jī)森林算法建模對(duì)地址類別進(jìn)行歸類方法 4)兩種算法的比較。第二部分利用模型進(jìn)行實(shí)例分析。目的是為讀者提供將比特幣地址擁有者進(jìn)行分類的思路,以便在不同的應(yīng)用場(chǎng)景下,選擇更為高效的方法對(duì)比特幣區(qū)塊鏈數(shù)據(jù)進(jìn)行多維度分析。
文章的第二部分,我們通過分析2018年8月8日至8月15日所有的比特幣地址與轉(zhuǎn)賬記錄,基于分類算法得出活躍地址數(shù)的分布:
活躍地址中,44%為交易所地址,30%為服務(wù)商地址,19%為個(gè)人錢包地址,6%為博彩公司,1%為礦池。
再進(jìn)一步分析新建地址數(shù)和轉(zhuǎn)賬明細(xì)得出:
1) 交易所和服務(wù)商新增地址數(shù)在這幾周內(nèi)變化不大,但是新建個(gè)人錢包地址數(shù)卻呈現(xiàn)明顯下降趨勢(shì)。
2) 比特幣由個(gè)人地址轉(zhuǎn)入交易所的量遠(yuǎn)遠(yuǎn)大于從交易所轉(zhuǎn)入個(gè)人地址的量。
最后推測(cè)該周比特幣價(jià)格大幅下挫原因可能有:
1) 新入場(chǎng)的投資者人數(shù)的減少。
2) 很有可能是有大量用戶將個(gè)人錢包中的比特幣轉(zhuǎn)入交易所進(jìn)行拋售。
報(bào)告正文
第一部分 模型簡(jiǎn)介
1. 比特幣的交易過程和特點(diǎn)
比特幣交易有三個(gè)特點(diǎn):1)所有交易記錄大眾可見,2)一筆交易可以有多個(gè)輸入(inputs)和多個(gè)輸出(outputs) 3)每筆交易都通過公鑰-私鑰對(duì)來識(shí)別交易的付款人和收款人。
圖1為真實(shí)出現(xiàn)在比特幣網(wǎng)絡(luò)的交易流,每個(gè)頂點(diǎn)代表一個(gè)比特幣地址,頂點(diǎn)之間的連線和箭頭代表一筆交易。正如以上提到的比特幣的第二個(gè)特點(diǎn),一筆交易可以有多個(gè)輸入(圖中交易A,B,C),基于多輸入交易地址以及挖礦交易地址的歸類方法正是使用了這個(gè)特點(diǎn)。
2. 基于多輸入交易地址和挖礦地址的歸類(算法1)
2.1 多輸入交易地址
通過Fergal Reid,MAO H L,MAN H 等人的研究,得出結(jié)論:當(dāng)用戶支付額度超過了用戶錢包中每一個(gè)可用地址中比特幣的數(shù)量時(shí),為了避免執(zhí)行多筆交易完成支付造成交易費(fèi)用方面的損失,用戶會(huì)從錢包中選擇多個(gè)比特幣地址聚合在一起進(jìn)行匹配支付,實(shí)現(xiàn)多輸入交易。而又由于比特幣交易中使用每一個(gè)地址中的資金都需要單獨(dú)簽名,所以我們可以反過來認(rèn)為一個(gè)多輸入交易中的所有輸入地址來源于同一個(gè)用戶。(準(zhǔn)確率可以近似達(dá)到100%)。
因此我們可以認(rèn)為圖1中,3與4為同一用戶,同理:8,9與10,以及5與6 都為同一用戶。
2.2 挖礦交易地址
同樣,對(duì)于沒有輸入地址的交易(也就是俗稱的挖礦交易),由于挖礦的本質(zhì)是在一臺(tái)服務(wù)器上運(yùn)行比特幣挖礦程序,可以認(rèn)為一個(gè)產(chǎn)量交易中的輸出地址是由同一個(gè)用戶進(jìn)行配置。所以如果一個(gè)或多個(gè)地址是同一個(gè)挖礦交易的輸出,可以認(rèn)為它們被同一個(gè)用戶控制。
對(duì)于用戶自行挖礦模式的情況,挖礦交易地址聚類的準(zhǔn)確率可達(dá)100%。對(duì)于“礦池”模式,多數(shù)情況下,出塊獎(jiǎng)勵(lì)會(huì)在產(chǎn)量交易中轉(zhuǎn)入“礦主”的私有收益地址,然后根據(jù)礦池用戶的算力貢獻(xiàn)進(jìn)行二次收益分配,因此同樣可以認(rèn)為產(chǎn)量交易輸出地址屬于同一用戶。
2.3 歸類流程
歸類算法的框架如圖2所示,迭代的次數(shù)越多,查到的地址數(shù)就會(huì)越多,全面性就越好,但是迭代次數(shù)的增多同時(shí)也會(huì)降低聚類效率。
以上,我們描述了基于多輸入交易地址和挖礦地址的歸類模型及其實(shí)現(xiàn)方法,該模型可以非常準(zhǔn)確地對(duì)同一用戶的地址進(jìn)行聚類,且隨著迭代次數(shù)的增多,得到的同一用戶地址數(shù)量非常可觀:例如,如果我們知道某交易所一些熱錢包地址,通過該算法可以得出大量的這個(gè)交易所其他的熱錢包地址,且準(zhǔn)確率近似100%。
然而該算法缺點(diǎn)是有一定的局限性:我們無法了解比特幣網(wǎng)絡(luò)的所有地址的擁有者,對(duì)于一個(gè)不在數(shù)據(jù)表的地址,我們無法對(duì)其進(jìn)行歸類。
火幣研究院在研究了該算法的基礎(chǔ)上,通過從比特幣區(qū)塊鏈中提取不同類別比特幣地址的特征,建立地址歸類模型,能夠?qū)Ω鼮閺V泛的匿名比特幣地址進(jìn)行歸類。
3. 基于隨機(jī)森林的比特幣地址分類(算法2)
3.1 標(biāo)記類別和樣本選取
我們?yōu)榻kS機(jī)抽樣選取了8045條樣本,并分為五個(gè)類別標(biāo)記:交易所(1591),礦池(1684),服務(wù)商(1669),博彩公司(1601),個(gè)人(1500)。
建模所用的地址標(biāo)簽信息主要來自于WalletExplorer(www.walletexplorer.com),該網(wǎng)站已經(jīng)通過以上方法,分類了數(shù)萬個(gè)地址,有五個(gè)不同的類別(交易所,礦池,服務(wù)商,博彩公司,舊地址),其中舊地址類別現(xiàn)已很少有交易記錄,我們將此類別刪除。其余四個(gè)類別為了保持每個(gè)標(biāo)簽數(shù)據(jù)的數(shù)量維持在同一水平,以免出現(xiàn)數(shù)據(jù)不平衡情況,我們采用了隨機(jī)抽樣的方法,將每個(gè)分類的樣本數(shù)保持在1500左右。
除了以上四個(gè)類別外,我們還加入了“個(gè)人”比特幣地址這一分類,數(shù)據(jù)來源于blockchain.info上已標(biāo)記的個(gè)人地址,隨機(jī)抽取1500個(gè)。
3.2 特征選擇
通過經(jīng)驗(yàn)判斷和反復(fù)觀察和實(shí)驗(yàn),我們選取以下地址的特征作為建模的特征:
1)該地址作為input的交易數(shù)量(總轉(zhuǎn)出筆數(shù))
2)該地址作為output的交易數(shù)量(總轉(zhuǎn)入筆數(shù))
3)該地址作為input的BTC總量(總轉(zhuǎn)出BTC)
4)該地址作為output的BTC總量(總轉(zhuǎn)入BTC)
5)該作為Input時(shí),每筆交易Input總數(shù)平均數(shù)
6)該作為Output時(shí),每筆交易Input總數(shù)平均數(shù)
7)轉(zhuǎn)入筆數(shù)/轉(zhuǎn)出筆數(shù) 比例
8)(轉(zhuǎn)入筆數(shù)-轉(zhuǎn)出筆數(shù))/(轉(zhuǎn)入筆數(shù)+轉(zhuǎn)出筆數(shù))
9)平均每筆轉(zhuǎn)入BTC數(shù)量
10)平均每筆轉(zhuǎn)出BTC數(shù)量
11)是否有過一次或以上的挖礦交易(Coinbase)
12)該地址作為Input的總礦工費(fèi)(轉(zhuǎn)出總交易手續(xù)費(fèi))
13)該地址作為Output的總礦工費(fèi)(轉(zhuǎn)入總交易手續(xù)費(fèi))
14)轉(zhuǎn)出平均每筆交易費(fèi)
15)轉(zhuǎn)入平均每筆交易費(fèi)
16)平均每天轉(zhuǎn)出筆數(shù)
17)平均每天轉(zhuǎn)入筆數(shù)
以上鏈上數(shù)據(jù)火幣研究院通過BlockSCI工具,在服務(wù)器上搭建BTC節(jié)點(diǎn)后,使用Jupyter notebook進(jìn)行抓取。
3.3 模型選擇
在監(jiān)督學(xué)習(xí)的模型選擇上,通過比較與測(cè)試,我們最終選擇Random Forest(隨機(jī)森林)作為我們此次搭建的模型。
該模型主要有以下四個(gè)優(yōu)點(diǎn):
1)在當(dāng)前所有算法中,具有極好的準(zhǔn)確率。
2)能夠處理具有高維特征的輸入樣本,而且不需要降維。(我們的數(shù)據(jù)一共有17個(gè)維度的特征)
3)適用于多分類問題(5個(gè)不同的分類)。
4)對(duì)于缺省值問題也能夠獲得很好的結(jié)果(有些地址只有轉(zhuǎn)入沒有轉(zhuǎn)出記錄,無法計(jì)算出轉(zhuǎn)出相關(guān)的數(shù)據(jù))。
3.4 建模過程
建模過程如圖3所示。其中網(wǎng)格搜索的參數(shù)主要為:
1) 隨機(jī)森林中的樹的數(shù)量(n_estimators)
2) 樹的深度最大值(Max_depth)
3) 拆分內(nèi)部節(jié)點(diǎn)所需的最小樣本數(shù)(Min_samples_split)
4) 葉子節(jié)點(diǎn)所需的最小樣本數(shù)(Min_samples_leaf)
方案使通過Python3 語言實(shí)現(xiàn),使用了Scikit-learn中的RandomForestClassifier(隨機(jī)森林分類),GridSearchCV(網(wǎng)格搜索),train_test_split(分離測(cè)試集和訓(xùn)練集),confusion_matrix(混淆矩陣),K-Fold(K折)等API模塊。
訓(xùn)練集和測(cè)試集按照2:1的比例進(jìn)行分割。
3.5 模型得分
最后經(jīng)過調(diào)試,模型在最終測(cè)試集上準(zhǔn)確度為90%。
混淆矩陣如圖4,除去交易所和服務(wù)商的預(yù)測(cè)混淆的相對(duì)較多,整體效果還是較為理想的。
4. 兩種方法對(duì)比
火幣研究院的比特幣分類算法(算法2)并非替代多輸入交易地址和挖礦地址分類算法(算法1),而使用算法1運(yùn)行結(jié)果作為地址的標(biāo)簽,在算法1的基礎(chǔ)上對(duì)其應(yīng)用范圍進(jìn)行補(bǔ)充。通過犧牲一小部分的準(zhǔn)確性,提高其普適性以應(yīng)用于更宏觀的鏈上數(shù)據(jù)分析。
兩者的區(qū)別主要有:
4.1 算法類型不同
算法1是已知標(biāo)簽地址的情況下,通過多次迭代找尋同時(shí)出現(xiàn)在同一個(gè)轉(zhuǎn)賬中input的地址過程,目的是發(fā)現(xiàn)和已知標(biāo)簽地址同屬于同一用戶的地址,本質(zhì)上屬于一種遞歸算法,迭代次數(shù)越多,獲得的具有標(biāo)記的地址數(shù)越多。
而算法2屬于機(jī)器學(xué)習(xí)中的監(jiān)督學(xué)習(xí)算法,首先將大量帶有標(biāo)記的數(shù)據(jù)來訓(xùn)練產(chǎn)生一個(gè)具有推斷功能分類器。有了這個(gè)分類器以后,可以根據(jù)任何新的個(gè)體的特征對(duì)該個(gè)體進(jìn)行分類。
4.2 標(biāo)簽來源不同
算法1和算法2都是從比特幣區(qū)塊鏈中提取數(shù)據(jù),但標(biāo)簽的來源有所不同:
算法1的標(biāo)簽來源可以通過實(shí)際觀察。例如,如果要獲取某交易所的熱錢包地址,可以實(shí)際在交易所進(jìn)行充提幣交易,交易所充幣和提幣地址即該交易所的錢包地址;而算法2由于需求的標(biāo)簽數(shù)量巨大(至少幾千個(gè)地址),所以直接引用算法1的結(jié)果,比如有些網(wǎng)站如WalletExplorer可直接提供所需標(biāo)簽。
4.3 應(yīng)用場(chǎng)景不同
算法1
優(yōu)點(diǎn):
1)準(zhǔn)確率非常高(接近100%)
2)有具體標(biāo)簽(具體到火幣熱錢包,OKEX熱錢包等)
3)可解釋性強(qiáng)
缺點(diǎn):
1)普適性差(無法為所有地址打上標(biāo)簽)
2)遞歸算法所消耗大量計(jì)算資源
該算法適用于追蹤某個(gè)人(黑客,比特幣盜竊者),或者某團(tuán)體(交易所,服務(wù)商)的比特幣流向。
算法2
優(yōu)點(diǎn):
1)普適性強(qiáng)(給定任意一個(gè)地址及其鏈上特征,可以推測(cè)該地址的類別)
2)除了建模需要消耗一定計(jì)算資源,在歸類時(shí)消耗非常少量計(jì)算資源。
缺點(diǎn):
1) 準(zhǔn)確率無法和算法1相比(目前只能達(dá)到90%)。
2) 無具體標(biāo)簽(只能歸類成五個(gè)類別,無法具體到某個(gè)交易所或者機(jī)構(gòu))。
3)標(biāo)簽可能會(huì)隨著行為發(fā)生變化(可能一個(gè)地址最開始被標(biāo)簽為個(gè)人地址,但可能未來會(huì)更改成交易所地址)
4)可解釋性差(隨機(jī)森林是個(gè)黑盒子)。
該算法適用于對(duì)數(shù)據(jù)準(zhǔn)確度要求略低的宏觀的鏈上數(shù)據(jù)分析(例如目前所有比特幣約中有百分之多少在交易所,百分之多少在個(gè)人錢包等),以及根據(jù)一個(gè)地址,迅速判斷該地址類別(例如某日比特幣鏈上發(fā)生大額轉(zhuǎn)賬進(jìn)入某地址,根據(jù)歸類算法可以推測(cè)該地址屬于什么類別)
實(shí)際分析中,關(guān)于算法2如何提高準(zhǔn)確率的問題,我們的解決方法是:將算法2與算法1相結(jié)合,在算力條件充足的情況下,使用算法1對(duì)盡量多的地址進(jìn)行歸類,(特別是對(duì)有大量持幣或者大量轉(zhuǎn)賬的地址,無法聚類再網(wǎng)上搜尋標(biāo)簽)。將剩余的無法歸類的地址再使用算法2進(jìn)行分類。可以有效地提高數(shù)據(jù)準(zhǔn)確性。
第二部分 實(shí)際案例
1. 活躍地址聚類
我們選取2018年8月8日至8月15日的所有的比特幣地址與轉(zhuǎn)賬記錄進(jìn)行分析。首先對(duì)該周出現(xiàn)在input和output的所有地址先使用算法1對(duì)已知地址進(jìn)行聚類,再使用算法2對(duì)剩余的地址進(jìn)行了分類。
該周的活躍地址數(shù)共332萬個(gè),根據(jù)算法的推測(cè),其中143萬個(gè)為交易所地址,99萬個(gè)為服務(wù)商地址,62萬個(gè)為個(gè)人地址,博彩公司18萬,礦池4萬。分布如圖5所示。其中交易所,服務(wù)商和個(gè)人錢包地址占了總地址數(shù)的93%。
2. 新增地址數(shù)分解
我們又往前抓取了四周的鏈上數(shù)據(jù)進(jìn)行分析:從新增地址數(shù)(圖6)來看,這幾周新增地址數(shù)有所減少;
我們?cè)賹⑿略龅刂窋?shù)用我們的算法進(jìn)行分類(圖7),可以發(fā)現(xiàn):雖然交易所和服務(wù)商新增地址數(shù)在這幾周內(nèi)變化不大,但是新建個(gè)人錢包地址數(shù)卻呈現(xiàn)明顯下降趨勢(shì),直接導(dǎo)致了整體新建地址數(shù)下降。可以通過新建的個(gè)人錢包地址數(shù)減少判斷,新進(jìn)入市場(chǎng)的投資者人數(shù)有所減少。
3. 交易量分析
另外,除了對(duì)地址分析外,我們對(duì)該周的交易數(shù)據(jù)進(jìn)行了分析。得到結(jié)果如圖8所示。這周內(nèi)一共有691萬BTC的交易量,個(gè)人地址中的比特幣轉(zhuǎn)入交易所的量遠(yuǎn)遠(yuǎn)大于從交易所轉(zhuǎn)入個(gè)人地址的量(相差14萬BTC,約8.4億美金),很大概率是有大量用戶將個(gè)人錢包中的比特幣轉(zhuǎn)入交易所進(jìn)行拋售,可能也是導(dǎo)致該周比特幣價(jià)格下挫的原因之一。
4. 比特幣價(jià)格下挫原因分析
2018年8月8日至8月15日數(shù)字貨幣整體低迷,比特幣價(jià)格更是下挫15%。通過以上分析,該周比特幣價(jià)格大幅下挫可能與兩方面因素有關(guān):
1)個(gè)人的新建地址數(shù)的減少,說明新入場(chǎng)的投資者人數(shù)的減少。
2)個(gè)人地址中的比特幣轉(zhuǎn)入交易所的量遠(yuǎn)遠(yuǎn)大于從交易所轉(zhuǎn)入個(gè)人地址的量,很大概率是有大量用戶將個(gè)人錢包中的比特幣轉(zhuǎn)入交易所進(jìn)行拋售。
評(píng)論