はじめに
前回は欠損値について考察しましたが、今回は同じく機械学習で会うことの多い外れ値について考えていこうと思います。データエンジニアリング手法については今回も他の記事にお任せします。
外れ値とは?
外れ値自体は単に値が他のデータとかけ離れているということです。見つけ方としてスミルノフ・グラブス検定など統計的検定手法はありますが実際に何を外れ値として扱うかというのは製造や医療など事業分野によって変わるようです。これは外れ値だからとなんでもかんでも対処してしまうとデータから現実の事象を切り離してしまう恐れがあるからです。欠損値のところでも触れましたがデータが正確に取れていることを前提とした場合、安易なレコード削除や加工は現実を再現しているデータを改変することにもなるので慎重であるべきと思います。
やはり確認から始める
欠損値の時と同様に何故外れ値として出てきたかをデータオーナーまたはデータ有識者に確認することが重要だと思います。簡単な確認順としては以下が考えらえれます。
- 業務上発生しうる外れ値か?
- 発生する頻度はどれくらいか?今後も発生するか?
- 発生した場合のビジネスフローは他のデータと同様か?
自社の例ですと特定のお客様が大量購入していただいた結果、金額項目が外れ値として統計で出てきたことがあります。気をつけなければいけないのはある項目が外れ値となっていた場合に関連項目はあるか?ということだと思います。例えば独立した2項目の[単価]と[数量]を乗算した[トータル金額]という項目があった場合、トータル金額だけが外れ値となることもあります。関連項目があった場合はそちらの確認もする必要があります。
外部購入データやオープンデータも可能な限り発生理由を確認することが求められます。
外れ値の本領は発見できること?
機械学習プロジェクトではEDA(探索的データ解析)を行いますが、まずここで外れ値を見つけることができます。その結果をビジネスの担当者に報告するわけですが、これがとても効果的だと思います。何故外れ値になっているのか?他データと分けて対応しなければならないケースなのではないか?といったビジネスそのものの見直しが出来るからです。データ分析を進めていない場合、データの中身について各担当者は頭の中だけで個別に理解していることが多いと感じます。EDAの結果を報告することにより情報を共有して対処することが可能になります。
機械学習プロジェクトで実際にあった外れ値
- 売上総金額が高額になっている
- サポート残日数が余りにも長い
- サイト閲覧回数が非常に多い
- 値引き率がゼロ過剰
幸いというべきか、ターゲット項目に外れ値があったことはありませんでした。
機械学習のターゲット項目が外れ値であった場合はより深い議論が必要です。自社プロジェクトでもし発生したら書こうと思います。
機械学習ではどう外れ値に対応するか?
データ分析を進める場合の対応方法に絞って書きますが、業務有識者に確認が取れるならそれが一番です。私自身がやったことあるのは外れ値ではない上限値に一律設定するという単純な方法だけですが、そういった対処をした場合には[外れ値発生フラグ]といった項目を対処した項目ごとに持たせるのは有効だと思います。または上限値設定などはせず[外れ値発生フラグ]を持たせるだけにするなど、対処方法は色々あると思うのでこれは業務有識者に確認しながら試していくしかありません。
また、必ず対処すべきかというとそんなこともないと思います。
該当項目が分析モデルに大きな影響を与えていないのなら対処しないのも選択肢です。
おわりに
前回同様、記事では私自身の機械学習プロジェクトの経験に基づいて記載しています。
データサイエンティストにとってデータはある意味ご馳走ですが、データオーナーや業務有識者にとってデータは業務成果物、彼らの仕事の成果です。それを忘れないようにデータに対処していくことがビジネスにおける機械学習では求められていると信じています。