Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた

26,732 views

Published on

  • Be the first to comment

『予測にいかす統計モデリングの基本』の売上データの分析をトレースしてみた

  1. 1. 『予測にいかす統計モデリングの基本』 の売上データの分析をトレースしてみた 2013.12.22 @berobero11 BUGS/Stan勉強会 #2 於 ドリコム
  2. 2. 良書です! 買いましょう.
  3. 3. 本発表のデータは書籍を参考にデータをゼロか ら作成したものであり, 分析手法も異なります. それらについて書籍の著者や統計数理研究所 に問い合わせたりしてはいけません.
  4. 4. 仮想売上データ オフィス街の近くのレストラン • 2012/1/1~2013/12/31 • 繁忙期(8月)は欠損 売上 [千円] day
  5. 5. Year Month Day Wday Weather Head.count 2012 1 1 0 1 0 2012 1 2 1 1 7800 2012 1 3 2 1 0 2012 1 4 3 2 19400 2012 1 5 4 1 32000 2012 1 6 5 3 0 … … … … … … 2013 12 27 5 5 14100 2013 12 28 6 3 6300 2013 12 29 0 1 17700 2013 12 30 1 1 0 2013 12 31 2 2 0 天気 曜日 0: 日 1: 月 … 6: 土 1: 2: 3: 4: 5: 晴れ 曇り 雨 大雨 雪 Sale 39.225 44.043 51.804 92.846 126.064 99.976 … 148.769 49.090 126.074 67.274 56.311 近くのイベント の参加人数
  6. 6. 売上 [千円] イベントの参加人数 lm(formula = d$Sale ~ Sun + Mon + Tue + Wed + Thu + Fri + Sat + d$Weather + d$Head.count) ?
  7. 7. そこで統計モデリングですよ!
  8. 8. 今回はStan, RStanを使いました http://www.slideshare.net/berobero11/bugs-26159695
  9. 9. 売上データの分解モデル 𝑆𝑎𝑙𝑒 𝑡 = 𝑡𝑟𝑒𝑛𝑑 𝑡 + 𝑤𝑒𝑒𝑘 𝑡 + 𝑟𝑎𝑖𝑛 𝑡 + 𝑒𝑣𝑒𝑛𝑡 𝑡 + 𝑎𝑟 𝑡 + 𝜀 𝑡 トレンド 雨効果 週効果 先頭が AR項 イベント 効果 残差 小文字の変数: 推定すべきパラメータ 大文字の変数: すでに与えられているデータ・数値 とします.
  10. 10. モデル | トレンド 長期的変動を表す. 二次トレンドモデルを使う. 𝑡𝑟𝑒𝑛𝑑 𝑡 − 𝑡𝑟𝑒𝑛𝑑 𝑡−1 ≈ 𝑡𝑟𝑒𝑛𝑑 𝑡−1 − 𝑡𝑟𝑒𝑛𝑑 𝑡−2 𝑡𝑟𝑒𝑛𝑑 𝑡 = 2𝑡𝑟𝑒𝑛𝑑 𝑡−1 − 𝑡𝑟𝑒𝑛𝑑 𝑡−2 + 𝜀1 𝑡 𝜀1 𝑡 ~𝒩 0, 𝜎 𝑡𝑟𝑒𝑛𝑑
  11. 11. モデル | 週効果 𝑤𝑒𝑒𝑘 𝑡 = 𝑠 𝑡 + 𝐷1 𝑡 𝑏1 𝑠 日,𝑡 − 𝑠 𝑡 + 𝐷2 𝑡 𝑏2 𝑠 金,𝑡 − 𝑠 𝑡 + 𝑏3 𝑠 土,𝑡 − 𝑠 𝑡 値=1 値=0 𝐷1 𝑡 月~金の祝日 それ以外 𝐷2 𝑡 祝日でない月~木 かつ翌日が祝日 それ以外
  12. 12. モデル | 週効果 基本パターン (周期7) 7 𝑠 𝑡−𝑙 ≈ 0 𝑙=1 6 𝑠𝑡 = − 𝑠 𝑡−𝑙 + 𝜀2 𝑡 𝑙=1 𝜀2 𝑡 ~𝒩 0, 𝜎 𝑠
  13. 13. モデル | 週効果 祝日効果 祝日の売上がどのくらい直近の日曜の売上に似ているか 類似度 0 ≤ 𝑏1 ≤ 1 祝前日効果 祝前日の売上がどのくらい直近の金曜 or 土曜の売上に似ているか 類似度 0 ≤ 𝑏2, 𝑏3 ≤ 1
  14. 14. モデル | 雨効果 『悪天候になればなるほど・・・』 経験で変換: 天気数値 推定する係数 [千円] Rain_val 𝑟𝑎𝑖𝑛 𝑡 = 𝑐_𝑟𝑎𝑖𝑛 ∗ 𝑅𝑎𝑖𝑛_𝑣𝑎𝑙 𝑡
  15. 15. モデル | イベント効果 経験で変換: 参加人数数値 推定する係数 [千円] 𝑒𝑣𝑒𝑛𝑡 𝑡 = 𝑐_𝑒𝑣𝑒𝑛𝑡 𝑡 ∗ 𝐸𝑣𝑒𝑛𝑡_𝑣𝑎𝑙 Event_val イベントの参加人数 [万人] 𝑐_𝑒𝑣𝑒𝑛𝑡 𝑡 = 𝑐_𝑒𝑣𝑒𝑛𝑡 𝑡−1 + 𝜀3 𝑡 𝜀3 𝑡 ~𝒩 0, 𝜎 𝑒𝑣𝑒𝑛𝑡 𝑡
  16. 16. モデル | AR項 𝑎𝑟 𝑡 は 𝑡𝑟𝑒𝑛𝑑 𝑡 よりは短く 𝑤𝑒𝑒𝑘 𝑡 よりは長い時間スケール、 具体的には1ヶ月程度の周期を担う成分 このような他の項では説明できない時間スケール変動を表す 項をあらかじめ入れておくことが, モデリングに基づくデータ分 析の秘訣である. [書籍より] 2 𝑎𝑟 𝑡 = 𝑐_𝑎𝑟𝑙 𝑎𝑟 𝑡−𝑙 + 𝜀4 𝑡 𝑙=1 𝜀4 𝑡 ~𝒩 0, 𝜎 𝑎𝑟
  17. 17. Stanコード (data, parametersブロック) 欠損値を別ループで回すため 範囲の制限
  18. 18. Stanコード (modelブロック) モデルで事前分布を指定しなければ, 無情報事前分布が自動で設定されるので, これだけでOK! 欠損値を別ループで回す
  19. 19. 現在のマイポリシー 『Stanコードはなるべく減らす』 • transformed dataブロック • generated quantitiesブロック – なるべく使わないでRで計算
  20. 20. kickするRコード (RStanを使用) 今回, 欠損値は自分で入れました {doParallel}を使って並列計算! 環境: Windows 7 64 bit R 3.0.2 Stan 2.0.1
  21. 21. 分解の結果 売上データ, トレンド 週 雨 イベント AR 売上 [千円] 残差 day 真の値 MCMCサンプル (n=1500) MCMCサンプルの中央値
  22. 22. 結果: トレンド 𝑡𝑟𝑒𝑛𝑑 𝑡 2年間 𝑡𝑟𝑒𝑛𝑑 𝑡 2013 2012 1年間
  23. 23. 結果: 週効果 | 基本パターン 𝑠𝑡 売上 [千円] 真の値 MCMCサンプルの中央値 週末に売上が減る. ビジネス街の影響.
  24. 24. 結果: 週効果 | 祝日効果 類似度 真の値 MCMCサンプルの密度関数 MCMCサンプルの中央値, 95%CI 𝐷2 𝑡 = 1の日は3日だけだったので 𝑏2, 𝑏3の推定は厳しかった. 0 ≤ 𝑏1 ≤ 1の範囲の境界の値(=1.0)を推定させるのも厳しい様子.
  25. 25. 結果: 雨効果 係数 [千円] 真の値 MCMCサンプルの密度関数 MCMCサンプルの中央値, 95%CI 悪天候になると売上が伸びる. ビジネス街の影響.
  26. 26. 結果: イベント効果 𝑒𝑣𝑒𝑛𝑡 𝑡 𝑐_𝑒𝑣𝑒𝑛𝑡 𝑡 売上 [千円] day 真の値 MCMCサンプル (n=1500) MCMCサンプルの中央値
  27. 27. 結果: AR項, 残差 𝑎𝑟 𝑡 欠損値のあるところ 𝜀𝑡 売上 [千円] day
  28. 28. 気になる計算時間は・・・ ☹ 残念ながら約24時間とちょっと長い. – – – – 𝜎 𝑠 (s_s)だけが収束しにくかった. このパラメータ以外は iter=10000 あればOK. 収束をよくする余地はあるのか?要調査. vector化?
  29. 29. まとめ • Stanで売上データの分解モデルを試しました. 割とうまくいきました. Stanと時系列データは相性良さそう. • GARCH, ARIMAなどの時系列分析の手法と比べて, 様々な知 見やデータを組み合わせることで現象の理解がすすみそう.
  30. 30. Web上の情報(予定含む) • Small Data Scientist Memorandum – http://heartruptcy.blog.fc2.com/blog-entry-90.html – R Advent Calendar 2013の26日目の記事になります. • 書籍の元となった研究はこちら. – 状態空間モデルを用いた飲食店売上の要因分解 • http://ci.nii.ac.jp/naid/110001183787 – 状態空間モデルによる 時系列データ解析 樋口知之 - 統計数理研究所 • http://tswww.ism.ac.jp/higuchi/index_e/papers/Kouza-TSA-Higuchi.pdf‎

×