Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

HiRoshima.R#6 by imuyaoti

719 vues

Publié le

2016.2.20 HiRoshima.R#6 でimuyaotiが発表したものにスライド追加したものです。

とりあえずやってみた!という事例報告程度の内容なのでご注意ください。
モデルの試行錯誤や結果の解釈はほとんどできていません。

Publié dans : Données & analyses
  • Soyez le premier à commenter

HiRoshima.R#6 by imuyaoti

  1. 1. @imuyaoti Rを小規模飲食店の 経営に活用するには? 2016.2.20HiRoshima.R#6 途中報告! →Stanに挑戦しました
  2. 2. 2 お店の売り上げデータ 好きにしていいよって 言われたけど、 Rで何かできないかな
  3. 3. 3
  4. 4. 4 こんなことが できるように なりたい!!
  5. 5. データの概要 データ 5 ・期間:2015/3/18~2015/12/31 ・客数:合計、新規客 ・売上:合計、チャージ、ドリンク、フード ・注文数:合計、チャージ、ドリンク、フード ・その他:天候、気温、雨量 仕入や経費のデータは今回は扱わない
  6. 6. 6 売上を上げる 方法を考えたい!
  7. 7. 売上とは? 7 売上 ドリンク売上 フード売上 チャージ売上 = チャージ金額 × 客数 = 1人当たりドリンク平均額 × 客数 = 1人当たりフード平均額 × 客数 ドリンク平均単価×1人当たりドリンク注文数 フード平均単価×1人当たりフード注文数
  8. 8. 売上とは? 8 𝑺 𝒕 𝑺 𝒅 𝑺 𝒇 𝑺 𝒄 = 𝑷 𝒄 × 𝑪𝒕𝒎 = 𝑨 𝒅 × 𝑪𝒕𝒎 = 𝑨 𝒇 × 𝑪𝒕𝒎 𝑷 𝒅 × 𝑵 𝒅 𝑷 𝒇 × 𝑵 𝒇 𝑺 :売上、𝑪𝒕𝒎:客数、 𝑨 :客単価、 𝑷 :単価および平均単価、 𝑵 :1人当たりの平均注文数、 𝒕 :合計、 𝒄 :チャージ、 𝒅 :ドリンク、 𝒇 :フード 数式にすると…
  9. 9. 売上とは? 9 𝑺 𝒕 = 𝑪𝒕𝒎 × 𝑷 𝒄 + 𝑷 𝒅 × 𝑵 𝒅 + 𝑷 𝒇 × 𝑵 𝒇 𝑨 𝒅 𝑨 𝒇 𝑨 𝒕 売上 = 客数 × 客単価 つまりは 整理すると… 𝑺 𝒕 = 𝑪𝒕𝒎 × 𝑨 𝒕
  10. 10. 売上とは? 10 売上アップに効果的な要因はどれか? 𝑺 𝒕 = 𝑪𝒕𝒎 × 𝑷 𝒄 + 𝑷 𝒅 × 𝑵 𝒅 + 𝑷 𝒇 × 𝑵 𝒇 お客さんを増やす? チャージ金額を上げる? 価格の高いメニューをすすめる? 注文数を増やす? 商品の価格を上げる? いろいろあるけど…
  11. 11. 11 わたしができることは グラスが空いているお客さんに 「もう一杯いかがですか?」 と声をかけることぐらい… 現実は... 𝑺 𝒕 = 𝑪𝒕𝒎 × 𝑷 𝒄 + 𝑷 𝒅 × 𝑵 𝒅 + 𝑷 𝒇 × 𝑵 𝒇 1人当たりのドリンク注文数を増やす
  12. 12. • 売上予測モデルをつくる • 声掛けで増加できる𝑵 𝒅を推定する • 𝑵 𝒅が増加した場合の今後の売上を予測する 早くもココで挫折 声かけによるドリンク注文数の増加が 売上に及ぼす影響を予測したい
  13. 13. どんなモデル? 13 𝑪𝒕𝒎 = 𝑾𝒕𝒓 + 𝑴𝒕𝒉 + 𝑫𝒂𝒚 + 𝑯𝒐𝒍 … :アテがあればお酒がススム 天候 月 曜日 休日 𝑵 𝒅 ∝ 𝑵 𝒇 とりあえず思いついたこと
  14. 14. どんなモデル? 時系列データである! 14
  15. 15. データをながめる 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月定休日なし ゆるやかに増加傾向? 売上の推移
  16. 16. データをながめる 16 売上と客数の傾向は類似 客単価は横ばい 売上・客数・客単価の推移を比較
  17. 17. データをながめる 17 ggpairs{GGally} 客数と関連しそうな要因
  18. 18. データをながめる 18 細かいところは見にくいですが、 これくらい全体をざっとながめて データの雰囲気を つかめるようになりたい
  19. 19. データをながめる 19 客数と関連しそうな要因pick up 天候 休日前日 月 曜日 などなど。。。
  20. 20. 20 ぜんぶ見てたら進めない… とりあえずで 何かつくってやってみよ…
  21. 21. モデル作成 21 𝑺 𝒕 = 𝑪𝒕𝒎 × 𝑨 𝒕 𝑵 𝒇 = 𝜶 + 𝜷𝑵 𝒅 + 𝜺 𝟐 𝑨 𝒕 = 𝑨 𝒅 + 𝑨 𝒇 𝑪𝒕𝒎 = 𝑻𝒓𝒆𝒏𝒅 + 𝑹𝒂𝒊𝒏 + (𝑫𝒂𝒚 + 𝑷𝒉𝒐𝒍) + 𝑨𝑹 + 𝜺 𝟏 𝑨 𝒇 = 𝑷 𝒇 × 𝑵 𝒇 ・売上を客数と客単価から算出する ・客数を天候、曜日、休日前日効果、時系列的要因で予測する ・ドリンク注文数がフード注文数に影響する こんなモデルを考えてみた 時系列プロットの比較から 𝑺 𝒕の時間的変動は 𝑪𝒕𝒎によるものとした。 𝒘𝒆𝒆𝒌
  22. 22. RStanでうごか… 22 いろいろとひどすぎて ぜんぜんできなかった
  23. 23. 23 申し訳ないですが 今ここまでです。。 真似すればできるものではなかった… 大いに反省中。。。
  24. 24. 24 ここから延長戦。 ・Stanの文法をちゃんと勉強する ・簡単なモデルからはじめて、 最後に組み合わせる で、Stanをうごかすことはできました。
  25. 25. • 休日効果は休日前日効果のみ • イベント効果を入れていない • generated quantitiesブロックで 予測値を計算した 25 と少し違うところ
  26. 26. data{ 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 26 ※オープン月の3月のデータは除いた
  27. 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]; } 27
  28. 28. model model{ 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に引き継げない!
  29. 29. generated quantities generated 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]; 29 𝒎𝒐𝒅𝒆𝒍 から引き継げないので、 変数名を変えて再定義
  30. 30. kick library(rstan) war <- 1000 ite <- 10000 dig <- 3 cha <- 3 Thi <- 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) 30
  31. 31. 結果:客数の成分分解 31 𝒘𝒆𝒆𝒌𝑻𝒓𝒆𝒏𝒅 𝑹𝒂𝒊𝒏 𝑨𝑹
  32. 32. 結果:客数…週効果 32 b3:直近の金曜日との類似度 b4:直近の土曜日との類似度 𝑫𝒂𝒚 𝑷𝒉𝒐𝒍
  33. 33. 結果:客数…雨効果 33 𝑪_𝑹𝒂𝒊𝒏 ・仮説検定的に考えると、 信頼区間がゼロをまたいでいる ・値でみても、どしゃぶり20㎜以上の日 でも1名程度しか客数に影響はない
  34. 34. 結果 客単価、フード注文数 34 𝑵𝒇 = 𝒃𝟏 + 𝒃𝟐 ∗ 𝑵𝒅 + 𝜺 青:実測値 赤:予測値 𝑵 𝒇 青:実測値 赤:予測値 単純にドリンク注文数で予測できるものではなかった
  35. 35. 結果:観測値と予測値の比較 35 𝑺 𝒕 𝑪𝒕𝒎 𝑨 𝒕 客単価に占めるフードの割合が小さく、 フード注文数の予測が悪くても 客単価予測にあまり影響しない。 青:実測値 赤:予測値 青:実測値 赤:予測値 青:実測値 赤:予測値
  36. 36. 参考にさせていただきました @berobero11さんのスライド RStanで『予測にいかす統計モデリングの基本』 の売上データの分析をトレースしてみた http://www.slideshare.net/berobero11/ss-29409382 36 樋口知之先生 著 予測にいかす統計モデリングの基本 牛 廿TTさんのページ 状態空間モデルで自然検索トラフィックの成長を 予測する http://abrahamcow.hatenablog.com/entry/2016/02/06/080906 などなど
  37. 37. 参考にさせていただきました Masaki Tsudaさんのスライド RStanとShinyStanによるベイズ統計モデリング 入門http://www.slideshare.net/masakitsuda940/rstanshinystan 37 豊田秀樹先生 編著 基礎からのベイズ統計学 ハミルトニアンモンテカルロ法による実践的入門 馬場真哉さんのページ Logics of Blue Stanによるベイズ推定の基礎 http://logics-of-blue.com/stanによるベイズ推定の基礎/ などなど

×