Alteryx PromoteでRのモデルをデプロイする

こんにちは、小澤です。

Alteryx Promoteは機械学習のモデルをデプロイしてリアルタイム推論を行うAPIを提供してくれます。 デプロイ可能なモデルは、Alteryx Designerで作成したものはもちろんのこと、PythonやRで作成したモデルの利用も可能です。

今回は、Rで作成したモデルをデプロイする方法を紹介したいと思います。

PromoteにRのモデルをデプロイするまでの流れ

Rを使ってモデルをデプロイするまでの流れは以下のようになります。

  1. ライブラリを読み込む
  2. Promoteで推論する際の処理内容を記述
  3. 任意の手法を使ってモデルを作成
  4. (ローカルで動作確認)
  5. Promoteにデプロイするための設定を行う
  6. モデルをデプロイする
  7. デプロイされたモデルを使って推論

一見長い道のりのように見えますが、1つ1つはそれほど難しいことはありません。 今回は、公式のexamplesにあるiris_classifierで流れを見ていきたいと思います。

一連の処理の流れ

では、早速一連の処理の流れを見ていきましょう。

ライブラリを読み込む

最初にAlteryx Promoteのライブラリと今回利用するRandom Forestを読み込みます。

library(promote)
library(randomForest)

初回は利用する前にライブラリをインストールしておく必要があります。

install.packages("promote")

Promoteで推論する際の処理内容を記述

続いて、デプロイされたモデルを使って推論を行う際の処理内容を記述した関数を用意します。 この関数の名前は固定で"model.predict"とします。

model.predict <- function(data) {
  pred <- predict(Rf_fit, newdata = data.frame(data))
  result <- data.frame(prediction = pred)
  result
}

関数の記述内容としては、デプロイされたRandom Forestのモデルを通常通り利用するのみとなっています。 このexampleではdata引数にlist形式のデータを渡すような処理を行なっているため、一度data.frame関数を使って変換していますが、データフレームをそのまま渡すような記述も可能です。

任意の手法を使ってモデルを作成

モデルの作成については、通常Rで行うのと同様になります。

# データの読み込み
df <- read.csv("./iris.csv")
names(df) <- c("sepal_length", "sepal_width", "petal_length", "petal_width","class")

# 学習処理をしてモデル作成
Rf_fit <- randomForest(formula = class~., data = df)

exampleのため、パラメータチューニングなど行わずにそのまま学習させていますが、通常のRのコードと何ら変わりありません。

ローカルで動作確認

model.predict関数は先ほどスクリプト中で定義したものなので、そのまま利用できます。 この関数の動きを確認しておきます。

# 動作確認用としてデータの1件目の正解ラベル以外を取り出す
testdata <- df[1, 1:4]

# 動作確認用のデータをJSONに変換する
jsonlite::toJSON(testdata, na='string')
# 以下のような結果が得られる
# {"sepal_length":5.1,"sepal_width":3.5,"petal_length":1.4,"petal_width":0.2}

# JSONをパースしてlistに変換したものを使ってmodel.predict関数を呼び出す
model.predict(jsonlite::fromJSON('{"sepal_length":5.1,"sepal_width":3.5,"petal_length":1.4,"petal_width":0.2}'))

データフレームをJSONに変換 → JSONをlistに変換という流れで処理しています。 model.predict関数ではこれをデータフレームに変換しているので、無駄な処理のように見えます。 この処理はやらなくてもいいのですが、おそらくAPIを直接使う場合はJSONで値を渡すということを示しているのだと思われます。

今回に関してはそのまま

model.predict(testdata)

としても問題ありません。

Promoteにデプロイするための設定を行う

モデルの作成と推論用関数の準備ができたので、デプロイするための設定を行います。

# Promoteの環境に推論の際に必要なライブラリをインストールする
promote.library("randomForest")

# 接続先情報の設定
promote.config  <- c(
  username = "<Your Promote User Name>",
  apikey = "<Your Promote API Key>",
  env = "<Your Promote URL>"
)

今回は利用していませんが、promote.metadata関数を利用することも可能です。

promote.metadata("test1", 1)
promote.metadata("test2", "2")

この値は直接利用されることはありませんが、モデルのバージョンごとのメタ情報として残しておくことが可能です。

モデルをデプロイする

モデルのデプロイは1行で終わります。

promote.deploy("IrisClassifier", confirm = FALSE)

モデルがデプロイされた様子はUI上から確認できます。

先ほど生成したJSONをコピペしてUI上から動作確認することも可能です。

デプロイされたモデルを使って推論

最後にこのモデルを使って推論する方法を見ていきます。

score <- promote.predict("IrisClassifier", testdata)

こちらも非常に簡単ですね。 なお、REST APIなので直接URLを叩いて推論を行うことも可能です。

library(httr)

data <- '{
  "sepal_length":5.1,
  "sepal_width":3.5,
  "petal_length":1.4,
  "petal_width":0.2
}'

resp <- httr::POST(
  "<Your Model Endpoint",
  body = data,
  config = c(
    httr::authenticate("<Your Promote User Name>", "<Your Promtoe API Key", "basic"),
    httr::add_headers("Content-Type" = "application/json")
  )
)

おわりに

今回は、Rを使ったモデルをAlteryx Promoteにデプロイする方法を紹介しました。

任意のライブライを使ったモデルでPromoteにAPIを作成することが可能ですので、Rの豊富なライブラリがそのまま利用可能です。 また、推論部分に関してはAlteryxのRツールを使って実装することも可能ですし、Scoreツールから直接利用することも可能です。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400