広告/統計/アニメ/映画 等に関するブログ

広告/統計/アニメ/映画 等に関するブログ

商品アンケートのクラスター分析から購入者層を検討する例

アンケート調査というのは、とても楽しいものです。
特に、クラスター分析が手元でできるようになると、ローデータを手にするだけでワクワクするものです。

あるジャンルの商品群の購入者の傾向を探る
例えば、あるジャンルの商品 A〜M について、購入有無を調査した場合、
調査会社への簡易な調査では、性別や年齢別のクロス集計を出してきて終わりです。
購入の傾向が年齢や性別に大きく左右されるなら、それで充分ですが、嗜好性に左右されるものであれば、好みの比重が高くなりますので、必ずしもそういうものでもないでしょう。

そこで、購入商品の傾向からクラスターに分けて考えてみることにします。
元のデータは、以下のような購入有無をゼロイチで回答したもの。
各レコードが個人の回答データで、合計1000サンプルあります

  A B C D E F G H I J K L M
1 1 0 0 0 0 0 0 0 0 0 0 1 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0 0 0
5 1 1 1 1 0 0 0 1 0 1 1 1 1
6 0 0 0 0 0 0 0 0 0 0 0 0 0

1列目がIDなので、1列目を除いてデータを読み込みます。

#データの読み込み
product <- read.csv("product.csv",header=T,row.names=1)</p></blockquote>
次に、階層別クラスター分析をして、<strong>凡そ何グループに分けるのが妥当かを確認</strong>します。
<blockquote><p>#クラスター数の妥当性をデンドログラムにて確認
library("cluster", lib.loc="〜")
product_hcluster <- hclust(dist(product))
plot(product_hcluster)

f:id:yyhhyy:20151025131457p:plain
とても微妙な感じですが、
今回は、4グループに分けることにしました。
実際にマーケティング施策に応用するためには、階層別クラスター分析よりも、k平均法によるクラスター分析の方が、クラスターの解釈がしやすいため、k平均法を用います。

product_km <- kmeans(product,4,iter.max=10)

centersの中に、クラスター別に、A〜Lまでの購入率の平均値が入っています。
A、B、Cについて抜粋すると以下にようなデータになります。

$centers
1 0.70857143 0.2114286 0.091428571〜
2 1.00000000 0.9868421 0.710526316〜
3 0.86046512 0.3255814 0.077519380〜
4 0.01612903 0.0000000 0.001612903〜

これをグラフ化して確認します。
この時、ggpl;ot2を使うと美しいグラフが描けます。

product_km_centers <- as.data.frame(product_km$centers)
product_km_centers$clusterID <- rownames(product_km_centers)
library("ggplot2", lib.loc="")
library("reshape2", lib.loc="")
product_km_centers_m <- melt(product_km_centers,id.vars="clusterID")
product_km_centers_g <- ggplot(product_km_centers_m,aes(x=variable,y=value,color=clusterID))
product_km_centers_g <- product_km_centers_g + geom_line(aes(group=clusterID),size=1)
product_km_centers_g <- product_km_centers_g + ggtitle("クラスター別商品購入率")
product_km_centers_g <- product_km_centers_g + theme(axis.text.x=element_text(angle=0,hjust=1,size=12,color="black"))
product_km_centers_g <- product_km_centers_g + theme(axis.text.y=element_text(angle=0,hjust=1,size=12,color="black"))
product_km_centers_g <- product_km_centers_g + ylab("購入率")
product_km_centers_g <- product_km_centers_g + xlab("商品")
product_km_centers_g <- product_km_centers_g + geom_point(data=subset(product_km_centers_m,variable=="D"),size=4)
product_km_centers_g <- product_km_centers_g + geom_text(data=subset(product_km_centers_m,variable=="D"),aes(x=variable,y=value,label=round(value,2)),vjust=-0.5,size=8)
plot(product_km_centers_g)
ggsave(file="product_km_centers_g.png", plot=product_km_centers_g, dpi=80, width = 10, height = 6)

クラスター別購入率の平均値を見ると、各クラスターは、
1:このジャンルの商品をある程度買う人(ミドル層)
2:どれも買う人(コア層)
3:一部を買う人(ライト層)
4:非購入者層

と推定できます。
f:id:yyhhyy:20151025131532p:plain

