【ウーバーイーツ】店舗データで階層的クラスター分析【沖縄市】
参考書籍・資料
主な参考箇所 9 クラスター分析
概要
店舗データの確認
↓
階層的クラスター分析について調べる
↓
方法を決める
↓
デンドログラムを見る
使用するデータ
使用するデータは、私の配達データ。
期間は、2021年5月10日~10月31日。
上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。
店舗データの確認
今回扱うデータは以下とする。
注文数が多い順に20店舗選んだ。
階層的クラスター分析について
上記表の店舗を大まかにグループ分けしたいが、変数が多く複雑なため、簡単にできそうにない。
この問題について調べていたところ、以下の文章を見つけた。
クラスター分析とは、データのパターンが似ている個体を同じグループにまとめる分析方法である。その方法としては、グループの形成状態を樹形図で表す方法、お互いの関係を利用してグループをつくる方法、モデルに基づいた方法などがある。
つまり、クラスター分析を用いれば、店舗のグループ分けもできるということ(だろう)。
今回は、上記に書かれてある「グループの形成状態を樹形図で表す方法」を試してみる(階層的クラスター分析)。
やり方について調べてみると、以下の流れで行うことが分かった。
階層的クラスター分析にはいくつかの方法があるが、いずれも次のようなステ ップを踏む。
(1) データから距離(あるいは類似度)を求める
(2) クラスター分析の方法(最近隣法、最遠隣法など)を選択する
(3) 選択された方法のコーフェン(cophenetic)行列を求める
(4) コーフェン行列に基づいて樹形図を作成する
(5) 結果について検討を行う
この流れに従ってやってみる。
データから距離(あるいは類似度)を求める
書籍にならって、距離を求めてみる。
> data <- read.table("clipboard",header = TRUE) > data.d <- dist(data) > round(data.d)
結果の一部を表にまとめる。
1 | 2 | 3 | |
2 | 56 | ||
3 | 70 | 19 | |
4 | 82 | 37 | 19 |
2と3の店舗データの距離は近く、4と1の距離は遠いことが分かる。
クラスター分析の方法を選択する
階層的クラスター分析の方法がいくつかあると分かったが、どの方法が最も適しているか分からなかった。この問題について調べてみたところ、以下の文章を見つけた。
コーフェン行列は用いる方法によって結果が異なる。そこで、異なる方法による結果の中でどの方法による結果を用いるべきかが1つの問題となる。クラスター分析の結果の妥当性の評価に、距離の行列とコーフェン行列との相関係数(以下コーフェン相関係数)が用いられている(西田・他 1992)。 コーフェン相関係数は、用いた方法で生成されたコーフェン行列と用いた距離の行列とのピアソン相関係数である。
コーフェン相関係数をそれぞれ出してみる。
> c.data.hc <- hclust(data.d,method = "complete") > cor(data.d, cophenetic(c.data.hc)) [1] 0.685089 ………
結果を表にまとめる。
方法 | コーフェン相関係数 |
最近隣法 | 0.8485672 |
最遠隣法 | 0.685089 |
群平均法 | 0.8694052 |
重心法 | 0.8603905 |
メディアン法 | 0.6954409 |
ウォード法 | 0.6494299 |
McQuitty法 | 0.7253641 |
この結果の解釈の仕方については、書籍に以下の記述があった。
コーフェン相関係数の値が大きいほど、距離行列と用いた方法のコーフェン行列との歪みが少ないと判断するが、歪みが少ないことと分類の結果がより妥当であるということは等価ではない。経験上、ウォード法は妥当と思われる結果を返すことが多いが、コーフェン相関係数が比較的低い値を返す。
とりあえず、コーフェン相関係数が最も高い群平均法とウォード法で分析を進めてみる。
選択された方法のコーフェン行列を求める
選択された方法は群平均法とウォード法になる。2つのコーフェン行列を求めてみる。
> a.data.hc <- hclust(data.d,method = "average") > cophenetic(a.data.hc) > w.data.hc <- hclust(data.d,method = "ward.D") > cophenetic(w.data.hc) #結果は省略
コーフェン行列に基づいて樹形図を作成する
樹形図(デンドログラム)を作成してみる。
> plot(a.data.hc,hang = -1) #群平均法 > rect.hclust(a.data.hc,k = 6,border = c(2,3,4,5,6,7)) > plot(w.data.hc,hang = -1) #ウォード法 > rect.hclust(w.data.hc,k = 6,border = c(2,3,4,5,6,7))
群平均法↓
ウォード法↓
結果について検討を行う
今回は、コーフェン相関係数が最も大きかった群平均法と比較的妥当な結果を返すことが多いと言われるウォード法を用いて樹形図を作成してみた。今回の店舗データは、分析の前段階でグループ分けできていないため、どの樹形図が比較的正しいかどうかは分からない。
せっかくなので、自分なりに解釈してみる。
2つの樹形図の中で、仲間外れになっている店舗を見てみる。群平均法の樹形図では、最初の枝分かれが5番の店舗とそれ以外になっている。ウォード法の樹形図では、最初の枝分かれが5、6、8、15、20番の店舗とそれ以外になっている。5、6、8、15、20番の店舗の中でも、5と6、8、15、20番で分けられている。以上のことから、5番の店舗は2つの樹形図で比較的仲間外れ的な扱いになっていることが分かる。
距離が近い(似通った)店舗を見てみる。2つの樹形図で16と18番の距離が最も近くなり、互いに似通った店舗データを持っていると推測できる。
5、16、18番の店舗データをそれぞれ見てみる。
店舗番号 | 注文数 | チップ数 | 配達10件当たりのチップ数 | 配達料金1000円当たりのチップ額 | 待機場所からの距離 | |
カレーハウス CoCo壱番屋 沖縄美里 | 5 | 60 | 35 | 5.833333333 | 271.0314737 | 0.95 |
ケンタッキーフライドチキン 登川店 KFC | 16 | 25 | 9 | 3.6 | 118.119939 | 2.9 |
モスバーガー コザ店 | 18 | 23 | 8 | 3.47826087 | 121.5180266 | 3.6 |
5番のCoCo壱番屋は、「配達10件当たりのチップ数」と「配達料金1000円当たりのチップ額」が1位だった。16番のケンタッキーと18番のモスバーガーは、上記表を見ると分かるように、すべての項目で近い値を示していると分かる。
追記
クラスターの特徴を視覚的に理解する方法としてヒートマップが紹介されていた。
主成分分析、因子分析、対応分析は変数と個体との対応関係が考察できる。従来のクラスター分析は、グルーピングされている各クラスの特徴を読み取ることができなかった。その問題を解決するため、ヒートマップ(heatmap)という視覚的にクラスの特徴を考察する方法が提案されている。ヒートマップは、個体の樹形図を変数の樹形図と同時に示し、対応する値の大小を色の涙淡で示す方法である。
さっそく、やってみた。
> heatmap(data)
結果↓
右側の番号は店舗番号を表し、下側の番号は変数の項目になる。上記の図を見ると、項目4の値がどの店舗でも高い値を示すと分かり、項目5の値はどの店舗でも低い値を示すと分かる。しかし、この図では、店舗ごとの特徴が分からない。
このような結果になった原因を考える。
項目4と項目5を見てみると、前者が「配達料金1000円当たりのチップ額」、後者が「待機場所からの距離」となっていた。前者の値は大体50~200に収まるのに対して、後者の値は大体0.5~3に収まっていた。
書籍の用いたデータを見てみると、
算数 理科 国語 英語 社会
田中 89 90 67 46 50
佐藤 57 70 80 85 90
鈴木 80 90 35 40 50
本田 40 60 50 45 55
川端 78 85 45 55 60
吉野 55 65 80 75 85
斉藤 90 85 88 92 95
1人1人の教科の点数となっているため、値の単位が決まっており、数値の大きさ・振れ幅にさほど差がなかった。
自分が用いたデータとの違いは明らかだった。ヒートマップを使う場合は、標準化を行うなどの数値変換をする必要があった。
まとめ
今回は、クラスター分析を用いて、店舗のグループ分けを行ってみた。
結果、今回の分析項目で分かったことは下記の2つ。
・ケンタッキーフライドチキン登川店とモスバーガーコザ店は似通ったデータを持つ
コメント