大きい外れ値が含まれたデータは行ごと全て削除するべきでしょうか?
場合によると思いますね。外れ値を機械的に全部処理してしまうのは恣意的なモデルになってしまう恐れがあります。(その外れ値にもしかしたらちゃんと意味があるかもしれませんし。)
私はDataRobotでは外れ値による悪影響を避けるためにビニングやlog化やリジット変換などの手法を取ってくれると聞いたので、明らかな異常な値で無ければそのままにして、そのレコードの計測ミスなどの裏付けが取れた場合には削除するということをしています。
観点を変えて外れ値について議論してみるというのも良いと思っています。
例えば、
外れるには、外れる理由がある場合もあり、その理由を突き詰めると考慮できていないビジネスルールにたどりつく事も、少なくありません。
そういった事実がビジネスルールとして正しく、「意図的に外れている」のであれば、
といった、ビジネスルールを説明変数に追加することも可能です。
なので、トンチの様な感じになってしまうのですが、
変化球な回答となってしまいスミマセン。
議論するべきとの発想いいですね!
どこまでこだわるかという視点だと、特徴量にある外れ値であれば特徴量のインパクトの上位にくるなどしない限りよほど気合い入れるモデリングでない限りくまなくを探求しませんが、ターゲットにある外れ値は、絶対に議論したいですね。
外れ値がターゲットにある時点で回帰の問題になりますが、回帰の問題ではターゲットの分布は最適化指標を決める上でも重要で、変な外れ値がモデルの収束を邪魔してしまう可能性になります。2stageモデルにすることも視野に入れながらどうしてその外れ値が出ているのか、どれくらいの頻度で出るのかはターゲットの場合には分析のスタートでみたいかなと思います。
どの変数に対して、外れ値を丁寧に扱うか?も重要ですね。
やはり、ターゲット変数 と 上位特徴量は丁寧に扱いたいです。
ターゲット変数の外れ値 と 2stageモデルというキーワードを聞いて思い出したのですが、
回帰問題において、損害保険の保険金のように、まれに事象が起き、その時に数値が出現するといった
といった場合に、普通に回帰すると大量のゼロが邪魔をするZero-Boost問題が発生しますが。
DataRobotの場合、
という点に驚いた記憶があります。
AutoML製品も様々出てきていますが、こういったZero-Boost状態でも、大量のゼロが学習の邪魔にならないよう、モデルと最適化指標の両面からユーザを支えてくれる、DataRobotはやはり凄いなと以前思いましたw
保険業界でよく利用される、frequency severity modelがブループリントに入っているあたりが、成り立ちと歴史を感じさせてくれますw
Dependent-frequency-severity-modeling-of-insurance-claims.pdf
製品の歴史としては、もともとゼロブースト問題にはTweedie Devianceを損失関数で利用することによって対応していたのですが、そこからfrequency severity modelが加わりこういうエッジな部分でのエンハンスがあることに感動したのを今でも覚えています。
frequency severityモデルはオートパイロットでゼロブースト問題を検知すれば自動で動くのでよく知られていますが、実は高度なオプションにイベント数という項目があり、ここではまさにfrequencyに該当する発生回数を明示的にセットすることができます。発生頻度がバラバラでそこが正確に捉えられいるゼロブースト問題ではより精度をあげることができます。
以下マニュアル抜粋ですが、
イベント数は、ゼロでないイベントの頻度に関する情報を追加することによってゼロ過剰ターゲットのモデリングを向上させます。これは、頻度 x 強度モデルで特別な列として扱われます。頻度ステージでは、この列を使用してゼロでないイベントの頻度をモデル化します。強度ステージでは、列内のゼロでないイベントの強度を正規化し、その値をウェイトとして使用します。これは、頻度と強度の係数の解釈性を向上させるために特に必要です。
@Miogawa
ありがとうございます!!
なるほど。ターゲットにゼロ過剰な列を指定すると、オプションで指定できるんですね。
勉強になります!
「アンスコムの例」におけるデータ例Ⅳのようなケースに気づかず無意味なモデリングを行うリスクを考えないといけないかなと思っています。
その意味では、「外れ値に気づく」こと自体がまずは大事。自分の経験では、「外れ値をうまく処理できていない」よりも「外れ値に気づいていない」ことで問題になることが遥かに多い気がします。
外れ値の議論とはずれますが、アンスコムの例はすごく示唆に富んでいます。
(どのデータからもほぼ同じ回帰モデルが得られ、相関係数もほぼ一致する)
こうなると外れ値をどう見つけるのがポイントですね。
モデリング前の作業としては
モデリング後としては
シンプルにはこんなところをみています。特にモデリング後の外れ値探索は見逃した外れ値を見つける手伝いになったりするので列数が膨大な時などは特に便利です。