コピペでできる!クラスター分析(階層型)

この記事は約4分で読めます。

階層型クラスタ分析って何ができるの?

クラスター(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導入記事はこちら