階層型クラスタ分析って何ができるの?
クラスター(cluster)=「房」「集団」「群れ」
さまざまな特徴をもつものが混ざりあっているものの中から、似たものを集めて集団(クラスター)へと分類するという方法のことです。
小学校1クラスを、男女で分けてみたり、算数の点数区分で分けてみたり、世帯収入区分で分けてみたり、性格で分けてみたり・・。
商品を購入した人を、閲覧したページや他に見ているサイトの情報、性年代、他メディア接触状況、価値観・・・いろんな要素を掛け合わせて分類できます。
分類した後は活用を考えていきます。(ただ見てるだけでもずいぶん楽しいですが、)ターゲティングやリテンション施策への活用やマーケティング戦略への昇華、さらに、事業計画への反映など、使い道は多様です。
分類する母集団が10人程度ならよいのですが、100人を超えるともはや人間がわけていくのは面倒なレベル。
Rを使ったクラスタ分析、トライしていきます。
出力結果イメージ
例えば、性別・年齢・好きな科目・嫌いな科目がわかっている10人をクラスターわけする場合の、結果イメージは・・



ちなみに、4クラスタだと左から順番に
・数学が嫌いな女子生徒
・英語が好きな女子生徒
・数学が好きな男子生徒
・15歳の女子生徒
となるわけです。項目数が少ないとナンノコッチャとなりますが、こんな感じでデータが取れます。
取り込むデータのフォーマット
1行目に項目名、2行目以降はデータです。
データは文字列でもできないことはないですが、下記コードは数字に対応させています。
男性=1,女性=2、といった感じで置き換える必要がありますが、ただそれだけです。

【コピペ用】コード
install.packages("NbClust") #パッケージインストール install.packages("cluster") #パッケージインストール data.orig <- read.csv("clst_raw.csv") #ファイル名は都度修正 sapply(data.orig,class) #データ型の確認 head(data.orig) data.scale <- scale(data.orig) data.dist <- dist(data.scale, method="euclidean") data.dist #階層型クラスタ分析 library(NbClust) #average.hclust <- hclust(data.dist, method="average") #群平均法 #plot(average.hclust, hang=-1) #single.hclust <- hclust(data.dist, method="single") #単連結法 #plot(single.hclust, hang=-1) #complete.hclust <- hclust(data.dist, method="complete") #単連結法 #plot(complete.hclust, hang=-1) ward.hclust <- hclust(data.dist, method="ward.D2") #ウォード法 plot(ward.hclust, hang=-1) #centroid.hclust <- hclust(data.dist, method="centroid") #重心法 #plot(centroid.hclust, hang=-1) #median.hclust <- hclust(data.dist, method="median") #メディアン法 #plot(median.hclust, hang=-1) plot(as.dendrogram(ward.hclust), horiz=TRUE, main="Hierarchical Clustering Dendrogram (Ward)") heatmap(data.scale, Rowv=as.dendrogram(ward.hclust), Colv=NA, scale="none", main="Heat Map for Hierarchical Clustering (Ward)") ward.cutree <- cutree(ward.hclust, k=2:4) ward.cutree plot(ward.hclust, hang=-1) rect.hclust(ward.hclust, k=3, border="red") #3クラスタに分けた時の色
補遺
クラスタ分けしたい人の数が多くなると、階層型では対応が難しくなります。
そんなときは、非階層型(俗に、k-meansとも)にトライしてみてください。
また、クラスタリングとは”集団の中のそれぞれの距離(どれくらい近い=似通っているか)”を利用して分類する手法です。
距離の近さを測る方法はウォード法を使っておけば大抵大丈夫ですが、群平均法や重心法などのコードも念のため記載しました。必要であれば#削除のうえご活用ください。
R導入記事はこちら