±3標準偏差を外れ値と定義して削除/抽出する(SPSS Modeler データ加工逆引き3-6)

# ±3標準偏差を外れ値と定義して削除/抽出（外れ値の処理）

![スクリーンショット 2022-07-10 10.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9277617a-5209-9e85-a38c-0fab554adb99.png)

## 1.想定される利用目的

・予測モデルの精度安定化のための前処理
・異常検知のためのデータ理解

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/blob/main/outliers_sd.str?raw=true

## 3.サンプルストリームの説明

![スクリーンショット 2022-07-10 10.43.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/91e12db4-7851-34a4-96bf-bc64f2d06128.png)

a.入力するデータは以下の通りです。平均50、標準偏差10、サンプル数10,000レコードで正規分布するようにデータを発生させています。
![スクリーンショット 2022-07-10 11.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/81112aad-e4d9-f466-3605-18838c35f0b8.png)

シミュレーションノードを利用して正規分布を作成する方法は以下で解説しています。

https://qiita.com/416nishimaki/items/f627ed943e6457eb85d2

#### [データ検査]ノードを利用する方法

b.[データ検査]ノードを編集します。[外れ値]が3標準偏差、極値は5標準偏差で初期設定されています。
![スクリーンショット 2022-07-10 13.20.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e5e400a5-12d3-5d0c-1880-1923d0d96d41.png)

[データ検査]ノードを編集します。[欠損値検査]タブで外れ値が28レコード確認できました。[アクション]を[破棄]にします。
![スクリーンショット 2022-07-10 11.05.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b9a1aed3-48ba-fb7e-ceed-f8e3db390572.png)

[生成]メニューから[外れ値および欠損値スーパーノード]を選択します。ストリーム上のcと同じノードが自動生成されます。
![スクリーンショット 2022-07-10 13.21.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7a56e762-feba-74c2-092d-e077b33ecb04.png)

c.[スーパーノード]を編集します。生成した10,000レコードから正確に±3σ（シグマ）を求め、外れ値を破棄するように式が埋め込まれています。
![スクリーンショット 2022-07-10 11.06.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/47b2cba0-69eb-018f-3338-8795bd36da99.png)

[プレビュー]をします。10,000レコードから外れ値を破棄した9,972レコードが表示されます。
![スクリーンショット 2022-07-10 11.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f975e25d-712b-2193-b51b-f23252bc141d.png)

d.cで破棄した外れ値を[含める]に反転しています。
![スクリーンショット 2022-07-10 11.07.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/aad76ccb-8bdc-945c-956e-b222fb0d9e1b.png)

[プレビュー]をします。[外れ値]に該当する28レコードが抽出されました。
![スクリーンショット 2022-07-10 11.07.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/4eb44e8f-314f-4045-e415-dd18272bb1f3.png)

#### [グローバルの設定]ノードを利用する方法

e.[グローバルの設定]ノードを編集します。平均と標準偏差を求めて、セッション中にメモリ上にキャッシュさせます。
![スクリーンショット 2022-07-10 11.08.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d68ddc24-4e63-5256-7e18-3c0aa17c0396.png)

[実行]をします。２つの統計量をグローバル値としてキャッシュしました。
![スクリーンショット 2022-07-10 11.08.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/93a6e323-0cd2-b04d-0804-2da0591e63d2.png)

f.[フィールド作成]ノードを編集します。[派生]を[フラグ型]にして条件が合致するとフラグフィールドを作成します。（直接条件抽出）@&#xFFF0;GLOBAL_MEAN(フィールド)がキャッシュした平均を@&#xFFF0;GLOBAL_SDEV(フィールド)が標準偏差を呼び出します。
![スクリーンショット 2022-07-10 11.08.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/563da943-088f-8937-779f-4ccf55ab9529.png)

＊同じ式を[条件抽出]ノードに記述するのが本来の進め方ですが、後続でヒストグラムを求めるために[フィールド作成]ノードを使用しました。

g.[グラフボード]ノードを編集してヒストグラムを設定します。
![スクリーンショット 2022-07-10 11.09.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/06a5db27-b869-75bd-8797-cc9777e547b6.png)

[グラフボード]ノードを実行します。外れ値は外側の赤い部分です。
![スクリーンショット 2022-07-10 11.09.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/2f4c8f7e-23ed-aa95-05a9-2bcbddc34971.png)

h.gで[プレビュー]して、[3標準偏差の外] フィールドが　[0]をひとつ選んでメニューから以下のように[条件抽出ノード（AND）]を選択するとhが自動生成されます。
![スクリーンショット 2022-07-10 11.10.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1dca2d6b-a078-f68d-61ce-d8e0d8655d4f.png)

3標準偏差の外 = 0 が抽出条件に自動記述されています。cと同じく外れ値を破棄して9,972レコードが抽出されます。
![スクリーンショット 2022-07-10 11.11.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/51910ac2-a6db-332a-0e31-55155682b5d6.png)

i.外れ値を抽出するにはモードを反転させます。
![スクリーンショット 2022-07-10 17.15.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/812ac2bb-774b-31e0-4126-e01255664b5d.png)

#### [レコード集計]ノードと[レコード結合]ノードを利用する方法

j.[レコード集計]ノードを編集します。
![スクリーンショット 2022-07-10 11.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f9dd0edc-4f91-9626-0cbd-62b00cdd7bb7.png)

[プレビュー]します。
![スクリーンショット 2022-07-10 11.15.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/b6ff23c8-4570-c8f4-eee8-0d1fb4110e74.png)

k.[レコード結合]で元のテーブルに[Field_Mean]と[Field_SDev]を追加します。[レコード結合方法]を[キー]にしますが、[キー]をブランクにすることでテーブル通しをN対N（総当たり）で結合します。
![スクリーンショット 2022-07-10 11.15.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5297e6b3-53e6-eca1-c387-855536b938c2.png)

[プレビュー]します。
![スクリーンショット 2022-07-10 11.15.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d040f9b7-37cb-9943-23b0-56047bfe65e3.png)

l.個々のレコードの値が±3標準偏差外であれば破棄します。
![スクリーンショット 2022-07-10 11.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c7a0e30f-4dd2-81c0-7008-f5ee87e33523.png)

m.l.個々のレコードの値が±3標準偏差内であれば抽出します。
![スクリーンショット 2022-07-10 11.16.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/277eeba9-f45a-c36c-1095-a664eaabacd8.png)

#### 注意点

[シミュレーションの生成」ノード1000レコードに生成するデータを限定しているため、パラーメーターから誤差（平均は50ではなく49.977、標準偏差は10ではなく9.995）が生じています。

## 4.参考情報

#### 正規分布やワイブル分布を生成する

https://www.ibm.com/blogs/solutions/jp-ja/modeler-tips-20/

#### [データの自動準備]内で外れ値を処理する

https://qiita.com/416nishimaki/items/492b1522dd1ae083c664#%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E5%93%81%E8%B3%AA%E3%81%AE%E6%94%B9%E5%96%84%E3%81%A8%E5%80%A4%E3%81%AE%E6%A8%99%E6%BA%96%E5%8C%96

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008