hiroshima.r#6 by imuyaoti
TRANSCRIPT
![Page 1: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/1.jpg)
@imuyaoti
R を小規模飲食店の 経営に活用するには?
2016.2.20
HiR
oshima. R
#6
途中報告!
→Stan に挑戦しました
![Page 2: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/2.jpg)
2
お店の売り上げデータ
好きにしていいよって
言われたけど、
R で何かできないかな
![Page 3: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/3.jpg)
3
![Page 4: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/4.jpg)
4
こんなことができるようになりたい!!
![Page 5: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/5.jpg)
5 データの概要
データ・期間: 2015/3/18 ~ 2015/12/31・客数:合計、新規客
・売上:合計、チャージ、ドリンク、フード
・注文数:合計、チャージ、ドリンク、フード
・その他:天候、気温、雨量
仕入や経費のデータは今回は扱わない
![Page 6: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/6.jpg)
6
売上を上げる
方法を考えたい!
![Page 7: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/7.jpg)
7 売上とは?
売上
ドリンク売上
フード売上
チャージ売上 = チャージ金額 × 客数
= 1人当たりドリンク平均額 × 客数
= 1人当たりフード平均額 × 客数
ドリンク平均単価 × 1人当たりドリンク注文数
フード平均単価 × 1人当たりフード注文数
![Page 8: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/8.jpg)
8 売上とは?
𝑺𝒕
𝑺𝒅
𝑺 𝒇
𝑺𝒄 = × = ×
=×𝑷 𝒅×𝑵 𝒅
𝑷 𝒇×𝑵 𝒇
:売上、:客数、
:客単価
:単価および平均単価、
:1人当たりの平均注文数、
:合計、 :チャージ、
:ドリンク、 :フード
数式にすると…
![Page 9: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/9.jpg)
9 売上とは?
𝑺𝒕=𝑪𝒕𝒎× {𝑷𝒄+(𝑷 𝒅×𝑵 𝒅 )+ (𝑷 𝒇 ×𝑵 𝒇 ) }𝑨𝒅 𝑨 𝒇𝑨𝒕
売上 = 客数 × 客単価つまりは
整理すると…
![Page 10: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/10.jpg)
10 売上とは?
売上アップに効果的な要因はどれか?
𝑺𝒕=𝑪𝒕𝒎× {𝑷𝒄+(𝑷 𝒅×𝑵 𝒅 )+ (𝑷 𝒇 ×𝑵 𝒇 ) }
お客さんを増やす?
チャージ金額を上げる?
価格の高いメニューをすすめる?
注文数を増やす?
商品の価格を上げる?
いろいろあるけど…
![Page 11: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/11.jpg)
11
わたしができることは
グラスが空いているお客さんに
「もう一杯いかがですか?」と声をかけることぐらい…
現実は ...
𝑺𝒕=𝑪𝒕𝒎× {𝑷𝒄+(𝑷 𝒅×𝑵 𝒅 )+ (𝑷 𝒇 ×𝑵 𝒇 ) }1人当たりのドリンク注文数を増やす
![Page 12: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/12.jpg)
• 売上予測モデルをつくる
• 声掛けで増加できるを推定する
• が増加した場合の今後の売上を予測する
早くもココで挫折
声かけによるドリンク注文数の増加が売上に及ぼす影響を予測したい
![Page 13: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/13.jpg)
13 どんなモデル?
𝑪𝒕𝒎=𝑾𝒕𝒓 +𝑴𝒕𝒉+𝑫𝒂𝒚+𝑯𝒐𝒍…:アテがあればお酒がススム
天候 月 曜日 休日
𝑵 𝒅∝𝑵 𝒇
とりあえず思いついたこと
![Page 14: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/14.jpg)
14 どんなモデル?
時系列データである!
![Page 15: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/15.jpg)
15 データをながめるData %>% ggplot(aes(x = ymd))+ geom_line(aes( y = sal), color= "#a9a9a9", size = 0.8)+ geom_line(aes( y = TTR :: SMA(sal, n = 7)), color= "#f8766D", size = 0.8)+ geom_hline(yintercept = mean(Data$sal), color = "#dc143c", size = 0.5)+ labs(x = “Time”, y =“St :売上” )+ my.theme
3 月開店 12 月定休日なし
ゆるやかに増加傾向?
売上の推移
![Page 16: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/16.jpg)
16 データをながめる
売上と客数の傾向は類似
客単価は横ばい
売上・客数・客単価の推移を比較
![Page 17: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/17.jpg)
17 データをながめる
ggpairs{GGally}
客数と関連しそうな要因
![Page 18: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/18.jpg)
18 データをながめる
細かいところは見にくいですが、
これくらい全体をざっとながめて
データの雰囲気を
つかめるようになりたい
![Page 19: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/19.jpg)
19 データをながめる
客数と関連しそうな要因 pick up
天候
休日前日
月
曜日などなど。。。
![Page 20: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/20.jpg)
20
ぜんぶ見てたら進めない…
とりあえずで
何かつくってやってみよ…
![Page 21: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/21.jpg)
モデル作成 21
𝑺𝒕=𝑪𝒕𝒎×𝑨𝒕
𝑵 𝒇=𝜶+𝜷𝑵 𝒅+𝜺𝟐
𝑨𝒕=𝑨𝒅+𝑨𝒇
・売上を客数と客単価から算出する・客数を天候、曜日、休日前日効果、時系列的要因で予測する・ドリンク注文数がフード注文数に影響する
こんなモデルを考えてみた
時系列プロットの比較から
の時間的変動は
によるものとした。
𝒘𝒆𝒆𝒌
![Page 22: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/22.jpg)
22 RStan でうごか…
いろいろとひどすぎて
ぜんぜんできなかった
![Page 23: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/23.jpg)
23
申し訳ないですが
今ここまでです。。
真似すればできるものではなかった…
大いに反省中。。。
![Page 24: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/24.jpg)
24
ここから延長戦。
・ Stan の文法をちゃんと勉強する
・簡単なモデルからはじめて、
最後に組み合わせる
で、 Stan をうごかすことはできました。
![Page 25: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/25.jpg)
25
• 休日効果は休日前日効果のみ
• イベント効果を入れていない
• generated quantities ブロックで 予測値を計算した
と少し違うところ
![Page 26: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/26.jpg)
26data{ int<lower=0> N; # サンプルサイズ real<lower=0> Nd[N]; # 1人当たりドリンク注文数 real<lower=0> Nf[N]; # 1人当たりフード注文数 real<lower=0> Pd[N]; # ドリンク平均単価 real<lower=0> Pf[N]; # フード平均単価 int<lower=0, upper=6> Day[N]; # 曜日 (0 ~ 6 :日~土 ) int<lower=0, upper=1> Phol[N]; # 休日前日= 1 、それ以外= 0 real<lower=0, upper=1> Rain[N]; # 雨量効果 (0~0.9mm = 0 、 1.0~9.9mm = 0.5 、
10.0~19.9mm = 0.5 、 20mm~ = 1) real<lower=0> Ctm[N]; # 客数}
data
※ オープン月の3月のデータは除いた
![Page 27: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/27.jpg)
27 parameters
parameters{ real<lower=0> b1; real b2; real trend[N]; real<lower=0> b3; real<lower=0> b4; real s[N]; real c_rain[N]; real ar[N]; real c_ar[2]; real<lower=0, upper=100> sigma[5];}
![Page 28: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/28.jpg)
modelmodel{ real week[N]; real rain[N]; real ctm_mu[N];
for(i in 1:N) Nf[i] ~ normal(b1 + b2*Nd[i], sigma[1]); for(i in 3:N) trend[i] ~ normal(2*trend[i-1] - trend[i-2], sigma[2]); for(i in 7:N) s[i] ~ normal(-s[i-1]-s[i-2]-s[i-3]-s[i-4]-s[i-5]-s[i-6], sigma[3]); for(i in 1:4) # データが水曜 始まりのため week[i] <- s[i]; for(i in 5:N) week[i] <- s[i] + Phol[i]*(b3*(s[i-Day[i]-2]-s[i])+b4*(s[i-Day[i]-1]-s[i])); for(i in 1:N) rain[i] <- c_rain*Rain[i]; for(i in 3:N) ar[i] ~ normal(c_ar[1]*ar[i-1] + c_ar[2]*ar[i-2], sigma[4]); for(i in 1:N) ctm_mu[i] <- trend[i] + week[i] + ar[i]; for(i in 1:N) Ctm[i] ~ normal(ctm_mu[i], sigma[5]);
28の推定に必要な、
計算によって求められる変数の宣言※generated quantities に引き継げない!
![Page 29: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/29.jpg)
29 generated quantitiesgenerated quantities{ real nf_pre[N]; real at_pre[N]; real week2[N]; real rain2[N]; real ctm_mu2[N]; real ctm_pre[N]; real sal_pre[N]; for(i in 1:N) nf_pre[i] <- normal_rng(b1 + b2*Nd[i], sigma[1]); for(i in 1:N) at_pre[i] <- Pd[i]*Nd[i] + Pf[i]*nf_pre[i] + 500; for(i in 1:4) week2[i] <- s[i]; for(i in 5:N) week2[i] <- s[i] + Phol[i]*(b3*(s[i-Day[i]-2]-s[i])+b4*(s[i-Day[i]-1]-s[i])); for(i in 1:N) ctm_mu2[i] <- trend[i] + week2[i] + ar[i]; for(i in 1:N) ctm_pre[i] <- normal_rng(ctm_mu2[i], sigma[5]); for(i in 1:N) sal_pre[i] <- ctm_pre[i]*at_pre[i];
から引き継げないので、
変数名を変えて再定義
![Page 30: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/30.jpg)
30 kick
library(rstan)war <- 1000ite <- 10000dig <- 3cha <- 3Thi <- 30
rstan_options(auto_write = TRUE)options(mc.cores = parallel::detectCores())
data <- list(N=nrow(Data), Nd = Data$nd, Nf = Data$nf, Pf = Data$pf, Pd = Data$pd, Day=day, Phol = Data2$phol, Rain = Data2$rain, Ctm = Data2$ctm)
fit <- stan(file = ".stan", data = data, thin = thi, verbose = F, chains = cha, warmup = war, iter = ite)
![Page 31: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/31.jpg)
31 結果:客数の成分分解
𝒘𝒆𝒆𝒌𝑻𝒓𝒆𝒏𝒅
𝑹𝒂𝒊𝒏 𝑨𝑹
![Page 32: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/32.jpg)
32 結果:客数…週効果
b3 :直近の金曜日との類似度 b4 :直近の土曜日との類似度
𝑫𝒂𝒚 𝑷𝒉𝒐𝒍
![Page 33: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/33.jpg)
33 結果:客数…雨効果
𝑪𝑹𝒂𝒊𝒏
・仮説検定的に考えると、 信頼区間がゼロをまたいでいる・値でみても、どしゃぶり 20 ㎜以上の日 でも 1 名程度しか客数に影響はない
![Page 34: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/34.jpg)
34 結果 客単価、フード注文数
𝑵𝒇=𝒃𝟏+𝒃𝟐∗𝑵𝒅+𝜺
青:実測値赤:予測値
𝑵 𝒇青:実測値赤:予測値
単純にドリンク注文数で予測できるものではなかった
![Page 35: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/35.jpg)
35 結果:観測値と予測値の比較
𝑺𝒕
𝑪𝒕𝒎 𝑨𝒕
客単価に占めるフードの割合が小さく、フード注文数の予測が悪くても客単価予測にあまり影響しない。
青:実測値赤:予測値
青:実測値赤:予測値
青:実測値赤:予測値
![Page 36: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/36.jpg)
36 参考にさせていただきました
@berobero11 さんのスライドRStan で『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみたhttp://www.slideshare.net/berobero11/ss-29409382
樋口知之先生 著予測にいかす統計モデリングの基本
牛 廿 TT さんのページ状態空間モデルで自然検索トラフィックの成長を予測するhttp://abrahamcow.hatenablog.com/entry/2016/02/06/080906
などなど
![Page 37: HiRoshima.R#6 by imuyaoti](https://reader036.vdocuments.mx/reader036/viewer/2022070513/58853fdb1a28abb5368b47c7/html5/thumbnails/37.jpg)
37 参考にさせていただきました
Masaki Tsuda さんのスライドRStan と ShinyStan によるベイズ統計モデリング入門http://www.slideshare.net/masakitsuda940/rstanshinystan
豊田秀樹先生 編著基礎からのベイズ統計学ハミルトニアンモンテカルロ法による実践的入門
馬場真哉さんのページ Logics of BlueStan によるベイズ推定の基礎http://logics-of-blue.com/stanによるベイズ推定の基礎/
などなど