外れ値の処理
数値の列について、平均から大きく離れた値を含む行を見つけ、削除・抽出・印付けのいずれかをします。入力ミスの桁違いを取り除く、異常な取引を洗い出す、といった使い方をします。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
| 判定閾値 | データ |
出力が 2 つあります。 2 つ目の「判定閾値」には、外れ値かどうかを分けた上限と下限の値が入ります。どこで切ったのかを確かめたいときに使ってください。中身は次の 3 列です。
| 列 | 内容 |
|---|---|
列名 | 判定した列の名前 |
閾値下限 | これ以下なら外れ値 |
閾値上限 | これ以上なら外れ値 |
「グループごとにモデルを作成する」を on にしたときは、これにグループの列が加わり、グループごとに 1 行ずつ出ます。
Spark エンジンでも動きます。
設定項目
「オプション」はチェックを入れるまで中身が出ません。 見出しの横のチェックボックスを on にすると、グループごとにモデルを作成する / グルーピングする列を選択 が出ます。
- 処理タイプを選択
- 見つけた行をどうするか。既定は外れ値を含む行を削除です。
- 手法を選択
- 標準偏差σのn倍を閾値にするのみです。四分位など、ほかの手法は選べません。
- nを入力必須
- 平均から標準偏差の何倍までを「外れ値でない」とするか。整数だけです。既定値はありません。
- 処理対象列を選択必須
- 判定する列。数値の列だけが選択肢に出ます。削除のときは複数選べ、抽出・フラグ立てのときは1 列だけです。
- グループごとにモデルを作成する
- on にすると、グループごとに平均と標準偏差を計算します。店舗ごと・商品ごとに基準を変えたいときに使います。
- グルーピングする列を選択
- 「グループごとにモデルを作成する」が on のときに出ます。複数選べます。
判定のしかた
対象列の平均と標準偏差を計算し、次の 2 つの値を閾値にします。
閾値下限 = 平均 − n × 標準偏差閾値上限 = 平均 + n × 標準偏差閾値下限以下、または閾値上限以上の値が外れ値です。閾値ちょうどの値も外れ値に入ります。
| n | 外れ値になる割合の目安(値が平均のまわりに釣鐘形に散らばっているとき) |
|---|---|
| 1 | およそ 32% |
| 2 | およそ 5% |
| 3 | およそ 0.3% |
3 がよく使われます。 小さくすると普通の値まで外れ値になり、大きくするとほとんど引っかかりません。
値がそろっている列・空欄のある列
うまく判定できない 3 つの場面
- 対象列の値が全部同じとき
- ばらつきが
0になるので、閾値上限と閾値下限が両方とも平均に一致します。閾値ちょうどの値も外れ値なので、全部の行が外れ値になります。「削除」を選んでいると 0 行になります。 - 対象列に値が 1 つしかないとき(グループの行が 1 行だけのときを含む)
- ばらつきが計算できず、閾値が決まりません。その行は外れ値になりません。
- 対象列が空欄(欠損値)のとき
- 「グループごとにモデルを作成する」が off なら外れ値になりません(削除しても残り、抽出には出てきません)。on にすると外れ値として扱われます(削除すると消え、抽出に出てきます)。空欄の行をどちらでも同じに扱いたいときは、先に欠損値処理で消すか埋めてください。
処理タイプの違い
| 処理タイプ | 出力 | 対象列 |
|---|---|---|
| 外れ値を含む行を削除 | 外れ値でない行だけ | 複数選べる |
| 外れ値を含む行を抽出 | 外れ値の行だけ | 1 列 |
| 外れ値を含む行にフラグ立て | 全行。外れ値フラグ 列が増える | 1 列 |
フラグ立てでは 外れ値フラグ という列が増え、外れ値の行が 1、そうでない行が 0 になります。消す前に中身を見たいときはこれを使ってください。
複数の列を指定できるのは削除のときだけです。その場合、どれか 1 つの列でも外れ値ならその行は消えます。
行の順番はどの処理タイプでも入力のままです。
グループごとに基準を変える
「グループごとにモデルを作成する」を on にすると、グループごとに平均と標準偏差を計算します。
店舗によって売上の規模が違う場合、全体で判定すると小さい店舗の値がすべて外れ値になってしまいます。グループに 店舗 を指定すれば、店舗ごとの基準で判定されます。
エラーと対処
n を入れていない
n が空のまま実行しようとしたとき、フォームに出ます。
必須項目です。
直し方 — 3 のような整数を入れてください。
n が整数でない
小数や文字を入れたとき、フォームに出ます。
整数で入力してください。
直し方 — 2.5 のような小数は使えません。整数に丸めて入れてください。
対象列が決まらない
処理対象列が空のまま実行したとき、または選んだ列が入力にないときに出ます。
対象の列が選択されていません。
直し方 — 数値の列を選び直してください。数値の列がない場合は、列の型変更で数値にしてから使います。
選んだ列が見つからない
「外れ値を含む行を削除」の処理対象列、またはグルーピングする列の指定に当てはまる列が 1 つもないときに出ます。
対象の列が存在しません。
直し方 — 列を選び直してください。前の処理で列名を変えた・列を消したときに起きます。
よく使う例
1. 桁違いの入力ミスを取り除く
お題 — 金額に 1 桁多い行が混ざっている
入力 — 金額 が 1000 1200 1100 1300 12000 の 5 行(最後が桁違い)
設定 — 処理タイプ「外れ値を含む行を削除」、n 3、対象列 金額
出力 — 1 行も消えません。「判定閾値」は 閾値下限 -11240.67 / 閾値上限 17880.67 で、12000 は内側です
平均が 3320、標準偏差が 4853.56 と、桁違いの 1 件に引きずられて大きくなっているためです。n を 2 に下げても閾値上限は 13027.11 で、やはり消えません。
行数が増えると効くようになります。 同じ 12000 でも、まわりに 1000 前後の行が 19 件あれば平均 1654.5・標準偏差 2436.32 となり、閾値上限 8963.46 を超えて外れ値になります。
数件のデータに対しては使えない機能だと考えてください。 行が少ないときは条件で行をフィルタで 金額 >= 10000 のように値を直接指定する方が確実です。
2. 消す前に中身を見る
お題 — どの行が外れ値と判定されるのか先に確かめたい
入力 — 金額 列を持つ明細
設定 — 処理タイプ「外れ値を含む行にフラグ立て」、n 3、対象列 金額
出力 — 全行に 外れ値フラグ が付く。1 の行を条件で行をフィルタで抜き出して確認する
3. 異常な取引だけを取り出す
お題 — 普通でない取引を調査したい
入力 — 取引額 列を持つ取引履歴
設定 — 処理タイプ「外れ値を含む行を抽出」、n 3、対象列 取引額
出力 — 外れ値の行だけ
4. 店舗ごとの基準で判定する
お題 — 大型店と小型店で売上の規模が違うので、全体の基準では判定できない
入力 — 店舗 と 売上 を持つ日次の売上データ
設定 — 処理タイプ「外れ値を含む行を削除」、n 3、対象列 売上、「グループごとにモデルを作成する」を on にして 店舗
出力 — 店舗ごとの平均と標準偏差で判定される。「判定閾値」には店舗 1 つにつき 1 行の上限・下限が出る
5. 切った位置を記録に残す
お題 — どの値から外れ値になったのかを残しておきたい
入力 — 金額 列を持つ明細
設定 — 処理タイプはどれでもよい。n 3、対象列 金額
出力 — 2 つ目の出力「判定閾値」に 列名・閾値下限・閾値上限 が入る。別のノードにつないで書き出せる
6. 複数の列をまとめて見る
お題 — 金額と数量のどちらかが異常な行を落としたい
入力 — 金額 と 数量 を持つ明細
設定 — 処理タイプ「外れ値を含む行を削除」、n 3、対象列に 金額 と 数量 の 2 つ
出力 — どちらか一方でも外れ値なら、その行は消える。「判定閾値」には 2 行(列ごとに 1 行)出る