既存モデルの結果をDataRobotに取り込む

DataRobotのデータサイエンティスト中野です。

DataRobotではモデルの精度の比較をリーダーボードという順位表で行うことができます。これを用いると、全てのモデルがある精度指標の下で精度が良い順に並べられた状態なので、モデルの検定データ、交差検定、ホールドアウトデータでの精度の違いが一目でわかります。様々な精度指標を切り替えることもでき、モデルの生成方法に依存することなく用途に応じて必要な指標でモデルの比較が可能です。

Screen Shot 2017-09-10 at 14.39.07.png

そこでお客様から、「今までの(DataRobot外で)作ったモデルがあるのだけれども、そのモデルの精度とDataRobotのモデルの精度を比較できないか」とよく質問を受けます。DataRobotではこのような比較を行える方法が大きく分けて2つ存在します。

  1. 既存のモデルの予測値をアップロードするデータの列に用意することで、精度を計算する。
  2. 既存のモデルのコードをRあるいはPythonで用意し、そのモデルを実際にDataRobot上で実行することで精度を計算。

それぞれの方法に一長一短があるのですが、方法2の場合既存のモデルがR・Pythonで無ければコードを1から書かなければならない場合もあり非常に手間がかかりますし、コーディングが苦手な方あるいは「既存モデル」と言っても担当者の経験や勘に基づいているケースなどは不可能となってしまいます。そこで今回はとても手軽にできる方法1「既存のモデルの予測値をアップロードするデータの列に用意することで、精度を計算する」を紹介したいと思います。

この方法の大まかなコンセプトとしては、①外部で計算した値をデータに用意し、②その値を読み込みそのまま出力する単純なモデルをJupyter IDE上で作成するというものです。

用意するデータの形式

用意していただくデータは通常のモデル作成に使うデータに1列の新たなデータを追加したものとなります。以下の例にある様に、それぞれの列のデータに対応した今回比較したいモデルの予測値を追加してください。

Screen Shot 2017-09-10 at 15.02.06.png

先ず、通常通りのモデルを作成するには、比較したい予測値がデータに入っているので、今回追加した1列のデータを外して行わなければなりません。

そのためにそれ以外の特徴量を選択して、新たな特徴量の作成を行います。

Screen Shot 2017-09-10 at 20.41.06.png

その後は今作成した特徴量を選択してAutopilotを行います。これで通常Autopilotを行なった際と同様のモデルがリーダーボードに作成されました。次の章でこのリーダーボードに今回比較したい予測値の結果を一つのモデルとして表示したいと思います。

Screen Shot 2017-09-10 at 20.44.10.png

Jupyter IDEでの他モデル予測値の読み込み

DataRobotではRやPythonのスクリプトを走らせて、カスタムのモデルをDataRobot上で作成することができます。今回はその機能を用いて先ほど追加した比較したいモデルの予測値をリーダーボード上に表示したいと思います*1。Rやpythonのコードを書いたことがないという方もいらっしゃると思いますが、今回はたった一行のコードですのでどなたでも使っていただくことができます。

Screen Shot 2017-09-10 at 20.51.19

DataRobotのJupyterタブを選ぶと、pythonとRのプロジェクトの作成画面が表示されます。今回はpythonで行なっていきます。

PythonのCustomModelスクリプトは大きく分けて2つの部分に別れています。一つはfitというトレーニングデータよりモデルを作成する部分、もう一つはpredictという予測を行う部分となります。今回は追加した1列を予測値とする予測モデルを作成すれば良いため、predictの部分のみに手を加えます。

先ずpredictの部分に書かれている既存の三行のモデルを削除してください。以下では行の前に#の印を挿入することでこれらの三行を読み込まない様にしています。

Screen Shot 2017-09-10 at 21.21.37.png

そして次の行に以下の様な一行のコードを追加してください。

return X['model1'].values.reshape(-1, 1)

コードの中でmodel1とある部分は新たに追加した特徴量の名前で置き換えてください。もうこれでこの特徴量のデータを読み込んで予測値とするというモデルが作成されました。後はCellの「Run All」でスクリプトを全て実行してください。

Screen Shot 2017-09-10 at 21.49.13.png

そうすると以下の様に今回作成した新たなモデルが動き始めますが、残念ながら失敗してしましました。

Screen Shot 2017-09-10 at 21.52.16.png

リーダーボードでこのモデルを見てみると先ほど新たに作成した特徴量セットで行われているのがわかります。このセットに新しく追加した列は含まれていないので、元の特徴量を選択して再実行して見ましょう。

Screen Shot 2017-09-10 at 21.55.45.png

今回はエラーなくモデルが作成されました。これで既存モデルの精度がリーダーボード上で表示/比較できる様になり、DataRobotのモデルと比べた際にどれぐらいの精度として位置しているかが一目でわかるようになりました。

Screen Shot 2017-09-10 at 22.00.39.png

この手法を用いる際の注意

この方法を使うとどのようなモデルでの簡単にDataRobot上で比較することができるので、大変手軽で便利な手法です。しかしIDEでモデルを作成する場合と比べた時に、一つ注意しなければならないことがあります。

今Jupyter IDEで作成した際の検定/交差検定/ホールドアウトで用いられている既存モデルの予測値は実際その場所で計算された予測値かどうか不明であるということです。もしかすると今回holdoutとなっているデータは実は既存モデルの中ではトレーニングデータであった可能性も否定できません。逆に今回トレーニングデータとなっているものが、既存モデルでは検定データであったものも多く存在しています。これが違うことによって既存モデルとDataRobotモデルでは公平な比較ができなくなってしまいます。

この問題は詳細な設定より「特徴量のパーティション」を使うと避けることができるのですが、この説明はまた次回にさせていただきます。

*1 : Jupyter IDEを利用することができるデータセットのサイズの上限は500MBとなっています。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中