Tableau Prep Builder からPythonで予測実行して共有するには

※ 本記事は先進的な技術情報を共有するための目的で作成しており、Tableau 社からの正式リリース発表とは一切関与がございません。リリース前のバージョンに関する、動作、仕様はリリース時に変更となる場合がございます。ご理解の上参照頂ければ幸いです。

 

Tableau Prep Builderから「スクリプト」を使って、Python環境で命令を実行し、

実行した結果を再び利用するということができます。

(バージョン 2019.3 からの機能で、基本的な使い方はこちらの記事を参照ください。)

 

こちらの機能を使って:

* あらかじめPython環境に作成しておいた予測モデルに対して

* Tableau Prep Builderから説明変数(予測の元ネタ)をPython に送り

* 得られた予測値をデータソースとして共有する

ということをやってみたいと思います。

 

具体的なユースケースとして

* 過去データから東京の中古マンション価格の予測モデルを作成し

* Webからスクレイピングしたマンション情報の価格を予測させ

* 予測結果を付けたデータをTableau Online にパブリッシュして共有する

というシナリオをご紹介します

 

全体の流れとしては以下のようになります。

① 予測モデルの定義 (Jupyter Notebookで実施)

② 訓練データの学習 (Jupyter Notebookで実施)

③ 予測結果を推論 (Tableau Prep BuilderからPythonを呼び出す)

④ 可視化する (Tableau Desktop / Online / Server )

① 予測モデルの定義 (Jupyter Notebookで実施)

予測モデルを作成するために利用する訓練データ(過去の取引データ)を国土交通省のサイトからダウンロードします。

諸々のデータ前準備を経て、機械学習で利用できる形に入力データを生成します。手順は結構な長さになりますので、ここでは割愛させていただきます。(ご興味がある方は、

書籍:Tableauで始めるデータサイエンス にて紹介しておりますのでご参考ください。)

最終的に以下のような形にします。

それぞれの項目の説明は以下です。

項目名 説明 データ型
uid 物件のユニークなID 文字列型
years 築年数 整数型
minutes 最寄駅からの徒歩距離(分) 整数型
sqrm 物件の㎡数 整数型
distance 東京駅と最寄り駅の直線距離(都心からどれだけ離れているか?) 浮動小数点
renovate 改装済みか否かフラグ 整数型 ( 0 or 1 )
express 急行が止まるか否かのフラグ 整数型 ( 0 or 1 )
price 取引価格(目的変数) 整数型(単位:1円)

この入力データをもとに、予測モデルを作成します。予測モデルを作成し、実際に予測を行う流れは以下のようになります。

こちらは、Jupyrer Notebook上で操作を実施します。

 

② 訓練データの学習 (Jupyter Notebookで実施)

作成したモデルに対してfitで訓練データを学習させます。

予測モデルを作成するプロセスについては、今回のメインテーマではないため割愛させていただきます。

(こちらも、ご興味がある方は、書籍:Tableauで始めるデータサイエンスにて紹介しておりますのでご参考ください。同データについて、訓練データと検証データの分割、作成されたモデルの精度検証等紹介しています。)

最終的なチューニングと評価を完了し、モデルが利用できると判断したら、これをPiclkeを使って一度ファイルにダンプします。訓練が完了した予測モデルをTableau Prep Builderから利用するために一度Pickleでダンプするというのがポイントとなります。

 

③ 予測結果を推論 (Tableau Prpep BuilderからPython を呼び出す)

それでは、ここから Tableau Prep Builderを使って、学習には利用していないWebスクレイピングから取得した中古マンション物件のデータについて、その価格を先ほど作ったモデルに適用して価格を予測してみましょう。

Webからスクレイピングしたデータにも、学習に利用した、築年数、徒歩分数、広さ等の情報があります。(実際には同じ項目が含まれるよう前準備をしていますが、今回のメインテーマではないのでここでは割愛します。)

入力データを確認した後、Python に処理を渡すためフローに「スクリプト」を追加します。「スクリプト」を追加すると下図の「巻物」のようなアイコンが追加されます。

スクリプトを追加したら、接続タイプで「Tableau Python (Tabpy) Server」を選択し、Tabpy サーバーに接続します。

