元気しとーと? 博多に住んどうUiPathプリシェールス @ManabuTechばい。
(お元気でしょうか? 博多に在住しておりますUiPathプリセールス ManabuTech です)
今回は、Pythonで作成したAIモデルをUiPathから呼び出して予測業務を自動化する具体的な方法を解説します。
今回の予測業務に使用するデータの解説は、AIを業務で利用するポイントと合わせてこちらで解説しています。
Pythonの知識が無くてもAIを業務に適用できるAI Centerを利用した方法はこちらをご覧ください。
AIモデルの作成方法
AIモデルの作成はPythonで行います。
基本的にPythonが扱えるAIエンジニアの作業となります。
業務担当者はAIエンジニアに作成してもらったPythonスクリプトをUiPath Studioで呼び出します。
データを正しくやり取りするために下記4つを明確にしておきましょう
・Pythonのファイル名
・呼び出すメソッド名
・引数(どのようなデータをメソッドに渡すか)
・戻り値(どのようなデータをメソッドから返してもらうか)
1. Pythonのインストール
UiPathはWindowsPCで動作します。
今回はWindows版64bitのversion3.10を利用しています。
2. 使用するPythonパッケージのインストール
pipコマンドでパッケージをインストールします。
今回使用したパッケージは3つです。pickleは標準ライブラリのためインストール不要です。
パッケージ | 概要 | インストール |
---|---|---|
numpy | 配列データの高速演算ライブラリ | 必要 |
pandas | 表形式データ処理ライブラリ | 必要 |
sklearn | 機械学習フレームワーク(便利な機能の詰め合わせ) | 必要 |
pickle | オブジェクトを保存・復元する標準ライブラリ | 不要 |
パッケージのインストールはコマンドラインから可能です。
pip install numpy
pip install pandas
pip install sklearn
3. PythonでAIモデルの作成
AIモデルをPythonで作成します。
sklearn(scikit-learn)という機械学習のフレームワークを使用しています。
sklearnを用いることによってAIモデルを簡単に作ることができます。
scikit-learn アルゴリズムチートシートにはどのようなモデルを使用すればよいか書かれています。
今回は回帰(regression)でSGD Regressionなどがありますが、今回は基本的なAIモデルの「LinearRegression」を使用します。
機械学習のフレームワークは「sklearn」の他には「tensorflow」「pytorch」などがありますが、どれを使用しても構いません。
事前にtrain関数を呼び出してAIモデルを学習しておき、pickleを使用して「model.pickle」というファイルに保存しています。
後ほどUiPath Studioからpredictというメソッドを呼び出しますが、ここでは保存しておいた予測するためのCSVファイルと「model.pickle」のパス(どこにファイルがあるかの情報)を引数として渡して、予測したデータをリスト形式で受け取ります。
import numpy as np
import pandas as pd
import pickle
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
def train(csvFilePath):
csv_data = pd.read_csv(csvFilePath, sep=',', dtype=np.float64)
features = csv_data.drop('MEDV', axis=1)
training_features, testing_features, training_target, testing_target = \
train_test_split(features, csv_data['MEDV'], random_state=0)
model = LinearRegression()
model.fit(training_features, training_target)
training_pred = model.predict(training_features)
testing_pred = model.predict(testing_features)
print('MSE Train : %.3f, Validate : %.3f' % (mean_squared_error(training_target, training_pred), mean_squared_error(testing_target, testing_pred)))
with open('model.pickle', mode='wb') as f:
pickle.dump(model, f)
def predict(csvFilePath, picklePath):
with open(picklePath, mode='rb') as f:
model = pickle.load(f)
csv_data = pd.read_csv(csvFilePath, sep=',', dtype=np.float64)
testing_features = csv_data.drop('MEDV', axis=1)
testing_target = csv_data['MEDV']
testing_pred = model.predict(testing_features)
print('MSE Test : %.3f' % mean_squared_error(testing_target, testing_pred))
return testing_pred
if __name__ == '__main__':
train("./boston_train.csv")
results = predict("./boston_test.csv", "./model.pickle")
print(results)
AIモデルの呼び出し方法
UiPath Studioから作成してもらったPythonのAIモデルを呼び出します。
Pythonスクリプトの呼び出しは以下のようなステップで進みます。
- Pythonパッケージの追加
- Pythonスコープアクティビティの追加
- Pythonスクリプトを読込アクティビティを追加
- Pythonメソッドを呼び出しアクティビティを追加
- Pythonのオブジェクトを取得アクティビティを追加
- Excelへの書き込み
Python処理はPythonスコープ内にPython関連のアクティビティを並べていきます。
1. Pythonパッケージの追加
新規にプロジェクトを作成後、UiPath StudioでPythonパッケージを追加します。オフィシャルに「UiPath.Python.Activities」があるのでインストールしましょう。
最新のUiPath Stduioでは新規プロジェクト作成すると「Windows」という形式のプロジェクトが作成されます。Windows形式のプロジェクトの場合は.NET Desktop Runtime 5.0.17のインストールが必要です。
2. Pythonスコープアクティビティの追加
PythonスコープにはインストールしたPythonに合わせて設定を行う必要があります。今回はWindows64bitPCに3.10をインストールしたので、このように設定しました。
3.10以降ではライブラリパスを指定する必要があります。
Path.Combineで特殊フォルダパスを結合しています。
特定のPCだけで動くだけであれば固定のパスを指定してもいいのですが、複数のPCで動作できるようにこのように指定しています。
名前 | 型 | 規定値 |
---|---|---|
PythonPath | String | Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"Programs\Python\Python310") |
PythonLibPath | String | Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),"Programs\Python\Python310\Python310.dll") |
3. Pythonスクリプトを読込アクティビティを追加
Python3.9以上のバージョンの場合はライブラリパスを設定する必要があります。
UiPathはプロジェクトフォルダからの相対パスで動作できますが、呼び出されたPythonは相対パスでは実行できないため、GetFullPathでフルパスを取得しています。
名前 | 型 | 規定値 |
---|---|---|
FileName | String | Path.GetFullPath("PythonScript\LinearRegression.py").ToString |
PyObj | PythonObject | -- |
4. Pythonメソッドを呼び出しアクティビティを追加
Pythonメソッドを呼び出すために「Pythonメソッドを呼び出し」アクティビティを使用します。
PythonArgはPythonメソッドに渡す配列です。
波括弧で括り、引数を渡す必要があります。
名前 | 型 | 規定値 |
---|---|---|
PythonArg | Object[] | {Path.GetFullPath("PythonScript\boston_test.csv").ToString, Path.GetFullPath("PythonScript\model.pickle").ToString} |
MethodName | String | "predict" |
5. Pythonのオブジェクトを取得アクティビティを追加
Pythonから戻り値を取得するため、「Pythonのオブジェクトを取得」アクティビティを追加します。
resultsはPython側の戻り値の型によって決まります。
今回はDoubleのlist(正確にはnumpyのデータ)で返ってくるためDoubleの配列を指定します。
名前 | 型 | 規定値 |
---|---|---|
results | Double[] | -- |
6. Excelへの書き込み
戻り値を最後にExcelに書き込みます。
コレクションをデータテーブルに変換アクティビティで、Doubleの配列をデータテーブルに変換しています。
Pythonでエラーになった場合の対処方法
UiPathでPython関連のアクティビティでエラーが発生した際には、Pythonのエラー詳細ではなく概要だけしか表示されない場合があります。
エラーの詳細を見るためには、Windowsのイベントビューアー機能を使用しましょう。
WindowsログのApplicationから詳細なエラー情報が確認できます。
AI Centerを利用した簡単な方法もあります
今回はPythonで作成したAIモデルを呼び出して予測する方法を解説しました。
Pythonでのモデル開発が難しそうだと感じた方、安心してください。より簡単にAIを業務に適用する「UiPath AI Center」を使った方法を解説しています。
データの再学習がPythonを実行しないといけないことから、AIエンジニアが不足している企業では、優先度が低い業務ではAIの導入やAIの再学習が難しくなってきます。
こちらもご覧ください。