キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
DataRobot コミュニティ

不均衡データへの対処法について

TakuyaOmi
青色LED

不均衡データへの対処法について

不均衡データへの対処法として、ダウンサンプリング+バギングが有効であるとの知見が多くありますが、DataRobotでの実装は可能でしょうか。

 

複数個のダウンサンプリングしたデータセットを作成して、それをDataRobotでそれぞれ学習させて結果をアンサンブルさせるイメージなのですが、DataRobotのスマートダウンサンプリング機能+アンサンブルモデルの作成で、上記の「ダウンサンプリング+バギング」をしていることになっているのでしょうか。

 

参考にしたWEBサイト

https://upura.hatenablog.com/entry/2019/01/12/193000

 

 

0 件の賞賛
3件の返信3
Shuhei_Uesugi
データサイエンティスト
データサイエンティスト

@TakuyaOmi -san

 

問い合わせありがとうございます!まず不均衡データへの対処法として、ダウンサンプリングが実際の分析において精度向上に寄与する面は少ないです。

ダウンサンプリング:精度を落とさず・計算時間を減らすため

バギング:精度を上げるため

という形になっており、DataRobotにおいては、不均衡データへの対応の鉄板パターンとしてbalanced bootstrapを採用しており、balancedから始まるブループリントがこの動作をおこなっているものになります。

 

>DataRobotのスマートダウンサンプリング機能+アンサンブルモデルの作成で、上記の「ダウンサンプリング+バギング」をしていることになっているのでしょうか。

こちらは動きが違っていまして、単純なダウンサンプリングだと、1)過大 or 過小評価が発生する。2)検定データの分布が現実と変わるという二つの問題が生じる可能性があります。そこでDataRobotではうまくウェイトを利用したダウンサンプリング(=スマートダウンサンプリング)を使用しております。

不均衡なデータにおいてもDataRobotは対応した処理を行なっていますので、特にチューニング面で気にしていただく必要はございません。※最適化指標はDataRobotが自動的に判定したもののままで。

ご不明点ありましたら、追加で気軽にご質問ください!

@Shuhei_Uesugi  さま

 

ご返信ありがとうございます。

 

  • ダウンサンプリング:精度を落とさず・計算時間を減らすため
  • バギング:精度を上げるため

 

まず、上記については自身の認識に誤りがないことを改めて確認出来ました、ありがとうございます。

 

また、DataRobotでの不均衡データの処理においては、ユーザーがチューニングをせずとも、スマートダウンサンプリング機能を有効にしておけば特段問題ない、ということも理解しました。

 

そのうえで追加でご質問させてください。

現在約4GBを超える不均衡データを扱っており、データを読み込むのに中々時間を要しています。事前にpythonなどでダウンサンプリングを行ってから投入することも考えたのですが、ご回答いただいたスマートダウンサンプリング機能を有効活用するためにも、時間がかかるのは許容して、全量データを投入して学習させた方が良いでしょうか。

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

@TakuyaOmi -san

 

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

大きく分けて3つのアプローチがあると思います。

①DataRobotのスマートダウンサンプリングを利用

ご認識の通り、データの読み込み時間を許容できる場合でしたら、全量データを投入するのが良いと考えられます。

(どれくらいのデータ量が適切か事前に確認される場合は、こちらの学習曲線の機能をご利用されるのをお勧めします。具体的には、全体の何%かを事前にサンプリングし、DataRobotに投入した後、学習曲線を見て適切なデータ量を決めるということを指しております!)

 

②手動ダウンサンプリング を利用

データの読み込み時間が問題になり、正例が少なくない場合はデータ全体から何%かを手動でサンプリングし(正例と負例の比率を厳密にされたい場合は層化抽出)、DataRobotに投入するのが良いと考えられます。

データの読み込み時間と上記①でご紹介した学習曲線の両方を見ながら調整されることをお勧めします!

 

③手動ネガティブダウンサンプリング+ウェイトを利用

データの読み込み時間が問題になり、正例が少ない場合は、「スマートダウンサンプリング」を利用せずに、こちらの方法をおすすめします。単純なネガティブサンプリングですと、ひとつ前の投稿で記載しましたように、1)過大 or 過小評価が発生する。2)検定データの分布が現実と変わるという二つの問題が生じる可能性があります。そこでウェイトを利用して、これらの問題が生じないようにしています。

具体例を用いて解説させていただききます。

例) 正例:1,000件、負例:1,000,000件、負例のダウンサンプリングの割合:50%

ウェイトととしては、正例のウェイトを1とし、負例のウェイトをダウンサンプリングした割合の逆数を設定ください。

正例:1、負例:2

 

ウェイトの設定に関しては、高度なオプション>その他から設定可能です。

こちらに関しては、以下のリンク先でも議論されていますので、ご覧いただけるとさらに理解が深まると思います!

スマートダウンサンプリングと高度なオプション「ウェイト」に関して

他に追加でご質問ありましたら、いつでもご相談ください!どうぞよろしくお願いします。