【ウーバーイーツ】店舗データで分散分析と多重比較をしてみる【沖縄市】
※分散分析と多重比較を使いたかっただけの記事
参考書籍
主な参考箇所
第14章 分散分析と多重比較入門
概要
分析対象となる店舗を決める。
↓
項目の概要をそれぞれ確認する。
↓
分散分析と多重比較を用いて分析を行う。
使用するデータ
使用するデータは、私の配達データ。
期間は、2021年5月10日~10月31日
上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。
分析対象となる店舗
注文数が多い店舗を20店舗選ぶ。
店舗 | order_quantity | store_no |
ペリペリチキン | 126 | A |
らあめん花月嵐 美里 | 73 | B |
スターバックスコーヒー具志川メインシティ店 | 64 | C |
マクドナルド コザ十字路店 | 61 | D |
カレーハウス CoCo壱番屋 沖縄美里 | 60 | E |
A&W 美里店 | 56 | F |
ほっともっと 赤道店 | 47 | G |
CORE CURRY 美原本店 | 42 | H |
マクドナルド 具志川メインシテイ店 | 42 | I |
吉野家 うるま志林川店 | 40 | J |
牛角 美里店 | 36 | K |
丸亀製麺 沖縄美里 | 32 | L |
ラーメン暖暮沖縄美原店 | 28 | M |
ほっともっと 中の町店 | 27 | N |
ヤンニョムチキン専門店 梨泰院トンバンチキン 安慶名店 | 26 | O |
ケンタッキーフライドチキン 登川店 KFC | 25 | P |
スシロー 沖縄住吉 | 25 | Q |
モスバーガー コザ店 | 23 | R |
モスバーガー 沖縄知花店 | 21 | S |
ほっともっと 安慶田中学校前店 | 21 | T |
上記の20店舗が、今回の分析対象。※店舗名が長いため、アルファベットで省略(store_no)
項目の概要
店舗ごとのチップを含まない配達単価とチップ額を見てみる。
店舗ごとのチップを含まない配達単価の平均値と標準偏差を比較してみる。
> plotmeans(no_chip_unit_price ~ store_no,data=store_data)
縦軸:チップを含まない配達単価
横軸:店舗
白点:平均値
線幅:標準偏差
n :注文数
上の図を見る限り、店舗ごとの配達単価平均に違いがあるように見える。
チップ額の平均も同様に比較してみる。
縦軸:チップ額
横軸:店舗
白点:平均値
線幅:標準偏差
n :チップ数
こちらも違いがあるように見える。
分散分析と多重比較
店舗ごとの平均値と標準偏差を図で表してみた。差があるように見えるが、その差が偶然によるものかどうか分からない。
このような問題を解決できないか参考書籍で調べていたところ、以下の説明があった。
2016年度、2017年度、2018年度の平均点に違いがあるかどうかを調べたい。こうしたとき、例えば2標本の(対応のない)t検定で2016年度と2017年度、2017年度と2018年度、2016年度と2018年度の平均値の差が有意かどうか検定すればよい、と考える人もいるだろう。一見するとこれでよさそうに見えるが、各々の二群でP値が0.03で5%有意であったとしても、全体で少なくとも二群間に観察された程度以上の差が偶然に生ずる確率は、1-(1-0.03)3乗=0.087327となり5%を超えてしまう*2。 これは第一種の過誤を起こしやすくなることを意味する。このような問題を解くのが本章の目的である。
この問題を解くには2つの考え方がある。1つは、2016年度、 2017年度、2018年度を各々比較するという考え方を捨てて、得点という(この場合は連続な)変数に対して、クラスという3つのカテゴリー(2016年度、2017年度、2018年度)を持つ変数が有意な効果を持つか、と考えるのである。これはようするに説明変数がカテゴリカルな回帰分析と同じことである。この考え方で作られた代表的な方法が、分散分析 (analysis of variance、 略称:ANOVA)である。
もう1つの考え方は、二群の比較を繰り返すという考え方はそのままで、確率を調整するかまたは信頼区間を調整して、第一種の過誤を犯す確率を有意水準以下に抑えるというものである。こ の考え方で作られた手法は多重比較 (multiple comparison)と呼ばれ、ボンフェローニの方法、ホルムの方法、チューキーのHSDなどがある。
要約するに、「各グループの平均点に違いがあるか確認する場合は、分散分析または多重比較を使おう」ということ。
さっそく、店舗ごとの配達単価平均を分散分析してみる。
※分散分析は等分散性を仮定するしないで使用する関数が異なる。今回は、両方使ってみる。
> oneway.test(no_chip_unit_price~factor(store_no),data=store_data) #等分散性を仮定しない One-way analysis of means (not assuming equal variances) data: no_chip_unit_price and factor(store_no) F = 7.9664, num df = 19.00, denom df = 244.06, p-value < 2.2e-16 > res <- aov(no_chip_unit_price~factor(store_no),data=store_data) #等分散性を仮定する > summary(res) Df Sum Sq Mean Sq F value Pr(>F) factor(store_no) 19 4494533 236554 6.969 <2e-16 *** Residuals 855 29020763 33942 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
両方ともP値は0.05より小さくなり、有意水準5%で有意となった。つまり、1つ以上の組み合わせの平均値に差があると認められた。
しかし、これではどの店舗間で平均値に差があるか分からない。参考書籍で調べたところ、そういう場合に多重比較を使うらしい。
では、店舗ごとの配達単価平均を多重比較してみる。※今回は、ボンフェローニ法のみ行う。
> pairwise.t.test(store_data$no_chip_unit_price, store_data$store_no, p.adjust.method="bonferroni") Pairwise comparisons using t tests with pooled SD data: store_data$no_chip_unit_price and store_data$store_no A B C D E F G H I J K B 5.4e-06 - - - - - - - - - - C 0.15884 3.0e-12 - - - - - - - - - D 0.04790 5.1e-13 1.00000 - - - - - - - - E 1.00000 1.9e-07 1.00000 1.00000
すべての組み合わせでP値が算出され、表がかなり大きくなってしまった。一部のみ抜粋し、以下にまとめる。※色付きセルは、有意水準5%で有意。
A | B | C | |
B | 5.4e-06 | ||
C | 0.15884 | 3.0e-12 | |
D | 0.04790 | 5.1e-13 | 1.00000 |
Dの行を見てみると、「D×AとD×Bは差があり、D×Cは差があるとはいえない」という結果になった。
実際に、図を確認してみると、
図からも分かるように、D×AとD×Bの差は明確であり、D×Cの差は明確ではない。
以上の流れを店舗ごとのチップ額の平均でも行ってみる。
まずは、分散分析。
> oneway.test(chip_amount~factor(store_no),data=store_chip_data) One-way analysis of means (not assuming equal variances) data: chip_amount and factor(store_no) F = 5.6728, num df = 19.000, denom df = 76.425, p-value = 1.954e-08 > res <- aov(chip_amount~factor(store_no),data=store_chip_data) > summary(res) Df Sum Sq Mean Sq F value Pr(>F) factor(store_no) 19 1471229 77433 3.419 3.1e-06 *** Residuals 314 7111268 22647 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
両方ともP値は、0.05より小さくなり、有意水準5%で有意となった。つまり、1つ以上の組み合わせの平均値に差があると認められた。
次に、多重比較を行う。
> pairwise.t.test(store_chip_data$chip_amount, store_chip_data$store_no, p.adjust.method="bonferroni") Pairwise comparisons using t tests with pooled SD data: store_chip_data$chip_amount and store_chip_data$store_no A B C D E F G H I J K L B 1.0000 - - - - - - - - - - - C 1.0000 1.0000 - - - - - - - - - - D 1.0000 1.0000 1.0000 - - - - - - - - - E 1.0000 1.0000 0.0072 0.0325
一部抜粋し、以下にまとめる。※色付きセルは、有意水準5%で有意。
B | C | D | |
C | 1.0000 | ||
D | 1.0000 | 1.0000 | |
E | 1.0000 | 0.0071 | 0.0313 |
Eの行を見てみると、「E×CとE×Dは差があり、E×Bは差があるとはいえない」という結果になった。
実際に、図を確認してみると、
図からも分かるように、E×CとE×Dの差は明確であり、E×Bの差は明確ではない。
まとめ
今回は、分散分析と多重比較を用いて、店舗ごとの配達単価平均とチップ額の平均をそれぞれ分析してみた。
結果、分かったことは下記の2つ。
・店舗間のチップ額の平均に差がある組み合わせ
店舗に付随するデータに基づいてグループ分けをすると面白いかもしれない。配達単価平均が高いグループの特徴や低いグループの特徴など、現段階でまったく気づけていない傾向に気づけるかもしれない。
コメント