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

データを開発するためのDataOps

69152062a049e39ff6c00d36d2919650?s=47 Atsushi Sumita
February 17, 2022
360

 データを開発するためのDataOps

以下のイベントの登壇資料です.
https://finatext.connpass.com/event/233494/

以下のテックブログで本発表について説明しているので, そちらの参照を推奨します.
https://techblog.finatext.com/dataops-1-dff33c33e29f

69152062a049e39ff6c00d36d2919650?s=128

Atsushi Sumita

February 17, 2022
Tweet

Transcript

  1. © 2015 - 2022 Nowcast Inc. データを"開発"するためのDataOps (バージョン管理&CI/CD編) 株式会社ナウキャスト 隅田

    敦 1
  2. © 2013 - 2022 Finatext Ltd. 2 まずはナウキャストの事業紹介 共通データ基盤 マクロ指数

    サービス 投資支援 サービス マーケティング サービス 機関投資家 政府/官公庁 事業会社 全国のスーパー のPOSデータ JCBカードの購買 データ Tポイントカードの 購買データ 全国のスーパー やドラッグストア のPOSデータ 家電量販店の POSデータ 多種多様な顧客層 国内外の様々な機関にビッグデータサービス を提供しています。この幅広い顧客層がビッ グデータのマネタイズを可能にします。 分析プラットフォーム Nowcastの分析プラットフォームでは種類の 異なるデータソースをワンストップで分析し、 投資支援、マクロ指数、マーケティングなど、 様々なサービスを展開します。 様々なデータソース Nowcastはサードパーティーという立場を活 用し、様々な企業からデータの提供を受けて います。データの多様性は Nowcastの競合優 位性を産み出します。
  3. © 2013 - 2022 Finatext Ltd. 3 データを"開発"するって? 高速に高品質なデータを整備するために, ソフトウェア開発のベストプラクティスを応用したい

    データベース - 例) 外交特権(SQLアンチパターン14章) - DBスキーマ等に対してバージョン管理 /テストしましょう 機械学習モデル - 例) Continuous Machine Learning - 機械学習モデルにも CIを応用 ゲーム開発用のマスタデータ - 例) akashic(カヤック), Oyakata(DeNA) - ゲーム開発に用いるマスタデータにバージョン管理や CIを応用 https://techblog.kayac.com/akashic-a-new-master-data-management-system 他にも事例ある?🤔 https://cml.dev/
  4. © 2013 - 2022 Finatext Ltd. 4 未開拓な領域だし, まだまだ探求の途上なので, 本発表が最終形とは思っていません

    - まだまだ詰めるべきポイントは多い, 議論のスタートポイントにしたい - うちはこうやってるよ!など是非教えてほしい! datatech-jp - データエンジニア/データマネジメント/データに興味がある人のためのコミュニティ - 是非一緒に知見交換したり議論しましょう! 技術書の輪読会などもやってます!
  5. © 2013 - 2022 Finatext Ltd. 5 目次 バージョン管理 -

    依存関係を洗い出しバージョン管理を行う - 履歴データを整備する - バージョンの内容を説明するメタデータを整備する CI/CD - 品質を定義する - 品質チェックの工程を自動化する - リリースサイクルに品質チェックの工程を組み込む
  6. © 2013 - 2022 Finatext Ltd. 6 バージョン管理

  7. © 2013 - 2022 Finatext Ltd. 7 やりたいこと: 顧客に日次伝送しているデータの互換性を担保したい ナウキャストのデータパイプラインの概要

    出力データ オペレーターによる アノテーション POS/クレジットカードデータ ETL処理 マスタデータ (ブランド名/業種名など)
  8. © 2013 - 2022 Finatext Ltd. 8 やりたいこと: 顧客に日次伝送しているデータの互換性を担保したい ナウキャストのデータパイプラインの概要

    出力データ オペレーターによる アノテーション POS/クレジットカードデータ ETL処理 マスタデータ (ブランド名/業種名など) どれか一つでも変われば出力データも変わってしまう
  9. © 2013 - 2022 Finatext Ltd. 9 ①: 依存関係を洗い出しバージョン管理を行う 出力データver

    3-5 3-6 3-7 … 入力データver 1-1 1-1 1-1 … アノテーションver 5-7 5-8 5-8 … マスタデータver 3-0 3-1 3-1 … ETLver 2-4-3 2-4-3 3-1-2 … 出力に影響を与えうるリソースを洗い出し, それぞれをバージョン管理する
  10. © 2013 - 2022 Finatext Ltd. 10 ②: 履歴データを整備する 変更され得るデータについて,

    任意の時点の状態を復元出来るようにする バージョン管理とは、一つのファイルやファイルの集合に対して 時間とと もに加えられていく変更を記録する システムで、後で特定バージョンを呼 び出すことができるようにするためのものです。 1.1 Getting Started - About Version Control バージョン管理のためには変更前後のデータを履歴として管理する必要がある ナウキャストの場合: アノテーションやマスタデータは日々改善され変更されている
  11. © 2013 - 2022 Finatext Ltd. 11 ②: 履歴データを整備する -

    現状の実装方式: Slowly Changing Dimension Type 2 - 欠点: - クエリが複雑化する - データの整合性を保証しにくい store name industry from_date to_date 隅田酒屋 酒屋 2010-01-01 2020-08-20 隅田酒屋 日本酒屋 2020-08-21 2022-02-16 隅田酒屋 日本酒バー 2022-02-17 NULL - 今後の展望: 履歴データの管理はなるべく自前実装ではなく製品に頼りたい - SQL Server 2016やMariaDB10.3.4などでサポートされたTemporal Database - SnowFlakeやDeltaLakeのTime Traveling - ここらへん使ってる人いたら意見を聞きたい - 今後使ってみて良さそうならDataOpsNight#2で紹介するかも 有効期限を表すカラムを追加する
  12. © 2013 - 2022 Finatext Ltd. 12 ③: バージョンの内容を説明するメタデータを整備する 利用者がバージョン差分の内容を理解し適切に使い分けるためにメタデータが必要

    ナウキャストで整備しているメタデータ - Release Note - 変更のおおまかな概要を自然言語で説明 - Dependency - データを生成するために使用されるデータやコードのバージョン(スライド9で紹介) - Quality Report - 変更による品質への影響を評価したレポートへのリンク - CI/CD編でもう少し詳しく紹介します
  13. © 2013 - 2022 Finatext Ltd. 13 CI/CD

  14. © 2013 - 2022 Finatext Ltd. 14 やりたいこと: 品質とスピードを両立するための仕組みが作りたい アナロジー:

    PRを開けるとユニットテストが回り, failするとmergeが防止される
  15. © 2013 - 2022 Finatext Ltd. 15 ①: 品質を定義する データの品質はユースケースに依存して決まる

    Data is of high quality to the degree that it meets the expectations and needs of data consumers … Data quality is thus dependent on context and on the needs of the data consumer. (DMBOK2 450p) Dimensions include some characteristics that can be measured objectively (completeness, validity, format, conformity) and others that depend on heavily context or on subjective interpretation (usability, reliability, reputation). (DMBOK2 458p) - 一般的なデータ品質 - 重複/欠損/フォーマットの妥当性/参照整合性など - 基本的には自動チェックが可能 - ライブラリも充実している(dbt, great expectations, etc) - ユースケース依存のデータ品質 - 自動的/客観的に計測可能なものもあれば, 主観的/人手による評価が必要なケースもある - 例: 機械学習モデルの評価指標(自動/客観) vs 推論結果の解釈性(主観/人手)
  16. © 2013 - 2022 Finatext Ltd. 16 ①: 品質を定義する ナウキャストにおける品質:

    企業売上との比較などを総合的に加味して品質を評価する 企業毎に捉えられる売上セグメントや評価の観点が異なる →ドメイン知識や人間による解釈が必須
  17. © 2013 - 2022 Finatext Ltd. 17 ②: 品質チェックの工程を可能な限り自動化する 品質を評価する方法を確定し,

    自動化する アノテーションを更新 → 自動で評価レポートが作成される アノテーション前後比較やバージョン間比較などの品 質チェックが高速に行える ※サンプル
  18. © 2013 - 2022 Finatext Ltd. 18 ③: リリースサイクルに品質チェック工程を組み込む データのリリース前に必ず品質チェックが完了していることを保証する仕組みを作る

    評価レポートレビュー 新バージョンリリース アノテーションを改善 Reject Accept バージョンメタデータのレ ビュー Accept ナウキャストのアノテーションデータのリリースサイクル
  19. © 2013 - 2022 Finatext Ltd. 19 End

  20. © 2013 - 2022 Finatext Ltd. 20 Appendix

  21. © 2013 - 2022 Finatext Ltd. 21 バージョン管理の目的/対象を明確にする "データのバージョン管理"という言葉は曖昧性が高い →

    まずはコンテキスト毎にバージョン管理の目的/対象を明確化すべき. 参考: https://www.rd-alliance.org/group/data-versioning-wg/outcomes/versioning-data-about-more-revisions-conceptual-framework-and 例えば... - バージョンが同じとは: ファイルがバイトストリームとして同じ - 目的: 機械学習モデルの評価指標を再現出来るようにしたい - 対象: train/validation/testデータ - バージョンが同じとは: データを生成したデータパイプラインのバージョンが同じ - 目的: 日々生成されるデータに依存しているアプリケーションにデータの互換性を担保したい - 対象: データパイプライン その他, ブランチやマージの機能(コラボレーション)とかを念頭に置いているかもしれない
  22. © 2013 - 2022 Finatext Ltd. 22 参考: Off-the-shelf tools

    データのバージョン管理用のツールは色々出ている 個人的にはeasyよりsimple派なので今は使っていないが, メリットが大きそうなら将来的には使うかも? - Data Version Control - データのハッシュをプレースホルダーとしてgitにコミットする方式 - git管理下のファイルシステムで完結することが前提となる - 機械学習向け - Dolt - データベースに対してadd, commit, diff, branch, mergeなどgit感覚でデータ管理が可能 - 今後アノテーションデータの管理などに使うかも? - 参考資料 - Doltのサーベイブログ - データベースをgit感覚で扱えるのはDoltだけ - Neptuneのブログ - MLOps回りでDVCと似た機能を提供するツールはたくさんある
  23. © 2013 - 2022 Finatext Ltd. 23 参考: 履歴データまわりの資料 履歴を持ったテーブルの設計

    - Qiita https://yizhiyue.me/2019/09/17/design-a-table-to-keep-historical-changes-in-database https://davenathanaeld.medium.com/database-design-revisions-c91d63400bc1 https://stackoverflow.com/questions/3874199/how-to-store-historical-data https://softwareengineering.stackexchange.com/questions/156220/ways-to-have-a-history-of-changes-of-databa se-entries https://dba.stackexchange.com/questions/114580/best-way-to-design-a-database-and-table-to-keep-records-of- changes https://stackoverflow.com/questions/201527/best-design-for-a-changelog-auditing-database-table
  24. © 2013 - 2022 Finatext Ltd. 24 余談: 科学における"再現性の危機"とデータのバージョン管理 データのバージョン管理について標準化に向け色々と取り組みが行わ

    れているらしい Data versioning - ANDS Dataset Exchange Working Group (DXWG) DataCite Metadata Schema 未だ標準的なベストプラクティスは確立されていない模様 .