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

ウォンテッドリーのプロダクト開発における Python の開発・運用環境

chimuichimu
June 20, 2024
1k

ウォンテッドリーのプロダクト開発における Python の開発・運用環境

chimuichimu

June 20, 2024
Tweet

Transcript

  1. 自己紹介 © 2024 Wantedly, Inc. 名前: 市村 千晃 (Ichimura Chiaki)

    所属と役割: • ウォンテッドリー株式会社 (2024/3 ~) • データサイエンティスト • 推薦システムの開発、運用に従事 @chimuichimu1
  2. お話しすること © 2024 Wantedly, Inc. • ウォンテッドリーの推薦システムが Python を用いてどう実現されているか? •

    ウォンテッドリーのデータサイエンティストが、 Python を用いてどのようなプロセスで開発・運 用しているか?
  3. © 2024 Wantedly, Inc. 推薦を作成するための機械学習ジョブ Python で実装された機械学習ジョブを開発・運用 • バッチ処理を定期実行し、ユーザー、企業向けの推薦を BigQuery

    に保存 • 経路ごとに推薦を作成するため複数の Python ジョブが稼働している ランキング BigQuery 機械学習ジョブ Amazon EKS ロード 保存 Cloud Storage 募集A 募集B 募集C 募集D スコア順に 推薦を提示 前処理 学習 推論 BigQuery Cloud Storage
  4. © 2024 Wantedly, Inc. ジョブの高速化による開発、運用効率の向上 - 課題感 なぜジョブの高速化が重要か? • 一般に機械学習を用いた推薦では、ユーザーの行動ログなどの膨大なデータを扱うた

    め、データのロード、前処理、モデルの学習に時間がかかる • ジョブの実行に時間がかかると以下のような問題が発生しうる ◦ 推薦アルゴリズム改善のための実験の効率が下がる ◦ マシンリソースなどのコストが増大する
  5. © 2024 Wantedly, Inc. ジョブの高速化による開発、運用効率の向上 - 解決策と得られた効果 ① 並列処理などによるデータロードの高速化 •

    BigQuery からのデータ取得を Python の multiprocessing で並列化 • BigQuery (in US) のデータを GCS (in Tokyo) を経由して取得するように変更 ref: 機械学習ジョブの高速化による開発効率の向上 データロードにかかる時間を 1.5 時間 -> 数分に短縮
  6. © 2024 Wantedly, Inc. ジョブの高速化による開発、運用効率の向上 - 解決策と得られた効果 ② Polars によるデータ前処理の高速化

    • もともとはデータ前処理に pandas を利用 • 処理時間の大きい処理を Polars(= Rust で書かれ た高速なデータ処理ライブラリ)に変更 特に時間がかかっていた処理を 50分 -> 1分に短縮 Before: pandas の apply メソッドによる処理 After: Polars のエクスプレッションによる処理 ref: 機械学習ジョブの高速化による開発効率の向上
  7. © 2024 Wantedly, Inc. Feature Store 導入による推薦精度の改善 - 課題感 予測直前のデータを活用できないという課題

    • データを時系列に分割してユーザーの行動を予 測するモデルを学習していた • 3 week の行動ログと 1 week の応募から応募 予測のモデルを学習するイメージ • 課題:1 week 内の直前の行動ログから計算され る特徴量をモデルの学習に含められない ref1:Feature Storeを活用して最新のデータを学習時に取り込むことによる推薦システムの改善 ref2:WantedlyでFeature Storeを導入する際に考えたこと 行動ログの収集期間 (3 week) 応募行動の収集期間 (1 week) モデル学習の入力に 利用可 モデル学習の入力に 利用不可 応募
  8. © 2024 Wantedly, Inc. Feature Store 導入による推薦精度の改善 - 課題感 予測直前のデータを活用できないという課題

    直前の行動ログまで含めた特徴量を作るのがなぜ難しいのか? • これの実現には「各日付の断面」で計算された特徴量が必要 • 特徴量計算をモデル学習と同じジョブで行う従来の仕様では、計算コストが大きい ref1:Feature Storeを活用して最新のデータを学習時に取り込むことによる推薦システムの改善 ref2:WantedlyでFeature Storeを導入する際に考えたこと これまで やりたいこと この日断面の 特徴量があればよい 複数日の断面での 特徴量が必要
  9. © 2024 Wantedly, Inc. Feature Store 導入による推薦精度の改善 - 解決策 Feature

    Store の導入 • Feature Store とは? ◦ 機械学習のための特徴量データを計算、保存、共有するためのシステム • Wantedly Visit における Feature Store の主な役割 ◦ 特徴量を定期的に計算し、保存する ◦ 保存した特徴量を複数の機械学習ジョブに提供する ref1:Feature Storeを活用して最新のデータを学習時に取り込むことによる推薦システムの改善 ref2:WantedlyでFeature Storeを導入する際に考えたこと
  10. © 2024 Wantedly, Inc. Feature Store 導入による推薦精度の改善 - 解決策 Feature

    Store の導入 ref1:Feature Storeを活用して最新のデータを学習時に取り込むことによる推薦システムの改善 ref2:WantedlyでFeature Storeを導入する際に考えたこと BigQuery 機械学習ジョブ ロード 保存 前処理 学習 推論 機械学習ジョブ ロード 保存 学習 推論 Feature Store ロード 保存 前処理 Before After 前処理 ジョブから特徴量処理を分離 定期実行の結果を BigQuery に保存
  11. © 2024 Wantedly, Inc. Feature Store 導入による推薦精度の改善 - 得られた効果 推薦精度の改善

    ref1:Feature Storeを活用して最新のデータを学習時に取り込むことによる推薦システムの改善 ref2:WantedlyでFeature Storeを導入する際に考えたこと • ユーザー毎に最新の情報に基づいた特徴量を紐づけてモデルを学習できるようになり、 主要 KPI が大きく改善 • 推薦精度の改善以外にも、特徴量処理を一元的に管理することで スケーラビリティが向上
  12. © 2024 Wantedly, Inc. 開発フロー © 2024 Wantedly, Inc. ref:

    WANTEDLY TECH BOOK 13 「ウォンテッドリーにおける推薦システム開発の流れ」 問題提議 仮説立案 設計 実装 オフライン評 価 オンラインテ スト 運用 Wantedlyのデータサイエンティストの開発フロー • プロダクトの問題設定に始まり、仮説立案・設計を行う • 実際の推薦をおこなうランキングジョブの実装 • オフライン評価によってオンラインテスト前に良し悪しを評価 • 実際にオンラインテストで期待通り指標が向上するか確認 • 全体リリース後の運用・指標のモニタリングを通じて問題設定、開発を繰り返す
  13. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. 1. 10年以上運営しているサービスなので必要なデータの多くはすでに蓄積済み

    • 「機械学習したいけどデータがない」ことは基本的にない • 施策ごとに最適と思われるデータを判断し利用できる 2. 問題定義から実装・リリースまで ほとんどをデータサイエンティストだけで実施 • 効率面だけでなく推薦機能の改善での成果を実感しやすいメリット 3. リリース・運用のフローが形式化されているので、データサイエンティストが推薦精度改善 に集中できる • 良い意味で推薦が他の機能から切り離されており、得意ではない技術領域を触る必 要性や、関係者との調整が主業務になることがない Wantedly データサイエンス組織での開発の特徴 問題提議 仮説立案 設計 実装 オフライン評 価 オンラインテ スト 運用 基本的にデータサイエンティストが全て実施
  14. © 2024 Wantedly, Inc. 開発・運用プロセスに関する工夫や取り組み • ツールの活用による開発生産性の向上 ◦ Recommendation Evaluator

    を用いた評価プロセスの効率化 ◦ SARA による k8s 上での Python 開発体験 • 推薦改善の施策以外の活動 ◦ 負債返済日 ◦ DS 業務改善
  15. © 2024 Wantedly, Inc. 開発・運用プロセスに関する工夫や取り組み • ツールの活用による開発生産性の向上 ◦ Recommendation Evaluator

    を用いた評価プロセスの効率化 ◦ SARA による k8s 上での Python 開発体験 • 推薦改善の施策以外の活動 ◦ 負債返済日 ◦ DS 業務改善
  16. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. ツールの活用による開発生産性の向上 -

    前提 推薦施策の開発フローを高速に回すことの重要性 • 最終的な答えを持つのはユーザー。施策が成功するかどうかは不確実性が大きい • 不確実性がある中で推薦施策によるビジネスインパクトを継続的に出すためには、実験の質 と効率を上げる必要性がある ◦ 実験の質:ユーザーの課題や悩みの解像度を上げる、解決策の質を上げる、施策がう まくいかなくても得られた学びを次に活かす ◦ 実験の効率:仮説立案からユーザーに提供するまでのリードタイムを短くする
  17. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. ref: ウォンテッドリーにおける推薦システムのオフライン評価の仕組み

    ツールの活用による開発生産性の向上 - Recomendation Evaluator 内製ツールの利用によるオフライン評価の効率化 • オフライン評価用の Recommendation Evaluator というツールを Python で内製 • 新しい推薦と実際に本番で出ている推薦の比較が config の設定だけで実行可能
  18. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. ツールの活用による開発生産性の向上 -

    SARA k8s リソースを使ったシームレスな Python 開発体験 • ローカル PC に大量の計算リソースが存在するかのような開発体験を提供する SARA (Seamless Accesible Resource Allocator) というツールを内製 • ローカル PC から `sara start …` とコマンドを打つだけで、以下が自動で行われる ◦ ローカル PC の Dockerfile から k8s のポッドを作成 ◦ 永続ボリュームの割り当て ◦ ローカル PC からリソースにアクセスするための SSH 設定
  19. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. ツールの活用による開発生産性の向上 -

    SARA k8s リソースを使ったシームレスな Python 開発体験 SARA を使うことで嬉しいこと • 開発環境がコマンド一つですぐに準備できる(〜数十秒) • ローカル PC の環境や計算リソースに依存せずに開発が行える • 必要な計算リソースを必要な分だけ柔軟に設定できる
  20. © 2024 Wantedly, Inc. 開発・運用プロセスに関する工夫や取り組み • ツールの活用による開発生産性の向上 ◦ Recommendation Evaluator

    を用いた評価プロセスの効率化 ◦ SARA による k8s 上での Python 開発体験 • 推薦改善の施策以外の活動 ◦ 負債返済日 ◦ DS 業務改善
  21. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. 推薦改善の施策以外の活動 -

    負債返済日 技術負債の返済による中長期的なシステム改善 • ウォンテッドリーのエンジニアは月に 1日、負債返済日として「普段あまり優先度が上がらない が、やったほうがいいこと」に取り組む • DS チームの負債返済の取り組み例 ◦ Python, ライブラリのバージョンアップ ◦ 機械学習ジョブの高速化 ◦ pandas -> Polars のリファクタリング ◦ 推薦のモニタリングダッシュボードの改善
  22. © 2024 Wantedly, Inc. © 2024 Wantedly, Inc. 推薦改善の施策以外の活動 -

    DS 業務改善 推薦施策の開発生産性を向上するための取り組み • 推薦施策の開発フローの質と効率を改善するために、施策とは別の活動としてリソースを割 いて取り組んでいる • 取り組みの例 ◦ 推薦の評価設計のドキュメント整備 ◦ Recommendation Evaluator の改善
  23. © 2024 Wantedly, Inc. まとめ • ウォンテッドリーでは人と仕事のマッチングを実現するため、推薦システムを Python を使っ て開発、運用している

    • 推薦を作成する機械学習ジョブは、 Feature Store の活用や高速なジョブ実行により、膨大 な数のユーザーに対して効果的なパーソナライズを実現している • また開発生産性の向上のため、 Python ツールの内製や技術負債の返済などにも力を入れ て取り組んでいる