【ウーバーイーツ】店舗データで因子分析【沖縄市】
書籍「Rによるデータサイエンス(第2版)」を読んでいると、以下の表を見つけた。
各変数が2つの要素にまとめられており、対象者がどの分野を得意にしているかが一目で分かる。
店舗データを上記と同じように分析した場合、どのような結果になるか気になる。
ということで、今回は店舗データの共通因子を調べてみる。
参考書籍・資料

主な参考箇所 6 因子分析
概要
変量の標準化
↓
因子分析について調べる
↓
因子数を決める
↓
因子分析を行う
使用するデータ
使用するデータは、私の配達データ。
期間は、2021年5月10日~10月31日。
上記期間の総配達件数は、1528件。※ ダブルピックも1件とカウント。
変量の標準化
今回扱うデータは、前回同様に注文数が多い20店舗となる。
このまま進めようと思ったが、以下の文章を見つけたため、変量の標準化を行うこととした。
変量の標準化
いま調べたように、古典的な因子分析では、変量を標準化します。
変量の標準化済み↓
因子分析について
共通因子を抽出する方法は因子分析と言うらしい。それについて、参考書籍で調べたところ、以下の文章を見つけた。
因子分析は、変数の間の相関関係から共通因子を求めることで、多くの変数を共通因子にまとめて説明することを目的としている。
冒頭で示した表でいうと、理科と算数に正の相関が見られるのなら、理科と算数ができるようになる共通のスキルがあると予想できる。
因子数を決める
5教科を2つの因子(文系科目・理系科目)で分けているように、今回の店舗データもいくつの因子に分けるか決める必要がある。
決め方は、以下のやり方をまねる。
平行分析の関数fa.parallelで因子の数を求めてみよう。
> fa.parallel(data) Parallel analysis suggests that the number of factors = 2 and the number of components = 2
結果、「推奨される因子数は2である」となった。
因子分析を行う
書籍にならって、因子分析をしてみる。
> (data.fac <- factanal(data,factors=2)) #因子数2で因子分析 Call: factanal(x = data, factors = 2) Uniquenesses: #独自因子 [1] 0.005 0.005 0.046 0.200 0.686 Loadings: #因子負荷量 Factor1 Factor2 [1,] 0.994 [2,] 0.895 0.442 [3,] 0.972 [4,] 0.890 [5,] -0.559 Factor1 Factor2 SS loadings 2.118 1.941 #寄与度 Proportion Var 0.424 0.388 #寄与率 Cumulative Var 0.424 0.812 #累積寄与率 Test of the hypothesis that 2 factors are sufficient. The chi square statistic is 1.08 on 1 degree of freedom. The p-value is 0.298
項目を1つ1つ見てみる。
まずは、独自因子(Uniquenesses)↓
注文数 | チップ数 | 配達10件当たりのチップ数 | 配達料金1000円当たりのチップ額 | 待機場所からの距離 |
0.005 | 0.005 | 0.046 | 0.200 | 0.686 |
書籍には、このように説明されていた。
返された独自因子(uniquenesses)はモデルで説明できなかった情報の比率である。
今回の場合で見ると、注文数の独自因子は0.005のため、ほぼ共通因子で説明できていると分かる。一方、待機場所からの距離は0.686と約3割しか共通因子で説明できていないことが分かる。
次に、因子負荷量↓
Factor1 | Factor2 | |
注文数 | 0.994 | |
チップ数 | 0.895 | 0.442 |
配達10件当たりのチップ数 | 0.972 | |
配達料金1000円当たりのチップ額 | 0.890 | |
待機場所からの距離 | -0.559 |
ネット(統計WEB)で調べると、このように説明されていた。
因子負荷量
factor loading
因子分析において、得られた共通因子が分析に用いた変数(観測変数)に与える影響の強さを表す値で、観測変数と因子得点との相関係数に相当する。-1以上1以下の値をとり、因子負荷量の絶対値が大きいほど、その共通因子と観測変数の間に(正または負の)強い相関があることを示し、観測変数をよく説明する因子であると言える。
今回の場合で見ると、注文数はFactor1に強く影響されていると分かる。
次に、寄与度、寄与率、累積寄与率を見てみる。
Factor1 | Factor2 | |
寄与度 | 2.118 | 1.941 |
寄与率 | 0.424 | 0.388 |
累積寄与率 | 0.424 | 0.812 |
ネット(統計WEB)で調べると、このように説明されていた。※寄与度の説明は見当たらなかった。
寄与率
contribution ratio
データの全情報の中で、各要素のもつ情報が占める割合のこと。
今回の場合で見ると、Factor1が全データの約42%を説明していると分かる。累積寄与率がFactor2で約80%となっていることから、Factor1、2で全データの約80%を説明していることになる。
次に、この一文の意味を考える。
Test of the hypothesis that 2 factors are sufficient.
翻訳機にかけると、「2因子で十分であるという仮説の検定。」となった。
設定した因子数は、妥当だったと分かる。
最後に、出力の一番下にある文章の意味を考える。
The chi square statistic is 1.08 on 1 degree of freedom. The p-value is 0.298
書籍では、上記の文章について、このように説明されていた。
適合度の検定を行っている部分です。この場合、今回指定した2因子モデルが、このデータに当てはまっているかどうか、ということを示しています。カイニ乗値が0.08、自由度1、p値が0.782と書かれていますので、2因子モデルはデータと適合していると考えられます。適合度の検定は、「モデルとデータが有意に異なっているか」について調べるもので、検定結果が有意である場合は「適合していない」と判断します。
今回の場合で見ると、P値が0.298となり、有意水準5%で有意といえないため、適合していないとはいえないという結果と分かる。
因子負荷量の可視化
参考書籍では、因子負荷量を棒グラフで可視化することを推奨していた。
やってみる。
> barplot(data.fac$loading[,1],col="lightblue") #Factor1 > barplot(data.fac$loading[,2],col="lightblue") #Factor2
Factor1↓
Factor2↓
5教科の点数を用いて因子分析を行っていた書籍では、上記のようなグラフを作成して、Factor1・2を文系・理系と意味づけていた。
今回の場合は、簡単に解釈できそうにない。が、せっかくなので、多少強引に意味づけてみる。
Factor1は注文数と強い正の相関があるため、単純にFactor1を”頻度”と捉えても良いかもしれない。そう捉えると、待機場所からの距離がFactor1と負の相関関係にあることも理解できる。Factor2はチップ関連の指標と正の相関があるため、”チップ率”と捉えても良いかもしれない。
回転とバイプロット
参考書籍では、バリマックス回転を行ったバイプロットを作成していた。
やってみる。
> data.fac3<-factanal(data,factors=2,scores="regression") > biplot(data.fac3$scores,data.fac3$loading)
上記の図で、特徴のある1番と5番と9番の店舗データを見てみる。ちなみに、1番はペリペリチキン、5番はカレーハウスCoCo壱番屋沖縄美里店、9番はマクドナルド具志川メインシテイ店となる
注文数 | チップ数 | 配達10件当たりのチップ数 | 配達料金1000円当たりのチップ額 | 待機場所からの距離 | |
1 | 3.36 | 2.93 | 0.25 | 0.33 | -0.94 |
5 | 0.66 | 1.61 | 2.08 | 2.70 | -0.70 |
9 | -0.07 | -0.94 | -2.25 | -1.94 | -0.50 |
1番は、図で見るとFactor1がかなり高い数値と分かる。データで見ても注文数がかなり高い数値となっていると分かる。
5番は、図で見るとFactor2が高い数値と分かる。データで見てもチップに関する指標が高い数値となっていると分かる。
9番は、図で見るとFactor2が低い数値と分かる。データで見てもチップに関する指標が低い数値となっていると分かる。
まとめ
今回は、店舗データを因子分析することで共通因子を抽出してみた。
結果、チップに関する指標と頻度の指標が共通因子として表れた。
コメント