コミュニティ
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

ブログ - 日本語

アナリティクスに関する聡明な考えに触れ、インサイトとアイデアが得られます。
Alteryx Certified Partner
Alteryx Certified Partner

AlteryxのPredictive系ツールで作成したモデルはScoreツールを利用することで未知のデータに対する予測値を出力できます。
また、これらのPredictive系ツールはどのような学習結果になったかのレポートも同時に出力します。

 

linear_report.png

 

画像はLinear Regressionツールのレポート出力の一部です。
通常の利用であれば、レポート結果は目視で確認するために利用されます。
しかし、この結果をデータとして利用したい場合もあります。
Alteryxではレポート用の出力は専用の構造を持っているため、この情報から必要な部分を抜き出すことは難しく、通常であればレポート化前のデータに対する加工となるでしょうがPredictiveの出力の場合は最初からレポート化されているためそれができません。

 

では、どういった場合にこのレポート出力の結果をデータとして扱いたくなるのでしょうか?
例えば上記のLinear Regressionであれば、モデルそのものも使って推論するのではなく、係数(Coefficients)の値を利用したいといったシーンが考えられます。
これは、Linear Regressionの場合、この値がそのまま予測したい結果にどの程度影響を及ぼしているのかを表す値となっているためです。
他の手法でもこの考え方がそのまま使えるわけではありませんが、こういった情報が必要になる場面は考えられます。

 

モデルの係数をデータとして取得する

具体的な方法を見ていきましょう。
これらのレポートに含まれる値は多くの場合、モデル内に含まれており、そこから取得できるようになっています。
とはいえ、この値をモデルから取得するためのツールはAlteryxには標準で用意されていません。
AlteryxのPredictive系ツールの学習はR言語を使っていることを利用して、Rツールを使って取得します。

 

まずはLinear Regressionツールのモデル出力をRツールに接続して読み込める状態にします。

 

regression_to_r.png

 

Linear Regressionツールのモデル出力は以下のようになっています。

 

regression_output.png

 

データは必ず1行となっています。
Name列はツールの設定で付けた名前でObject列が作成されたモデル本体となっています。

 

Rツールでは、このデータを受け取って、モデルのみを利用可能な形式で取得します。
その方法は以下のようになります。

 

 

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

 

 

一度Data Frameとして受け取ったのち、Object列の1行目のデータを取得しています。
その後、ただのバイト列して受け取るのでモデルオブジェクトとして利用可能な形式に変換していますが、これは定型文と考えても問題ありません。
このmodel変数はR内で通常のモデルとして利用可能です。

 

続いてこの変数から、切片の情報を取得します。
Rで作成されたモデルは特殊な操作をせずにそのままcoefficientsを指定することで取得できるようになっています。

 

 

model$coefficients

 

 

取得したものを出力に渡すために整形したのち、Alteryx側に出力します。

 

 

library(tidyverse)

coef <- data.frame(coef=model$coefficients) %>%
  rownames_to_column("name")
write.Alteryx2(coef, 1)

 

 

取得した係数の情報をData Frameに変換したのち、元の変数の値は行名として保持しているのでそれを1つの列に変換しています。

 

最初に読み込んでいるtidyverseライブラリはAlteryxによってインストールされるRには含まれていないので、Install R Packagesなどを使ってあらかじめインストールしておく必要があります。

 

同様の処理を行うために必ずしもtidyverseが必須というわけではありませんが、私はもうすでにほかの方法でどうやってたか忘れるくらい(いや、たぶん覚えてますよ!)このライブラリは有名なものです。
また、tidyverseそのものは様々な便利なライブラリを集約したものでそれ自体が何か機能を持つものというわけではありませんが、まとめて利用するのがいい使い方です。

 

このコードは最後にAlteryxへの出力を行っているので、その結果を確認しましょう。

 

coef_data.png

 

このように各変数ごとの係数の値がデータとして取得できました。

 

利用する手法ごとにモデル内にどのような情報を持つかは異なるため、同じやり方がすべてのモデルに対して同じ処理ができるわけではありませんがLinear RegressionやLogistic Regressionなどでは共通して利用可能です。
係数の情報を使った処理を頻繁に使うような場面では、この処理をマクロ化して利用可能にしてしまってもいいかもしれません。