SPSS Modeler ノードリファレンス 5−18 K-Means(クラスター)

# 5−18 K-Meansノード[モデル作成タブ]

<img width="160" alt="194_161K-Means" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f1577e97-c6ba-58e3-9a87-22026ed5c4ea.png>



## 1.ノードの目的
クラスターモデルを作成します。クラスタ数(k)を指定する必要があります。
顧客行動や設備挙動から類似グループを作成します。

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

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

## 3.クイックスタート

顧客の属性と部門別購入金額でクラスターモデルを作ります。
＊サンプルデータ（CSV）は[5.参考情報]からダウンロードできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/350054bb-907c-385b-1dc3-4b16f2ad8f33.png)


[可変長ファイル]ノードを編集します。[データ型]タブでクラスタモデルに投入するフィールドを確定します。性別から食品の9つのフィールドを[入力]しにます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/f0e03b63-f141-ca53-7d70-a638472c8228.png)

[可変長ファイル]ノードから[K-Means]ノードに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/86f0a9bb-549e-8cab-e0f3-71326cdb45fa.png)



[K-Means]を接続して設定を確認し、実行します。「クラスター数」で指定した数にデータをクラスタリングします。ここではデフォルトの5のままとします。このクラスター数のことをkといいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b3873992-256c-c45f-0343-43429f9b17d4.png)



[K-Means]を実行してテーブルを接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e31df8fd-0390-34a7-f791-cd7d14655642.png)


[テーブル]を実行します。クラスタ列が追加され、属性と購入の類似性で顧客を分類しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e3483ee4-5427-ad9a-d10f-d6eef792cb72.png)

モデルをダブルクリックで開くと、モデルの性能指標やクラスター解釈のための情報を見ることができます。

「クラスターサイズ」ビューでは、分割したクラスターの大きさを確認できます。大きすぎるクラスターや小さすぎるクラスターがないかをチェックします。

「モデル要約」には、クラスター品質の指標であるシルエット係数の平均値が出ています。クラスター同士が十分に離れているかの指標になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e01fa6ca-6a12-d68f-8516-aedc26c50415.png)



「クラスター」ビューでは、各クラスターでの変数の分布を確認できます。

「予測変数の重要度」ビューでは、クラスターを分割する際に影響の大きい変数を表示することができます。
この指標はpythonのライブラリーなどは見当たりませんでしたが、非常に便利な機能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/bbe46158-1dee-0dfa-e479-fb0626a6c126.png)

* 参考
 * シルエット分析 | technical-note 

https://hkawabata.github.io/technical-note/note/ML/Evaluation/silhouette-analysis.html

## 4.Tips


#### 説明しやすいクラスターの作成と解釈

クラスター分析は異常検知のように小さなクラスターを探す場合を除くと、多くの場合、施策の出しわけに利用されます。人間が理解しやすく、施策が考えやすい特徴がでる特徴量を工夫します。
今回のモデルでは性別2種と地区3種=６に分割できてしまい(正確には欠損値もあります)、最終的には男性の西区と東区はまとめられたので5(=k)に分割されました。しかし、購入の特徴はまったく反映できておらず、施策を考えにくいため、作り直します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/fb61f603-62d8-85ae-5152-82f9bb4533df.png)


代表的な方法に比率や偏差を利用する方法があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e84331d5-6a25-a2d2-b51d-ae3282b7abed.png)

[フィールド作成]ノードで比率フィールドを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/67c1ac61-d5dc-19e4-4401-08441a4aca15.png)



顧客毎の合計金額から部門別に按分した７つの比率フィールドが作られました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/8a00842d-7a70-3d94-331a-6aaaff2aba94.png)

[データ型]ノードで比率フィールドをクラスターモデルの入力にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/2cfb00c5-0708-f2b6-6876-082775006e39.png)


[K-Means]ノードを実行してモデルナゲットをダブルクリックします。
クラスタービューの「絶対分布」をみると各クラスターで商品購入比率の多い層の特徴が出ています。例えばクラスター４にはインナーウェアの購入比率が多い人が集まっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/ecc5201a-0894-a655-c0f4-1f1ead903040.png)

クラスタービューの「相対分布」をみるとこの特徴をより強調して確認することができます。
「相対分布」ではビニングした階級ごとにそのクラスターが占める割合が表示されます。この例だとインナーウェアの購入比率が５割を超える人たちは、クラスター４に100%集中しているということが読めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/74ea9014-9c46-57d9-30d7-907f88f7adf3.png)

また、クラスタの比較の機能を使うと箱ひげ図で各クラスター間の値のばらつきも確認できます。
比較したいクラスター番号のセルを選択すると「クラスターの比較」ビューに選択したクラスターの箱ひげ図が表示されます。白抜きの箱ひげ図が全体の平均です。
ここからもクラスター４はインナーウェアの購入比率が高い人が集まっていることが読み取れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/e00b6f3f-823a-e9d0-6b13-804490cfaaae.png)

このようなビジュアライズ機能で、各クラスターの解釈を行いやすいことがModelerの特徴です。
各クラスターのラベルや説明をメモすることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0dc23698-d49e-ec58-4a2e-d2c59facb5a2.png)

#### 自動事前処理
k-meansは、以下のような事前のデータ加工が必要です。
・スケールの影響を受けてしまうため、各データをスケ―リングする必要があります。
・フラグ型やカテゴリ型のデータは扱えませんので、数値へのエンコーディングが必要です。
・NULLも扱えませんので何らかの処理が必要です。

Modelerはこれらの処理を自動で行ってくれるので便利です。
ただし、欠損値はモデルの性能に影響がありますので、あらかじめ、「データ検査」ノードなどでどのくらいあるかは確認しておくことをお勧めします。

|尺度|スケーリング、ダミー変数化|NULLの処理|
|---|---|---|
|連続型|min-maxの0-1のスケーリング|0.5で置換|
|フラグ型|0,1へのダミー変数化|0.5で置換|
|カテゴリ型|one-hotで0,1へダミー変数化した上で重みをかける（デフォルトは√1/2）|0.5で置換した上で重みをかける|

連続型のNULLを、0.5という固定値ではなく、平均値で埋めたいような場合には別途置換ノードなどで行う必要があります。

また、カテゴリ型は単純に0,1に変換するだけではなく重みをかけています。
これは、0,1にしてしまい。例えば、「北区」＝１、「西区」＝１という２つのフラグとした場合、この２つのデータのユークリッド距離が
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/705b1942-27ad-1eac-d65a-44c6d4decb10.png)
と１を超えてしまうためです。
そのために、√1/2の重みをかけて以下のように２つのデータ間の距離を１にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/7e9bf973-d212-e5c6-64d6-c47253997159.png)

そのため0.70711というような数値になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/406cbb7b-e132-b553-c174-0c58f2c23985.png)

この重みは以下でカスタマイズすることもできます。カテゴリ変数がクラスタリングへ大きく影響しすぎる場合には、この値を小さくすると影響度を下げることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/18753223-058f-704a-ee38-5fd32f79be11.png)


## 5.参考情報

#### サンプルストリーム

https://github.com/hkwd/200611Modeler2Python/raw/master/kmeans/kmeans3.str

#### 利用データ

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

https://raw.githubusercontent.com/hkwd/200611Modeler2Python/master/kmeans/clusterinput2.csv

#### ノードのヘルプ

https://www.ibm.com/docs/ja/spss-modeler/18.4.0?topic=models-k-means-node

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

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

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

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