第三届Apache Flink 极客挑战赛暨AAIG CUP攻略发布!
本文作者:阿里云 周云峰(云巖)、淘系技術部 黃家明(明小)
大賽直通車:https://tianchi.aliyun.com/competition/entrance/531925/introduction
第三屆Apache Flink 極客挑戰賽暨AAIG CUP 自8月17日上線以來已有 4000+ 參賽隊伍報名。針對賽題“電商推薦‘抱大腿’攻擊識別”涉及的知識點及相關工具使用已在每周直播課程中分享,本文將通過一下幾點對賽題進行詳細解讀,幫助選手更好的了解賽題核心內容。
賽題詳細解析
賽題背景
隨著互聯網的發展,網購成為越來越多人的選擇,據阿里巴巴財報顯示,2020財年阿里巴巴網站成交總額突破一萬億美元,全球年度活躍消費者達9.60億。
為了滿足不同用戶的個性化需求,電商平臺會根據用戶的興趣愛好推薦合適的商品,從而實現商品排序的千人千面需求。推薦系統常見的召回路徑有U2I(User-Item)、I2I(Item-Item)等。其中,user-to-item是指通過用戶的 profile信息為用戶進行商品的推薦,而item-to-item推薦策略則根據用戶的商品點擊列表為用戶推薦關聯的商品。
推薦系統的目的是基于不同用戶的偏好進行千人千面的推薦。傳統的離線推薦系統基于用戶歷史的行為數據進行加工處理,形成特征樣本,然后離線訓練模型,并且在線部署進行服務。然而用戶的偏好是多元的、用戶的行為分布會隨著時間而變化,離線的模型無法刻畫這種動態的用戶偏好,因此需要進行實時的特征更新與模型參數更新,從而能夠更好的捕獲用戶的行為偏好。在推薦場景中,為了更好的提升推薦的時效性與準確性,平臺會基于全網的用戶行為信息進行實時的 U2I 及 I2I 的更新,并且基于用戶最近的行為信息進行相關性的推薦。
為了獲取更多的平臺流量曝光,將自己的商品展現在更多的消費者面前,部分商家通過HACK平臺的推薦機制從而增加商品的曝光機會。其中一種典型的手法為“抱大腿”攻擊,該方法通過雇傭一批惡意用戶協同點擊目標商品和爆款商品,從而建立目標商品與爆款商品之間的關聯關系,提升目標商品與爆款商品之間的I2I關聯分。商家通過這種方式誘導用戶以爆款的心理預期購買名不符實的商品,不僅損害了消費者的利益,降低其購物體驗,還影響了平臺和其他商家的信譽,嚴重擾亂了平臺的公平性。因此,我們需要用一個風控系統來過濾掉這些可能的惡意流量,避免它們對推薦系統的模型造成干擾。
由于所有用戶行為在輸入推薦系統之前,都會首先經過風控系統的過濾,所以如果想要做到推薦系統的實時性,風控系統就必須同樣做到實時性。實時攔截此類行為,有助于在保證推薦的時效性的同時,保護實時推薦系統不受惡意攻擊影響。
實時風控系統對數據安全的要求較高,如果系統的攔截算法意外泄漏,HACK平臺將得以針對性地加強惡意流量的偽裝能力,增大平臺監控惡意流量的難度,因此,此類系統有必要部署在加密的可信環境中。
綜上所述,為了保障實時推薦系統的準確性,比賽要求選手實現一個保證了數據安全的實時風控系統。
數據說明
給定惡意點擊、正常點擊及對應的“商品”、“用戶”相關的屬性信息(用戶本地調試可以從網上下載),選手實現實時的惡意點擊識別分類算法,包括模型訓練和模型預測。在大賽評測系統中,系統使用100萬條數據用于模型訓練、10萬條數據用于模型預測。另外,比賽提供給選手50萬條數據的數據集用于算法的本地調試。
比賽提供如下格式的數據用于訓練與預測。所有數據均采用csv格式保存在文件中,即以下數據格式的各列之間以逗號分隔。每條數據代表一次用戶點擊商品的行為,它的特征主要來源于其所關聯的用戶與商品。
- uuid:每條數據的id。該id在數據集內具有唯一性。
- visit_time:該條行為數據的發生時間。實時預測過程中提供的數據的該值基本是單調遞增的。
- user_id:該條數據對應的用戶的id。
- item_id:該條數據對應的商品的id。
- features:該數據的特征,包含N個用空格分隔的浮點數。其中,第1 ~ M個數字代表商品的特征,第M+1 ~ N個數字代表用戶的特征。
- label:值為0或1,代表該數據是否為正常行為數據。
訓練數據包括上述所有列的數據,預測數據包括除了label之外的所有列。
模型文件的輸入輸出格式
對于只希望在算法層面加以優化的選手,僅需保證保存的模型文件的輸入輸出為如下格式即可。我們提供的示例鏡像的代碼能夠預處理輸入數據的格式,解析Tensorflow模型的推理結果,并最終生成符合評測程序要求的CSV格式的文件。
預測模型輸入tensor格式。其中N為feature的個數。
Tensor("input:0", shape=(?, N), dtype=float32)
預測模型輸出tensor格式。輸出值為0或1,表示輸入行為數據是否為惡意行為。
Tensor("output:0", shape=(?, 1), dtype=float32)
Demo解析
本次賽題注重算法和工程的結合,解答賽題大概要經過以下幾個階段:模型訓練、模型預測、最優閾值選取、在線預測并判定類別。
- 模型訓練:訓練集中的數據都是結構化的,不需要進行特征抽取階段,可以直接使用模型進行訓練。在 demo 里,構建了一個前向反饋網絡進行模型的訓練,直接擬合樣本的標簽;
- 模型預測:為了將訓練與預測階段做到更好的分離,在模型預測階段,使用的是 cluster serving 的形式,因此預測只需要直接加載訓練好的模型,便可以進行預測;
- 閾值選取:線上使用的是直接判定類別,而不是輸出一個概率,這個是非常符合實際業務場景的。但是直接輸出類別的情況下,閾值的選取對于模型的線上效果影響特別大,因此需要進行閾值最優選擇,找到在驗證數據中最優的閾值作為線上判定的閾值,目前demo使用的閾值為 0.5;
- 在線預測并判定類別:在最終輸出的時候通過對于當前預測概率與最優閾值的大小,從而確定當前樣本的預測類別(是否作弊)
Demo優化
- 實時特征:目前提供的只有用戶/商品的偏靜態的特征,但是數據中還包括了 用戶-商品 的點擊關系,用戶可以考慮基于點擊關系構建實時的特征,比如統計當天截止目前用戶/商品的點擊量,用戶的平均商品點擊數、商品的平均用戶點擊數等;不過需要注意的是,當預測階段使用了實時特征,則在訓練階段也需要配套相同的實時特征,否則訓練與預測使用的特征不一致會導致模型報錯或者效果變差的情況;此外,訓練集中已經知道哪些商品/用戶是有過作弊行為的,這些信息也可以作為模型的特征進行構建;
- 模型訓練:業界有很多成熟的DNN模型,目前demo使用了3層的結構,選手可以考慮使用更復雜的模型進行訓練,從而達到更好的擬合效果;此外,我們不應該局限于某個"超級模型",而是可以考慮基于集成學習的方式混合多個模型/策略進行預測。
- 最優閾值選擇:目前 demo 中使用的閾值為 0.5,但是最優閾值選取需要基于模型的在驗證集中的預測情況進行選擇,其實我們可以寫一個腳本,通過驗證集找到最優的閾值;
- 在線預測:線上 demo 模型對于全部的流數據均會進行預測,然而一但出現某個樣本的預測出現高延遲,可能會導致后續的樣本預測也會出現連帶的延遲,從而導致整體線上延遲嚴重。除了優化算法與工程、盡量降低延遲之外,選手也可以嘗試對延遲進行監控,以緩解長尾現象的影響。
評分指標
選手提交結果的分數由兩方面評分的乘積來決定,兩方面分別代表選手提交結果的算法與工程方面的表現。用一個公式表示即如下所示:
score=F1 ?valid_latency
在算法方面,比賽根據推理結果的F1參數來評分,即推理結果的準確率與召回率的調和平均數。
在工程方面,由于比賽模擬實時風控場景,所以比賽對實時推理過程中的延遲做出限制。選手的程序需要為kafka中出現的實時數據流提供推理服務,并在數據流的流量不超過給定閾值的情況下,單條數據的延遲不超過500ms。
選手部署的推理服務需要從kafka中讀取待推理數據,并將推理結果寫入kafka。數據的延遲的定義即為待推理數據及其推理結果在kafka中的時間戳的差值。上述公式中的valid_latency,即為延遲符合要求的數據占所有數據的比例。延遲超過500ms的數據不僅會影響到valid_latency的值,進而影響到分數,而且也不會參與F1參數的計算過程。
技術介紹
Apache Flink 是一個在無界和有界數據流上進行狀態計算的框架和分布式處理引擎。Flink 已經可以在所有常見的集群環境中運行,并以 in-memory 的速度和任意的規模進行計算。
在Flink的基礎上,Flink AI Flow作為兼顧流計算的大數據 + AI 頂層工作流抽象和配套服務,提供了機器學習的端到端解決方案。
Analytics Zoo及BigDL是英特爾?開源的統一大數據分析和AI平臺,支持分布式TensorFlow及PyTorch的訓練和推理,通過OpenVINO工具套件和DL Boost指令集等,提升深度學習工作負載的性能。Cluster Serving是Analytics Zoo/BigDL的分布式推理解決方案,可以部署在Apache Flink集群上進行分布式運算。
Occlum是螞蟻集團基于Intel SGX的開源LibOS,使得 Linux 應用程序在只修改少量代碼或者完全不修改代碼的情況下運行于 Enclave 安全環境中,保證數據處于加密和強隔離狀態,確保數據安全與用戶隱私。
參考資料
基礎鏡像使用說明與相關技術介紹:https://code.aliyun.com/flink-tianchi/antispam-2021/tree/master
Flink 1.11中文文檔:https://ci.apache.org/projects/flink/flink-docs-release-1.11/zh/
Flink AI Flow Wiki:https://github.com/alibaba/flink-ai-extended/wiki
Analytics Zoo Cluster Serving Programming Guide:https://github.com/intel-analytics/analytics-zoo/blob/master/docs/docs/ClusterServingGuide/ProgrammingGuide.md
Occlum Github Repo:https://github.com/occlum/occlum
學習資料
學習論壇:https://tianchi.aliyun.com/competition/entrance/531925/forum
學習視頻:https://flink-learning.org.cn/activity/detail/99fac57d602922669b0ad11eecd5df01
大賽答疑交流釘釘群:35732860
活動推薦
阿里云基于 Apache Flink 構建的企業級產品-實時計算Flink版現開啟活動:
99 元試用 實時計算Flink版(包年包月、10CU)即有機會獲得 Flink 獨家定制T恤;另包 3 個月及以上還有 85 折優惠!
了解活動詳情:https://www.aliyun.com/product/bigdata/sc
原文鏈接:https://developer.aliyun.com/article/791644?
版權聲明:本文內容由阿里云實名注冊用戶自發貢獻,版權歸原作者所有,阿里云開發者社區不擁有其著作權,亦不承擔相應法律責任。具體規則請查看《阿里云開發者社區用戶服務協議》和《阿里云開發者社區知識產權保護指引》。如果您發現本社區中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社區將立刻刪除涉嫌侵權內容。總結
以上是生活随笔為你收集整理的第三届Apache Flink 极客挑战赛暨AAIG CUP攻略发布!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 8大行业场景!最新 Apache Fli
- 下一篇: 阿里云容器服务全面升级,让云的边界拓展至