6
6

Pythonで作成したAIモデルをUiPathから呼び出して予測業務を自動化する方法【UiPath Python連携】

Last updated at Posted at 2023-08-21

元気しとーと? 博多に住んどうUiPathプリシェールス @ManabuTechばい。
(お元気でしょうか? 博多に在住しておりますUiPathプリセールス ManabuTech です)

今回は、Pythonで作成したAIモデルをUiPathから呼び出して予測業務を自動化する具体的な方法を解説します。

今回の予測業務に使用するデータの解説は、AIを業務で利用するポイントと合わせてこちらで解説しています。

Pythonの知識が無くてもAIを業務に適用できるAI Centerを利用した方法はこちらをご覧ください。

作成したサンプルワークフローはGithubで公開しています

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」を使用します。
image.png

機械学習のフレームワークは「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スクリプトの呼び出しは以下のようなステップで進みます。

  1. Pythonパッケージの追加
  2. Pythonスコープアクティビティの追加
  3. Pythonスクリプトを読込アクティビティを追加
  4. Pythonメソッドを呼び出しアクティビティを追加
  5. Pythonのオブジェクトを取得アクティビティを追加
  6. Excelへの書き込み

Python処理はPythonスコープ内にPython関連のアクティビティを並べていきます。
image.png

1. Pythonパッケージの追加

新規にプロジェクトを作成後、UiPath StudioでPythonパッケージを追加します。オフィシャルに「UiPath.Python.Activities」があるのでインストールしましょう。

image.png

最新のUiPath Stduioでは新規プロジェクト作成すると「Windows」という形式のプロジェクトが作成されます。Windows形式のプロジェクトの場合は.NET Desktop Runtime 5.0.17のインストールが必要です。

2. Pythonスコープアクティビティの追加

PythonスコープにはインストールしたPythonに合わせて設定を行う必要があります。今回はWindows64bitPCに3.10をインストールしたので、このように設定しました。
image.png

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以上のバージョンの場合はライブラリパスを設定する必要があります。

image.png

UiPathはプロジェクトフォルダからの相対パスで動作できますが、呼び出されたPythonは相対パスでは実行できないため、GetFullPathでフルパスを取得しています。

名前 規定値
FileName String Path.GetFullPath("PythonScript\LinearRegression.py").ToString
PyObj PythonObject --

4. Pythonメソッドを呼び出しアクティビティを追加

Pythonメソッドを呼び出すために「Pythonメソッドを呼び出し」アクティビティを使用します。

image.png

PythonArgはPythonメソッドに渡す配列です。
波括弧で括り、引数を渡す必要があります。

名前 規定値
PythonArg Object[] {Path.GetFullPath("PythonScript\boston_test.csv").ToString, Path.GetFullPath("PythonScript\model.pickle").ToString}
MethodName String "predict"

5. Pythonのオブジェクトを取得アクティビティを追加

Pythonから戻り値を取得するため、「Pythonのオブジェクトを取得」アクティビティを追加します。

image.png

resultsはPython側の戻り値の型によって決まります。
今回はDoubleのlist(正確にはnumpyのデータ)で返ってくるためDoubleの配列を指定します。

名前 規定値
results Double[] --

6. Excelへの書き込み

戻り値を最後にExcelに書き込みます。
コレクションをデータテーブルに変換アクティビティで、Doubleの配列をデータテーブルに変換しています。

image.png

Pythonでエラーになった場合の対処方法

UiPathでPython関連のアクティビティでエラーが発生した際には、Pythonのエラー詳細ではなく概要だけしか表示されない場合があります。

エラーの詳細を見るためには、Windowsのイベントビューアー機能を使用しましょう。
WindowsログのApplicationから詳細なエラー情報が確認できます。

AI Centerを利用した簡単な方法もあります

今回はPythonで作成したAIモデルを呼び出して予測する方法を解説しました。
Pythonでのモデル開発が難しそうだと感じた方、安心してください。より簡単にAIを業務に適用する「UiPath AI Center」を使った方法を解説しています。
データの再学習がPythonを実行しないといけないことから、AIエンジニアが不足している企業では、優先度が低い業務ではAIの導入やAIの再学習が難しくなってきます。

こちらもご覧ください。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6