Slide 1

Slide 1 text

ෆಈ࢈৘ใαΠτʹ͓͚Δ σʔλऩूͰؤுͬͨ͜ͱ💪 Jagu'e'r データ利活⽤分科会 Data Journey: データ収集 2024.02.15

Slide 2

Slide 2 text

⽬次 1. ⾃⼰紹介/弊社紹介 2. 本⽇話すこと/話さないこと 3. 分析基盤のシステム構成 4. 収集データ⼀覧 5. 収集元別 頑張ったこと 6. まとめ

Slide 3

Slide 3 text

⾃⼰紹介 杉⼭ 隆(Takashi Sugiyama) 3 • 所属 • 株式会社Red Frasco • 職種 • データエンジニア/MLエンジニア • 技術 • Google Cloud, Python, Golang • よく使うGCPサービス • Cloud Composer, Dataflow, Dataproc, BigQuery, ... • 趣味 • バスケットボール🏀, ガンダム🆓, ...

Slide 4

Slide 4 text

株式会社Red Frasco • https://www.red-frasco.com/ • 不動産業界に特化したプロダクト開発・集客⽀援を実施 • 今回はとある 賃貸不動産情報サイトのデータ分析基盤 のお話 4

Slide 5

Slide 5 text

本⽇話すこと/話さないこと • 話すこと • 弊社データ分析基盤内のデータ収集(データパイプライン)の仕組み • 収集⽅法、頑張ったこと・・・等 • 話さないこと • データ分析基盤のその他の仕組み • データ加⼯、データ可視化、データ活⽤・・・等 5

Slide 6

Slide 6 text

お願い 6 いいね︕と思ったら褒めてください︕ 👏👏👏

Slide 7

Slide 7 text

分析基盤のシステム構成(1/2) 全体構成 7

Slide 8

Slide 8 text

分析基盤のシステム構成(2/2) 本⽇話す内容はここ︕ 8

Slide 9

Slide 9 text

収集元別 収集データ⼀覧 9 No. 収集元 収集先 収集⽅法 データ例 1 Google アナリティクス BigQuery BigQuery Export 機能 アクセスログ 2 Cloud Storage BigQuery Cloud Composer システムデータ 3 Google スプレッドシート BigQuery 外部テーブル, Cloud Composer 集客実績 4 Web API BigQuery Cloud Composer 成約データ 5 FTP サーバ BigQuery Cloud Composer 会計データ 6 アドレポ © YRGLM Inc. BigQuery BigQuery 出⼒機能 広告データ 7 リアルタイムデータ(※) BigQuery Cloud Run, Pub/Sub アクセスログ ※⼀部 前回登壇資料 と内容が重複します。ご容赦ください。

Slide 10

Slide 10 text

収集元別 頑張ったこと – Cloud Composer 全般(1/3) • なぜ Cloud Composer を使っているのか • Python でワークフローを実装するため、収集元がどのようなもので あってもだいたい対応できる • 複雑な条件分岐に対応 • Sensor オペレータにより、収集元の処理が遅れても処理の続⾏が可能 • 例: Cloud Storage にファイルが置かれるまで⼀定時間待つ • GUIが分かりやすい 10

Slide 11

Slide 11 text

収集元別 頑張ったこと – Cloud Composer 全般(2/3) • 再取り込みを考慮 • 再取り込みをしてもデータが重複しないよう、WRITE_TRUNCATE や DELETE/INSERT を⾏っている 11 ※対象のテーブルが存在、かつレコードがあったら削除

Slide 12

Slide 12 text

収集元別 頑張ったこと – Cloud Composer 全般(3/3) • 再取り込みを考慮 • 環境変数で⽇付を指定することで、特定⽇のデータを取得可能に している 12 ※環境変数「BASE_DATE」が存在すればそちらを、存在しなければ当⽇の⽇付を 取り込み対象にする

Slide 13

Slide 13 text

