【ウーバーイーツ】店舗データで主成分分析をしてみる【沖縄市】
※主成分分析をやりたかっただけの記事
参考書籍
主な参考箇所 第13章 主成分分析
概要
分析対象となる店舗を決める。
↓
分析する項目を決める。
↓
主成分分析を行う。
使用するデータ
使用するデータは、私の配達データ。
期間は、2021年5月10日~10月31日
上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。
分析対象となる店舗
注文数が多い店舗を10店舗選ぶ。
店舗 | order_quantity | store_no |
ペリペリチキン | 126 | 1 |
らあめん花月嵐 美里 | 73 | 2 |
スターバックスコーヒー具志川メインシティ店 | 64 | 3 |
マクドナルド コザ十字路店 | 61 | 4 |
カレーハウス CoCo壱番屋 沖縄美里 | 60 | 5 |
A&W 美里店 | 56 | 6 |
ほっともっと 赤道店 | 47 | 7 |
CORE CURRY 美原本店 | 42 | 8 |
マクドナルド 具志川メインシテイ店 | 42 | 9 |
吉野家 うるま志林川店 | 40 | 10 |
上記の10店舗が今回の分析対象。※店舗名が長いため、注文数が多い順に番号をつける。(store_no)
分析する項目
以下の項目を用いて分析を行う。
order_quantity:注文数
no_chip_price_average:チップを含まない配達単価平均
chip_rate:チップの割合(チップ数/注文数)
distance:待機場所からの距離
店舗と上記項目を表にまとめる。
store_no | order_quantity | no_chip_price_average | chip_rate | distance |
1 | 126 | 542.1666667 | 0.3968 | 0.65 |
2 | 73 | 693.9726027 | 0.4384 | 0.85 |
3 | 64 | 447.359375 | 0.4063 | 1.2 |
4 | 61 | 436.5409836 | 0.3279 | 1.2 |
5 | 60 | 495.65 | 0.5833 | 0.95 |
6 | 56 | 509.1964286 | 0.4107 | 0.25 |
7 | 47 | 485.9361702 | 0.3617 | 1.9 |
8 | 42 | 560.9761905 | 0.5 | 0.7 |
9 | 42 | 476.1904762 | 0.1429 | 1.2 |
10 | 40 | 555.775 | 0.375 | 2.5 |
主成分分析を行う
上記のようにデータをまとめてみた。が、この表からデータの性質を捉えるのは難しいように思える。
このような問題の解決方法を参考書籍で調べてみると以下の解説があった。
一般に多変量のデータは複雑で、何らかの形で縮約する(次元を下げる)ことによって、データの性質がつかみやすくなることがある。回帰分析でもある種の縮約がなされているが、回婦分析においては、説明変数と被説明変数(応答変数)があったのに対し、主成分分析では、そのような区別はせずに、データの特徴をできるだけ維持したまま低次元に射影する。ここでは、相関行列または分散共分散行列に基づく方法として、主成分分析 (Principal Component Analysis:PCA)を解説する。主成分分析は、1933年頃にホテリング(Hotelling)によって提案されたもので、数学的には、相関行列または分散共分散行列の固定値問題(特異値問題)を解く問題に帰着する。
要約するに、「変数が多くて分かりづらいのなら、主成分分析を試してみては。」ということだろう。
さっそく、まとめたデータを主成分分析にかけてみる。
> res <- prcomp(store_data, scale= TRUE) > summary(res) Importance of components: PC1 PC2 PC3 PC4 Standard deviation 1.319 0.9974 0.8587 0.7265 Proportion of Variance 0.435 0.2487 0.1844 0.1319 Cumulative Proportion 0.435 0.6837 0.8681 1.0000
結果を表にまとめる。
PC1(第1主成分) | PC2(第2) | PC3(第3) | PC4(第4) | |
Standard deviation | 1.319 | 0.9974 | 0.8587 | 0.7265 |
Proportion of Variance(寄与率) | 0.435 | 0.2487 | 0.1844 | 0.1319 |
Cumulative Proportion(累積寄与率) | 0.435 | 0.6837 | 0.8681 | 1.0000 |
参考書籍の以下の文をマネて、上記表の解釈をする。
この結果から、第1主成分の寄与率 (1つだけなので累積寄与率と言っても同じ)が0.8096にも達する。つまり第1主成分だけで全分散の約81%を説明している。
「この結果から、第2主成分の累積寄与率が0.6837にも達する。つまり、第2主成分までで全分散の約68%を説明している。」となる。
各店舗の主成分得点を見てみる。
> res$x PC1 PC2 PC3 PC4 [1,] -1.9008098 1.3391879 -0.992435459 -0.9186749 [2,] -1.6782150 -1.2042691 -1.194511614 0.5724059 [3,] 0.3589927 0.5729925 0.573251113 -0.4597751 [4,] 0.8169725 0.9192979 0.266990709 -0.1780604 [5,] -0.8004345 -0.4384757 1.354303024 -0.4987576 [6,] -0.6553570 0.5323080 0.638462226 0.9204209 [7,] 1.2749406 -0.3560916 -0.005436669 -0.4768698 [8,] -0.6594719 -0.8154258 0.764297721 0.7031253 [9,] 1.7710991 0.9737059 -0.780205799 1.0227464 [10,] 1.4722832 -1.5232300 -0.624715253 -0.6865606
結果の一部を表にまとめる。
PC1 | PC2 | |
1 | -1.9008098 | 1.3391879 |
2 | -1.6782150 | -1.2042691 |
3 | 0.3589927 | 0.5729925 |
4 | 0.8169725 | 0.9192979 |
「各主成分に対応する固有ベクトル」?というものを出してみる。
> res$rotation PC1 PC2 PC3 PC4 order_quantity -0.5259413 0.4681497 -0.4059371 -0.5826119 no_chip_price_average -0.4269949 -0.6185005 -0.5883054 0.2983777 chip_rate -0.4876955 -0.4559823 0.6434388 -0.3744593 distance 0.5506488 -0.4363176 -0.2740409 -0.6567453
結果の一部を表にまとめる。
PC1 | PC2 | |
order_quantity | -0.5259413 | 0.4681497 |
no_chip_price_average | -0.4269949 | -0.6185005 |
chip_rate | -0.4876955 | -0.4559823 |
distance | 0.5506488 | -0.4363176 |
参考書籍と同じように、バイプロットを作成してみる。
もともとのデータは4次元(4つの変数からなるデータ)だったが、第1主成分と第2主成分で表現することにより、2次元の平面で図示できた。
矢印と目盛についてを参考書籍で確認してみる。
矢印
矢印は因子負荷量 (factorloading)を表している。因子負荷量とは、元の変数と、主成分得点の相関係数のこと
目盛
目盛は、右と上が因子負荷量、下と左が主成分得点である。
主成分得点、固有ベクトル、バイプロットの解釈の仕方がまったく分からない。以下の参考書籍の文をマネてみる。
大雑把に言えば(一致はしないが)、左上の方向はMurder、Assaultが増える方向、左下はRape、UrbanPopが増える方向である。第1主成分は、およそ10万人あたりの犯罪数の成分であった。符号はマイナスだったから、左にいくほど犯罪率が高い*6。第2主成分のUrbanPopの係数はマイナスなので、下にいくほど都市への人口集中割合が大きい。主成分得点(PC1、PC2)の位置に、州の名前が書かれている(重なって見づらいけれども、これは仕方がない)。例えば、左下にあるカリフォルニア州は、都市部に多くの人口が集中していて、犯罪も多い、ということになる。近くに書かれている州は似た傾向にあるということである。例えば、フロリダ州、ニューメキシコ州、ミシガン州は、犯罪が多いが人口集中の度合は中程度で、暴力犯罪に関しては似た傾向にある州だということになる。
ざっくり、左上の方向はorder_quantityが増える方向、左下の方向はno_chip_price_averageとchip_rateが増える方向、右下はdistanceが増える方向となる。第1主成分(PC1)は、order_quantity、no_chip_price_average、chip_rateがマイナスの符号だったため、左にいくほど3つの値が高くなる。第2主成分(PC2)のorder_quantityの係数はプラスなので、上にいくほど注文数が多い。図に表示されている1~10の番号は店舗を表している。最も左上にある1は注文数が最も多く、待機場所からの距離は短い、ということになる。近くに書かれている店舗は似た傾向にある。例えば、5と8は、待機場所から同程度の距離にあり、チップの割合と配達単価平均が似通っている店舗だということになる。
なんとかそれっぽく解釈できた(気がする)。
まとめ
今回は、多変量データの縮約を行う方法として、主成分分析を採用した。
結果、分かったことは下記の2つ。
・変数間の関係性
主成分分析は、各店舗を配達データに基づいてジャンル分けする場合に便利な分析方法かもしれない。ただ、変数の選び方(平均値を使ってもいい?)や主成分の解釈の仕方など疑問点は多くある。
コメント