2016年8月10日水曜日

SPSS Modelerでクラスター分析をやってみた(K-Means)

 過去、当ブログではSPSS Modelerに関するエントリーを何度か記載していますが、そろそろ高度な分析もやってみたくなってきました。
とはいえ、SPSS Modelerが高機能なので、「内容は高度でもオペレーションはとってもカンタン」はいつもどおりの展開です。

最終的にはこんなアウトプットを作ってみます。


 ※本エントリーは、私、小田一弥が一個人として勉強を兼ねて記載したものです。私の勤務先である日本アイ・ビー・エム株式会社の見解・見識ではない、個人としての記載内容としてご覧ください。  

ちょっとだけ「クラスター分析」のおさらい。


 専門的な解説は他にもたくさんのエントリーがあるので、ご興味があればGoogleなどで検索してください。今回は「SPSS Modeler操作方法のご紹介」なので、基礎用語の解説レベルに留めます。

●クラスタリング(clustering)
データ解析手法のひとつで、与えられたデータを外的基準なしに、データ内に存在するグループを見つけ出し分類する手法です。「教師なしセグメンテーション(※)」といった呼び方もされます。

※:逆に、外的基準があるものを「教師ありセグメンテーション」と呼びます。
  調査対象における目的変数の特徴に着目し、目的変数の値が異なるグループを見つけ出す方法です。


● 階層的クラスタリング
 データが階層的に分類される手法です。下記のような「デンドログラム(樹形図)」、見たことありますよね? ちなみに、これ、「生命の樹」と言われる図で、地球上にいる生物のRNA配列から作ったんですって!なんかわからないけど、とりあえず、すごいっ!


●非階層的クラスタリング
 特定のクラスタ数に分類される手法です。それぞれのクラスタの中心点(セントロイド)として分類を表現します。

今回は、セントロイドを用いる手法として最も有名なアルゴリズムである「k平均法(K-Means)」を用いたクラスタリングをSPSS Modelerで実施してみます。


●K-Meansクラスター(k-means clustering) ←本日のネタです。
データ内のクラスターを「k平均法(K-Means)」によって分類する手法で、比較的高速にクラスタリングできることが特徴です。「k」はデータから見つけ出したいクラスタの数を表しており、分析者が自由に設定することが出来る点が階層的クラスタリングとは異なります。

手順のご紹介


もう前置きだけで飽きちゃいましたよね。僕もです(笑)。
今回は、下記データセットを利用しました。事前にCSVデータをダウンロードしてください。

1991年時における世界48都市の経済状態を記録したデータ
http://mo161.soci.ous.ac.jp/@d/DoDStat/cityecon/cityecon_dataJ.xml


なお、今回の作業環境は下記のとおりです。
・OS:Windows7
・SPSS Modeler 18 Premium


1. 「可変長ファイル」ノードを配置
「入力」パレットから「可変長ファイル」ノードを配置するか、上記でダウンロードしたCSVファイルを直接ストリームにドラッグ&ドロップしてください。

下記は「可変長ファイル」ノードを開いた直後の画面ですが、デフォルト設定のままで大丈夫です。


2.「データ検査」ノードを配置
「出力」パレットから「データ検査」ノードを配置して、データ内容をご確認ください。フィールド列を見ると「Work」と「Salary」が文字ストレージになっていますね。


3.「フィールド作成」ノードを配置
先ほど配置した「可変長ファイル」ノードに「フィールド作成」ノードをつなげてください。
その「フィールド作成」ノードを開き、「フィールドリスト」で「Work」と「Salary」を選択し、 式ビルダーで下記のように入力してください。




過去、ご紹介していますが、改めて関数の意味をおさらいです。
@FIELD関数:
CLEM式が複数のフィールドに適用される場合、@FIELDは順番に各フィールドを表します。

to_integer(ITEM)関数:
ITEMを整数に変換します。ITEMは文字列または数字でなければなりません。

今回は、「フィールドリスト」で選択した「Work」と「Salary」を「@FIELD」関数で複数指定して、「to_integer」関数でこの二つの変数を整数に変換してね という意味になります。

4.「フィルター」ノードを配置
先ほど追加したフィールド名を変更したうえで、変更前のフィールドはフィルターでデータの読み込みを止めておきます。


5.「K-Means」ノードを実行
配置した「K-Means」ノードを開き、内容をご確認ください。今回作成するクラスター数はデフォルト値のまま「5」でいきますが、変更も可能です。



なお、余談ですが、「K-Means」ではクラスター間の距離を計算する際に「ユークリッド距離」 を使用します。その際、各フィールド間の値や標準偏差が大きく異なっていると正しい分類が出来ない可能性があります。SPSS ModelerではK-Meansを実行する前に各フィールドのデータを標準化するため、その心配はありません。

6.「K-Means」ナゲットを開く
まず「要約」タブを開いてクラスター作成における反復が何回目で停止されたのかご確認ください。


「モデル」タブはこんな感じです。「クラスター3」が一番少なく8.3%となっています。


上記画面の左下にある「ビュー」を「クラスター」に切り替えると、「クラスタービューア」が表示されます。1991年時点でのデータとなりますが、「クラスター3」は「給料は高いが、物価も高く、やや長時間勤務」といった特徴があるようです。


7.「テーブル」ノードを配置
生成された「K-Means」ナゲットに「テーブル」ノードを配置してデータ内容を確認すると、右列にクラスター名が追加されていることがわかります。「Tokyo」は「クラスター3」だったことがわかります。


8.「グラフ」ノードの配置
あとはお好みでグラフ化してお楽しみください。



「K-Meansノードにおける欠損値」について(2016/8/26 追記)
<空白の場合>
・「連続型」または「フラグ型」の欠損値→「0.5」が代入される
・「名義型」の欠損値→「0.0」が代入される

代入の自動実行をしたくない場合は、欠損値の多いフィールドやレコードを前もって除外してください。

その他:SPSS Modeler関連エントリー


(無料)Watson StudioでSPSS Modeler flowの決定木を動かす

(Watson)Personality InsightsのJSONをR言語でパースしてみた

Watson Studioの「Data Refinery」機能で「馬の疝痛(せんつう)」データを眺めてみた。

SPSS Modelerでアソシエーション分析がしたいっ! (前処理編〜縦持ちを横持ちへ)
http://sapporomkt.blogspot.jp/2017/06/spss-modeler.html


SPSS ModelerからStatistics用ファイルを出力する方法
 http://sapporomkt.blogspot.jp/2016/08/spss-modelerstatistics.html

(SPSS Modeler)馬の疝痛データを誰でもカンタン決定木♪
http://sapporomkt.blogspot.jp/2016/07/spss-modeler.html

「SPSS Modeler Text Analytics」によるテキストマイニング(データ読み込みからグラフ化)
 http://sapporomkt.blogspot.jp/2016/07/spss-modeler-text-analytics.html

「SPSS Modeler」におけるデータ操作及びシーケンスデータの取り扱いまとめ
http://sapporomkt.blogspot.jp/1970/01/spss-modeler_1.html

SPSS Modelerでリーディングサイアーデータ分析:前処理(レコード追加等)
http://sapporomkt.blogspot.jp/2016/05/spss-modeler.html

SPSS Modelerで「サイアー/ブルードメアサイアー」データをレコード結合
http://sapporomkt.blogspot.jp/2016/05/spss-modeler_13.htm

0 件のコメント:

コメントを投稿