DataRobot, Papermill, MLflowを活用した機械学習効率化とログ管理 | AIのプロが解説

流通・鉄道・通信業界のお客様を担当し、技術ではMLOpsテクノロジーを中心に扱っているデータサイエンティストの濱上です

DataRobotは実務担当者がモデリングからモデル運用まで行うための機械学習・AIプラットフォームとして知られていますが、データサイエンティスト（DS）の業務を加速するためのエンジンにもなります。

今回は、DS向けにDataRobot×Papermill×MLflowを使うことで、どれくらい業務を加速し、チーム内のコラボレーションを高められるのかを紹介します。[AIアクセラレーター](https://docs.datarobot.com/ja/docs/api/accelerators/adv-approaches/mlflow.html)に[サンプルコード](https://github.com/datarobot-community/ai-accelerators/tree/main/advanced_ml_and_api_approaches/MLFLOW_w_datarobot_experiments/)を公開していますので、実際にコードを動かしてもらえればその威力を感じていただけます。

## 機械学習モデル構築は実験の繰り返し
機械学習モデルのビジネス利用は、一回モデルを作成して終わりではありません。[Kaggle](https://www.kaggle.com)などのコンペティションでもトップクラスになるためには試行錯誤を自動化することが重要ですが、時間と共にデータが変わっていく実ビジネスでは、この試行錯誤を自動化することがより重要になってきます。データの変化に対応が遅れてしまうと、機械学習モデルのビジネス利用により得られるインパクトが消失してしまうからです。

試行錯誤の過程では、大量のコードとモデルとメトリクスが作成されます。これらのアセットの対応関係が明確にわかるように、実験ログを管理することもとても大切です。

## 試行錯誤の自動化とログ管理が成功への近道
試行錯誤の自動化や実験ログの管理ができていれば、データサイエンティスト（DS)が陥りがちな失敗を防ぐこともできます。

多くのデータサイエンティスト（DS）にとって、機械学習の実験はゲーム感覚で楽しい瞬間であり、精度が良いモデルを作るために時間を忘れてコーディングしたなんていう経験がある人も多いのではないでしょうか。しかし、機械学習に没頭しすぎて、もしくは1人のDSの力量に依存しすぎて、機械学習プロジェクトが失敗するケースが多々あります。以下の失敗例は、そんな失敗の一部を集めたものです。

![機械学習の実験過程で陥りがちな失敗例（新）.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/22fb1eda-4346-db27-e9d1-c9fe5ec2601b.png)
### 機械学習の実験過程の失敗例その１：再現性

- 膨大な試行錯誤により、実験ログの管理が疎かになり、モデルや出力結果を再現できない問題が発生
- 担当者が変更した際にログが残っておらず異常時に対応できないような最悪のケースも

### 機械学習の実験過程の失敗例その２：ヒューマンエラー

- コーディングはデータサイエンティストの経験や能力に依存するため、担当者レベルによってコードに技術的な誤りが発生することがある
- 経験のあるデータサイエンティストでも作業量が増えるほどヒューマンエラーによるミスが増える

### 機械学習の実験過程の失敗例その３：コスト管理

- モデル構築に膨大なリソースが発生し、投資対効果が悪化する
- モデル構築にリソースが偏り、課題定義やモデル運用の設計に投入するリソースが薄くなる

## DataRobot, Papermill, MLflowの連携による実験効率化とログ管理
それでは、本稿で紹介するDataRobot、 Papermill、MLflowがどのように上記課題を解決するか解説します。まず、それぞれの道具の概要です。

### データサイエンティストの道具その１：DataRobot

- [DataRobot](https://www.datarobot.com/jp/)は、データサイエンティスト（DS）や開発者が機械学習モデルを迅速に開発、デプロイ、管理できるように設計された包括的かつオープンなエンドツーエンドのAIライフサイクル・プラットフォームです。
- GUIベースの操作だけでなく、[Pythonクライアント](https://datarobot-public-api-client.readthedocs-hosted.com/en/latest-release/)を使うことができます。したがって、コードベースで、**データの準備からモデルのトレーニング、評価、デプロイメント、モニタリングに至るまでのプロセスを自動化し、機械学習プロジェクトの複雑さと時間を大幅**に削減します。

### データサイエンティストの道具その２：Papermill

- [Papermill](https://papermill.readthedocs.io/en/latest/index.html)は、ノートブックをパラメータ化して実行するためのオープンソースのツールであり、データサイエンスや機械学習のワークフローを自動化するために広く使用されています。
- ノートブックを入力として受け取り、実行時にパラメータを渡すことで、ノートブック内のコードを動的に実行することができます。これにより、**異なるデータセットやパラメータで同じ分析を繰り返し実行する際の効率が大幅に向上**します。

### データサイエンティストの道具その３：MLflow

- [MLflow](https://mlflow.org/)は機械学習のライフサイクルを管理するためのオープンソースプラットフォームです。
- **機械学習の実験管理、モデルのトラッキング、デプロイメント、およびワークフローの全体を通しての管理を簡素化する**ことを目的としています。


## DataRobot、Papermill、MLflowを使うメリット
**この3つの道具を使うメリットは、実験効率化とログ管理です。** DataRobotは、GUI操作だけではなく、[コードベースでモデルのトレーニングを自動化](https://www.datarobot.com/jp/blog/how-to-use-auto-ml-for-python-and-r-users/)することができます。モデルのトレーニングには特徴量やアルゴリズムの選定も含まれ、その機能だけでもDSにとって鬼に金棒です。

さらに、Papermillを使うことでノートブックをバッチ実行できるため、DataRobotを用いた実験を効率化できます。たとえば、需要予測などの時系列分析では、学習データの期間や検定期間や特徴量セットについてさまざまなパターンを試します。学習データの期間で3種類、検定期間で2種類、特徴量セットで3種類あるケースでは、合計で3×2×3の18回分の実験をする必要があり、DataRobotでは18のエクスペリメント（プロジェクト）を作成することに対応します。その都度、毎回ノートブックを手動で作成していては大変ですし、ヒューマンエラーも多くなります。そこで、Papermillを使うことで、18のノートブックを自動で作成し、バッチ実行することができます。

同時に、MLflowを使うことで、18の実験結果を1つのダッシュボードで表示できます。

![スクリーンショット 2024-02-26 15.25.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/55bfbc19-c81a-133b-0b69-9219b7f2a07f.png)

## AIアクセラレーターのサンプルコード
それでは、[AIアクセラレーター](https://docs.datarobot.com/ja/docs/api/accelerators/adv-approaches/mlflow.html)に公開されている[サンプルコード](https://github.com/datarobot-community/ai-accelerators/tree/main/advanced_ml_and_api_approaches/MLFLOW_w_datarobot_experiments/)を紹介します。サンプルコードでは、時系列モデルの作成を効率化しています。

以下の内容がシナリオです。

 ——-シナリオ——-

時系列モデルの作成では、試みるべき多くの実験があります。最も基本的なものには、複数の特徴量派生ウィンドウ（fdws）を試すことや、事前に既知の特徴量（kias）を有効にすることが含まれます。

<用語説明>

- 特徴量派生ウィンドウ（fdws）：DataRobotの[時系列モデリング](https://docs.datarobot.com/ja/docs/modeling/time/ts-flow-overview.html)において、DataRobotが自動で派生する特徴量のローリングウィンドウ（fdws= -28 ~ 0 daysと指定すれば、過去28日間の移動平均、ラグ、差分などの特徴量が自動で生成される）
- 事前に既知の特徴量（kias）：DataRobotの[時系列モデリング](https://docs.datarobot.com/ja/docs/modeling/time/ts-flow-overview.html)において、予測時点で値がわかっている特徴量のこと（休日やキャンペーンなど）
サンプルコードでは、**実験を効率化するために、Papermillを用いてパラメータ（fdwsとkias）を変更しノートブックをバッチ実行**します。パラメータを設定し、バッチ実行を指示するノートブックがバッチ実行用ノートブック（orchestration_notebook.ipynb）であり、その指示により複数の実験用ノートブック（experiment_notebook.ipynb）が作成され、バッチ実行が走るという関係になっています。**機械学習モデル作成のエンジンはDataRobotを利用**しており、**実験ログはMLflowで管理**します。

## DataRobot、Papermill、MLflow連携の流れ

![スクリーンショット 2024-02-26 14.02.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/3b5974ca-a02b-58d9-b501-4fb432d232e5.png)

以下、バッチ実行用ノートブック（orchestration_notebook.ipynb）のコードの中身を詳しく解説します。

### ①パラメータの設定

シナリオに沿って、特徴量派生ウィンドウ（fdws）と事前に既知の特徴量（kias）に異なるパラメーターを与えて実験します。以下のセルの例に示されているように、3(fdwsが35,70,14の3種類)×2(kiasがFalseとTrueの2種類) = 6の異なる実験を行います。

![スクリーンショット 2024-02-26 22.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/6c656540-1ffb-c138-0204-bf7ecefe461d.png)

### ②ノートブックのバッチ実行

①で定義したパラメータを実験用ノートブック（experiment_notebook.ipynb）に与え、バッチ実行します。for文でループ実行しており、ここでは6回分ループ実行が行われます。pmはPapermillのことで、引数として、

input_path: 実験用ノートブックのパス
output_path: 実験実行後のノートブックのパス
parameters: 実験用ノートブックに与えるパラメータ
を指定します。

以下のセルを実行すると、自動でノートブックが6つ作成されて、バッチ実行が動きます。

![スクリーンショット 2024-02-26 22.57.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/b79bae3f-6dfa-cfe9-175d-ef45b7889ce9.png)

それでは、次に、実験用ノートブック（experiment_notebook.ipynb）の中身を見てみましょう。

### ①機械学習モデルの作成

機械学習モデルの作成にはDataRobotを用います。以下のセルは、検定スキーム（time_partition）や特徴量セットの設定をしています。特徴量ウィンドウ（FDW）と事前に既知の特徴量（KIA）は、バッチ実行用ノートブック（orchestration_notebook.ipynb）から与えられたパラメータです。

以下のセルを実行すると、自動で複数のモデルが構築され、最も精度が良いモデルをDataRobotが選択してくれます。

![スクリーンショット 2024-02-26 22.57.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/35969578-20a4-c0e2-3238-3e2b8e947c95.png)

### ②予測の実行
最も精度が良いモデルを使って予測を実行します。

![スクリーンショット 2024-02-26 22.58.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/0a8bea27-220d-b17b-cbb7-566bf90db764.png)

### ③実験ログ管理
予測値と実測値を比較して、精度を算出し、MLflowを使って実験ログを記録します。ここでは、変更したパラメータと各種精度指標のスコアを記録しています。

![スクリーンショット 2024-02-26 22.58.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/6f2ff2e3-96f2-effe-447d-e412627b1b5d.png)

サンプルコードを実行すると以下のようなアウトプットが得られます。アウトプットからわかるように、**この3つの道具を使うことで、実験を効率化できるだけでなく、コードとモデルとメトリックスを実行後にアセットとしてそれぞれ残すことができ、後任者がコードとモデルの中身を再確認することもできます。**

![スクリーンショット 2024-02-26 14.24.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3864834/6bf2ffb1-e5fc-b1e5-db28-55c3a0045952.png)

## 機械学習の実験効率化とログ管理を両立させる方法
今回は、実験効率化とログ管理のために、以下の方法をご紹介しました。

- DataRobotとMLflowを使用して、機械学習の実験を追跡およびログする方法
　・利点：実験間での結果の一貫した比較が可能
- DataRobotとPapermillを使用して、機械学習の実験からアーティファクトを作成し、共同作業に必要な作業量を減らす方法
　・利点：エラーを回避し、手動の作業量を減らすための実験の自動化が可能
 
ぜひサンプルコードを参考に、皆さまのプロジェクトにご活用ください。


### 関連動画（DataRobot University）のご案内
こちらの記事で紹介している内容の講義動画を、オンライン学習コンテンツ[「DataRobot University」](https://jp.learn.datarobot.com/learn/learning-path/ai-accelerator )でご覧いただくことができます。なお、こちらの動画はDataRobotのお客様限定のコードが必要となります。コードが分からない方は代理店窓口の方にお問い合わせ下さい。