前回のおさらい
前回(第1回目)投稿では、とあるID-POSデータから2017年1月のデータを抽出し、「客単価」と「来店頻度」の2軸で店舗間比較を行いました。
その結果、「来店頻度」のばらつきよりも、「客単価」のばらつきの方が大きいことが分かりました。
念のため、前回作成した散布図を改めて表示します。
今回のテーマ
そこで今回(第2回目)は「客単価」が最も高い店舗と低い店舗の店舗間比較を行い、「客単価」に差が生じる要因を明らかにしていきたいと思います。
分析の流れ
分析の大まかな流れは以下の通りとします。
1. 2017年1月において、「客単価」が最も高い店舗と低い店舗を特定する
2. 客単価=買上点数×買上商品単価に分解し、各々の店舗についてこれら指標を計算する
3. (1回当たりの)買上点数と(1回当たりの)買上商品単価を比較し、客単価に差異が生じる要因を特定する
Rによる実装
1. 2017年1月において、「客単価」が最も高い店舗と低い店舗を特定する
#tidyverseの読み込み
library(tidyverse)
#前回作成した"id_pos_2017_1_sales_per_customer"を確認
id_pos_2017_1_sales_per_customer
id_pos_2017_1_sales_per_customerの先頭20行を表示
まずid_pos_2017_1_sales_per_customerの中から、客単価が最大の店舗を抽出します。
#id_pos_2017_1_sales_per_customerの中から客単価が最大の店舗と最小の店舗を抽出
max_row <- id_pos_2017_1_sales_per_customer %>%
filter(sales_per_customer == max(sales_per_customer))
結果を表示します
#結果を表示
print(max_row)
store_cd sales_store_amount Row_count sales_per_customer
1 S14010 / 39320 / 85 / 463.
店舗コード「S14010」の店舗が客単価最大となり、「463」であることが分かりました。
続いてid_pos_2017_1_sales_per_customerの中から、客単価が最小の店舗を抽出します。
#id_pos_2017_1_sales_per_customerの中から客単価が最小の店舗を抽出
min_row <- id_pos_2017_1_sales_per_customer %>%
filter(sales_per_customer == min(sales_per_customer))
結果を表示します
#結果を表示
print(min_row)
store_cd sales_store_amount Row_count sales_per_customer
1 S14022 / 12016 / 59 / 204.
店舗コード「S1402」の店舗が客単価最小となり、「204」であることが分かりました。
2. 客単価=買上点数×買上商品単価に分解する
続いて、客単価を買上点数と買上商品単価に分解していきます。
(1回購入あたりの)買上点数は以下の通り定義します。
(1回購入あたりの)買上点数=総買上点数÷のべ購入回数
(1回購入あたりの)買上商品単価は以下の通り定義します。
(1回購入あたりの)買上商品単価=合計売上金額÷総買上点数
以下、前回(第1回目)作成したid_pos_2017_1_sales_amountを使い計算していきます。
id_pos_2017_1_sales_amountの先頭20行を表示
quantityが「買上点数」、amountが「単価」、sales_amountが「売上金額」です。
2-1.客単価が最大である店舗コード「S14010」について
まずは、客単価が最大である店舗コード「S14010」から見ていきます。
ここからの集計の流れは以下の通り行います。
2-1-1. 店舗コード「S14010」の行を抽出し、合計売上金額、総買上点数、のべ購入回数を計算
2-1-2. 総買上点数÷のべ購入回数で(1回購入あたりの)買上点数を計算
2-1-3. 合計売上金額÷総買上点数で(1回購入あたりの)買上商品単価を計算
はじめに、「2-1-1. 店舗コード「S14010」の行を抽出し、合計売上金額、総買上点数、のべ購入回数を計算」を実装していきます。
#店舗コード「S14010」のみ抽出し合計売上金額、総買上点数、のべ購入回数を計算
#合計売上金額が"total_sales_amount"、総買上点数が"total_quantity"、のべ購入回数が"total_count"
s14010 <- id_pos_2017_1_sales_amount %>%
filter(store_cd == "S14010") %>%
summarise(total_sales_amount = sum(sales_amount),
total_quantity = sum(quantity),
total_count = n())
結果を表示します。
#結果を表示
s14010
total_sales_amount(合計売上金額)/total_quantity(総買上点数)/total_count(のべ購入回数)
39320 / 89 / 85
これをもとに、2-1-2.「(1回購入あたりの)買上点数」と2-1-3.「(1回購入あたりの)買上商品単価」を計算していきます
#(1回購入あたりの)買上点数と(1回購入あたりの)買上商品単価を計算する
#(1回購入あたりの)買上点数が"quantity_per_count"、(1回購入あたりの)買上商品単価が
#"product_amount"
s14010_data <- s14010 %>%
mutate(quantity_per_count = total_quantity / total_count,
product_amount = total_sales_amount / total_quantity)
結果を表示します
#結果を表示
s14010_data
quantity_per_count(1回購入あたりの買上点数)/ product_amount(1回当たりの買上商品単価)
1.05 / 442.
これで客単価が最大である店舗コード「S14010」の(1回購入あたりの)買上点数と(1回購入あたりの)買上商品単価が計算できました。
店舗コード「S14010」
1回当たりの買上点数 1.05ケ
1回当たりの買上商品単価 442
2-2.客単価が最小である店舗コード「S14022」について
続いて、客単価が最小である店舗コード「S14022」を見ていきます。
集計の流れは同じです。
#続いて店舗コード「S14022」のみ抽出し合計売上金額、総買上点数、のべ購入回数を計算
#合計売上金額が"total_sales_amount"、総買上点数が"total_quantity"、のべ購入回数が"total_count"
s14022 <- id_pos_2017_1_sales_amount %>%
filter(store_cd == "S14022") %>%
summarise(total_sales_amount = sum(sales_amount),
total_quantity = sum(quantity),
total_count = n())
結果を表示します
#結果を表示
s14022
total_sales_amount(合計売上金額)/total_quantity(総買上点数)/total_count(のべ購入回数)
12016 / 60 / 59
これをもとに、「1回あたりの買上点数」と「1回あたりの買上商品単価」を計算していきます
#1回あたりの買上点数と1回あたりの買上商品単価を計算する
#1回あたりの買上点数が"quantity_per_count"、1回あたりの買上商品単価が"product_amount"
s14022_data <- s14022 %>%
mutate(quantity_per_count = total_quantity / total_count,
product_amount = total_sales_amount / total_quantity)
結果を表示します
#結果を表示
s14022_data
quantity_per_count(1回あたりの買上点数)/ product_amount(1回あたりの買上商品単価)
1.02 / 200.
これで客単価が最小である店舗コード「S14022」の1回あたりの買上点数と1回あたりの買上商品単価が計算できました。
店舗コード「S14022」
1回あたりの買上点数 1.02ケ
1回あたりの買上商品単価 200
3. (1回当たりの)買上点数と(1回当たりの)買上商品単価を比較し、客単価に差異が生じる要因を特定する
店舗コード「S14010」と「S14022」の計算結果を並べてみます
店舗コード「S14010」
(1回当たりの)買上点数 1.05ケ
(1回当たりの)買上商品単価 442
店舗コード「S14022」
(1回当たりの)買上点数 1.02ケ
(1回当たりの)買上商品単価 200
どちらも1回当たりの買上点数にはそれほど大きな差はないものの、(1回あたりの)買上商品単価が2.21倍の差があることが分かりました。
店舗コード「S14010」の方が、高い商品が売れているという事が分かりました。
要因としては、以下のような仮説が考えられます。
- 店舗コード「S14010」の商圏内には所得の高い世帯が住んでいる
- 店舗コード「S14010」の方が、高単価商品の品揃えが豊富
- 店舗コード「S14010」の方が、高単価商品の陳列や見せ方がうまい
- 店舗コード「S14010」の従業員の接客スキルが高い
などなど…
これらの仮説を検証し、客単価の低い店舗コード「S14022」で実行すれば、客単価の改善、そして売上の改善に繋がりそうです。
次回は、これら仮説のうちID-POSデータで検証可能な
『2. 店舗コード「S14010」の方が、高単価商品の品揃えが豊富』という仮説を検証していきます。