1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ID-POSデータを活用したデータ分析入門 その2

Posted at

前回のおさらい

前回(第1回目)投稿では、とあるID-POSデータから2017年1月のデータを抽出し、「客単価」と「来店頻度」の2軸で店舗間比較を行いました。
その結果、「来店頻度」のばらつきよりも、「客単価」のばらつきの方が大きいことが分かりました。
念のため、前回作成した散布図を改めて表示します。

image.png

今回のテーマ

そこで今回(第2回目)は「客単価」が最も高い店舗と低い店舗の店舗間比較を行い、「客単価」に差が生じる要因を明らかにしていきたいと思います。

分析の流れ

分析の大まかな流れは以下の通りとします。

1. 2017年1月において、「客単価」が最も高い店舗と低い店舗を特定する
2. 客単価=買上点数×買上商品単価に分解し、各々の店舗についてこれら指標を計算する
3. (1回当たりの)買上点数と(1回当たりの)買上商品単価を比較し、客単価に差異が生じる要因を特定する

Rによる実装

1. 2017年1月において、「客単価」が最も高い店舗と低い店舗を特定する

code
#tidyverseの読み込み
library(tidyverse)
code
#前回作成した"id_pos_2017_1_sales_per_customer"を確認
id_pos_2017_1_sales_per_customer

id_pos_2017_1_sales_per_customerの先頭20行を表示

image.png

まずid_pos_2017_1_sales_per_customerの中から、客単価が最大の店舗を抽出します。

code
#id_pos_2017_1_sales_per_customerの中から客単価が最大の店舗と最小の店舗を抽出
max_row <- id_pos_2017_1_sales_per_customer %>% 
filter(sales_per_customer == max(sales_per_customer))

結果を表示します

code
#結果を表示
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の中から、客単価が最小の店舗を抽出します。

code
#id_pos_2017_1_sales_per_customerの中から客単価が最小の店舗を抽出
min_row <- id_pos_2017_1_sales_per_customer %>% 
  filter(sales_per_customer == min(sales_per_customer))

結果を表示します

code
#結果を表示
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行を表示

image.png

quantityが「買上点数」、amountが「単価」、sales_amountが「売上金額」です。

2-1.客単価が最大である店舗コード「S14010」について

まずは、客単価が最大である店舗コード「S14010」から見ていきます。

ここからの集計の流れは以下の通り行います。

2-1-1. 店舗コード「S14010」の行を抽出し、合計売上金額、総買上点数、のべ購入回数を計算
2-1-2. 総買上点数÷のべ購入回数で(1回購入あたりの)買上点数を計算
2-1-3. 合計売上金額÷総買上点数で(1回購入あたりの)買上商品単価を計算

はじめに、「2-1-1. 店舗コード「S14010」の行を抽出し、合計売上金額、総買上点数、のべ購入回数を計算」を実装していきます。

code
#店舗コード「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()) 

結果を表示します。

code
#結果を表示
s14010

total_sales_amount(合計売上金額)/total_quantity(総買上点数)/total_count(のべ購入回数)

39320 / 89 / 85

これをもとに、2-1-2.「(1回購入あたりの)買上点数」と2-1-3.「(1回購入あたりの)買上商品単価」を計算していきます

code
#(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)

結果を表示します

code
#結果を表示
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」を見ていきます。

集計の流れは同じです。

code
#続いて店舗コード「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())

結果を表示します

code
#結果を表示
s14022

total_sales_amount(合計売上金額)/total_quantity(総買上点数)/total_count(のべ購入回数)

12016 / 60 / 59

これをもとに、「1回あたりの買上点数」と「1回あたりの買上商品単価」を計算していきます

code
#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)

結果を表示します

code
#結果を表示
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」の方が、高い商品が売れているという事が分かりました。

要因としては、以下のような仮説が考えられます。

  1. 店舗コード「S14010」の商圏内には所得の高い世帯が住んでいる
  2. 店舗コード「S14010」の方が、高単価商品の品揃えが豊富
  3. 店舗コード「S14010」の方が、高単価商品の陳列や見せ方がうまい
  4. 店舗コード「S14010」の従業員の接客スキルが高い

などなど…

これらの仮説を検証し、客単価の低い店舗コード「S14022」で実行すれば、客単価の改善、そして売上の改善に繋がりそうです。

次回は、これら仮説のうちID-POSデータで検証可能な
『2. 店舗コード「S14010」の方が、高単価商品の品揃えが豊富』という仮説を検証していきます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?