
導(dǎo)讀:斗魚作為個人直播平臺,長期以來除了普遍存在的灰黑產(chǎn),虛假流量也是流量風(fēng)控的重災(zāi)區(qū)。本文將介紹圖算法在斗魚反作弊中的業(yè)務(wù)實踐,主要內(nèi)容包括:
-
斗魚流量風(fēng)控業(yè)務(wù)場景
-
斗魚圖算法體系
-
圖算法風(fēng)控建模
-
模型實戰(zhàn)
01斗魚流量風(fēng)控場景介紹
斗魚的場景比較特殊,因為其風(fēng)控業(yè)務(wù)面對的主體大部分是主播。對于主播,實際上會有一些虛假的流量,表面上看虛假流量可以提高主播的排面,實際上主播也可能會通過這些流量獲得很多的利益。比如,在薪酬上或者榜單上都會有一定的體現(xiàn)。所以這一塊的虛假流量是我們平臺上相對的一個重災(zāi)區(qū),這里列舉了灰黑產(chǎn)刷的比較多的幾塊內(nèi)容,一個就是主播的人氣,一個是主播的關(guān)注,還有主播的經(jīng)驗,以及還有掛貴賓這幾塊。其他的斗魚的場景,比如一些營銷活動、拉新活動,實際上也是有相關(guān)的,這些則是所有平臺上會共同面臨的一些問題,這次分享主要就是怎樣通過圖算法去識別這種刷流量的黑產(chǎn)。
02斗魚圖算法體系
這里從整體框架和算法演進(jìn)的過程介紹斗魚的圖算法的體系。
1. 圖算法整體架構(gòu)
上圖就是目前我們的圖算法的整體架構(gòu)。最底層是圖的一些算子,這些算子包含圖的最基本的一些操作,如鄰居采樣、隨機(jī)游走和子圖抽取等,我們在底層會做這些算子的開發(fā)和效率的優(yōu)化,在有了這些算子之后,在算子上面就是一些標(biāo)準(zhǔn)的圖算法,比如在圖的構(gòu)建這一塊,現(xiàn)在有基于知識圖譜的圖的構(gòu)建和基于行為同步性的圖構(gòu)建,還有通過KNN的方式去做臨近圖的構(gòu)建。在圖傳播方面包括常用的標(biāo)簽傳播算法,在圖分割方面包括聯(lián)通子圖、高位子圖和涉及發(fā)現(xiàn)的一些算法。在圖嵌入方面主要是節(jié)點的插入,有基于拓?fù)浣Y(jié)構(gòu)的Node2Vec、加入屬性信息的EGES、還有通過標(biāo)簽信息和隨機(jī)性共同考慮去做的圖剪輯的算法?,F(xiàn)在圖算法的應(yīng)用在斗魚場景主要就是風(fēng)控這一塊。風(fēng)控這一塊主要運用場景就是做黑產(chǎn)的團(tuán)伙的挖掘。另外應(yīng)用方向是會做一些圖Embedding,并將它的結(jié)果會作為特征去輸入到下游的一些其他任務(wù)中。另外,在推薦場景下,我們也有一些圖上推薦向量召回的應(yīng)用。以上就是目前我們圖算法的框架。
2. 斗魚圖算法的演進(jìn)
斗魚圖算法是從2018年開始做的,2018年時實際上采用的是一些比較基礎(chǔ)的圖分割的算法。比如連通圖、數(shù)據(jù)發(fā)現(xiàn)、標(biāo)簽傳播等。這些算法在當(dāng)時具有一定效果,但是在往后延伸之后,就發(fā)現(xiàn)這些傳統(tǒng)的圖算法存在一些問題,例如過于依賴圖的構(gòu)造,如果圖沒有建好或者圖的信息被黑產(chǎn)篡改了,會嚴(yán)重影響算法的效果。第二個問題是在做圖割的過程中這些算法比較簡單。它們主要考慮的是節(jié)點與節(jié)點連接的緊密性,但實際上如果只根據(jù)這一點去做這圖割,那么最終的結(jié)果是不可控的。常見的問題就是切出來的團(tuán)伙,要么粒度過小,要么粒度過大,要么沒法解釋。所以在這個傳統(tǒng)圖算法做好之后,要去后置很多規(guī)則,這樣的弊端就是我們會損失很多有問題的團(tuán)伙,但只能抓住一些有明顯問題的團(tuán)伙?;谝陨蠁栴},我們在2019年時一個方面去豐富構(gòu)圖方法,因為那之前的各種算法大多為直接的關(guān)聯(lián),如用戶喜歡什么設(shè)備這種非常直接的關(guān)聯(lián),但豐富構(gòu)圖方法的主要目的是說去挖掘一些更隱性的關(guān)聯(lián)。比如我們通過這種知識圖譜的推理,從而去建立新的實體與實體之間的關(guān)聯(lián)。或者采用一些相似度的方式去度量原本沒有強(qiáng)關(guān)聯(lián)的節(jié)點,然后我們給他一些虛擬的關(guān)聯(lián)。所以通過豐富構(gòu)圖算法,可以建立更多的節(jié)點與節(jié)點之間的聯(lián)系。相當(dāng)于能納入我們這個算法的節(jié)點會更多,另一點我們會去做一些圖的表征學(xué)習(xí)。那么做圖的表征學(xué)習(xí)其優(yōu)勢就在于相當(dāng)于它的信息會更好的融合,而且我們能更方便的融入一些如節(jié)點的屬性信息等,因此,我們不用只去依靠這個邊的一些強(qiáng)度的信息。這樣可以提高識別的覆蓋率,但即便如此,我們還是繞不開圖的構(gòu)造的問題,即使用這種相似度的方式去構(gòu)造一個圖,但其業(yè)務(wù)含義并不強(qiáng)。另外如果采取這種表征學(xué)習(xí),實際上在后續(xù)劃分出的團(tuán)伙后還是會面臨可行性的問題。另外在這個階段也會出現(xiàn)其他的問題,比如業(yè)務(wù)方反饋得到團(tuán)伙整體沒問題,但是會發(fā)現(xiàn)其中有少量個體和這個團(tuán)體整體的特征有一些出入,而且這些個體可能是充值或者等級比較高的,那基本就是一個誤殺,所以基于上面這幾點,我們在2020年時候就去做了全場景團(tuán)伙挖掘的算法。這個算法相當(dāng)于我們把整個場景都串聯(lián)起來了,而非單場景的,因為團(tuán)伙的作案可能是多場景的一個流竄作案,那么單場景使用的信息必然就是一個單場景的信息使用。這樣可以提高信息的整體使用效率。并且通過一些手段能夠比較好地去避免一些明顯的誤殺,并且能夠提供非常準(zhǔn)確的可解釋性。所以后面在講實踐應(yīng)用的時候,會具體講自研的全場景挖掘算法,它具體是怎么做的。
03圖算法風(fēng)控建模
1. 采用圖算法做流量反作弊的優(yōu)勢
用圖去做流量反作弊優(yōu)勢有這樣幾點,一方面如前面我們所說的斗魚場景中有很多主播刷量的場景,這種就很可能是一個黑產(chǎn)團(tuán)伙的行為,他需要在規(guī)定的時間內(nèi)去完成這樣一個任務(wù)。所以無論這個黑產(chǎn)如何去規(guī)避他的一些行為,這種聚集性和關(guān)鍵性是很難去逃脫的,除非他刷單的效率很低。此外只要是在規(guī)定時間內(nèi)需要達(dá)到一定目標(biāo)的話,他必然是一個頻繁聚集的。關(guān)鍵性的操作就會很多,表現(xiàn)在圖上就可以完美的去描述這樣的一個特征,所以圖跟黑產(chǎn)作案的特征是非常契合的。另外除了特征,圖算法對新的攻擊的抗性會比較高。因為圖的特征它并不像統(tǒng)計的特征那么少,可能很快就會被黑產(chǎn)摸清楚是什么的指標(biāo)或者閾值,圖的拓?fù)浣Y(jié)構(gòu)就讓人很難去發(fā)覺就是個究竟是哪一塊操作被識別到了。所以用圖來做流量反作弊的話是有很強(qiáng)的魯棒性的。第三個方面就是圖可以對關(guān)系數(shù)據(jù)做一些描述。關(guān)系數(shù)據(jù)不同于我們平常的一些統(tǒng)計數(shù)據(jù),它實際上是有一些統(tǒng)計特征在里面的。除了圖算法之外其他模型對關(guān)系數(shù)據(jù)的利用和處理都相對復(fù)雜一些。所以基于這三點,我們會選擇圖算法,作為流量反作弊的運用。

