UiPath AI Centerに自作したAIモデルをアップロードする方法

データサイエンティストの皆さん、こーんにちはー！


巷ではChatGPTのおかげで益々AIの注目度が上がっていますね。ただ、AIを使って業務を効率化しよう、というのはずいぶん前から言われている気がしますが、実際に社内全体にAI活用を浸透させることはなかなか難しいですよね。

(手前味噌で恐縮ですが、、、)社内でAI活用を促進する方法として、データサイエンティストの皆様が作成したAIモデルをRPAユーザーに使ってもらう、というやり方があります。(RPAがどれだけ素晴らしい技術であるかはここでは割愛します笑)

え、pythonの実行環境を整えたりしないといけないからそんな簡単にできないって？
そんなことはありません！UiPath AI Centerなら簡単にできるんです！

## そもそもUiPath AI Centerってなに？
詳細は[こちら](https://www.uipath.com/ja/product/rpa-ai-integration-with-ai-center "タイトル")をご参照いただくかUiPathまでお問合せいただければと思いますが、簡単に言うと、UiPathのRPAで利用できるAIモデルを一元管理できるクラウド製品です。(厳密にはオンプレミス向けのご用意もあります。)

つまり、このAI Centerに皆様が開発したAIモデルをアップロードすることで、社内全員のRPAユーザーがAIの恩恵を受けることができるのです！！


:::note
なお、OOTB(Out of the Box)パッケージという開発不要ですぐに使えるAIモデル群もあるので、データサイエンティストがいないお客様にもご利用いただける製品です。
:::

## でもAI Centerの使い方わからないし…
すみません、この記事の範囲外なので説明は割愛します…
以下の動画や記事をご参照ください:runner_tone2::runner:
https://www.youtube.com/watch?v=Cpa3HHX9CAQ
https://www.uipath.com/ja/community-blog/tutorials/ai-center

## 本題
それでは、実際にどうやってAIモデルをアップロードするか説明してきます。
今回は以下の手順で実施します。
1. AIモデルの作成
1. AI Centerへのアップロードファイル(zipファイル)の作成
1. AI Centerへのアップロードとデプロイ

#### 1. AIモデルの作成
AIモデルの作成はscikit-learnが使えるpython環境なら何でもよいのですが、今回は手軽に実施するためGoogleの[Colaboratory](https://colab.research.google.com/)を利用します。

今回サンプルとして作成するAIモデルはみんな大好き「タイタニックの生存者予測」です！
今回作るモデルは[Kaggleのチュートリアル](https://www.kaggle.com/code/alexisbcook/titanic-tutorial)から引用します。

データは[こちら](https://www.kaggle.com/competitions/titanic/data?select=train.csv)よりtrain.csvをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/1c23c01a-d41b-8342-6223-d9343150e766.png)

ファイルをダウンロードできたら、Colaboratoryでノートブックを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/0942ccc5-131f-f9d1-63a6-6cfda6c439f8.png)

ノートブックを開いたら、ノートブックのフォルダーにtrain.csvをアップロードします。（ドラッグ&ドロップでアップロードできます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/a5bf1388-6dd7-91c8-85bb-54252100ba24.png)

以下のpythonコードを上記のノートブックに転記・実行します。

```python:create_model.py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
import joblib

# train.csvをpandasのDataFrameに読み込み
data = pd.read_csv('train.csv')

# トレーニングデータとテストデータに分割
# テストデータは後でUiPath Studio内で利用する
train, test = train_test_split(data, test_size=0.33, random_state=42)

# トレーニングデータ用のデータフレームを作成
# 学習対象の特徴量はkaggleのチュートリアルより引用
X = train[["Pclass", "Sex", "SibSp", "Parch"]]
X = pd.get_dummies(X)
y = train["Survived"]

# モデルの作成と学習
# 利用するモデル（ランダムフォレスト）はkaggleのチュートリアルより引用
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)

# 学習済モデルをsavファイルに出力
# このファイルがAI Centerにアップロードするzipファイルの一部となる（AI Center用pyファイルで読み込む）
joblib.dump(model, "titanic_model.sav")

# 検証用のテストデータをcsvに出力
# このcsvは後でUiPath Studio内で利用する
test_input = test[["Pclass", "Sex", "SibSp", "Parch"]]
test_input = pd.get_dummies(test_input)
test_input.to_csv('titanic_test_input.csv')

# UiPath Studioでの予測結果を検証するために利用
test.to_csv('titanic_test_answer.csv')
```

コードの実行が終わったら、ノートブックのフォルダーから以下ファイルをダウンロードします。

* titanic_model.sav
* titanic_test_input.csv
* titanic_test_answer.csv

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/71ae24ec-7d89-79d9-96bf-a67d50334ba5.png)


#### 2. AI Centerへのアップロードファイル(zipファイル)の作成
これでモデルが完成したので、次にAI Centerにアップロードするためのzipファイルを作成します。
詳細は[こちら](https://docs.uipath.com/ja/ai-center/automation-cloud/latest/user-guide/building-ml-packages)の公式ドキュメントを参照してください。

AI Centerではトレーニングしないモデルと再トレーニング可能なモデルの2パターンをアップロードすることができます。今回は簡単な説明とするため、トレーニングしないモデルを作ります。

トレーニングしないモデルのzipファイルのフォルダー構成は以下です。

```text:フォルダ構造
titanic_model/  # フォルダー名(のちのzipファイル名)は任意
  - titanic_model.sav  # 実際に値の予測を行うモデル。main.pyから呼び出す（名前は任意）
  - main.py  # RobotがMLスキルを呼び出したときに(AI Centerが)実行するpyファイル。この中で上記のモデルを呼び出す
  - requirements.txt  # main.pyの実行に必要なpythonの依存関係を記述する
```

上記のzipファイルを構成するmain.pyとrequirements.txtを以下の通り作成します。

```python:main.py
import joblib
import json
import pandas as pd
import io

class Main(object):
   def __init__(self):
      self.model = joblib.load('titanic_model.sav')
   def predict(self, X):
      X = io.BytesIO(X) 
      inputdata = pd.read_csv(X)
      result = self.model.predict(inputdata)
      return json.dumps(result.tolist())
```

```text:requirements.txt
scikit-learn==1.2.2
pandas==1.5.3
```

:::note info
requirements.txtに記載のバージョンは一例です。
:::

ここまで終わったら、`titanic_model`フォルダーをzipに圧縮しておきます。

#### 3. AI Centerへのアップロードとデプロイ

いよいよ、UiPath AI Centerに作成したAIモデルをアップロードします！
それでは、AI Centerを開いてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/285679e1-6b2d-5f6d-a457-f1af772a1026.png)

プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/2c8fc2c1-b7b1-008e-fa1f-37bcc3607a5c.png)