次のマーケティング施策に活かす
この時、当社の重点アイテムであった、商品Dだけグラフ上、強調しました。
殆どは、黄緑色で色分けされたコア層が購入したことが読み取れます。

従って、商品Dの後継種を出す場合、
1.コア層にしか売れないものだ、と判断して製造数量を決め、コア層向けに絞った広告宣伝にする
2.コア層にしか受けなかったことを反省点とし、もっとライト層が購入するようにハードルを下げる

などのアプローチを取ることができます。

性別・年齢別でも分かることはありますが、Web広告でリマーケティングやメルマガ会員へのメルマガ配信など、今日日コア層に絞った広告宣伝アプローチが取りやすくなってきましたので、コア層が買ったのか?ライト層が買ったのか?を確認することは、今後の施策を考える上で、より参考になるデータです。

マーケットの規模を探る
では、このコア層というのは、どれくらいのボリュームがいるのでしょうか?
クラスター分析結果のclusteに、全レコードに対してクラスターのIDが付与されていますので、
これをクロス集計します。

product_km_clusterID_table <- table(product_km$cluster)

クロス集計結果を円グラフで確認すると、

#円グラフ
product_km_clusterID_table_df <- as.data.frame(product_km_clusterID_table)
(product_km_clusterID_table_df)
product_km_clusterID_table_df_g <- ggplot(data=product_km_clusterID_table_df,aes(x="",y=Freq,fill=Var1))
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + geom_bar(width=1,stat="identity",position="fill")+coord_polar("y")
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + ggtitle("クラスターのボリューム")
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + geom_text(aes(x="",
                                                                                   y=(cumsum(Freq/sum(product_km_clusterID_table_df$Freq))-0.5*(Freq/sum(product_km_clusterID_table_df$Freq))),
                                                                                   label=round(cumsum(Freq/sum(product_km_clusterID_table_df$Freq))*100,2)),
                                                                               size=8,color="white")+coord_polar("y")
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + xlab("")
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + ylab("%")
product_km_clusterID_table_df_g <- product_km_clusterID_table_df_g + theme(axis.text.x=element_text(angle=0,hjust=1,size=10,color="black"))
plot(product_km_clusterID_table_df_g)
ggsave(file="product_km_clusterID_table_df_g.png", plot=product_km_clusterID_table_df_g, dpi=80, width = 15, height = 6)

f:id:yyhhyy:20151025131555p:plain
このジャンルの商品ならどれでも買うというのは、全体の7.6%のボリュームとわかります。

このままコア層向けでいいのか?ライト層向けの商品にすべきか?
などの判断材料とします。

クラスター分析は厳密なものではない
1点注意しなければならないのは、クラスター分析は、「凡その施策の方向性が決められる」というものでしかないことです。
クラスター分析は、マーケティングに於いて、非常に理解がし易い反面、クラスターの数やクラスターの分かれ方に関しては、エイヤで決めている部分も多く、手軽な割には精緻に生産予測をするような場合には極めて危険なものです。
特に、k平均法は解釈がし易く次の施策へ繋がる反面、複数回試行したら都度結果が異なるという特徴もありますし、
分けるグループ数も階層別クラスター分析から「凡そ」でジャッジしています。

今回の1000サンプルについて、主成分分析をしたのち、それを今回の4クラスターで色分けをしてみました。

product_pca <- prcomp(product,scale=T)
product_pca_df <- as.data.frame(product_pca$x)
product_pca_df$clusterID <- as.character(product_km$cluster)
head(product_pca_df)
product_pca_df_g <- ggplot(product_pca_df,aes(x=PC1,y=PC2,color=clusterID))
product_pca_df_g <- product_pca_df_g + geom_point(size=4)
plot(product_pca_df_g)
ggsave(file="product_pca_df_g.png", plot=product_pca_df_g, dpi=80, width = 10, height = 10)

f:id:yyhhyy:20151025131606p:plain
1番目と3番目のクラスターの分類が必ずしも綺麗に分かれていないことがわかると思います。

これは、ミドル層とライト層に分けたところでした。
人間は、十人十色です。
特に嗜好性は、様々なグラデーションがあるものですから、綺麗にn個のグループにタイプわけできてしまう、などというものではないのです。

マーケティング施策上、敢えて分けた方が、次の意思決定に繋がり易い、という大まかな指標であることに気をつけて使用する必要があります。