一般的圖算法在風(fēng)控場景的建模的流程可以分成四大塊。
① 圖構(gòu)建
圖構(gòu)建有兩個關(guān)鍵點,一個是定義節(jié)點。節(jié)點一定是我們需要挖掘的一些實體。最簡單就是賬號或者設(shè)備,當(dāng)然在演進(jìn)過程中也可以去加入一些虛擬的節(jié)點。也可以加一些和實體相關(guān)或者輔助識別的實體作為節(jié)點。邊的生成也就是構(gòu)圖階段,我們最初的生成方法是采取一些直接的行為,之后我們做了一些構(gòu)圖上的優(yōu)化,所以邊的生成方式有很多種。比如通過圖譜關(guān)系的推理,實際上是基于現(xiàn)有的聯(lián)系做推理,第二種是基于同步性,如果我們發(fā)現(xiàn)這兩個實體在行為上具有非常強(qiáng)的一個時間上的同步性,那么我們也會認(rèn)為這兩個實體之間有一個邊的關(guān)聯(lián)。最后一種是基于實體Embedding表示,先對實體做Embedding表示,然后通過ANN的近似鄰居的搜索把向量接近的節(jié)點去生成邊。
圖的構(gòu)建方式是非常多樣的,圖的算法做異常挖掘在這一步實際上是最為重要的。定義好一個圖就非常具有業(yè)務(wù)含義,然后也能跟黑產(chǎn)的作案方式相契合。那么后面的算法才會有一定的效果,否則后面做的再花哨也是沒有用的。
② 圖算法任務(wù)
圖算法實際上要基于具體業(yè)務(wù)場景,做不同的圖算法,第一種是做圖的有監(jiān)督學(xué)習(xí),第二種是做圖的無監(jiān)督學(xué)習(xí),這種在業(yè)務(wù)中更為可控的,因為作圖的無監(jiān)督學(xué)習(xí),第一它不需要任何的標(biāo)簽的信息。第二它的可解釋性比有監(jiān)督學(xué)習(xí)的更好。所以圖的無監(jiān)督學(xué)習(xí)在我們場景中一般會去用于黑產(chǎn)團(tuán)伙的發(fā)現(xiàn)。第三個是圖表征學(xué)習(xí),就是節(jié)點的Embedding向量,可以作為一個圖的特征輸入到賬號的風(fēng)險評估模型中去。
③ 可解釋性
可解釋性在風(fēng)控領(lǐng)域非常重要,無論是誤殺的排查,還是將模型交付給這個業(yè)務(wù)方的可信度。這里常見的有三種做法,第一種是去統(tǒng)計挖掘的團(tuán)伙的一些統(tǒng)計指標(biāo),如白用戶的占比、平均等級等。第二種是通過圖結(jié)構(gòu)/實體向量表征去做衍生特征例如在排查某個賬號實體可以通過他的k階的鄰居節(jié)點,通過k階鄰居節(jié)點的信息去做統(tǒng)計,然后衍生節(jié)點的統(tǒng)計指標(biāo)作為檢驗它的一個指標(biāo),這樣就可以反映待排查的節(jié)點跟其他節(jié)點的關(guān)系。第三種是一個通過聚集性信息去描述,通過圖做無監(jiān)督的學(xué)習(xí)最后的落腳點還是在聚集性上,所以如果我們把聚集性這個信息詳細(xì)的描述出來,那實際上無論懂不懂這個模型,都能一眼看出這個團(tuán)伙是不是有問題?所以其實這個信息對可解釋性來講的話是非常重要的。比如這個團(tuán)伙中有百分之多少的成員具有某一類相同的特征,或者是這一個團(tuán)伙中有百分之多少的賬號,他在某個時間段內(nèi)有相同的行為,這種類似的行為描述。
④ 業(yè)務(wù)應(yīng)用
業(yè)務(wù)應(yīng)用現(xiàn)在團(tuán)伙圖這一塊的團(tuán)伙的應(yīng)用主要有三大塊。第一是團(tuán)伙的事前攔截,在團(tuán)伙有少量賬號作案時根據(jù)識別的情況將團(tuán)伙其他的賬號做一個事前的攔截。第二塊是團(tuán)伙作案后的處置,第三塊是做風(fēng)險評分,圖表征的Embedding向量會作為關(guān)系特征輸入到風(fēng)險評分中。
04模型實戰(zhàn)1. 實戰(zhàn)案例一:序列x圖的團(tuán)伙識別

