SPSS Modeler ノードリファレンス 2-7  サンプリング

# 2-7 サンプリングノード[レコード設定タブ]
<img width="200" alt="107_89サンプリング.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/af100363-6eee-7354-7224-5273d9efe568.png">


## 1.ノードの目的
レコードをサンプリングします。対象データが大規模な場合、サンプルデータでストリームを設計し完了後に全件データで処理することでプロジェクトの時間を短縮します。

![スクリーンショット 2022-03-08 10.27.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0503d4a7-3b3a-653d-562d-d8a0832db8d1.png)

## 2.解説動画（60秒）

<iframe width="560" height="315" src="https://www.youtube.com/embed/BVF19_sOVz4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


## 3.クイックスタート
Webログデータを上から1000件表示します。
＊データは[5.参考情報]からダウンロードできます。

[可変長ファイル]、[サンプリング]、[テーブル]の順でノードを接続します。
![スクリーンショット 2022-03-08 10.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/3e455714-9da2-bea6-4593-05bf291d2d25.png)

[サンプリング]ノードを編集し[はじめのN件：]を[1000]に設定します。
![スクリーンショット 2022-03-08 10.55.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d786eb4c-47b3-5045-9a18-05dc3f9a5a9b.png)

[テーブル]を実行します。先頭レコードの1000件が表示されています。
![スクリーンショット 2022-03-08 10.57.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f51d71de-1456-cf24-9c3c-5410d85c6ad1.png)

#### プレビューとの違い
プレビューはどのノードからも10レコード（初期設定）を表示可能です。逆に表示のみなのでグラフや統計量の確認にはサンプリングノードが適しています。
![スクリーンショット 2022-03-08 13.32.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d4e929dc-e51d-8a51-6776-3f214f9be257.png)
初期設定はツール＞ストリームのプロパティで変更できます。
![スクリーンショット 2022-03-08 13.31.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/751b68d9-5343-228f-d113-34314278158a.png)

### サンプリングノードの注意点
#### 交差検証とランダムサンプリング
交差検証などでデータをランダムに学習用と検証用に分割する際に乱数固定による再現性について注意する必要があります。

ノードリファレンス3-7データ区分でも触れていますが

https://qiita.com/416nishimaki/items/48759c41199d1d00a0bc

以下のストリームではランダムに選ばれた5割と、選ばれなかった5割を正確に区分する必要があります。（毎回乱数の影響を受ける可能性を排除）

![スクリーンショット 2022-02-27 14.04.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/abc0cc64-8110-69c7-cf66-6bd0db323abc.png)

サンプリングノードではまずランダムシードを固定し（青枠）、その上でノードを複製して、一方を[サンプルを破棄]にする必要があります（赤枠）。

![スクリーンショット 2022-03-08 14.01.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e0616f20-1319-be4a-726b-801b754a9a26.png)

乱数を固定するためにキャッシュを利用する方法もあります。

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

## 4.Tips

#### ログやトランザクションのランダム抽出では個体を先にサンプリングする
たとえばWebログを50％にランダムサンプリングする際に、レコード全体で行うと視聴者ごとにログが半分失われ、後続の分析に支障をきたします。まず視聴者を乱数で選抜し、選ばれた視聴者の全てのログを付与する必要があります。
＊ハイライトされたレコードが破棄されるイメージです。
![スクリーンショット 2022-03-08 14.17.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/92d9d838-df26-c8e7-b29a-4e40c7222f76.png)


具体的なストリームは以下のようになります。
![スクリーンショット 2022-03-08 14.29.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ac88b2c8-8063-dc9e-811d-9f202e8827a1.png)

[レコード集計]か[重複]ノードで視聴者を1レコードにします。

![スクリーンショット 2022-03-08 14.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/9f6ca0e5-04fb-d3e0-2718-12f4903f6432.png)

5割にランダムサンプリングした後に、選ばれた視聴者と全体レコードをキーで結合します。
![スクリーンショット 2022-03-08 14.27.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/ae00ac35-ee56-9bc5-8ee5-86bfc5cddfdf.png)

#### コンプレックスサンプリング
自動車のスペックデータから[生産国]の分布を維持してサンプリングします。
![スクリーンショット 2022-03-08 14.35.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/53758f7a-b693-3dab-abdf-0d2d54811907.png)
ストリームは次の通りです。
![スクリーンショット 2022-03-08 14.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/d94b8610-b220-e075-e7b2-116b22a5ad40.png)
オリジナルデータの生産国の分布です。
![スクリーンショット 2022-03-08 14.36.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/30488172-d56e-067b-fe40-9e613b890894.png)
[コンプレックス]モードでサンプリングします。[クラスターと階層化]ボタンを押します。
![スクリーンショット 2022-03-08 14.36.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f5bf3cf8-1126-f6bb-f512-de6f619ca6f0.png)
[階層化]に[生産国]を選択します。
![スクリーンショット 2022-03-08 14.37.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/24e319d2-e6c3-d9c5-96a6-ef229a69a885.png)
[生産国]の比率を維持してランダムに5割サンプリングしました。
![スクリーンショット 2022-03-08 14.38.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8ed72745-9248-3c58-9db0-1f36d1267088.png)


## 5.参考情報

#### 利用データ

右クリックでリンク先を保存してください。

###### ①Webログ
https://raw.githubusercontent.com/yoichiro0903n/blue/main/WebLog2021mac.csv

###### ②自動車スペック
https://raw.githubusercontent.com/yoichiro0903n/blue/main/cars.csv

#### SPSS ModelerのサンプリングノードをPythonで書き換える

https://qiita.com/kawada2017/items/7b79cb5d201928a65a7e

https://qiita.com/kawada2017/items/ac67d75e64cd65a0ba95


#### SQLプッシュバックでソートとサンプリングを組み合わせる場合の注意点

https://qiita.com/kawada2017/items/58b9c071f99818fcbfb1

#### ノードのヘルプ

https://www.ibm.com/docs/ja/spss-modeler/18.3.0?topic=nodes-sample-node

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

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

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

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