Alteryxの機械学習モデルをRツールで読み込む

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

AlteryxのPredictiveカテゴリにあるツールなど、機械学習をしてモデルを生成するツールはバイナリ形式でモデルを出力します。 通常、このモデルはScoreツールやLift Chartツールなどから利用可能です。

これらのようにAlteryxツールの入力としてモデルが必要になる場面では問題ないのですが、このモデルを使って自力でなんかいろいろやりたいこともあるかもしれません。

今回は、それを実現する方法を解説したいと思います。

どんな場面で必要になるか

さて、モデルを使って自力でなんかする、と言ってもどういった場面で必要になるのでしょうか?

例えばLinear Regressionツールでは、モデルのほかに以下のようなレポートも出力されます。

Linear Regressionでは、このレポートにあるCoefficientsの各値がその変数がどれだけ影響を与えているのかの指標となるため、 学習結果のモデルではなくをデータとして取得した場合も考えられます。

また、Linear Regressionのように標準で含まれているツールではなく、別な手法を使ったツールを自作したい場合もあるかもしれません。 そういった場合、どうやってこのツールのようなレポートを作ればいいのでしょうか?

実は、ここに表示されているような値はモデルから取得することが可能となっています。

どうやって取り出すか

では、実際にどうやって取り出すか見てみましょう。

Predictive系のツールは内部でRを使って学習していますので、出力もRのモデルとなっています。 そのため、Rツールを使って取り出すことが可能です。

入力データはPredictiveツールの出力でよく見受けられる以下のような形式になっているものと想定します。

Name列に設定したモデル名、Object列が実際のモデルとなっており、1レコードのみのデータとなっています。

このモデルを読み込むにはRツールを接続して、以下のように記述します。

df <- read.Alteryx2("#1")
model <- unserializeObject(as.character(df$Object[1]))

コネクタの名前は"#1"としている前提としています。

まず一度通常のdata frameとして入力を受け取っています。 その後2行目の記述ですが、以下ような流れになっています。

  • 受けったdata frame(df変数)のObject列1行目を取得
  • その値を文字列として扱う
  • 文字列をモデルのオブジェクトに変換

これでmodel変数にRで利用なモデルが読み込まれます。 なお、今回は1つのモデルのみを想定していますが、Lift Chartツールのように複数のモデルを受け取る前提となるツールを作る場合はdf$Object[1]の"1"の部分を2, 3, ...としていくことで2行目以降も取得可能です。 受け取るモデルの個数が可変の場合はapply系の関数やforなどを使って全てのデータを取得するといいでしょう。

あとは、model変数を使って必要な処理を行うのみです。 以下では、coef関数を使っています。

if (!require(tidyverse)) {
  install.packages("tidyverse", repos = "https://cran.rstudio.com/")
  require(tidyverse)
}

lm_coef <- data.frame(coef(model)) %>%
  rownames_to_column()
write.Alteryx2(lm_coef, 1)

最初のif (...) {...}の部分はライブラリの読み込みです。 インストールされていない場合は、インストールして読み込んでいます。 この部分の記述の詳細は以下をご覧ください。

後半部分で、modelから値を取得して、通常通りwrite.Alteryx関数にて出力を行っています。 結果は以下のようになります。

Rのモデルとしてそのまま利用可能なので、このほかにもsummary関数で取り出した値を個別に出力してレポートの項目となる要素を作成したり、predict関数でRの中で推論を行ったりといったことも可能です。

モデルを出力する

AlteryxからRのモデルを取得する方法はわかりました。 続いて、逆のパターンとしてRツール内で作成したモデルをAlteryx側に出力する方法を見てみましょう。

これを実現するには、以下のようにします。

output_model <- list(Name="<model_name>", Object=list(model))
write.Alteryx2(output_model, 2)

出力はlistまたはvectorとして行います。 modelをlistに入れるのを忘れないようにしてください。

おわりに

今回は、AlteryxのRツールでモデルをやり取りする方法を解説しました。

すでに存在しているRのモデルをAlteryxで使いたい、Predictiveツールの標準で出力されるもの以外を使いたい、などの際にご利用ください。

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

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

alteryx_960x400