這個案例中將序列和圖這兩塊做了聯(lián)合的建模,去挖掘序列上有風(fēng)險的團(tuán)伙。生成系列的方式是事件基礎(chǔ)信息的拼接,把這個事件的id和主播的id做一個拼接,作為序列的一個節(jié)點。然后把每個用戶按這樣的方式,根據(jù)時間戳做一個串聯(lián),在這生成了一個事件的行為序列。第二步是在這個基礎(chǔ)上,做各個事件的embedding,這里有兩種方式,第一種w2v,只考慮事件的前后信息,在不引入其他的信息。第二種是EGES,可以添加一些別的屬性信息,對于序列整體的embedding,我們采用了SIF的方式,這種方法有兩個優(yōu)勢,一個是調(diào)換序列中兩個節(jié)點的順序,結(jié)果不變,第二個是這種方法考慮了主成分分解的思想。在得到序列的向量表征之后我們將整個系列作為一個節(jié)點用ANN的方式做圖的構(gòu)建,最后通過連通子圖的方式做相似系列的挖掘,挖掘好之后采取序列模式頻繁拆取的方法最終可以將頻繁的系列模式識別出來,以上圖為例,我們識別出的刷人氣的團(tuán)伙在多個直播間來回觀看,上圖刷經(jīng)驗的團(tuán)伙在同一個直播間內(nèi)用了不同的方式來給主播刷經(jīng)驗。最終可以清楚的看到這些團(tuán)伙是如何作案的。
2. 實戰(zhàn)案例二:全場景刷量團(tuán)伙挖掘

