Upgrade to Pro — share decks privately, control downloads, hide ads and more …

資料血緣: 營運機器/深度學習模型的秘密武器

資料血緣: 營運機器/深度學習模型的秘密武器

隨著企業採用越來越多數據模型來取得 quick-win時,營運這些數據模型也快速地成為了繁重的工作負擔
藉由資料血緣的工程梳理前後端系統、資料表與模型間複雜的關係,能幫助企業降低營運數據模型的成本,讓數據團隊能更專注的進行開發工作
在這次的演講中我將分享我們在進行這項專案的過程以及逐步解開過程中遇到問題的思路,歡迎你一起來參加這次的分享!

tlyu0419

March 04, 2024
Tweet

More Decks by tlyu0419

Other Decks in Technology

Transcript

  1. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    隨著企業採用越來越多數據模型來取得 quick-win 時,營運這些數據模型也快速地成為了繁重的工作 負擔 • 藉由資料血緣的工程梳理前後端系統、資料表與模 型間複雜的關係,能幫助企業降低營運數據模型的 成本,讓數據團隊能更專注的進行開發工作 • 在這次的演講中我將分享我們在進行這項專案的過 程以及逐步解開過程中遇到問題的思路,歡迎你一 起來參加這次的分享! AI Talk 專題演講 March 5, 2024 資料血緣: 營運機器/深度學習模型的秘密武器 #Python #資料血緣 #圖形演算法 游騰林(tlyu0419) 騰林是國泰數據部的資料科學家,擅長透過 Python, R 建置機器學習/深度學習模型、網路爬蟲、資料視覺化以 及圖形演算法。曾在 PyCon, PyData, AIAcademic, MOPCON, COSCUP, Sciwork 等年會擔任講者 代表的開源專案是 facebook-crawler 的 Python 套件, 可以協助使用者快速收集 Facebook 粉絲頁/社團的貼文 資料,發佈至今已進累積超過 3 萬次的下載量
  2. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Outline

    •什麼是資料血緣 •資料血緣的設計思路/過程 •資料血緣實務 •資料血緣的更多應用 •總結 2
  3. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 什麼是資料血緣?

    • 資料血緣指的是在資料在生成、ETL處理、加工、融合、流轉到最終消亡的過程中, 資料之間自然形成的一種類似人類血緣的關聯關係 4 建模資料表 數據模型 結果資料表
  4. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 什麼是資料血緣?

    • 資料血緣指的是在資料在生成、ETL處理、加工、融合、流轉到最終消亡的過程中, 資料之間自然形成的一種類似人類血緣的關聯關係 5 建模資料表 數據模型 結果資料表
  5. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 什麼是資料血緣?

    • 實務上資料表通常還會來自一個或多個資料表/系統,要完整盤點專案使用了哪些 資料與其流向其實並不容易(而且這還沒考慮後續的維護/更新) 6 簡單來說, 資料血緣就是要掌握數據模型端到端的流向
  6. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 什麼是資料血緣?

    • 即使是單純些的狀況,盤點資料血緣仍然有其必要性 • 通常我們只會看到排程掛掉,但有資料血緣才有辦法往上、往下找問題 7
  7. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 那些特別需要資料血緣的時刻

    • 過去在盤點專案的資料血緣時,往往需要 1周 至 1個月 的時間才能完成 8 模型更版 模型交接 電腦重啟 資料表下架 系統更新 工作排程異常 欄位異動 API 更版 上游資料沒到位 設定好的排程突然跑不過 職務交接 系統搬家 儀錶板的數字異常
  8. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 所以為什麼要做資料血緣的專案?

    • 專案上線一定需要有人進行維運, 但我們希望能減少投在維運的人力 • 一方面能減少公司的營運成本 • 讓工程師可以更開心的做開發的工作! • 一開始會有一些額外的工作, 但長期來看卻會是非常值得的投入 • 目標: 降低維運、交接數據模型的成本! 9 數據專案數量 維 運 人 力 人工盤點 大目標
  9. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 方法1:

    人工撰寫專案的資料流向 • 方法 • 請 PM / Dev 在專案上線時人工撰寫登記專案的目的,要給哪個系統使用 • 專案如果需要更版時,一併檢視先前留存的版本並進行修改 • 優點 • 實作簡單 • 容易編輯 • 缺點 • 資料分散 • 容易有疏漏 • 缺少檢查機制 11
  10. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 方法2:

    規範專案上線需要提交的檔案 • 方法 • 請 PM / Dev 在專案上線時就將資料血緣寫於 README 或 Config 中(下圖) • 後續再由工程師讀取和萃取資料,整理各專案的資料血緣 • 優點 • 如果前面確實做好,工程師的工作會很輕鬆,但… • 缺點 • 維護成本極高,不容易檢查資料的正確性 • 舊專案沒人力能做調整、驗收 12 …… Data Lineage: 表A,B,C,D,E -> 金融產品推薦模型 -> 表F -> 財富管理系統 ……
  11. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    方法 • 透過 TFS / Gitlab / VSCode / Python 直接搜索資料夾下的程式內容 • 優點 • 直接由工程師盤點資料 • 能一次搜索整個專案資料 (不用逐一打開檔案檢查) • 缺點 • 會漏盤資料 • 只能查到上下一層的關係 方法3: 通過工具搜索特定關鍵詞 13 搜尋特定的關鍵詞 出 現 該 關 鍵 詞 的 檔 案
  12. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 方法4:

    用 Graph 技術處理 • 方法 • 把資料血緣的議題切割成 剖析資料流 和 圖資料處理兩部分 • 保存 點和點間的連線 作為底層資料,當 線和線 接起來後就成為了路徑,也就是資料血緣 • 優點 • 改用連線來留存資料血緣 • 開發、維護成本低 • 查詢方便、快速 • 缺點 • 沒有解決底層資料的難題 (後面會再做說明解題方式) 14 2 0 1 3
  13. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 資料血緣案的創新與期待

    15 自動分析系統、資料表與模型間的關係 方法論要能被自動執行與更新分析成果 並應盡可能避免人工介入,手動增減資料 彈性擴充 容易新增/刪除資料,並快速進行更新結果 同時也保有擴充新部門系統/資料庫/專案的彈性 容易方便/快速 提供 視覺化頁面 / 指令 / API 等使用方式, 讓使用者根據不同需求快速查詢到需要的資料
  14. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 圖形演算法簡介

    • Graph 是由 Node 和 Edge 組成 • Node • 資料表、專案、系統、API、模型… • Edge • 上下游的消費關聯 • 可以再依需求區分為 有向 / 無向 關係 17 B C A D E 留意這邊跟之前不一樣的地方是, Graph 不是直接存整個路徑,而是用連線的關係來找血緣
  15. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 圖形資料規格

    18 NODE ATTR1 ATTR2 … A … … … B … … … C … … … D … … … E … … … … … … … SOURCE TARGET DIRECTED WEIGHT A B True 1 A C True 2 A D True 3 B C False 5 … … … … D E True 13 Node Table Edge Table 留存 Node 的屬性,如節點的類型、格式… 通常 Node Table 會拿來作為視覺化的條件 (但非必要) 留存 Edge 的屬性,如關係的方向、強度… Edge table 是建 Graph 的必要資訊
  16. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    建置圖資料後,你可以… 圖形演算法介紹 19 Centrality(中心性) Path finding(尋路) Graph embedding(圖嵌入) 評估網絡中的節點重要性 可以用來行銷,詐欺偵測 研究網絡圖上網絡路徑 要怎麼走能比較短、快 將非結構化的網絡圖 轉為可投入模型的特徵
  17. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 範例用資料

    • 真實世界中也很多關聯資料,這邊以 Python 套件間的依賴關係來說明 20 Ref: DataScience/09_Graph/DataLineage/packages_dep.parquet
  18. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    事前評估影響範圍 • 任兩節點之間是否存在路徑 > 兩專案會不會被影響 • 任兩節點之間的路徑長度 >兩專案的影響程度 • 以某節點為核心走出去,看能走到 哪些節點 > 盤點有哪些下游 • 事後追查問題 • 以某節點為核心往回走,看該節點 來自於哪些節點 > 盤點有哪些上游 21 資料血緣應用實例 資料血緣圖(局部)
  19. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    其他有趣的發現 • 互相引用的資料表 • 不應該存在的路徑 22 資料血緣應用實例 資料血緣圖(局部)
  20. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 使用方式1:

    視覺化頁面 23 Ref: Interactive network visualizations — pyvis 0.1.3.1 documentation 要強調的是視覺化並不是必要的工作, 大多數時候直接下指令撈取資料就可以了!
  21. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 •

    讀取整理好的圖資料 • Pandas, pickle, csv, …etc. • 常用的圖搜索指令 • nx.has_path() • nx.shortest_path() • nx.shortest_path_length() • nx.reverse() • nx.subgraph() • nx.single_source_shortest_path_length() • API • 將 上面的指令封裝成 API 讓 User 使用 24 使用方式2: 下指令進行圖形搜索 Usage sample
  22. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 底層資料

    • 由於 Graph 可以彈性擴充的特性,這邊可以分階段逐步增加涵蓋的範疇 • 建構底層資料的幾種情況 • Scripts**: Hadoop / Teradata / Mongodb / Postgresql / Oracle / spark sql / kafka / API • Logs: pySpark / Application • MLs/DLs: skit-learns / Keras / tensorflow / pytorch 26
  23. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Scripts

    - 正則表達式 • 找 Script 的存放路徑,遍歷 程式剖析內容 • TFS / Gitlab / folders 27 透過正則表達式掃描非結構化的程式語法 自動偵測出程式中使用到的資料表清單
  24. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Scripts

    - sqlflow • 如果需要更細的顆粒度,可以用 sqlflow 的 Python 套件 • 能追蹤到 column 來自哪張資料表的哪些欄位 28 Ref: sqlparser/sqlflow_public: Document, sample code and other materials for SQLFlow
  25. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Logs

    - Spark log • 承接 方法3 提到,直接掃描專案中的關鍵詞會有遺漏 • 如用多個字串組合為新變數,然後再將其作為表名存進資料庫 • 改為直接看 spark 從 database 中 讀取/寫出 哪些資料表 29 Read table rdd.HadoopRDD: Input split: hdfs://xxx/xxx/xxx/tmp.db/temp_table1/yyyymm=202304/…. Save table Output.FileOutputCommitter: Save output of task … to hdfs://xxx/xxx/xxx/ tmp.db / temp_table2/…
  26. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Logs

    - API log • 新增 ID 作為 API 的必要請求參數,藉此了解哪些系統有使用 API • 常見的 ID 參數: 如 token, application id, cookieid,… • 但實務上也會遇到一些原因發生借用別人ID 來使用 API 導致誤判的狀況 • 系統老舊 • 圖方便 • 寄生別人的系統 • … 30
  27. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Machine

    / Deep Learning Models • 模型通常會拉很多張資料表,並選取其中部分欄位來進行使用 • 在 Pyspark 中可以對一系列的指令進行解析和優化,追蹤模型使用的資料來源 • spark_dataframe.explain() 31 Ref: pyspark.sql.DataFrame.explain — PySpark 3.1.2 documentation
  28. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 更新頻率

    • 目前的設計邏輯是每日更新,未來可以再發展為即時更新的圖資料 • 批次: 設定排程,定期剖析並送關聯資料至圖資料庫 • 即時: 各系統處理完成後主動發 request 到資料庫留存記錄 • 走向全即時更新會遇到的難點 • 公司的系統繁雜、老舊,不一定能/願意在處理舊工作外再多這個工作 • 而如果規範從某個時刻開始的專案得走向即時,仍無法掌握這些舊系統資料血緣 • 目前看起來,混合模式 會是比較可行的方案 • 老舊的系統: 維持批次更新血緣資料 • 新系統: 可以收納即時資料 • 使用時再整合批次和即時的資料,提供使用者查詢 32
  29. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Centrality

    Measures • 中心性評估指標 • Degree(In/Out) • Betweeness • Closeness centrality • Pagerank • … • 評估資料表的重要性 • 資料可靠/不可靠 • 下架重要性低的資料 34 Ref: Centrality — NetworkX 3.2.1 documentation
  30. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Similarity

    Measures • 實務上會有一些內容高度相似, 但有些微差異的專案/模型/排程 • 通過圖技術幫忙評估相似度,對 高度相似的專案做整合,避免浪 費運算資源 • BFS • DFS 35 Ref: aditya-grover/node2vec (github.com) DFS 的角度評估相似度 BFS 的角度評估相似度
  31. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Community

    Detection • 圖技術中支持 社群偵測 演算法, 可以將讓同質性高的節點分在同一群,差異性高的在不同群 • 應用在數據專案的工作分配上,可以將相同群的專案/模型分給相同的人負責, 讓工作的效率最大化,也降低承接專案需要付出的成本 36 Ref: Community Detection Algorithm (Louvain)
  32. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Link

    Prediction • Link Prediction 是在預測兩個節點間存不存在連線的技術 • 可以用來做商品推薦的排序,藉此對客戶進行客製化的推薦 • 在營運數據模型的議題上,可以預測專案會可以使用/增加哪些資料表, 為模型新增建模變數,提升模型的預測成效 37
  33. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Node

    / Multi-label Classification • 專案都會有很多標籤,方便管理這些數據模型 • 像是使用的部門、可靠度、服務等級等等 • 通常標籤的產生會發生在模型上線後, 通過這個技術我們可以對舊專案做貼標 • 一般數據模型也有 classification 的任務 • 但是跟一般分類任務不同的地方是, 資料血緣沒有這麼多客戶的基本資料(性別、年齡、收入…) • 有時候我們更希望限制模型只能使用這些關聯資料做預測 38 Ref: A Comprehensive Introduction to Graph Neural Networks (GNNs)
  34. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 總結

    • ML/DLs 可以幫公司取得快速的成功, 卻也會在快速累積許多隱藏的技術債! • 其中一項降低維運成本的方式是進行資料血緣, 通過數據技術自動剖析 資料表、專案與前後端 資料間複雜的聯繫 • 減少公司投入在營運數據模型的心力 • 讓工程師能更專注的做開發的工作 • 圖技術由於具備 容易擴充、彈性 以及 路徑搜索, 等特性,是目前試出來比較理想的解決方案 • 但這邊也不排除有更好的方式,歡迎討論交流~ 40
  35. 游騰林 TENG-LIN YU | Mail: [email protected] NCCU - 資料視覺化工作坊 Ref

    • sql-machine-learning/sqlflow: Brings SQL and AI together. (github.com) • 字节跳动数据血缘技术实现与具体用例 - 知乎 (zhihu.com) • 哪个蠢蛋写的烂代码? - 知乎 (zhihu.com) • Graph Neural Networks with PyG on Node Classification, Link Prediction, and Anomaly Detection | by Tomonori Masui | Towards Data Science 41