前回のおさらい
前回(第2回目)投稿では、「客単価」が最も高い店舗と低い店舗の店舗間比較分析を行いました。
具体的には、各々の店舗の「客単価」を「買上点数×買上商品単価」に分解し、「客単価」に差が生じる原因を深堀していきました。
以下がその結果です。
店舗コード「S14010」
(1回当たりの)買上点数 1.05ケ
(1回当たりの)買上商品単価 442
店舗コード「S14022」
(1回当たりの)買上点数 1.02ケ
(1回当たりの)買上商品単価 200
どちらも1回当たりの買上点数にはそれほど大きな差はないものの、買上商品単価に2.21倍の差があることが分かりました。
今回のテーマ
そこで今回は、各々の店舗でどのような商品が売れているのかについて、売上金額ベースのABC分析を行い、各店舗の売れ筋商品の違いについて見ていきたいと思います。
分析の流れ
分析の流れは大まかに以下の通りとします。
1. 店舗コード「S14010」について売上金額の相対度数と累積相対度数を計算、累積相対度数をもとにABCランク付けを行う。「S14022」
2. 店舗コード「S14022」について売上金額の相対度数と累積相対度数を計算、累積相対度数をもとにABCランク付けを行う。
3. 各店舗のAランク商品について比較を行う。
Rによる実装
1. まずは客単価が最も高い店舗コード「S14010」について分析
1-1. 2017年1月のID-POSデータから店舗コード「S14010」のデータをそれぞれ抽出し、売上金額を計算する。
#tidyverseの読み込み
library(tidyverse)
#id_pos_2017_1からstore_cdがs14010の店舗のデータのみを抽出した後、
#売上金額列(sales_amount)を追加しS14010_2017_1へ格納
S14010_2017_1 <- id_pos_2017_1 %>%
filter(store_cd == "S14010") %>%
mutate(sales_amount = quantity * amount)
ちなみに、“id_pos_2017_1”は元のID-POSデータから2017年1月のデータのみを抽出したデータでした。
先頭20行を表示します。
この中から、店舗コードが「S14010」のデータのみ抽出し、売上金額列(sales_amount列)を追加しました。
先頭20行を表示します。
1-2. 売上金額を降順に並び替え、相対度数と累積相対度数を計算する。
まずは集計に必要のない列を削除します。
S14010_2017_1_select <- S14010_2017_1 %>%
select(sales_ymd, store_cd, product_cd, quantity, amount, sales_amount)
上位20行を表示します。
集計に不要な列が削除されました。
続いてsales_amount列(売上金額列)を対象に降順に並び替えます。
S14010_2017_1_arrange <- S14010_2017_1_select %>%
arrange(desc(sales_amount))
売上金額列が降順に並び替えられました。
続いて、"sales_amount列"(売上金額列)を対象に、相対度数と累積相対度数を計算します。
#sales_amount列の相対度数を計算する
S14010_2017_1_rf <- S14010_2017_1_arrange %>%
mutate(relative_freq = prop.table(S14010_2017_1_arrange$sales_amount))
相対度数が計算できました。
"reletive_freq列"が相対度数です。
続いて、累積相対度数を計算します。
#relative_freq列の累積相対度数を計算する
S14010_2017_1_crf <- S14010_2017_1_rf %>%
mutate(cum_relative_freq = cumsum(S14010_2017_1_rf$relative_freq))
累積相対度数が計算できました。
"cum_relative_freq列"が累積相対度数です。
最後に累積相対度数に基づき、ABCランクを付けていきます。
今回は、累積相対度数が80%までがAランク、80%から90%がBランク、それ以上がCランクとしました。
#累積相対度数に基づき、ABCランクをつける
ABC_rank_S14010 <- S14010_2017_1_crf %>%
mutate(ABC_rank = case_when(cum_relative_freq <= 0.8 ~ "A",
cum_relative_freq <= 0.9 ~ "B",
TRUE ~ "C")
Aランクの上位20行を表示します。
"amount列"が商品単価の列です。
2. 次に、客単価が最も低い店舗コード「S14022」について分析します。
2-1. 2017年1月のID-POSデータから店舗コード「S14022」のデータをそれぞれ抽出し、売上金額を計算する。
#id_pos_2017_1からstore_cdがS14022の店舗のデータのみを抽出し、売上金額列を追加しS14022_2017_1へ格納
S14022_2017_1 <- id_pos_2017_1 %>%
filter(store_cd == "S14022") %>%
mutate(sales_amount = quantity * amount)
2-2. 売上金額を降順に並び替え、相対度数と累積相対度数を計算する。
まずは集計に必要のない列を削除します。
#余計な列を削除
S14022_2017_1_select <- S14022_2017_1 %>%
select(sales_ymd, store_cd, product_cd, quantity, amount, sales_amount)
上位20行を表示します。
集計に不要な列が削除されました。
続いてsales_amount列(売上金額列)を対象に降順に並び替えます。
#sales_amount列を降順に並びかえる
S14022_2017_1_arrange <- S14022_2017_1_select %>%
arrange(desc(sales_amount))
売上金額列が降順に並び替えられました。
続いて、"sales_amount列"(売上金額列)を対象に、相対度数と累積相対度数を計算します。
#sales_amount列の相対度数を計算する
S14022_2017_1_rf <- S14022_2017_1_arrange %>%
mutate(relative_freq = prop.table(S14022_2017_1_arrange$sales_amount))
相対度数が計算できました。
"reletive_freq列"が相対度数です。
続いて、累積相対度数を計算します。
#relative_freq列の累積相対度数を計算する
S14022_2017_1_crf <- S14022_2017_1_rf %>%
mutate(cum_relative_freq = cumsum(S14022_2017_1_rf$relative_freq))
累積相対度数が計算できました。
"cum_relative_freq列"が累積相対度数です。
#累積相対度数を基づき、ABCランクをつける
ABC_rank_S14022 <- S14022_2017_1_crf %>%
mutate(ABC_rank = case_when(cum_relative_freq <= 0.8 ~ "A",
cum_relative_freq <= 0.9 ~ "B",
TRUE ~ "C"))
最後に累積相対度数に基づき、ABCランクを付けていきます。
今回は、累積相対度数が80%までがAランク、80%から90%がBランク、それ以上がCランクとしました。
#累積相対度数を基づき、ABCランクをつける
ABC_rank_S14022 <- S14022_2017_1_crf %>%
mutate(ABC_rank = case_when(cum_relative_freq <= 0.8 ~ "A",
cum_relative_freq <= 0.9 ~ "B",
TRUE ~ "C"))
Aランクの上位20行を表示します。
"amount列"が商品単価の列です。
3. 各店舗のAランク商品について比較を行う
ここで、店舗コード「S14010」と「S14022」の上位20行に表示されたAランク商品をもう一度見てみます。
店舗コード「S14010」の上位20商品
店舗コード「S14022」の上位20商品
"amount"列が「商品単価」の列ですが、比較すると店舗コード「S14010」の店舗の方が、単価が高い商品が売れていることがわかります。
4.まとめ
前回(2回目)投稿の分析で、店舗コード「S14010」の方が高い商品が売れていることが分かり、今回(3回目)投稿では、その要因を明らかにしようとしましたが、最終的には、前回(2回目)投稿を裏付ける程度の分析結果しか得られませんでした。
客単価に差が生じる要因を明らかにするためには、ID-POSなどの定量的な分析に加え、『店舗コード「S14010」の方が陳列、見せ方が上手い』、『店舗コード「S14010」の方が接客力が高い』といったような定性的な分析や、商圏人口の所得などの分析が必要になってきます。
今回はサンプルデータなので、陳列や接客、商圏などについての分析は行いませんが、実店舗の分析においては、定量・定性の両面から分析を進めることで要因の絞り込みが出来、効果的な販促活動に繋がる示唆を得ることができます。