ここでは サーバー: localhost、 ポート: 9004 を選択します。

Tableau Prep BuilderからPythonコードを実行するためにはTabpyサーバーを立ち上げる必要があります。今回はTableau Prep Builderが起動しているローカルのPCにTabpyサーバーを起動しています。

Tabpy サーバーの起動方法についてはこちらの記事を参照ください。

次にTableau Prep Builderのスクリプトから実行する関数を含むPython スクリプトファイルを作成します。

ここでは PredictPrice_python.py というファイルを作成し、PredictPriceという関数とget_output_schema という関数を作ります。

ファイルの内容は以下のようになります。(※ 日本語コメントを入れるとエラーになってしまうようなので、実際には日本語コメントは入れていません。理解と解説のためにあえて日本語でコメントを入れています。)

上記ファイルはこちらからダウンロードできます。

ポイントを抜粋すると

関数 PredictPrice では以下の内容を実施します。

・ Tableau Prep Builderからのデータをdf という名前のデータフレームで受け取る

・ Pickleで保存しておいた予測モデルをもう一度呼び出す

・ データフレームから説明変数を取り出して予測モデルに投入する

・ id と予測値のみを返す

関数 get_output_schema はTableau Prep Bulderから入力とPython からの出力データのフィールド構造が違うときに、出力の形式を定義するために必要となります。これはTableau Prep BuilderとPythonを連携する際のお作法という感じでしょうか。

Tableau Prep Builder の入力には様々な入力フィールドがありますが、Pythonからは id と predict (予測値)しか返さないので、その旨を定義します。

‘Id’ 列は整数型なので、prep_int()、’predict’列はDECIMAL型なので prep_decimal() で定義しています。出力したいフィールドの定義をこの関数の中に記載します。

get_output_schema でのフィールドの指定方法はこちらを参照ください。

Tableau Prep Builderに戻って、Pythonファイルと関数 PredictPrice を指定します。

この時点で id と予測値 predict が表示されます。

これをオリジナルのデータ分岐から id で結合すると、オリジナルデータに対して予測値が追加されます。

こちらの出力先として、Tableau Online を指定すれば、予測結果を含むデータソースそチームで共有し、そこから予測を含むデータから新しい発見をチームで探索することができます。

以下、Tableau Online 上にパブリッシュされたデータソースを確認します。

④ 可視化する (Tableau Desktop / Online / Server )

このデータソースをもとにTableau Online 上(Webエディット)で誤差(予測 ー 実際にWebに掲載されている価格)の計算フィールドを作り、駅ごとに比較してどの駅で誤差が上振れ(お買い得?)または下振れ(お買い得ではない?)しているかを確認します。

よく見ると、西国分寺、東小金井は予測の方が実際より高いので「お買い得」なのかもしれません。

一方で吉祥寺は実際の方が予測より高いので、街の人気度等今回考慮していない説明変数があることを示唆しているかもしれません。

このように、Python 上で一度予測モデルを作成しておけば、これを再利用し、Tableau Prep Builder で前準備したデータをもとに予測値を取得し、予測値を付けた結果をデータソースとして共有しチームで解析することが可能です。

一度フローを作ってしまえば、予測したい元ネタとなる物件情報が追加された場合も、フローを再度実行すれば、新規物件についても予測値を得ることができます。

他にも、顧客の行動から会員離脱を予測するモデルを作成し、毎週の行動履歴をアップデートして、そのデータに基づいた離脱確立を確認計算し、各自分析を行うといったユースケースも考えれるかもしれません。

予測モデルに投入するデータを複数データソースから組み合わせ、複雑な前処理をおこなってから予測まで一気通貫で実行するといった場合、Tableau Prep Builderの中からPythonを連携するメリットが生まれてくるかと思います。

Tableau とPython を使ってデータから価値を生み出すプロセス改善について、スプライングローバル または Twitter @datarockstartky にご連絡ください。(DMの場合はお名前、会社名をご連絡ください、記載のない場合返信は致しかねます。)

私達の方で何らかのお役に立てれば幸いです。

どうぞよろしくお願いいたします。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください