本文為您介紹在Hologres中標籤、Portrait analysis情境的最佳實務。
行業背景與痛點
Portrait analysis是指基於沉澱使用者的自然屬性、行為屬性、偏好屬性等屬性挖掘使用者興趣點、分析群體特徵的過程。使用者畫像是刻畫出使用者個體或者使用者群體全方位特徵的重要手段,能為營運分析人員提供使用者的偏好、行為等資訊進而最佳化營運策略,為產品提供準確的使用者角色資訊以便進行針對性的產品設計。畫像系統通常集使用者特徵加工、Portrait analysis功能於一身;經過離線特徵加工、維度標籤映射、載入即席分析資料等過程,提供即時人群分析、圈選能力。
Portrait analysis方法論已經廣泛應用於各個行業,是賦能經營策略最佳化、精細化營運、精準營銷的重要手段。例如以下典型情境。
廣告行業:通過人群畫像洞察,實現精準廣告定向投放。
遊戲行業:分析高流失率客戶群,調整策略增加使用者粘性。
教育行業:分析課程品質,達到增加續保率的目標。
Portrait analysis的工程情境往往由於資料複雜度、資料量級和查詢模式等因素導致系統可穩定性、營運性、可擴充性面臨重重困難。
營運人員需要維護多套資料鏈路用於即時離線處理,陷入繁重鏈路維護工作;傳統OLAP(On-Line Analysis Processing)引擎儲存計算耦合,計算儲存不成比例情境浪費資源,系統擴容遷移成本高。
營運人員需要靈活的圈選能力,單使用者描述維度多可能多達數千維度,涵蓋屬性、行為等資料模式,MOLAP(Multidimensional OLAP)產品可以毫秒響應但缺乏靈活性,ROLAP(Relational OLAP)產品靈活性好但回應時間較長,無法兼顧效能和靈活性。
Hologres解決方案
針對上述兩方面問題,基於新一代即時數倉產品Hologres的系統能力,通過配置資料鏈路、選擇外掛程式庫、根據系統規模選擇方案步驟快速構建高效能、可擴充的系統方案。
資料鏈路
依託Hologres通常只需要維護一套資料鏈路即可實現即時、離線的資料處理,避免常見的資料不同步、資料孤島等問題,如下圖所示。Hologres Data Integration能力方面的主要優勢如下。
無縫整合DataWorks產品,通過接入配置即可解決複雜資料依賴問題,構建穩定離線資料處理載入流程。
為即時寫入情境提供了基於LSM(Log-Structured Merge)結構的行儲存,與Flink進行深度融合,能夠為即時標籤、即時特徵處理等情境提供穩定的效能支撐。
具有聯邦查詢能力,通過外部表格方式直接存取MaxCompute、OSS、其他Hologres執行個體等外部資料儲存。
畫像計算
Hologres相容PostgreSQL生態,內建函數豐富;同時,經過阿里內部及雲上客戶實踐,逐步沉澱了諸多高效的畫像計算外掛程式,如下所示。
精確去重運算:RoaringBitmap函數
Hologres原生支援了Roaring Bitmap類型,通過高效率的Bitmap壓縮演算法,支援集合的交叉並等運算,支援Bitmap彙總,適合計算超高維度、基數的表,常用於去重(UV計算)、標籤篩選、近即時使用者畫像等計算中。
行為資料圈人:明細圈人函數
在行為類資料的圈人情境中,我們經常碰到這樣的情況:行為資料按照天或者小時記錄在行為表中,當需要找到一段時間內出現某些行為的使用者時,因為資料記錄成多行而沒辦法直接過濾,所以就需要使用行為表多次JOIN自己來實現過濾。例如如下情境,在記錄使用者行為明細表中找出
時間在[20210216~20210218之間 & [click購物車] & [view收藏頁]
的使用者。Hologres提供了
bit_construct
、bit_or
bit_match
函數,能夠規避JOIN的效能負擔,簡化SQL的複雜度。函數的主要思路是通過一遍資料過濾,將uid滿足條件的集合以位元組形式存放,通過bit_match
函數在位元組進行與運算實現資料過濾,樣本如下。WITH tbl as ( SELECT uid, bit_or(bit_construct( a := (action='click' and page='購物車'), b := (action='view' and page='收藏頁'))) as uid_mask FROM ods_app_dwd WHERE ds < '20210218' AND ds > '20210216' GROUP BY uid ) SELECT uid from tbl where bit_match('a&b', uid_mask);
bit_construct
函數:用於對錶達求值並儲存在響應位元組中,比如對SQL中的a、b兩個條件,計算結果分別是[1,0], [0,0], [0,1]...
。bit_or
函數:用於將兩個位元組按位進行或運算,用來彙總uid上滿足的條件集合。bit_match
:用於判斷位元組是否符合某個運算式,比如計算a&b
運算式[1,1]
結果為True,[1,0]
為False。
漏鬥留存分析:漏鬥函數
漏鬥分析是常見的轉化分析方法,它用於反映使用者各個階段行為的轉化率,廣泛應用於使用者行為分析和App資料分析的流量分析、產品目標轉化等資料營運與資料分析。
視窗漏鬥函數(WindowFunnel)可以搜尋滑動時間視窗中的事件列表,並計算條件匹配的事件列表的最大長度。留存分析是最常見的典型使用者增長分析情境,使用者經常需要繪製資料視覺效果圖形,分析使用者的留存情況。通過漏鬥函數、留存函數的使用,可以快速計算出使用者留存效果以及對應的轉化率,減少複雜Join開銷,提高效能。
向量檢索:Proxima向量計算
Proxima是一款來自於阿里達摩院的實現向量近鄰搜尋的高效能軟體庫,相比於Fassi等開源的同類產品,Proxima在穩定性、效能等方面更為出色,能夠提供業內高效能和效果顯著的基礎方法模組,支援映像、視頻、人臉等各種應用情境。Hologres向量查詢功能與Proxima深度整合,提供高效能的向量查詢服務。支援快速的RNN(Radius Nearest Neighbor)搜尋、KNN(K-Nearest Neighbor)搜尋、dot_product向量化點積計算群組件。
工程方案
在畫像系統發展的不同階段,往往對工程方案有不同的成本和效能訴求。根據實踐經驗,綜合系統資料規模、實現成本、查詢效能等三因素,總結兩種典型的工程方案如下。
標籤寬表方案
寬表標籤方案適合標籤較少(通常小於1000個),資料更新不頻繁的情境。主體思路是在離線階段把相對穩定的屬性工作表離線彙總成寬表,將多張表的關聯操作轉化一張寬表的運算,新的標籤列的情境通過增加列的方式實現,以表的方式提供非常靈活的標籤計算,詳情請參見Portrait analysis - 標籤寬表。
RoaringBitmap最佳化方案
基於RoaringBitmap的超大規模Portrait analysis情境,適合資料量大,標籤規模多,需要去重處理的情境。通過結合RoaringBitmap結構化儲存,實現天然去重,避免Join開銷,降低運算複雜度,快速出結果。詳情請參見Portrait analysis - RoaringBitmap最佳化方案。
Bit-sliced Index最佳化方案
基於BSI(Bit-sliced Index)的超大規模Portrait analysis,適合使用者屬性標籤(性別、省份)與使用者行為標籤(PV、訂單金額等)關聯分析的情境,對高基數(去重值數量大)的行為標籤計算有顯著最佳化作用。通過BSI和Roaring Bitmap,將標籤去重、UNION、JOIN等複雜計算全部轉化為BSI二進位運算與Roaring Bitmap交並差運算,降低運算複雜度,快速得出行為標籤分析結果。詳情請參見Portrait analysis - BSI最佳化方案(Beta)。
小結
Hologres通過豐富的Portrait analysis外掛程式支援,和自身優異的效能,被阿里集團內部多個核心業務廣泛應用於標籤計算、Portrait analysis的情境,例如阿里媽媽、搜尋、高德以及眾多公用雲使用者使用。服務擴充能力和穩定性曆經生產考驗,這也證明Hologres是構建低開發營運成本,高穩定性擴充性Portrait analysis平台的不二之選。