プロジェクト名をつけて作成してください。プロジェクト名は何でもいいですが、ここでは`Titanic_LeoSamaWaTasukarunoka`としておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/96be7efa-df36-0c57-961f-609e7973cc47.png)

プロジェクトを作成したら、MLパッケージよりzipファイルをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/76a2e2bb-e564-63f8-a0a6-76ebab30800b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/8028ac79-318f-bbd9-066c-6a19797b4f80.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/ab890959-ecef-265f-82dd-80fbff3c7c45.png)

アップロード後、ステータスが「未デプロイ」になるまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/8274785e-29b3-86f1-1eef-5ef90233ca48.png)

次に、アップロードしたMLパッケージをMLスキルとしてデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/71518f26-cf8f-13b4-b226-ac7525964bda.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/85a9fabd-e2de-0b82-f756-ae124b1c3ed0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/ee1fc395-7008-4054-ad83-a65a710d00de.png)

ステータスが利用可能になるまで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472342/6ae94bbf-172a-454a-ffed-cc82e9da4fb8.png)

みなさんお疲れさまでした。ここまでの作業で自作したAIモデルをUiPath AI Centerにアップロードすることができました！

[次回](https://qiita.com/tacman/items/6509dd973e7c81e09a2f)は今回アップロードしたAIモデルをUiPath Studioで利用する方法をご説明します。