第二個例子是前面提到一個全場景團(tuán)伙發(fā)現(xiàn)的模型,這個模型首先是會確定特征,第二步會先定義特征距離的計算方式,針對每一類特征給出一個距離計算的方式,之后我們會根據(jù)每個特征的不同取值的去生成單特征的初始團(tuán)伙,這里的思想是把每個單特征生成的這個整體看成一個節(jié)點。然后我們會定義團(tuán)伙的距離,把相近的團(tuán)伙做一個合并生成一個新的團(tuán)伙,之后,我們會去計算這個團(tuán)伙的畫像,團(tuán)伙的畫像是指團(tuán)伙中一些指標(biāo)的占比。比如一個注冊來源,賬號占比是0.9,這個占比可以作為一個權(quán)重參與之后的計算,之后我們采取了metric learning的方式去度量特征的權(quán)重。然后我們會剔除與團(tuán)伙發(fā)現(xiàn)差異比較大的賬號。
小結(jié)一下,這個算法有四點比較重要,第一點是特征可擴(kuò)展,可以不斷的去生成一些新的特征。無論在業(yè)務(wù)上有什么樣的經(jīng)驗,我們都可以迅速的把經(jīng)驗給加到模型里面去。第二點是單特征團(tuán)伙可以做自我的學(xué)習(xí),如之前所說的圖算法應(yīng)用在風(fēng)控的一個難點就是構(gòu)圖比較難,這種方式避免了我們?nèi)?qiáng)構(gòu)圖。通過自我學(xué)習(xí),是在做一個自己學(xué)習(xí)的構(gòu)圖。第三點是防誤殺,團(tuán)伙中的一些成員跟團(tuán)伙整體有一定的差異,整體是沒有問題的,但是個別是有問題的。那這個時候我們通過這種防誤殺的方式從團(tuán)體中剔除從而解決這個問題。第四點是做了特征權(quán)重的metric learning,這里我們用了度量學(xué)習(xí)的方式,我們會有會有一些已知的樣本賬號生成一個樣本堆,如果在同樣一個團(tuán)伙中,那么這個樣本堆相當(dāng)于是一個正樣本,如果是在不同的或者是我們做通過負(fù)采樣生成的樣本堆,那就是一個負(fù)樣本,實際上如果這個權(quán)重學(xué)的好的話,那正樣本的相似度會比較高。負(fù)樣本堆的相似度會比較低,針對這個我們會去生成一個最優(yōu)化問題,通過這個最優(yōu)化問題去手寫特征的權(quán)重。
05 總結(jié)
綜上,我們將所有場景的信息納入到一個模型中,不需要再針對單個場景去做建模。自我學(xué)習(xí)和防誤殺的兩個機(jī)制,保證了生成團(tuán)伙的準(zhǔn)確性,并且因為我們生成的團(tuán)伙來源于基礎(chǔ)特征,所以通過團(tuán)伙的特征取值可以迅速的生成團(tuán)伙的可解釋性,最終相當(dāng)于我們把從傳統(tǒng)的圖算法演化成了現(xiàn)在的形式,目前的形式在我們的業(yè)務(wù)中取得了非常顯著的效果。