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

事業に寄り添うデータ基盤の育て方

 事業に寄り添うデータ基盤の育て方

2018/02/15 @ Developers Summit 2018
15-C-2セッション「事業に寄り添うデータ基盤の育て方」

Livesense Inc.

February 15, 2018
Tweet

More Decks by Livesense Inc.

Other Decks in Technology

Transcript

  1. 自己紹介 名前 / ID 田中 祥太郎 / @yubessy 所属 株式会社リブセンス

    テクノロジカルマーケティング部 データプラットフォームグループ 仕事 データエンジニア 機械学習エンジニア
  2. Livesense Analytics 各サービスのデータを Amazon Redshift に集約 • アプリケーションデータ • Web・アプリ・メール等の行動ログ

    全社共通のデータウェアハウス (DWH) として提供 • KPIモニタリング・施策効果分析 • 機械学習システムのデータソース リブセンスのデータ分析基盤の全貌
  3. Livesense Brain 各サービスの機械学習システムを Google Kubernetes Engine に集約(開発中) • 求人レコメンドエンジン •

    求人効果予測モデル 複数システムから使えるよう機能モジュールを共通化 • レコメンドアルゴリズム・モニタリング • ABテスト・バンディット Kubernetes を利用したコンテナベース機械学習基盤の構築
  4. 基盤があればデータ活用がうまくいく? 基盤があるだけで サービスが便利になる → NO 〃 事業が成長する   → NO

    〃 人の生産性が上がる → NO データ基盤を作る前にデータ活用の風土・文化づくりが必要 営業さんまで、社員全員がSQLを使う越境型組織ができるまでの3+1のポイント 基盤に求めることは組織によって異なる ただ、ある程度の考え方は共通する(と思っています)
  5. OSSやXaaSを使うべき? BigQuery, Redshift, TreasureData, …. 良いものは積極的に使うべき → YES あれば何も作らなくてよい →

    NO 既存のものを使うだけでは上手くいかない場合: • 事業ニーズを満たすOSSやXaaSが存在しない • 周辺システムやグルー処理に高度なエンジニアリングが必要
  6. 事例 求人レコメンド リブセンスの事業におけるレコメンド • 求人・不動産:(広告等に比べ)CV単価高・データ件数少 • 多少スケールしにくくても精度の高いアルゴリズムが有効 一般的なライブラリ・PaaS • Matrix

    Factorization のような一般的なアルゴリズム • スケーラビリティやレスポンスタイムを求められるがゆえの制約 事業ニーズを満たせない → アルゴリズムを論文から実装してモジュール化 BPMF(Bayesian Probabilistic Matrix Factorization)によるレコメンド
  7. 事例 個人情報マスキング 本番DB → DWH のデータ投入時にカラム単位で個人情報等をマスキング 要件: • 処理前後でのスキーマの二重管理を避けたい ◦

    カラムの削除ではなく値の上書きにしたい • データ同期の遅れを最小化したい ◦ カラム単位でのUPDATEを並列化したい システム間をつなぐ高度なグルー処理が必要 → CLIツールを開発 https://github.com/livesense-inc/split_mysql
  8. 事例 データ処理のワークフローエンジン選定 Livesense Analytics 2016頃から Apache Airflow を採用 Livesense Brain

    2017秋から開発、2016頃と状況が変化 • digdagなどの新たなOSSの台頭 • Kubernetesを採用 ◦ 各タスクを別コンテナや別Podで動かしたい ◦ ジョブのキックはCronJobでOK → タスクの依存管理に集中したい → 標準の選定は先送りし、Luigi + CronJob による簡易実装にとどめる 個人的には argoproj / argo に期待してます
  9. 再掲 基盤があればデータ活用がうまくいく? 基盤があるだけで サービスが便利になる → NO 〃 事業が成長する   →

    NO 〃 人の生産性が上がる → NO データ基盤が成果を挙げるには・・・ • 開発開始前:データ活用の風土・文化を育てる • 開発開始後:事業組織と一緒に成功パターンを見出していく
  10. 事例 Redshift サマリテーブル マッハバイトでの Livesense Analytics 活用 • 1PV単位での生ログを Redshift

    に保存 • 頑張れば応募経路の分析もできる • 百行以上のSQLを操るディレクターさん → マッハバイト専用にサマリテーブルを先行実装 • 1応募単位でのPV数や滞在時間・流入経路 • アトリビューションモデルによる広告効果分析 後に他事業部にも展開 WITH ss AS ( SELECT TO_NUMBER(REGEXP_SUBSTR(s.landing_url,'\\d+'),'000000') AS client_id, TO_CHAR(s.start_time,'YYYY-MM-DD') AS date, s.session_id, s.total_entry, s.total_hit, s.stay_time, CASE WHEN s.device = 'smartphone' THEN 'sp' ELSE 'pc' END AS device FROM js.sessions AS s WHERE s.start_time >= '2016-07-01' AND s.channel_type = 'organic' AND s.source != 'Indeed' AND s.landing_page_type = 'detail' AND s.device IN ('pc', 'smartphone') ) SELECT ss.date, ss.device, COUNT(ss.session_id) AS sessions, SUM(ss.total_entry) AS entries, 1.0 * SUM(ss.total_entry) / COUNT(ss.session_id) AS entry_rate, 1.0 * SUM(CASE WHEN ss.total_hit = 1 THEN 1 ELSE 0 END) / COUNT(ss.session_id) AS bounce_rate, AVG(ss.stay_time) AS avg_stay_time FROM ss LEFT JOIN ( SELECT TRUNC(ca.ddate) AS date, ca.id, ca.plan FROM jsen_archive.client_archives AS ca WHERE ca.ddate >= '2016-07-01') AS ca_plan ON ca_plan.id = ss.client_id AND ca_plan.date = ss.date GROUP BY
  11. Livesense Brain で稼働するシステムのフェーズ分類(策定中) ※SLO (サービスレベル目標) = 可用性や復旧時間などの目標 どのシステムがどのフェーズに属するかを事前に決めることで 関係者の間のサービスレベルの認識の不一致を防ぐ 事例

    機械学習システムのフェーズ定義 フェーズ 目的 SLO 基盤エンジニアの役割 コンセプト検証 実現性の調査・検討 なし リソース提供・セキュリティ上の確認のみ 技術検証 最適な手段の模索 なし 技術的な助言・実環境検証の補助 本運用 継続的な価値提供 あり 安定性・メンテナンス性のレビューと承認