キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

スマートダウンサンプリング時の正例数について

zawa
イメージセンサー

正例割合の少ないデータのためDataRobot上でスマートダウンサンプリングを行ったのですが、モデル作成後に「データ」タブのターゲットで確認した正例数と、「モデル」タブでモデル評価の混合行列でFN+TPを見たときの正例数が異なっており、どういった仕様となっているのかご教示いただきたいです。

---------------------------------------
▽アップロードデータ
データ行数158945/正例509(約0.32%)

▽ダウンサンプリング後データ(データタブのターゲットで確認)
データ行数4308/509(約11.8%)

▽ダウンサンプリング後データ(モデルタブのモデル評価で確認)
データ行数4308/15(約0.35%)※データ選択:交差検定
データ行数1078/4(約0.37%)※データ選択:ホールドアウト
---------------------------------------

7件の返信7
Miogawa
データサイエンティスト
データサイエンティスト

@zawa さん

ご質問ありがとうございます。

スマートダウンサンプリングでは、自動的にweightがDataRobotの中がサンプリングレートに従って生成されます。

990がFALSE、10がTRUEである場合

ダウンサンプリングしてFALSEから500行を取り除き、490行のFALSEと10行のTRUEを用いると

class_F_weight = (990 / 1000) / (490 / 500) = 0.99 / 0.98 = 1.0102

class_T_weight = (10 / 1000) / (10 / 500) = 0.01 / 0.02 = 0.5

zawaさんの例ですと、class_F_weightは1.1145、class_T_weightは0.0302程度になります。

スマートダウンサンプリングや手動でweightを指定した際には、混合行列はweightに従った行数が表示されますので、zawaのケースですとサンプリングした後の行数に対して、正例には0.0302を掛けた行数が表示される形となります。

zawa
イメージセンサー

@Miogawa さん

丁寧にご回答いただきありがとうございます。
以下の認識で相違ないでしょうか?間違いありましたらご指摘いただきたいです。

・モデル作成に使用しているデータはデータタブで確認しているとおり「データ行数4308/正例数509」
・モデル評価においてはダウンサンプリング前の正例割合を加味したweightを考慮した内容で表示される(ROC曲線,予測分布,混合行列など)
・weightはモデル作成時には考慮されない(Datarobot上でスマートダウンサンプリングを行った場合と事前に同様のダウンサンプリングを行ってアップロードした場合では、理論上同じモデルが出来る)

また、設定を変えることで正例にweightをかけない状態の混合行列や予測分布を見ることは可能なのでしょうか?

0 件の賞賛
Miogawa
データサイエンティスト
データサイエンティスト

@zawa さん

・モデル作成に使用しているデータはデータタブで確認しているとおり「データ行数4308/正例数509」

上記データタブで表示されたものからリーダーボードの各ブループリントのサンプルサイズに該当する部分を使用します。


・モデル評価においてはダウンサンプリング前の正例割合を加味したweightを考慮した内容で表示される(ROC曲線,予測分布,混合行列など)

ご認識の通りです。


・weightはモデル作成時には考慮されない(Datarobot上でスマートダウンサンプリングを行った場合と事前に同様のダウンサンプリングを行ってアップロードした場合では、理論上同じモデルが出来る)

モデル作成時とリーダーボードでの指標計算で利用されます。指標はweightが動作すると「加重〜〜」となります。

なので事前にダウンサンプリングしてweightなしの場合とでは動作も変わります。weightを設定するとそれに従った表示形式になるので、その後の切り替えはできません。ただweightは基本的にはその行の出現回数への重みをつけたものなので、検定であってもその重みに合わせた行数で表示するデザインとなっています。

zawa
イメージセンサー

@Miogawa さん

迅速で大変分かりやすいご回答ありがとうございます!
モデル作成時にも考慮される旨も理解いたしました。

もう1点だけ、モデル評価の見方についてご教示いただきたいです。
(初歩的なところですみません...!)

・混合行列
⇒もともと少ない正例に重み(今回の場合0.0302)をかけ合わせた結果、混合行列上での正例が一桁件程度とさらに少なくなり読み取りづらいと感じてしまうのですが、適切に読み取るコツなどがあればアドバイスいただきたいです。

・予測分布
⇒混合行列上の一桁件のプロットではなく、モデル作成に使用した数百件分の分布全体に重みを掛け合わせている(確率密度分布は変わらない)という認識であっていますでしょうか?

0 件の賞賛
Miogawa
データサイエンティスト
データサイエンティスト

@zawa さん

初歩的よりもだいぶ高度な部分なので!

・混合行列
⇒もともと少ない正例に重み(今回の場合0.0302)をかけ合わせた結果、混合行列上での正例が一桁件程度とさらに少なくなり読み取りづらいと感じてしまうのですが、適切に読み取るコツなどがあればアドバイスいただきたいです。

こちらスマートダウンサンプリングだと計算上1を下回るウェイトができて、行数として小さくなって見えづらいという問題は実際に起こるので、そこを嫌うのであれば少し手間ですが外部でダウンサンプリングして、それを元に同じ比率で正例を1としたウェイトを作っていただくと数字は大きくなり見えやすくなるかと思います。

今回の場合0.0302と1.1145なので、1と36.90397とするイメージです。


・予測分布
⇒混合行列上の一桁件のプロットではなく、モデル作成に使用した数百件分の分布全体に重みを掛け合わせている(確率密度分布は変わらない)という認識であっていますでしょうか?

はい、こちらもご認識の通りとなります。

 

ダウンサンプリング自体は正例が極端なケースによく取られる手法ですし、DataRobotでもデータサイズが大きいと自動でスマートダウンサンプリングが走ってモデリング時間を短縮させる動作となります。ただ、あくまで精度をある程度キープしたままモデリング時間短縮が目的であって、精度がダウンサンプリングによって上がるということはめったにないので、今回の行数であればデータサイズもそこまで大きくないでしょうし、そのまま入れてしまってスマートダウンサンプリングもオフにしてしまうのも有効かと思います。

zawa
イメージセンサー

@Miogawa 

ありがとうございます、ご説明いただいて大変理解が深まりました!

 

>精度がダウンサンプリングによって上がるということはめったにないので、
>今回の行数であればデータサイズもそこまで大きくないでしょうし、
>そのまま入れてしまってスマートダウンサンプリングもオフにしてしまうのも有効かと思います。

こちらのアドバイスもありがとうございます。
参考になりました!

0 件の賞賛
Miogawa
データサイエンティスト
データサイエンティスト

@zawa さん、

以前回答したスマートダウンサンプリングでつけられるウェイトの計算式ですが、サンプリングしていない少数クラスのほうの数値が変化するというのが直感とあわないという意見をいただいたことから、直感に合う形で、少数クラスの方はウェイト"1"、サンプリングした方は、その割合の逆数がウェイトとなるような動きに変わりました。なので、スマートダウンサンプリングによって正例数が変わるということはなくなり、仮に100分の1に片方のクラスをDataRobot内でダウンサンプリングした場合には、そのままダウンサンプリングした側のクラスには100のウェイトが付く形となります。

app.datarobot.comをご利用でしたら以下のリリースノートに変更点が書かれていますので、合わせてご確認いただければと思います。オンプレ版であれば6.3.0からの変更となります。

https://app.datarobot.com/docs-jp/release/release-notes/6.3/v6.3.0.html#matrix-smart

0 件の賞賛