Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

メルペイにおけるプロダクトKPI改善のための Machine Learning Architecture

こんにちは。メルペイ Machine Learning Team の @dama_yu です。
本記事では、メルペイの Machine Learning Team におけるプロダクト改善を加速させるための、機械学習基盤について紹介します。

背景

メルペイでは、最近、社内の課題をデータサイエンスを用いて解決するための組織である、Machine Learning Team が設立されました。 チームが注力していく課題としては主に、信用スコア、不正検知、レコメンデーションが挙げられます。

メルペイ Machine Learning Team では、個人プレーになりがちなデータサイエンス系プロダクト開発を、
チームでスムーズに行うことができるよう意識した、機械学習基盤開発に取り組んでいます。
その取り組みについて、本記事では説明していきたいと思います。
(この基盤が実装されているプロダクトに関する詳細は事業上の都合で割愛しています)

プロダクトKPI改善 のための Machine Learning Architecture

まず、メルペイにおいて採用している Machine Learning Architecture の特徴は、以下のようなものです。

  • モデルを改善した際の、プロダクトKPI (ビジネスサイド寄りの)がウォッチしやすい
  • チームでの開発がスムーズにまわる
  • デプロイ、学習、評価といった各フローが出来る限り自動化されている

以上のポイントを踏まえた、Architecture の概略図を示します。

f:id:dama_yu:20180828153201p:plain

さきほど述べたポイントと、この Architecture を絡めて、解説していきます。

モデルを改善した際の、プロダクトKPI (ビジネスサイド寄りの)がウォッチしやすい

モデルを改善したとき、プロダクトの KPI (例えば、売上など)がどのくらい変わるのか?
を簡単に確認できるように、Architecture の一部に、モデル更新後の想定KPIを自動で計算する機能 (evaluation) を導入しています。

チームでの開発がスムーズにまわる

モデルを特徴量に追加する際は、既存の最良のモデルのfeature code pipeline に、数行を追加するだけでよいように設計されています。
また、Architecture の各フローが共通化されているため、属人性が極力入り込まないような仕組みになっています。

デプロイ、学習、評価といった各フローが出来る限り自動化されている

OSS の Continuous Delivery Platform である Spinnaker を用いて、以下のパイプラインを実装しています。

  • CircleCI で Docker image を Google Container Registry に push
  • push された Google Container Registry 上の Docker image を Google Kubernetes Engine へ deploy
  • deploy が正常に完了したら、モデルの学習と評価を実行

機械学習エンジニアが行う作業は、特徴量追加の Pull Request を作るだけです。

ちなみに、この Architecture の設計の際には、
機械学習開発にありがちな課題を解決した、メルカリでの機械学習基盤を参考にしています。
メルカリでの機械学習開発の進展については、この記事 を読んでもらえれば背景がわかると思います。

実際のプロダクト開発のフローについて

上記の Machine Learning Architecture を用いて、実際にどのようにチーム開発を実施しているかを説明します。
チーム開発のフローについては、おおまかに以下のようになっています。

  1. 分析環境で探索型データ分析 (EDA)
    仮説検証と探索型分析を行き来し、有効な特徴量を探す
  2. EDA で見つけた特徴量をモデルに組み込み、training → evaluation を実行する
  3. evaluation で良い結果が出たら、Production Code に Pull Request を作成
  4. 自動で training → evaluation が実行され、 Slack に 評価結果が通知される
  5. 評価結果が正しいことを確認&コードレビュー のあと、 Pull Request を merge して、モデル更新が完了

学習や評価など、各フローをモジュール化して共通で使用するため、
各メンバーはこのフローに従って開発を行うだけで、チームとしてスムーズにプロダクト改善のPDCAをまわすことができるようになります。

まとめ

本記事では、メルペイ Machine Learning Team におけるプロダクトKPI改善を見据えた機械学習基盤や、チーム開発のフローについて紹介しました。
紹介した基盤や開発体制については、まだまだ発展途上なので、 弊チームでは、機械学習エンジニアを絶賛募集中です!!
[merpay]ソフトウェアエンジニア(Machine Learning)
[merpay]エンジニアリングマネージャー(Machine Learning)