今回のプロジェクトでは、データ全量および正例が少ないケースです。
具体的には、「全量:8,000行/TRUE:150行+FALSE:7850行」程度の割合です。
負例が圧倒的に多いため、負例と正例のバランスを合わせるための機能として件名の2機能があるという認識です。そこで、
①まず認識が合っているか
②(①が合っている前提)今回のデータ量であればどちらの機能を使うべきなのか
③「ウェイト」設定する場合、以下のどちらが正しいでしょうか
(1)TRUE:1 FALSE:10
(2)FALSE:1 TRUE:10
以上、ご教示いただけますと幸いです。
解決済! 解決策の投稿を見る。
1040727さん
ご質問ありがとうございます。DataRobotの佐藤です。
まずご質問に回答させていただきます。
①ご認識の通りです。
②一概には言えませんが、データ量もそこまで多くないのでスマートダウンサンプリングはなしで、ウェイトを試してみることをお勧めします。
③ウェイトを設定する場合は基本的に逆比の関係で設定していただきます。つまり、今回のケースですと
True:7850/150 = 52.333
False:1(こちらを1として基準にします)
と設定していただければと思います。
②についての補足ですが、それぞれの役割は以下のようにご理解いただければと思います。
スマートダウンサンプリング:不均衡データに対して、サンプル数を減らし計算時間を早くすることができる。スマートダウンサンプリングを行うことで、精度改善を見込めるケースは少なく、価値としては利用するデータ数を減らすことでモデリングに割く時間の削減が挙げられます。詳細は以下のリンク先でも述べられていますのでご参考になればと思います。
高度なオプション「ウェイト」設定について:こちらはご認識の通りモデル化する時の重みを調整するものになっており、場合によっては精度改善が見込めるケースがございます。つまり各値ごとを同一の重さで考えるために逆比の関係性になっているのが適切なものになります。
ご質問の回答になっていますでしょうか?
早速にありがとうございます!
③ウェイトを設定する場合は基本的に逆比の関係で設定していただきます。つまり、今回のケースですとTrue:7850/150 = 52.333
False:1(こちらを1として基準にします)
と設定していただければと思います。
こちら大変参考になりました。私のご質問したパターンだと(2)(※失礼しました。質問本文が(1)も(2)も同じでしたので本文も直してあります)であり、かつウェイトの付け方とすると佐藤さんに教えていただいた「FALSE数/TRUE数」にて重み設定すれば良い、と理解いたしました。もし間違っていればまたご指摘下さい。
②についての補足ですが、それぞれの役割は以下のようにご理解いただければと思います。
スマートダウンサンプリング:不均衡データに対して、サンプル数を減らし計算時間を早くすることができる。スマートダウンサンプリングを行うことで、精度改善を見込めるケースは少なく、価値としては利用するデータ数を減らすことでモデリングに割く時間の削減が挙げられます。
高度なオプション「ウェイト」設定について:こちらはご認識の通りモデル化する時の重みを調整するものになっており、場合によっては精度改善が見込めるケースがございます。つまり各値ごとを同一の重さで考えるために逆比の関係性になっているのが適切なものになります。
ここは以前口頭にてお聞きしていた部分だったのですが、認識の確認のためにお聞きしたかったものです。
このように文章に残る形にしていただいて大変助かりました。趣旨からしますと、私が求めているやり方は「ダウンサンプリングではない」ことが確認できました。
引続き色々とご指導のほど、よろしくお願いいたします!
1040727さん
ご回答になっていたようでよかったです!
また何か、ご不明点などございましたらこちらのコミュニティでお気軽にご質問いただければと思います!
機能に関してはご認識通りです。
ただ、今回のようなデータセットの全量自体が大きくなく不均衡な場合、正負のバランスを取るアプローチは気を付けた方が良いかもしれません。(ダウンサンプリングもウェイトもむしろ悪影響が懸念されます)
このようなケースで注意すべきは、モデルの精度評価や解釈が不安定になることです。
安定した評価、解釈を得る手段は以下3つが考えられます。
①交差検定の分割数を増やす(10程度)
②プロジェクト開始時の乱数シードを変えて何度か実行し評価する
③異常なデータを丁寧に取り除く
(特に教師フラグで不整合なもの(例えば、本来はTrueだが、何らかの理由でFalseになっているものなど)を取り除く)
アドバイス、本当にありがとうございます。以下についてもお教え頂ければ幸いです。
①交差検定の数を増やす
→この場合、ダウンサンプリングもウェイトもかけない状態で、交差検定数を増やせば良いでしょうか。またはどちらかの作業をした上で交差検定数を増やせば良いでしょうか
②乱数シードを変える
→すみません、具体的にどのようにすればよろしいでしょうか、、、何らか具体例を列挙いただけますとありがたいです。
③異常データの除去
→やはりこれは一つ一つ、業務に明るい人間を入れて手間をかけて行う必要があるという理解でよろしいでしょうか。それとも何らかコツがあるのでしょうか。
また、ウェイトについてはまったく意味がないものでしょうか。
例えば、TRUE10/FALSE1程度の割合であれば意味あるものでしょうか。それともそういう割合の問題ではないでしょうか。
色々とお聞きして申し訳ありませんが、どうぞよろしくお願いいたします。
ご返信ありがとうございます!
①点目
⇒ダウンサンプリングもウェイトもかけない状態で実行します。
プロジェクト開始前の高度なオプションから設定します。
②点目
プロジェクト開始前の、高度なオプション⇒その他
に、ランダムシードの項目があります。
その数字を変えて(値は何でも構いません)何度かプロジェクトを作成します。
その後、プロジェクト間でモデルを比較し、特徴量のインパクト上位の順位に変動がないか、
重要な変数に関して特徴量ごとの作用の傾向が異なっているものがないか確認します。
その過程で、重要でない、かつ、解釈に一貫性のない特徴量を取り除くなどします。
最終的なモデルは、プロジェクト間の平均的な振る舞いに近いモデルを選択します。
③点目
こちらは仰る通り手間をかけます。
コツがあるとすると、予測を外しているレコードで予測の説明を確認し仮説を立てることはあります。
(手間ですが、データ量の大きくないときは、データを丁寧に処理するのが重要です。一つのレコードが学習に与える影響が大きいので。。)
>また、ウェイトについてはまったく意味がないものでしょうか。
今回はまずは考慮しないで良いと思われます。
ウェイトは、外したくないレコードや、重要視したいレコードがある場合に(ある種無理やり)使うことが多いです。
こちらこそ返信ありがとうございます!
1点目、2点目への回答ありがとうございます。
ひとまずはウェイト設定を外し、特徴量項目は固めてしまおうと思いますが、もし何かお気付きのことありましたらまた教えていただけますとありがたいです!