風(fēng)控引擎的演進(jìn)及設(shè)計思想
之前介紹了基本的風(fēng)控對抗思路,今天筆者再來給大家分享一下風(fēng)控引擎的設(shè)計實現(xiàn)思路。
本文將從兩個部分來對風(fēng)控引擎進(jìn)行拆解:
- 風(fēng)控引擎的演進(jìn)歷程
- 風(fēng)控引擎的設(shè)計思想
一、風(fēng)控引擎的演進(jìn)歷程
1. 硬編碼階段
通常在一個業(yè)務(wù)的發(fā)展初期,所有資源的投入重點都在用戶量或者流量上,在這個階段,因為用戶量級較小,所以黑產(chǎn)對業(yè)務(wù)的關(guān)注度比較低,黑產(chǎn)的變現(xiàn)效率也比較低。
在硬編碼階段,所有策略上線都是通過RD開發(fā)然后部署在線上的,這種形式就會導(dǎo)致策略的開發(fā)周期很長,并且在線上之前無法有效預(yù)估效果,上線之后對策略準(zhǔn)召率也難以掌控。所以在這個階段整個策略對抗是一個極其低效的過程,但是因為業(yè)務(wù)階段比較初級,所以風(fēng)險大致還都可以控制住。
2. 初級產(chǎn)品化階段
隨著業(yè)務(wù)的發(fā)展,用戶量開始變多,業(yè)務(wù)對黑產(chǎn)的價值開始體現(xiàn),在這個階段開始就會有黑產(chǎn)涌入進(jìn)行攻擊,當(dāng)攻擊的情況達(dá)到了一定的程度,我們就會發(fā)現(xiàn),原有處于“硬編碼階段”的策略體系因為自身的低效性,很難做到及時攔截黑產(chǎn)的攻擊。
所以,這個階段業(yè)務(wù)的負(fù)責(zé)人會自然而然地想到——能不能把原有的硬編碼模式做得靈活一些。
這個時候,就會通過一些產(chǎn)品設(shè)計手段將原有的策略體系產(chǎn)品化,這個階段我們把他稱之為“初級產(chǎn)品化階段”。
在初級產(chǎn)品化階段,通常做的事情都是將原有的策略從代碼中遷移出來,展示在風(fēng)控引擎中。并且能夠簡單的修改一些策略的參數(shù)以及做一些策略上下線配置。
舉個例子,比如“判斷用戶1天內(nèi)發(fā)帖量是否大于5”,這里“發(fā)帖量”就是可以配置的參數(shù)。雖然在這階段實現(xiàn)了一些基礎(chǔ)的配置化,但是通常在這個階段,策略依然是一條一條相互獨立并行執(zhí)行的,絕大部分的策略邏輯依然是由RD直接進(jìn)行開發(fā)部署到風(fēng)控引擎中的。
3. 成熟產(chǎn)品階段
當(dāng)業(yè)務(wù)進(jìn)入到真正的高速成長期,或者從成長期進(jìn)入成熟期的時候,業(yè)務(wù)會變得空前龐大,用戶量會達(dá)到頂峰。這個時候業(yè)務(wù)對于黑產(chǎn)的吸引力也會同時達(dá)到頂峰。我們會發(fā)現(xiàn)黑產(chǎn)攻擊已經(jīng)變成每天都會發(fā)生的事情,跟吃飯喝水一樣自然。
因為黑產(chǎn)的攻擊時刻不停,雖然我們實現(xiàn)了部分策略參數(shù)的配置,但是我們的需求僅僅通過一些閾值的調(diào)整已經(jīng)無法真正滿足了。我們在風(fēng)控對抗上衍生出了很多的想法,比如:
- 我們能不能不依賴技術(shù)直接自己實現(xiàn)大部分的策略邏輯?
- 我們能不能讓策略實現(xiàn)與或非關(guān)系?
- 我們能不能有一些能力支撐特征的有效產(chǎn)出?
- 我們能不能提前預(yù)知風(fēng)險的發(fā)生?
- 我們能不能提前預(yù)測策略的效果?
這個時候我們會發(fā)現(xiàn)我們會搭建一個體系化的解決方案,這個階段我們把它稱之為“成熟產(chǎn)品階段”
在這個階段,整個風(fēng)控引擎已經(jīng)能滿足高強(qiáng)度的風(fēng)控對抗需要,并且開始通過風(fēng)控引擎本身衍生出更多的邊緣安全產(chǎn)品。通常一般的公司風(fēng)控引擎就會停留在這個階段不會再有大幅的變化了。
4. 中臺化產(chǎn)品階段
絕大部分公司的風(fēng)控引擎都不會進(jìn)入這一階段,只有一些業(yè)務(wù)十分復(fù)雜的集團(tuán)企業(yè)才會在原有的風(fēng)控體系中衍生出這種需求。
一般來說,在企業(yè)主營業(yè)務(wù)達(dá)到穩(wěn)定期之后,企業(yè)一般會尋求其他方向發(fā)展的可能性,新業(yè)務(wù)就會跟隨著需要不斷產(chǎn)生。但是原有的風(fēng)控體系都是圍繞著主營業(yè)務(wù)展開的,與原業(yè)務(wù)耦合通常比較嚴(yán)重。這個時候在原有的成熟產(chǎn)品下,很難快速的將所有的風(fēng)控能力移植到新的業(yè)務(wù)場景中,這個時候就會出現(xiàn)主業(yè)務(wù)風(fēng)險可控但新業(yè)務(wù)風(fēng)險失控的現(xiàn)象。
為了解決這樣的問題,風(fēng)控引擎就必須要將所有的功能進(jìn)行高度抽象,實現(xiàn)低成本復(fù)用,完成對企業(yè)新增業(yè)務(wù)的安全賦能。這個階段我們稱之為“中臺化產(chǎn)品階段”
在這個階段的風(fēng)控引擎更像是一個ToB的商業(yè)產(chǎn)品,因為想讓業(yè)務(wù)方更好的解決風(fēng)控問題,就必須要覆蓋絕大部分業(yè)務(wù)的安全需求,并且在體驗上盡可能的優(yōu)秀,讓業(yè)務(wù)更簡單的理解和掌握風(fēng)控對抗。如果類比的話,此時的產(chǎn)品就像是一個第三方安全公司提供的服務(wù),所有的事情都是為了讓極低成本的解決風(fēng)控問題變成現(xiàn)實。
以上就是風(fēng)控引擎演進(jìn)的常規(guī)過程,一般都是跟隨著業(yè)務(wù)需求自然而然發(fā)生的迭代和進(jìn)化。下面我們來看一下一個風(fēng)控引擎在功能設(shè)計上的思路應(yīng)該是什么樣的。
二、風(fēng)控引擎的設(shè)計思想
想設(shè)計一款好的風(fēng)控引擎,我們需要知道風(fēng)控的核心要點有哪些。
風(fēng)控引擎的核心點:
- 滿足高效率的策略迭代
- 策略盡可能的難以突破
- 盡可能的降低對正常用戶的影響
- 充分的運營支撐
- 確保服務(wù)穩(wěn)定可靠
1. 策略管理模塊的設(shè)計
策略的設(shè)計實現(xiàn)直接影響著策略的迭代效率和是否容易被突破。
特征的設(shè)計(有些人稱作變量):
要實現(xiàn)迭代效率足夠快,要求策略的底層邏輯特征要進(jìn)行原子化的抽象設(shè)計。
什么叫做抽象,我們舉一個例子:
我們有這樣一個策略:用戶手機(jī)號碼是136開頭并且注冊時長小于1天則對用戶發(fā)起驗證碼挑戰(zhàn),可以看到136手機(jī)和注冊時長兩個特征組成了這個策略的識別邏輯。
那我們?nèi)绾巫屵@個策略變化起來更靈活呢?我們可以把這個策略拆成兩個特征:
檢測用戶手機(jī)號開頭(自定義:136)+檢測用戶注冊時長(自定義:24H內(nèi))
這個時候原來一個策略就變成了兩個可配置的特征,這樣一來,如果我檢測170的號段也是可以直接實現(xiàn)的。但是這樣依然不夠靈活,難道我們只有檢測手機(jī)號開頭的需求么?并不是,我們應(yīng)該更靈活地應(yīng)用字段。我們還可以將這兩個特征進(jìn)一步抽象,由檢測用戶手機(jī)號開頭+檢測用戶注冊時長變?yōu)椋?/strong>
檢測字段內(nèi)容(以…開頭:136,字段:手機(jī)號)+檢測時間差(小于24H,字段1:注冊時間,字段2:當(dāng)前時間)
通過這樣的抽象,我們盡可能的把核心邏輯保留下來,把其余的內(nèi)容都參數(shù)化放到特征的配置中。
策略的設(shè)計(有人也稱作規(guī)則):
那我們該如何讓策略更難以被黑產(chǎn)突破呢?我們知道邏輯越簡單,特征越單一,策略越容易被繞過。邏輯復(fù)雜,組合特征,則繞過策略的成本就會增加。所以在策略上,我們需要每一個策略是一個復(fù)雜特征的集合,為了實現(xiàn)這種集合,我們需要在策略上實現(xiàn)特征組合的能力。
特征組合一般就是在特征之間實現(xiàn)與或非的邏輯運算:
- 與關(guān)系:滿足A特征并且滿足B條特征的時候才命中。例如:ip歸屬地在國外并且發(fā)帖城市在北京。
- 或關(guān)系:滿足A或者滿足B條件任意條件的時候命中。例如:芝麻信用分小于350或被列入失信人名單。
- 非運算:不滿足A特征的時候。例如:A代表用戶在黑名單中。那么非運算就是用戶不在黑名單中。
實現(xiàn)與或非的邏輯運算與特征的組合其實比較簡單,但是在前端交互時如何能高效的操作是比較復(fù)雜的,尤其是在非常復(fù)雜的特征組合下。推薦大家兩種方案:
- 簡單的邏輯前端通過選擇器進(jìn)行選擇,復(fù)雜的邏輯通過在文本框中填寫表達(dá)式生成,兩種方式可進(jìn)行切換。
- 通過評分卡設(shè)計實現(xiàn)特征組合和邏輯運算。這種見得比較少,在這里解釋一下。這種方案是由用戶將每個特征賦予一個分值,策略總分就是所有特征分值的加和。通過每個特征得分的控制來間接實現(xiàn)邏輯運算。
舉個例子:
- 策略1:A與B。如果A特征命中得分50,B特征命中得分50。那么當(dāng)策略得分等于100時策略命中。
- 策略2:A或B。如果A特征命中得分50,B特征命中得分50。那么當(dāng)策略得分等于50時候策略命中
通過這樣的方法,對策略得分和特征得分進(jìn)行控制,就可以實現(xiàn)組合和運算。
策略狀態(tài)的設(shè)計:
策略核心的業(yè)務(wù)狀態(tài)有三種,分別是上線狀態(tài)、預(yù)上線狀態(tài)和下線狀態(tài)。
其中預(yù)上線狀態(tài)尤為重要,因為一切策略在上線產(chǎn)生影響之前都應(yīng)該準(zhǔn)確的預(yù)知效果才能操作上線,一旦評估不充分,可能在上線后對線上產(chǎn)生非常嚴(yán)重的影響。所以預(yù)上線狀態(tài)是確保策略效果的一個重要狀態(tài)。在預(yù)上線的狀態(tài)下,風(fēng)控引擎應(yīng)該有足夠的能力去預(yù)測策略上線后的效果。常用的方案有兩種:
1. 是將歷史已知明確結(jié)論的數(shù)據(jù)重新灌入風(fēng)控引擎,以此來證明策略對已知數(shù)據(jù)的準(zhǔn)召情況。這種方法通常需要將歷史流量做鏡像備份,已保證重新灌入時數(shù)據(jù)不會發(fā)生偏移。但是這樣的方法也有一些弊端,就是當(dāng)攻擊行為與歷史行為有著大幅差異的時候,準(zhǔn)召率的判斷可能出現(xiàn)不準(zhǔn)確的情況。
2. 是將預(yù)上線后命中的數(shù)據(jù)進(jìn)行隨機(jī)抽樣,比如抽取5‰的數(shù)據(jù)進(jìn)行離線驗證。這種方法因為使用的是真實的線上數(shù)據(jù),結(jié)論比上一種更加精準(zhǔn),但是對數(shù)據(jù)的核驗成本非常高,很難快速的產(chǎn)出結(jié)論。
所以建議上面兩種方式混合使用,通過第一種方案做日常策略維護(hù)。當(dāng)策略的召回數(shù)量非常大時(代表對線上產(chǎn)生了足夠的影響),這個時候做第二種,確保策略上線的嚴(yán)謹(jǐn)。
進(jìn)行策略的執(zhí)行順序:
在資源充足的前提下,一般來說策略的執(zhí)行都是并行執(zhí)行的,但是在一些情況下也會要求策略有先后的執(zhí)行順序。比如有些策略會依賴一些第三方數(shù)據(jù)源,這些數(shù)據(jù)在調(diào)用的時候就會產(chǎn)生成本,我們常見的有銀行卡四要素、手機(jī)三要素等等。
所以有的時候為了節(jié)省成本,會將這些策略執(zhí)行順序后置,當(dāng)前面的策略已經(jīng)足夠產(chǎn)出明確的結(jié)論時(比如拒絕這次申請/發(fā)帖等),就無需執(zhí)行后續(xù)策略。在運算資源上也是同理,會優(yōu)先執(zhí)行對運算資源消耗小的策略。
2. 處置模塊的設(shè)計
處置的設(shè)計,很大程度的決定了風(fēng)控對正常用戶產(chǎn)生的影響。
之前在另一篇文章里講過去做處置時的一些基本思路,大家可以參考《風(fēng)控對抗中的常規(guī)特征及處置選擇》,在這篇文章里主要講處置還有哪些需要關(guān)注的重點。
優(yōu)先級:
在執(zhí)行處置的時候,難免會遇到同時命中了多種處置方式的情況。這種時候,我們需要去確認(rèn)以哪個執(zhí)行為準(zhǔn)。一般來說,越是處罰嚴(yán)重,優(yōu)先級越高。嚴(yán)重的處置方式會覆蓋較輕的處置方式。比如封禁用戶和刪除帖子同時命中,會執(zhí)行封禁用戶。
留證:
當(dāng)我們對用戶進(jìn)行處置之后,因為所有的風(fēng)控策略準(zhǔn)確率不可能達(dá)到100%,這樣一來就一定會產(chǎn)生用戶申訴的情況。所以我們每一次的處置操作,都應(yīng)該盡量做到留證全面。
當(dāng)用戶申訴的時候,我們可以很清晰地看到每一次處置都是因為什么樣的問題而產(chǎn)生的。常見的留證實現(xiàn)方式是數(shù)據(jù)快照或者內(nèi)容快照。數(shù)據(jù)快照可以更好的復(fù)現(xiàn)行為,內(nèi)容快照可以更好的復(fù)現(xiàn)內(nèi)容。留證模塊準(zhǔn)備的越充分,風(fēng)控的每一次處置就會越有底氣。
反饋與出口:
用戶對處置的感知主要是通過的我們的通知下發(fā),所以確保處置信息向用戶的有效傳遞是尤為重要的。越是對用戶影響大的處置,越是要多渠道分別下發(fā),確保用戶可以接收到信息。同時用戶在被處理之后通常會產(chǎn)生為什么處理我的疑問,那么處置相關(guān)的話術(shù)也是需要用心設(shè)計的。因為風(fēng)控的特性,很多的特征不能直接對外明示,特征選取的越偏向行為,越復(fù)雜則越難以向用戶解釋,所以話術(shù)的設(shè)計要盡可能的既解決用戶的疑惑,又保護(hù)核心識別邏輯。
對于部分用戶而言,誤判和話術(shù)的不清晰一定會導(dǎo)致用戶體驗變得極差,所以針對誤判的出口是非常必要的,所有的判罰都應(yīng)該有有效的出口和流程去解決用戶被誤判的問題,只有實現(xiàn)了這樣處置閉環(huán),才是相對完整的產(chǎn)品體系。
3. 數(shù)據(jù)運營支撐產(chǎn)品模塊設(shè)計
一款好的風(fēng)控引擎僅僅有策略對抗的能力是不夠的,完善的運營支撐同樣重要。整個運營體系可以從風(fēng)控前,風(fēng)控中和風(fēng)控后三個階段來搭建。
風(fēng)控前:
簡單來說,在真正的做對抗之前,我們關(guān)注的就是風(fēng)險何時出現(xiàn)。所以風(fēng)控前的運營支撐應(yīng)該是一個比較完備的預(yù)警體系。預(yù)警體系的作用就是讓風(fēng)險盡可能快的被定位。
常見的預(yù)警監(jiān)測項可以提供一些給大家參考:
業(yè)務(wù)的產(chǎn)生量、 過風(fēng)控的量、出現(xiàn)頻率高的top資源(IP、手機(jī)號、UID、設(shè)備等)、出現(xiàn)頻率高的top內(nèi)容(文本、圖像、音頻、視頻)、數(shù)量異常的top群組等等
風(fēng)控中:
在做對抗的時候,運營支撐的設(shè)計考慮的就是如何輔助策略人員快速的產(chǎn)生決策。所以風(fēng)控中的支撐在產(chǎn)品表現(xiàn)上更像是一個數(shù)據(jù)大屏。這個大屏可以很好的展示一個資源從在業(yè)務(wù)中出現(xiàn)到目前為止的全貌。一個資源的全生命周期的行為或內(nèi)容表現(xiàn)都可以很好的在這個模塊中進(jìn)行展現(xiàn),并且在此之上,提供一些簡單的統(tǒng)計和分析來將特征提取的過程盡可能的縮短。
風(fēng)控后:
在策略上線之后,我們更應(yīng)該關(guān)注的應(yīng)該是策略在線上產(chǎn)生的效果和影響。所以風(fēng)控后的運營支撐體系應(yīng)該是個效果的評估體系,通過各種核心指標(biāo)的展現(xiàn)輔助策略人員優(yōu)化策略。
常見的一些評估指標(biāo)可以給大家參考:
污染率(有問題的數(shù)量/總量),策略的命中量,策略的獨立命中量(用來說明某條策略的不可替代性),策略的準(zhǔn)召率、策略造成申訴的量等等。
4. 系統(tǒng)的穩(wěn)定性
跟所有系統(tǒng)一樣,風(fēng)控引擎的穩(wěn)定性也是非常重要的,在一些比較大的企業(yè)中,風(fēng)控引擎一天承載的檢測量級甚至可以達(dá)到上百億次。在如此龐大的業(yè)務(wù)量級中,穩(wěn)定性就變成一個必須要考慮的問題。
怎么解決穩(wěn)定性問題偏技術(shù)實現(xiàn),這里就不做具體的介紹。但是發(fā)生異常后的方案選擇應(yīng)該比較清晰和明確。
拿兩個場景舉例子,比如當(dāng)用戶發(fā)帖時,如果我們風(fēng)控檢測超時或發(fā)生異常,我們可能會選擇放直接放過這個帖子或者直接將帖子推入人工審核。這個時候因為用戶一次發(fā)帖動作帶來的風(fēng)險有限,所以在面對異常情況的時候,我們通常就會不處理來避免對用戶產(chǎn)生不良的影響。
但是如果用戶在app上申請一個小額貸款,這個時候檢測環(huán)節(jié)出現(xiàn)異常,因為這個結(jié)論會直接跟資金掛鉤,所以我們通常會進(jìn)行重試,如果重試依然不通,我們可能會選擇拒絕這次申請操作。
所以在面臨不同的業(yè)務(wù)場景時,我們應(yīng)該能清晰的判斷業(yè)務(wù)對風(fēng)險的接受程度,通過這個來設(shè)計兜底策略。
以上就是風(fēng)控引擎的演進(jìn)歷史及基本的設(shè)計思路,本來還想分享一下風(fēng)控引擎中臺化的產(chǎn)品思路以及對這個產(chǎn)品后續(xù)發(fā)展的一些思考和設(shè)想,但是因為時間原因,這部分就放到后面有時間再說吧。
希望這篇文章能對大家理解風(fēng)控和風(fēng)控產(chǎn)品有所幫助~就這樣。
本文由 @gology 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 Unsplash,基于 CC0 協(xié)議
想做個企業(yè)內(nèi)訓(xùn),想邀請您,可以嗎?
積分引擎是不是也可以這樣設(shè)置
中臺化的模式和第三種的區(qū)別,有詳細(xì)的剖析嗎?
我理解區(qū)別點是:第三種提供的現(xiàn)成的功能和服務(wù),業(yè)務(wù)接入即可。此時由于復(fù)用的原有能力,所以會出現(xiàn)不能滿足的情況。而第四種提供的公用的底層服務(wù),比如計算能力。具體業(yè)務(wù)層是由業(yè)務(wù)自己去包裝,這樣可以跟貼進(jìn)業(yè)務(wù),滿足業(yè)務(wù)零碎的需求。
可能是自己對這種方法了解的不透徹。想問下如果說當(dāng)特征非常多的時候,如何保證意義不被影響。比如ABC,A+B=100,A+C也等于100。那100的意義好像會有些不同。還有就是在分?jǐn)?shù)設(shè)計上是否有什么需要考慮的?
這種時候可以將A B C三個得分做一下設(shè)計,比如A=20 B=40 C=80 ,那如果得分是100,一定命中了AC,得分120,一定命中了BC。
哪里還有這塊相關(guān)的資料 希望詳細(xì)深入了解學(xué)習(xí)下這種方法 ??
非常棒的一篇文章。有一個小問題想請教一下:文中提到 通過評分卡設(shè)計實現(xiàn)特征組合和邏輯運算。這種見得比較少,在這里解釋一下。這種方案是由用戶將每個特征賦予一個分值,策略總分就是所有特征分值的加和。通過每個特征得分的控制來間接時間邏輯運算。