Dataiku version10新機能　その２（無償ライセンスでできるところ）



Dataikuがversion10になりモデルの評価が強化されたということで使ってみました。
version10の新機能一通りについては[こちら](https://qiita.com/ayoyo/items/4744457918449fc921ce)に記載しており、「モデルの比較が楽に」で端折った部分が今回の記事です。

PoCでも実運用でも役立ちそうな機能があれこれ追加されています。
今回も、無償ライセンスで使えるところだけ記載していきます。

# データの違いによる、精度の違いを確認する
Evaluationレシピに新機能が追加されました。今までデータセットで出てきた部分が、GUIで生成されつつさらに機能追加されています。

モデルに対して単純にEvaluateレシピを指定すると、今までなかったEvaluation storeをOutputsとして指定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/ace9ba04-b76e-0d63-ae10-daa32cc5e321.png)

[CREATE RECIPE]押下後に、デフォルトで[RUN]クリックでEvaluationStoreという名前のEvaluation Storeが出現しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/98dfa6a1-a5f3-8fa3-1b82-0e79d1dae4b1.png)

Metricsの一覧表と図が表示されました。
これはこのまま、ダッシュボードへは載せられないようです。他プロジェクトへのシェアは可能。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/b8678afb-4730-1956-78dd-f6e7e1edb43e.png)


複数データに対してできるようですが、どうやってやるんだろう。Crush Courseのページでは、1Q~4Qの４データに対して実施して期ごとデータの精度の違いを確認といったことをしていました。
とりあえず、EvaluateStoreを再ビルドしたところ、Model Evaluationに2行目が追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/df9e372d-f254-86dd-bca9-d2c86f12f1b5.png)

さらにもう一回ビルドすると、棒グラフが線グラフに。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/f12f7203-fe0f-6470-a4ba-142e4b6768fe.png)



ここでは同じデータのままビルドしているだけなので同じ結果ですが、実際に使う時は、何らかの方法でEvaluationレシピで指定した入力データセットを変化させて、精度を見ていく感じになるのでしょうか。

ちなみに作成したModel Evaluation Storesは、以下から一覧で参照可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/500433f8-2f62-3bfc-b75c-03aa023e3a3b.png)

ところで、全く同じデータで3回やったはずですが、Data Driftが落ちているのは、DriftScoreの計算にランダムフォレスト使っているから多少ゆらぐのでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/abbcdde4-2416-fc8f-496b-74f2306807e2.png)

このEvaluation Storeは、StatusタブからMeetrics&Checksが使えるので、これを設定しておいて、シナリオに組み込むことでデータドリフト検出⇒通知みたいな仕組みができそうです。（check機能は有償ライセンス)

# 複数のモデル間での精度の違いを確認する

この機能は、同じプロジェクト上にある精度評価結果を、まるっと全部一覧表にして比較だドンする機能のようです。モデルを評価する時には、パラメータを変えたり、データを変えたり、いろいろ変えて評価すると思います。やりたいことは一つなんだけど、フロー内に複数のモデルやデータが点在していて結局どれが一番いいの？という時に、全部並べて比較といったことができます。


[Visual Analyses]>[Model Comparisons]から[+NEW MODEL COMPARISON]でモデルの比較を行えるのですが、さすがに全く違う結果を比較してしまわないように、Prediction typeが指定できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/f5348832-539c-c065-28be-0d785043c34b.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/d04c7713-c219-3900-8b38-0e37ee308b46.png)

さらに、どこのモデルを選択しますか？みたいな感じで選べます。その時、わかりやすいものを選ぶのがよさそう。Evaluation Storeからも選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/f1677e04-ca57-ab60-c24c-571697859dac.png)

Summary画面は一覧とMetricsの比較棒グラフが出力されます。最も良いと思ったものに、メダルをつけることができます。このメダルはユーザーが手動でつけます。

PERFORMANCEから、各モデルの性能が比較できますが、個人的にはMODEL INFORMATIONの比較ができるのが良いなと思いました。

例えば、Featuresでは、各モデルがどの特徴量を使っているかといったことが一覧でわかるようになっています。他にも、各モデルがどのパラメータ・アルゴリズムを使用したかも一覧で出力できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/cc2458d5-41fd-9b08-4255-41f09b7585af.png)

実際に分析していると、試行錯誤しているうちに大量のモデルが生成されるので、ちゃんと記録しておかないと何をどこまで試したかわからなくなったりしがちですが、この機能を使って整理できるのは便利だと思います。

ただ、比較対象のモデルを的確に選べるぐらいにプロジェクト内が整理されている必要はあると思います。

# ドリフト分析
これは、大事な、機能なんですよ。
今までは、プラグインという形で提供されており、こんな感じにデフォルトで分析できなかったのですが、それが今回よりデフォルトで組み込まれています。
実運用時における監視では必須機能だと思います。

Evaluation StoreでModel Evaluationをクリックするとドリフト分析へたどりつけるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/a5ecf19d-27cb-bfc5-cb46-14cc934a404b.png)

下図の赤枠部分にあります。それぞれの意味はこんな感じ。
Input data drift：入力データの分布の違いを検出
Prediction drift：出力データの分布の違いを可視化
Performance drift：算出した精度の違いを可視化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/ff60a12d-1183-7192-643e-74a128696e8d.png)

一番充実しているのは（もちろん）Input data driftです。
Input data driftのGrobal drift scoreの検出方法とか、結構おもしろいですよね。ランダムフォレストでCurrentとReferenceのデータをどれぐらい判別できるかやっていて、判別できなかったらデータドリフトなし、OK！という仕組みで計算しているようです。Grobal drift scoreは、判別したときのAccuracyなので、これは高いとダメなやつです。Lower is betterとありますが低すぎてもダメな気がします。

Grobal drift score以外にも、それぞれの特徴量に対するデータドリフト分析（Univariate data drift)や、データドリフトに寄与してそうな特徴量散布図（右上にいくほど怪しい）があるので、データドリフトがなぜ起きたかの分析に役立ちそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106215/e25bb35e-99da-dc13-cc23-e915a3dd029c.png)

ちなみにドリフト分析は、教師ありモデル限定の機能となっています。
Input data driftは、別に教師なしでも使えそうなので、一旦むりやり教師ありでEvaluation scoreを算出してからのData Drift検出できそう。（教師なし系だと、SVM系の検出アルゴリズムが使いたいという話も出てきそうですが）

# まとめ
 - 大量にモデルを作っても、うまく比較できる機能があるから大丈夫！ということで安心してモデル量産できそうです。しかも学習のタスクキュー機能により、PCスペックが低めでも夜の間に大量に生成できてしまう。
 - 実運用時にも便利なEvaluation機能やドリフト機能の実装は嬉しいです。よりロバストなシステムが構成できる機能がぞくぞく追加されてきた感あります。