収集元別 頑張ったこと – Google アナリティクス • BigQuery Export のログ監視を⾏う • BigQuery Export は⾃動でエクスポートしてくれる便利な機能ではあ るが、念のため Cloud Logging でログ監視を⾏う • フィルタ条件(GA4 の場合) 13 ※ 4⾏⽬の条件は、毎回データセットを作成しようとしてエラーになっているログを 除外するため(GA4 は最近作成しなくなった︖)

Slide 14

Slide 14 text

収集元別 頑張ったこと – Google スプレッドシート • スナップショット • データは更新されることがあるため、「外部テーブル」 +「Cloud Composer からのクエリ実⾏結果を保存」で スナップショットを保存 14

Slide 15

Slide 15 text

収集元別 頑張ったこと – Web API / FTP サーバ • egress IP を固定 • Web API 側でグローバル IP 制限が設定されている場合を考慮し、 Cloud NAT を使⽤して egress(下り)の IP アドレスを固定 15

Slide 16

Slide 16 text

収集元別 頑張ったこと – Web API • GA4 のデータも API で取得 • Analytics Data API を使⽤ • 即時性や、BigQuery Export されたデータの⼀部がWeb管理画⾯と 異なっていたため 16

Slide 17

Slide 17 text

収集元別 頑張ったこと – FTP サーバ • Python でオペレータを実装 • SFTP だと Airflow のオペレータがある・・・ 17

Slide 18

Slide 18 text

収集元別 頑張ったこと – アドレポ • 便利︕ • https://ad-repo.com/ • ステマではありません 18

Slide 19

Slide 19 text

なぜリアルタイムデータが必要なのか(1/2) • 賃貸不動産情報サイトにおけるユーザーの⾏動パターン • ほとんどのユーザは初回訪問でコンバージョン(Web での問い合わせ 等)する • そのためセッション内での訴求が重要となり、⾏動ログ等のユーザ データをリアルタイムで取得、さらにセッション内の⾏動を計測でき るようにすることが望まれる 19

Slide 20

Slide 20 text

なぜリアルタイムデータが必要なのか(2/2) • Google アナリティクスでは要件を満たせなかった • BigQuery Export 機能 • エクスポートされるタイミングが遅い(要件定義時は翌⽇午後) • 最近早くなってきた(翌⽇早朝)が、それでも要件を満たしていない • ストリーミングエクスポート機能 • 翌⽇以降にエクスポートされたレコードと⽐較すると、2〜3割程度のレコード⽋ 損がある︖(※今回の対象サイトだけかもしれません。ご参考まで。) • 将来的には GA からリアルタイムデータへの移⾏を検討 • UA → GA4 の移⾏に伴う作業が⼤変だった・・・ 20

Slide 21

Slide 21 text

収集元別 頑張ったこと – リアルタイムデータ(1/3) • ログを取得する仕組みは API で提供 • アプリケーション側に極⼒⼿が⼊らないように • 開発チームとの分離 • バックエンドは Cloud Run で構築 • 運⽤が楽︕ 21

Slide 22

Slide 22 text

収集元別 頑張ったこと – リアルタイムデータ(2/3) • ログの保存先は2つ • Cloud Run → Bigtable • ログをすぐに利⽤したい場合の保存先 • 過去2⽇分を保存 • Cloud Run → Pub/Sub → Dataflow → BigQuery • 通常利⽤の保存先 • 過去分全てを保存 22

Slide 23

Slide 23 text

収集元別 頑張ったこと – リアルタイムデータ(3/3) • 当初は Bigtable ではなく Firestore を利⽤していたが 書き込みエラーが多く出たため変更 • エラー原因は結局分からず・・・ • 「500/50/5」ルールはきちんと守っていた・・・はず・・・ 23

Slide 24

Slide 24 text

まとめ • データ収集で頑張ったことを説明させていただきました • 主に Cloud Composer について • その他の機能も機会があれば話させてください︕ • Embedding を使⽤した Item-to-Item レコメンド • Redash on GKE・・・等 24

Slide 25

Slide 25 text

Thanks for listening!