Pythonで作成したモデルをPMMLに出力してYellowfinで利用する


以前にRで作成したモデルをPMMLに出力してYellowfinで利用するざっくりした手順という記事を書きました。
今回はRではなくPythonを使って同じようなことをやってみます。

今回の動作環境

  • macOS 10.13
  • Anaconda 5.0.0
  • Python 3.6.2
  • Jupyter Notebook 4.3.0
  • sklearn2pmml 0.39.0
  • Yellowfin 8.0.0
  • Yellowfin PMMLプラグイン-20171204

Anacondaのインストール

AnacondaはPython本体と、機械学習やデータサイエンスでよく使われるライブラリがまとめられたディストリビューションです。Jupyter Notebookも含まれています。
具体的なインストール方法については検索すれば情報がたくさん出てきますので、ここでは割愛します。

sklearn2pmmlのインストール

scikit-learnは定番のPython機械学習ライブラリです。今回もこのライブラリを使ってモデルを作成します。
そして、作成したモデルをPMML出力するためにsklearn2pmmlというライブラリを使用します。

sklearn2pmml

インストールするにはターミナルで以下を実行します。

$ pip install --user --upgrade git+https://github.com/jpmml/sklearn2pmml.git

Yellowfinとプラグインのインストール

これもここでは割愛します。なお、日本国内でPMMLプラグインを入手するにはYellowfin Japan社のサポートへ連絡する必要があります。(2019年1月現在)

Jupyter NotebookでモデルとPMMLファイル作成

sklearn2pmmlのUsageに記載されている例に従って、今回はかの有名なIrisデータセットを使用した学習モデルを作成します。

iris_train.csv

まずは以下を叩いてJupyter Notebookを起動。

$ jupyter notebook

するとブラウザが立ち上がってJupyter Notebookが表示されますので、新規にnotebookを作成します。

そして、おもむろに以下のコードをコピペして、ファイルパスをご自身の環境に合わせて編集した後に実行ボタンをクリックします。

sklearn2pmml.py
import pandas
iris_df = pandas.read_csv("/Users/xxxxxx/temp/iris_train.csv")
from sklearn.tree import DecisionTreeClassifier
from sklearn2pmml.pipeline import PMMLPipeline
pipeline = PMMLPipeline([
    ("classifier", DecisionTreeClassifier())
])
pipeline.fit(iris_df[iris_df.columns.difference(["Species"])], iris_df["Species"])
from sklearn2pmml import sklearn2pmml
sklearn2pmml(pipeline, "/Users/xxxxxx/temp/DecisionTreeIris.xml", with_repr = True)

実行したら指定した場所にファイルが作成されているはずです。

DecisionTreeIris.xml

Yellowfinのトランスフォーメーションフローでの利用

最近のBIツールには事前にデータを準備する機能を備えているものがあります。
Yellowfin SuiteにもYellowfinデータ準備(Yellowfin Data Prep)というカテゴリーが存在します。

Yellowfin上の機能名ではトランスフォーメーションフローと呼ばれています。この機能はYellowfin 7.4以降のユーザーであればすぐに利用することができます。別途インストールする必要もありませんし、オプション料金がかかることもありません。

以前の記事では高度な関数でPMMLモデルを使用しましたが、今回はこのトランスフォーメーションフローを例に取ってみます。

まず、以下のテスト用CSVファイルをインプットステップで読み込みます。

iris_test.csv

次にトランスフォーメーションステップのPMMLモデル予測をドラッグ&ドロップし、インプットステップと接続します。
そして、DecisionTreeIris.xmlを読み込み、以下の画面の通り設定します。

保存をクリックすると以下のように予測値の列が追加されます。

あとはアウトプットステップを設定して任意のデータベースへ書き込めば、Pythonで作成した学習モデルを使って予測された値を活用することができます。

まとめ

Rと同様に、Pythonで作成したモデルもYellowfinで利用することができました。
中間にPMMLを経由することによって、学習モデルの開発環境に左右されない可搬性の高い業務運用を実現することができます。