如何通過圖算法能力獲取OneID高質(zhì)量人
本文將重點講解如何將傳統(tǒng)的用戶登錄信息進行離線處理,構(gòu)建用戶與設(shè)備間的多種復(fù)雜圖關(guān)系,并基于圖關(guān)系完成離線圖算法分析,快速和精準(zhǔn)的挖掘出多設(shè)備多賬號對應(yīng)的自然人信息。
(一)背景
對于幾乎所有的互聯(lián)網(wǎng)企業(yè),對于識別、追蹤用戶身份都有強烈的需求,精準(zhǔn)識別用戶身份后,就可以收集用戶個性化的行為、身份數(shù)據(jù),比如用戶瀏覽了什么商品,看了什么視頻,去了哪個餐廳等等,從而可以對搜索,廣告,推薦等等場景做出精準(zhǔn)、個性化的展現(xiàn)。
首先需要確定核心數(shù)據(jù):用戶ID和設(shè)備ID、用戶與設(shè)備關(guān)系數(shù)據(jù)。業(yè)務(wù)方根據(jù)當(dāng)前埋點數(shù)據(jù)進行抽取和盤點;在梳理的過程中可能遇到的數(shù)據(jù)問題:數(shù)據(jù)不完整、弱關(guān)系,沒有直接關(guān)系的數(shù)據(jù),是否通過多種數(shù)據(jù)關(guān)系進行關(guān)聯(lián)和挖掘。對數(shù)據(jù)源進行細致梳理過程,可將數(shù)據(jù)源的表名、數(shù)據(jù)描述、抽取原則、數(shù)據(jù)量級、ID選取等,大部分的業(yè)務(wù)都會采用一張數(shù)據(jù)庫表來表達:涉及到多種設(shè)備id、內(nèi)部賬號信息等,多種維度的用戶可定位的重點信息。
下面將針對具體Case進行方案講解,例如表配置【table_orgin】:
trusted_id | app_id | oa_id | imei | ... |
可信設(shè)備id | 登錄注冊id | 廣告標(biāo)識符 | 手機設(shè)備 | ... |
主要特點:
1)該表無唯一主鍵,每個id都可能交叉出現(xiàn)、重復(fù)設(shè)備信息存儲。
2)信息存儲簡單,查詢復(fù)雜
(二)傳統(tǒng)數(shù)據(jù)庫表如何進行關(guān)系梳理
為了能將設(shè)備id進行可靠信息聚合,我們需要將【table_orgin】簡單的大寬表進行梳理,完成基于圖結(jié)構(gòu)的設(shè)備關(guān)系表。
(1)多維數(shù)據(jù)打平
新建一張數(shù)據(jù)表將【table_orgin】變?yōu)椤総able_create_device_id】,將需要用到的核心設(shè)備信息進行主鍵生成,讓多維的設(shè)備類型統(tǒng)一歸為device_id,同時生成設(shè)備對應(yīng)的主鍵id,本次我們選取4個核心設(shè)備信息【trusted_id\app_id\oa_id\imei】進行構(gòu)圖。
INSERT overwrite table table_create_device_id PARTITION (ds='2023-11-11')
select device_id
from
(
select DISTINCT(trusted_id) as device_id from table_orgin
where dt = '2023-11-11' and trusted_id is not null
UNION
select DISTINCT(imei) as device_id from table_orgin
where dt = '2023-11-11' and imei is not null
UNION
select DISTINCT(oa_id) as device_id from table_orgin
where dt = '2023-11-11' and oa_id is not null
UNION
select DISTINCT(app_id) as device_id from table_orgin
where dt = '2023-11-11' and app_id is not null
);
(2)設(shè)備id分配臨時id,創(chuàng)建新表【device_temp_id】
INSERT overwrite table device_temp_id PARTITION (ds='2023-11-11')
select ROW_NUMBER() OVER(PARTITION BY ds ORDER BY table_create_device_id) AS id, device_id from device_ids
where ds = '2023-11-11';
(3)新建【table_orgin_device_id】
將【table_orgin】中各種id轉(zhuǎn)換成設(shè)備表的主鍵字段,將trusted_id對應(yīng)的【device_temp_id】的id主鍵。
trusted_id | app_id | oa_id | imei | trusted_id_key | app_id_key | oa_id_key | imei_key |
可信設(shè)備id | 登錄注冊id | 廣告標(biāo)識符 | 手機設(shè)備 |
INSERT overwrite table table_orgin_device_id PARTITION (ds='2023-01-02')
select trusted_id_key, oa_id_key, imei_key, app_id_key
from
(
select trusted_id, oa_id, imei, app_id from
table_orgin
where dt = '2023-11-11'
) A
left outer join
(
select id as imei_int, device_id from
device_temp_id
where ds = '2023-11-11'
) B
on A.imei = B.device_id
left outer join
(
select id as oa_id_int, device_id from
device_temp_id
where ds = '2023-11-11'
) C
on A.oa_id = C.device_id
left outer join
(
select id as trusted_id_int, device_id from
device_temp_id
where ds = '2023-11-11'
) D
on A.trusted_id = D.device_id
left outer join
(
select id as app_id_int, device_id from
device_temp_id
where ds = '2023-11-11'
) F
on A.app_id = F.device_id;
(4)數(shù)據(jù)清洗
該層重點工作在于數(shù)據(jù)抽取、清洗和融合等ETL處理,雖然比較基礎(chǔ),但該層構(gòu)建是否精準(zhǔn),將決定了項目的成敗;
1)ID清洗:ID清洗務(wù)必保證以下兩個細節(jié)點需要特別注意,以免造成重大影響:
【準(zhǔn)確性】在ID清洗過程時,需要反復(fù)測試,保證清洗工作的質(zhì)量,不正確的ID清洗會影響ID收容完整性和ID標(biāo)識的準(zhǔn)確性,對下游影響非常大;
【一致性】把ID清洗封裝成UDF函數(shù),保證ID清洗的一致性,并且可以利用工廠模式實現(xiàn),提高易用性與減少函數(shù)維護成本;例如:imei和idfa清洗時,使用同一個函數(shù),傳參不同而已udf_id_is_valid(imei, 'IMEI')和udf_id_is_valid(idfa, 'IDFA');
2)ID修復(fù):多種專家經(jīng)驗和策略協(xié)助,做一步ID修復(fù)處理,這樣可以變廢為寶,減少臟數(shù)據(jù)的比率例如:去除imei字符串尾部多余;
(5)建立點邊關(guān)系
將4個核心設(shè)備信息進行一對一關(guān)系建立,成為一個一維關(guān)系表:
(三)基于圖算法進行設(shè)備信息聚合挖掘
在這種設(shè)備信息挖掘的場景,通常使用圖算法-社區(qū)發(fā)現(xiàn) Weakly Connected Components:弱連通分量(WCC)算法在有向圖和無向圖中尋找連通節(jié)點集。如果兩個節(jié)點之間存在路徑,則表示兩個節(jié)點已連接。相互連接的所有節(jié)點的集合形成一個組件。與強連接組件(SCC)相反,不考慮兩個節(jié)點之間路徑上的關(guān)系方向。例如,在有向圖(a)→(b)中,即使沒有向關(guān)系(b)→(a), a和b也會在同一個分量中。本算法計算每個點的連通分量成員,最后輸出頂點值中包含最小頂點ID的連通分量。將最小頂點ID沿著邊傳播到連通分量的所有頂點。
準(zhǔn)備工作
在進行全圖分析之前,我們需要新建圖計算實例和創(chuàng)建圖配置,并完成圖數(shù)據(jù)的批量導(dǎo)入或者API數(shù)據(jù)寫入。
1)創(chuàng)建圖計算服務(wù)實例,點擊鏈接進行實例開通,早起測試階段可選用【獨享分析型】規(guī)格進行功能驗證。
2)創(chuàng)建圖配置,可參考最佳實踐基于GraphCompute快速搭建好友推薦圖應(yīng)用進行業(yè)務(wù)數(shù)據(jù)和配置接入。
圖算法配置
1)功能操作:
在圖計算服務(wù)需要進行邊集選擇,選中圖中已關(guān)閉【索引優(yōu)化】的邊表可進行算法分析;無需額外配置權(quán)重字段。
2)任務(wù)運行:
點擊圖算法配置的"運行"按鈕,彈窗提示計費之后點擊確認即可運行,任務(wù)運行記錄可以點擊配置的“歷史任務(wù)“進行查看;當(dāng)前產(chǎn)品功能屬于公測期間,暫不額外收費。
3)結(jié)果產(chǎn)出:
點擊“保存配置”成功創(chuàng)建圖算法配置之后,會在圖中自動創(chuàng)建出一個新的點,點的名稱為填寫的表格最下方的導(dǎo)出結(jié)果,后續(xù)運行圖算法任務(wù)成功之后,任務(wù)結(jié)果會自動回流到該結(jié)果點,回流完成之后即可在線查詢
(四)在線查詢結(jié)果
圖計算為了方便用戶能夠?qū)㈦x線圖算法的分析結(jié)果查詢,形成了一套業(yè)界領(lǐng)先的一體化流程,只需要開通圖計算服務(wù)實例,即可同時擁有高性能圖數(shù)據(jù)的查詢分析一體化引擎。相比業(yè)界方案,圖計算服務(wù)方案更便捷,無需額外自運維數(shù)據(jù)鏈路,讓數(shù)據(jù)流轉(zhuǎn)更高效。
該算法結(jié)果點為倒排類型,componentId字段表示聯(lián)通子圖ID:
使用倒排查詢的語法查詢指定componentId下面的所有點:g("user_***_graph").V().hasLabel("填寫結(jié)果配置的表名").indexQuery("{\"match\":{\"component_id\":\"2001\"}}")