SPSS Modelerで数値データの標準化、正規化

数値データを比較するために行う標準化や正規化をSPSS Modelerのデータの準備ノードで行います。


# 1. 元データ
Modelerのサンプルデータとして提供されているbankloan.savを使います。プレビューで確認すると以下のようなデータになっています。

例えば１番目の人は年齢41歳で176の収入、11.35のクレジット負債がありますが、年齢と比較して収入やクレジット負債が高いか低いかはこれだけではよく分かりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9ce58a12-2435-fb7a-f9ca-21680691053c.png)

データ検査ノードで確認すると平均、標準偏差や最小、最大がわかりますので、各データの関係がわかってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a8e72703-ae4b-3fae-9914-b03b2e2d030b.png)

標準化や正規化は平均、標準偏差や最小、最大をつかってデータを比較可能にする変換です。

# 2. 標準化
標準化とは平均を0、標準偏差を1にする変換です。zスコア化とも言います。
データの準備ノードをつかっておこないます。データの準備ノードは数値データだけではなく様々な特徴量変換を行ってくれるノードですが、今回はその標準化の機能のみ使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/93f76ee0-528a-3e89-f521-dddb1caee42b.png)


「設定」タブの「日付／時間を準備」のなかで、「モデル作成用の日付と時間を準備」のチェックを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/177a726c-82bf-35cc-c742-04740b4479db.png)

「入力フィールドを除外」の中で、「低品質の入力フィールドを除外する」のチェックを外します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bf352131-5f7f-a72b-bdf5-4fd2fe1481d8.png)

「入力と対象を準備」の中で、「データ型を調整してデータ品質を改善」の中の入力と対象のチェックをすべて外します。「共通スケールにすべての入力フィールドを投入する」にチェックがついていることと、スケール方法が「zスコア変換」になっていることを確認します。これが標準化の設定になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/87d77420-21eb-8418-9629-e6e4e94dd70f.png)

分かりやすくするために、「フィールド名」の中で「変換された入力フィールドの名前の拡張子」を_standardにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/666c6a76-1cdc-6952-cc9d-2b19c9b2d451.png)

変換結果を見てみます。
1行目の人の年齢は平均よりはやや高く、収入は3.3シグマ、クレジット負債は4.6シグマであり、お金の使い方が派手そうなことがうかがえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/6d2423d0-120b-72d2-dcc7-db8149d806a3.png)


データ検査ノードで変換が正しくできているかも確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/df49b037-8a56-dfee-8037-11062d0cbf76.png)

平均が0で標準偏差が1になっています。
なお、「教育」や「不履行」の列は変換の対象になっていませんが、これは数値データではないためです。

ちなみに上では収入は3.3シグマ、クレジット負債は4.6シグマといいましたが、分布をみてみると年齢以外はかなり歪んでいて、正規分布とは言えませんので、シグマの値は正規分布のようには解釈することはできません。
ただし、クレジット負債のヒストグラムをみてみると4.6はかなり大きな値であることは確かでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/802df25d-dee4-5884-929d-35ae691fbaa8.png)

# 3. 正規化
正規化は最小値を0、最大値を1にする変換です。全てのデータが0－1の範囲になります。

標準化同様に「データの自動準備」ノードで行います。ほとんど設定方法は同じですので、違いだけ説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/a2d1ee02-f2b8-431c-6b83-36544c324cd8.png)

「入力と対象を準備」の中で、「データ型を調整してデータ品質を改善」の中の入力と対象のチェックをすべて外します。「共通スケールにすべての入力フィールドを投入する」にチェックがついていることを確認し、スケール方法を「最小最大値の変換」にします。そして最小値を0、最大値を1.0にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8c1605a5-e7b1-2cfd-6e9d-c463fb304867.png)

分かりやすくするために、「フィールド名」の中で「変換された入力フィールドの名前の拡張子」を_normにしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c02b1631-393b-61cb-0095-1607aa34ad84.png)

変換結果を見てみます。
1行目の人の年齢は0.5 よりやや大きいですが、収入は0.5を下回り、クレジット負債も0.5よりやや大きい程度でした。収入やクレジットも最大では2倍程度大きい人がいるということになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/d22e3552-fb64-5dc2-ce28-780b90842c7c.png)

データ検査ノードで変換が正しくできているかも確認しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fc96c926-de51-5bd5-4298-809042fd9a39.png)
最小値を0、最大値を1になっていることが確認できます。また年齢以外は右に歪んでいるので平均値は0.5を大きく下回っていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/9b07f1a6-d246-d7c9-c999-664e8040da1d.png)

クレジット負債のヒストグラムをみてみると0.5は確かに半分くらいの位置で、倍くらいの人がいることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/c6d78482-9ddf-c8d2-6cfb-3c00f95e05f7.png)

# 4. 注意点
ちなみにデータの準備ノードの設定を変えた場合は「分析のクリア」ボタンを押さないと変更が反映されないので注意してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/292d0a43-6a3a-1339-af15-76cde4fc70e1.png)

# 5. 参考
サンプルストリーム
https://github.com/hkwd/spsssample/raw/master/200805%E6%A8%99%E6%BA%96%E5%8C%96%E6%AD%A3%E8%A6%8F%E5%8C%96/200805%E6%A8%99%E6%BA%96%E5%8C%96%E6%AD%A3%E8%A6%8F%E5%8C%96.str

マニュアル：入力フィールドおよび目標フィールドの準備
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.1/modeler_mainhelp_client_ddita/components/automated_data_preparation/dataprep_node_settings_inputs.html



■テスト環境
Modeler 18.2.1
Windows 10 64bit