機械学習での外れ値や異常値の扱いについて考えてみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

データ分析をする際には注意したいことの1つとして、外れ値の存在による影響があります。 これはもちろん、機械学習をする際にも手法によってモデルの精度に影響が出ることを意味しており、 ブラックボックス化されていて、気付かなったという事態も起こりえるものとなります。

また、外れ値だからと言って常に異常な値であるとは限らないケースもあるため、 外れ値と異常値を区別して考える必要がある場合もあります。

今回は、そんな外れ値や異常値について、考えていきたいと思います。

外れ値が何なのかを考える

何らかの定義に基づくものとしてではなく、他と比較して極端な値を外れ値と呼ぶケースが一般によくあります。 「外れ値を除外したい」といった時に、何が外れ値なのか明確でないまま何となく極端な値を削除したいケースです。

たった1つの外れ値が全体に大きな影響を及ぼしてしまうケースは実際に多くありますが、 場合によって都合の悪いデータを恣意的に消すために利用したいという可能性もあるため、これでは困ってしまいます。

では、何を持って外れ値とするのかいくつかのパターンで考えてみましょう。

可視化してみる

一番シンプルな方法は、データを可視化してみることです。 ヒストグラムや散布図で可視化してみると以下のような不穏な情報が出てきます。

箱ひげ図のIQRを利用する

箱ひげ図はデータ可視化の方法のひとつで、

  • 第1四分位数と第3四分位数の範囲を箱で囲む
  • 中央値(第2四分位数)のところに線を引く
  • 最大値と最小値までひげを伸ばす

という表現になります。 この箱ひげ図には、ひげの伸ばし方を最大値と最小値にするのではなく、 IQR(第3四分位数 - 第1四分位数の1.5倍)の範囲までとしてそこから外れる値を「・」で表現するという描き方があります。

これによって「・」で表現された部分の有無やその値によって、 外れ値として扱えそうだという確認ができます。

平均と標準偏差からどれだけ外れてるかを考える

箱ひげ図におけるIQRと似たような考え方ではありますが、 同様にデータの分布から考えることも可能です。

正規分布を仮定したときに、平均から外れた値ほど出てくる確率が低くなります。

この性質によって平均μ, 標準偏差σとしたときに特定の範囲に含まれる確率が計算できます。

  • μ ± σの範囲に約68.27%のデータが含まれる
  • μ ± 2σの範囲に約95.45%のデータが含まれる
  • μ ± 3σの範囲に約99.73%のデータが含まれる

この性質を利用して、2σや3σ以上外れたデータを外れ値として判断するケースがあります。

また、詳細は割愛しますが、データが正規分布Smirnov-Grubbs検定によって外れ値を検出するという方法もあります。

データの分布が正規分布に従ってない場合でも、 チェビシェフの不等式によって任意の分布においてkσから外れる確率は1/k^2以下となります。

これによってμ ± 2σの範囲は75%(1 - 1 / 2^2 = 0.75)のような計算ができます。

いろんな情報から確認しよう

箱ひげ図で見たところ以下のような外れ値がありそうなデータがありました。

これを別なデータと一緒に散布図で見ると以下のような状態になっていました。

これは横軸に対して縦軸のデータは指数関数の関係になっており、 値が大きくなりやすいので大きい値の方に多数の外れ値のようなものが出てる状態です。

データの確認を怠ると、このような状態を見逃す可能性があります。

外れ値と異常値について考える

外れ値は他から極端に離れてそうな値だということが分かりました。 では、外れ値は捨ててしまった方がいいのでしょうか?

外れ値と混同して扱われる言葉に「異常値」というものがあります。 異常値は誤った観測などによって発生する、通常では起こりえないデータとなります。

ここで、考えたいのが「外れ値であっても異常値ではない」ことと、「外れ値じゃないけど異常値ではある」ということです。

外れ値 異常値
× ×
×
×

例えば、以下のような状態を考えてみます。

  • あるIoT機器が通電状況をデータとして確認して取得しています
  • データを確認したところ正常な範囲よりも極端に大きな電流が流れている瞬間が時々ありました

さて、この極端に大きな電流が流れている瞬間は機器の問題で誤ったデータが送信されている状態でしょうか?

これは電源をオンにした時の突入電流でした。 そのため、これをおかしな値として捨ててしまうといつ電源をオンにしたのかが取得できなくなります。

別な例を考えてみましょう

  • 5段階評価のアンケートを取りました
  • データの分布を確認したところ極端に外れた値は確認できませんでした
  • ただ、1~5の5段階なのに、たまに6が入ってます...

おそらく可視化したり、IQRや標準偏差で見ても外れた値にはならないでしょう。 しかし、本来は入ってこないはずの値です。

このように、外れ値と異常値が同等のものであると言えない状況は多々あります。 何が正常な値で何が除外すべき値なのかはデータの性質やドメイン知識などにも依存するため、 特定の手法のみで機械的に除去するのはあまりいいやり方とは言えません。

おわりに

今回は外れ値と異常値について考えてみました。 「この場合はこうすればいい」という機械的に判断可能な話とはなりませんでした。

機械学習やデータ分析はそれ自体が特定の状況やドメインを個別に意識したものではなく、 統一的な手法が使える仕組みを提供するものとなります。 そのため、対象となるデータやその生成過程に関してはしっかり意識して使ってやる必要があります。