本文介紹某打車營銷風控場景,通過圖計算服務GraphCompute提供解決方案。
業務場景
某打車營銷風控場景是需要挖掘司機乘客以及司機之間的聯合刷單作弊行為。當一筆打車訂單完成后請求風控服務,判責此單是否存在司乘、司司聯合刷單行為。該業務場景需要建立司機、乘客、訂單等多種關系的圖數據,然后提供實時圖查詢和分析能力。
需求是已知乘客的多個手機號、多個設備號等,和已知司機的多個手機號、多個設備號等,計算司乘之間訂單數,如關聯訂單數 > x,則認為司乘之間有刷單作弊嫌疑。
構圖路徑:手機號/設備號-乘客ID-訂單-司機ID-手機號/設備號。
客戶需求
免運維:快速搭建實時風控系統
數據對接:基于大數據平臺MaxCompute的對接能力
業務需求:圖模型快速構建、發布上線
性能要求:需要保證實時數據更新效率,線上訪問延遲低
建模設計
乘客或司機可能更換不同的手機號、設備號和賬號(ID)進行刷單。當一筆打車訂單完成后,此時擁有乘客的ID、手機號、設備信息,和司機的ID、手機號和設備信息,需要先利用司乘設備或者司乘手機號等等查找出歷史所有關聯的ID,再把司乘ID之間關聯的訂單列表找出來。涉及到的查詢有:
1. 根據乘客(司機)ID查找乘客(司機)歷史所有手機號、設備號集合;
2. 根據乘客(司機)手機號、設備號集合查詢到乘客(司機)唯一ID集合;
3. 再根據司乘唯一ID集合,查詢關聯的訂單集合;
具體設計圖拓撲:
根據上述關系圖構建出1個實體表和8個關系表;
子訂單實體表:kv索引類型
pkey主鍵:子訂單ID
value:其他屬性
關系表:kkv索引類型
乘客->訂單表
pkey:乘客uid
skey:訂單ID
value :其他屬性
訂單->乘客表
pkey:訂單ID
skey:乘客ID
value :其他屬性
乘客->identity表
pkey:乘客uid
skey:手機號;設備號;支付賬號(由這三個信息組合成鍵值)
value :其他屬性
identity->乘客表
pkey:手機號;設備號;支付賬號(由這三個信息組合成鍵值)
skey:乘客uid
value :其他屬性
司機->訂單表
pkey:乘客uid;
skey:訂單ID
value :其他屬性
訂單->司機表
pkey:訂單ID;
skey:司機唯一ID
value :其他屬性
司機->identity表
pkey:司機唯一ID;
skey:手機號;設備號;支付賬號(由這三個信息組合成鍵值)
value :其他屬性
identity->司機表
pkey:手機號;設備號;支付賬號(由這三個信息組合成鍵值)
skey:司機唯一ID
value :其他屬性
產品解決方案
基于圖計算服務GraphCompute支持毫秒級查詢風控特征,統一風控特征開發/驗證路徑,提升百倍特征迭代速度,進而提升了業務風險防控的靈活性。
MaxCompute+Flink作為圖計算服務GraphCompute數據源,在提供實時查詢數據能力的同時,能夠支持長時間周期(周/月/半年)特征聚合,支持秒級新增風控特征。
業務價值
打車風控系統通過單一圖計算服務GraphCompute支持,從而簡化系統運維復雜度,產研更加聚焦業務價值。
1、完善實時風控規則防控,提高了風控規則的時效性,避免了延遲帶來的資損。
2、新風控規則的生效周期由DAY天級變成MIN分鐘級,增加了風控時效性,降低業務作弊情況,更利于正常運營推廣。
3、一站式圖計算服務的解決方案,大大降低業務研發的過多投入,一人即可完成圖實例構建和圖接入。
4、基于圖計算服務新引擎賦能oneID同人防控業務,搭建風控中臺,賦能全局業務。
核心技術點
1)大數據快速迭代能力
強大的離線數據處理能力能夠讓大數據量(TB)規模的全量更新時效變成MIN分鐘級
實時更新鏈路能夠支撐起百萬級別的更新消息低延遲
2)智能運維系統
一站式的圖計算服務生命周期管理,單人輕松玩轉圖數據
強大的智能運維會根據業務特點自動進行存儲優化,計算節點和存儲節點之間的動態資源分配讓整個系統的運行效率更高,同時保障高可用
3)計算下沉
gremlin 計算邏輯下沉到searcher,提升計算效率
具體場景實現
打車營銷方案中需要識別的作弊情況:1)司司聯合作弊;2)司乘聯合作弊;
針對這兩種場景的代碼實現如下:
1.司司聯合作弊
第一次查詢:查詢司機mobile,driverId,IDFV,IDFA,IMEI 1天內關聯的所有訂單。
第二次查詢:獲取這些訂單中,乘客是司機的訂單集合。
查詢示例:
司機mobile: 138000
司機IDFA: hadsjflkhadlsgfag
司機IMEI: adfladfnahjahjkdf
代碼實現及訪問方式:
g.E("mobile_138000;idfa_hadsjflkhadlsgfag;imei_adfladfnahjahjkdf").by("driver_identity_union_id")
.outE().by("driver_cp_order") // 司機設備關聯訂單集合
.inV().by("cp_order") // 訂單詳情集合
.filter("order_create >=1634221076929") // 過濾1天內訂單
.filter(__.outE().by("cp_order_passenger").outE().by("passenger_user_id_identity").outE().by("driver_identity_union_id")) // 過濾乘客是司機的訂單
2.司乘聯合作弊
查詢乘客的mobile,IDFV,IDFA,IMEI 與司機mobile,driverId,IDFV,IDFA,IMEI 1天內關聯的訂單集合。
查詢示例:
乘客mobile: 138000
乘客IDFA: hadsjflkhadlsgfag
乘客IMEI: adfladfnahjahjkdf
司機mobile: 139000
司機IDFA: nmyasdoykk
司機IMEI: pdasfhahkjnlad
代碼實現及訪問方式:
g.E("mobile_138000;idfa_hadsjflkhadlsgfag;imei_adfladfnahjahjkdf").by("passenger_identity_user_id")
.outE().by("passenger_cp_order") // 乘客設備關聯訂單號集合
.inV().by("cp_order")// 乘客訂單詳情集合
.filter("order_create >=1634221076929") // 過濾1天內訂單
.where(outE().by("cp_order_driver").outE().by("driver_union_id_identity")
.values("identity").is(P.within("mobile_139000;idfa_nmyasdoykk;imei_pdasfhahkjnlad")))