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

dbtを中心に据えた データ分析とプロダクト開発

Osuke
November 11, 2022

dbtを中心に据えた データ分析とプロダクト開発

Osuke

November 11, 2022
Tweet

More Decks by Osuke

Other Decks in Technology

Transcript

  1. 2 CONFIDENTIAL: © LayerX Inc. 自己紹介 • Osuke(須藤 欧佑) •

    Privacy Tech事業部 リードエンジニア • ソフトウェアエンジニアとしてプロダクト開 発、データエンジニア兼アナリティクスエンジ ニアとしてデータ基盤の整備・運用あたりをメ インに取り組んでいます。
  2. 5 CONFIDENTIAL: © LayerX Inc. 平均年収:800万円 平均年収:799.9万円 Aさん在籍時の合計年収 = 平均800万円

    * 51人 Aさん退職後の合計年収 = 平均799.9万円 * 50人 Aさんの年収 = 800 * 51 - 799.9 * 50 = 805万円 Aさん在籍時 (51名) Aさん退職後 (50名) ・・・・・・・・・・・・・ ・・・・・・・・・・・・・ たった1000円分の平均年収の 変化から、Aさんの給与がわ かってしまう プライバシー保護の難しさ • 統計情報だけを提供しても、差分から特定個人のデータが炙りだされてしまう • 1970年代(もしくはもっと前)から続く、長い研究の歴史 • 実際にはもっともっと色々なリスクがある!
  3. 6 CONFIDENTIAL: © LayerX Inc. 例:差分プライバシー • 機密なデータに基づく統計データに、プライバシーを保護するノイズを注入する • 誤差が発生するが、統計的な分析では活用できる

    年齢 性別 住所 年収 32 男性 東京都中央区 650万円 24 女性 神奈川県横浜市 600万円 56 男性 東京都中央区 1000万円 44 女性 千葉県松戸市 950万円 ノイズ付与後の 平均年収: 810万円 平均年収: 800万円 (真の値) 公開しない 元のデータの 復元困難 元のパーソナルデータ 差分プライバシー のアルゴリズム +10万円の ノイズを付与
  4. 11 CONFIDENTIAL: © LayerX Inc. データモデリング概要 • プライバシー保護のためのデータ分析 ◦ そのデータセットに存在しうるユーザーのプライバシーを保護するために必要な加工により誤差率

    などの有用性指標がどの程度になるか、などをさまざまなディメンションや指標の軸で分析する st0 データレイク st1 前処理 st2 ファクトテーブ ル st3 プライバシー保 護前処理 st4 プライバシー保 護・評価 st5 データマート 例:位置データ 社外 社内 社内分析者
  5. 12 CONFIDENTIAL: © LayerX Inc. データアプリケーション • ユーザーがユースケースに合わせて欲しい分析軸やパラメータを入力すると、それに合わせたプライバ シー保護評価の結果やプライバシー保護済みのデータが出力するWebアプリケーションを提供 st0

    データレイク st1 前処理 st2 ファクトテーブ ル st3 プライバシー保 護前処理 st4 プライバシー保 護・評価 st5 データマート 例:位置データ 社外 社内 社内分析者 社外分析者 データアプリケーション
  6. 14 CONFIDENTIAL: © LayerX Inc. クエリの共通化 • どちらもコアロジックとなるプライバシー保護関連の処理は「ほとんど」同じロジック • 管理するクエリは最小限にした方が品質担保的にも運用的にもメリットが大きい

    例:位置データ Data App 分析 dbt model dbt model dbt model SQL SQL dbt model dbt model dbt model SQL SQL 例:位置データ Data App 分析 dbt model dbt model dbt model SQL dbt model dbt model dbt model SQL
  7. 15 CONFIDENTIAL: © LayerX Inc. クエリの共通化 • SQLは”関数”としてdbtのmacroで定義 • 参照するdbt

    modelやパイプラインごとの差分は引数で設定可能なようにする Macros in Jinja are pieces of code that can be reused multiple times – they are analogous to "functions" in other programming languages, and are extremely useful if you find yourself repeating code across multiple models. https://docs.getdbt.com/docs/build/jinja-macros
  8. 18 CONFIDENTIAL: © LayerX Inc. 複数データソース • 実際には、さらにさまざまな企業からさまざまな種類のソースデータが存在 • 同様に、単一のmacroを利用しコアロジックは共通化

    位置データ Data App 分析 dbt model dbt model dbt model dbt model dbt model dbt model 決済データ Data App 分析 dbt model dbt model dbt model dbt model dbt model dbt model SQL 医療データ Data App 分析 dbt model dbt model dbt model dbt model dbt model dbt model SQL
  9. 20 CONFIDENTIAL: © LayerX Inc. テスト • 外部に分析したデータや加工データを提供するので、「データ」自体が商品であり、そこにデータの欠 陥・分析ミス・プライバシー保護加工のミスなどが含まれることはあってはならない。 •

    1ファイルで長いクエリはテストがしにくいので、ephemeralなどを使って細かくファイルは分けてお く。 ユニットテスト (クエリテスト) インテグレーションテスト (データテスト) クエリにより生成されたデータ自体に対するテスト。 その(継続的に変化しうる)データがその時点で意図 した必要条件を満たしているかテスト。 例: - ソースデータの欠損: nullが入るべきではないカラ ムの値がnullになっていないか - データの分布: 正規分布に従う乱数(ノイズ)を 加えた際、そのノイズの平均が0であることのz検 定 クエリ自体のロジックに対するテスト。 あるテーブルに対して実行したクエリが意図したデー タを出力しているか。 いわゆる、expectedとactualが一致していることをテ スト 例: - 単価1,000円以上の商品の購入数を集計する処理 で、1,000円という境界付近のレコードがある場 合・ない場合で意図した集計結果になるかテスト
  10. 21 CONFIDENTIAL: © LayerX Inc. テスト dbt seed etc. test

    case actual user area value a c 10 b d 20 SQL expected requirements SQL app_agg app_fact ユニットテスト (クエリテスト) インテグレーションテスト (データテスト)
  11. 23 CONFIDENTIAL: © LayerX Inc. • ただし、以下のようなトレードオフもある。 ◦ テストも含めたクエリ開発自体にかなり工数が取られる ◦

    データサイズが膨大になるとテストクエリの実行にコストがかかる ◦ 細かくテストを定義しすぎるとクエリ自体の変更が大変になる • とはいえ、データの品質担保はデータビジネスにおいて最重要であるのでテストテスト トレードオフ