Prophet入門【R編】Facebookの時系列予測ツール (original) (raw)
2. About me HOXO-M Inc. 代表取締役 CEO 2
4. 本⽇の内容 • Facebook が開発した時系列予測ツール Prophet を紹介 • R と Python のライブラリがあります https://github.com/facebookincubator/prophet • 本資料では R 版の使い⽅を説明 4
5. Prophet とは • Prophet = 予⾔者 • 時系列予測ツール – 統計知識不要 – 業務知識で精度向上 – 精度評価で品質保証 • 誰でも予⾔者に! 5
6. ⽬次 1. モチベーション 2. デフォルト設定で使ってみる 3. 業務知識を⼊れてみる 4. 統⼀的な評価で品質保証 5. まとめ 6
7. 1. モチベーション • ビジネスにおいて様々な時系列データの 将来予測は重要 • 例: 売り上げ予測 7
8. ビジネス時系列の予測 • 精度の良い予測をしたい • 必要なスキル – 統計モデル (ARIMA, 状態空間モデル, etc.) – ドメイン知識 (季節性, イベント, etc.) • 両⽅を兼ね備えた⼈材はほとんどいない ⇨ ⾼品質な予測は⾼コスト 8
9. 課題 • ⼤量のビジネス時系列データ • ⾼品質な予測が欲しい • コストは抑えたい ⇨ 予測のスケール化 9
10. 分散型によるスケール化 10 集中型 分散型 統計専⾨家 Prophet 予測 予測 予測 予測 予測 予測
11. 分散型予測の問題点 • 予測を作る⼈たちに統計の知識がない • パラメータ調整による精度向上が難しい • 予測の品質が⼀定でなくバラバラになる 11
12. Prophet の要件 • ドメイン知識を持つ⼈ が ① 統計の知識なしで予測を作成できる ② ドメイン知識を⼊れて精度向上できる ③ 品質を保つための統⼀的な評価⽅法 12
13. 1. まとめ • ビジネス時系列の予測は重要 • 専⾨家による集中型予測は⾼コスト • 分散型予測により予測を低コスト化 • Prophet は分散型予測に必要な3つの条件 を備えたツール 13
14. ⽬次 1. モチベーション 2. デフォルト設定で使ってみる 3. 業務知識を⼊れてみる 4. 統⼀的な評価で品質保証 5. まとめ 14
15. 2. デフォルト設定で使ってみる • Prophet の要件①: 統計の知識なしで予測を作成できる ⇨ デフォルト設定でいい感じの予測 15
16. インストール • CRAN からインストール可能 > install.packages(”prophet”) • rstan パッケージに依存 • Windows の場合、rstan パッケージは 先に別途インストールした⽅が良い 16
17. 本発表のデータ • GitHub 上のデータを使⽤します • https://github.com/facebookincubator/ prophet/tree/master/examples • Wikipedia • ペイトン・マニング • アメフト選⼿ • ⽇次ページビュー数 17
18. データの読み込み ds y 1 2007-12-10 9.590761 2 2007-12-11 8.519590 3 2007-12-12 8.183677 4 2007-12-13 8.072467 18
21. 予測期間の指定 • ⼀年(365⽇)の空のデータフレームを⽤意 ds 3266 2017-01-15 3267 2017-01-16 3268 2017-01-17 3269 2017-01-18 3270 2017-01-19 21
22. 予測の作成 ds yhat 3266 2017-01-15 8.213787 3267 2017-01-16 8.538876 3268 2017-01-17 8.326293 3269 2017-01-18 8.158930 3270 2017-01-19 8.170898 22
23. 予測のプロット • plot() 関数で簡単にプロットできる • 結果は ggplot オブジェクトなので簡単に 加⼯できる 23
24. 予測のプロット 24 予測
25. 2. まとめ • Prophet はデフォルト設定でいい感じの予測を 作成でき、可視化までできる! 25
26. ⽬次 1. モチベーション 2. デフォルト設定で使ってみる 3. 業務知識を⼊れてみる 4. 統⼀的な評価で品質保証 5. まとめ 26
27. 3. 業務知識を⼊れてみる • Prophet の要件②: ドメイン知識を⼊れて精度向上できる ⇨ 分かりやすい調整パラメータ 27
28. 予測モデル • 従来の予測モデル(⽣成モデル) – データがどのように発⽣するかを考える – パラメータの意味が分かりにくい (例: ARIMA の移動平均や⾃⼰回帰の次数) • Prophet – 予測を曲線フィッティングの問題と考える – パラメータが直感的に理解できる 28
29. 予測モデル • 時系列 = トレンド + 周期性 + イベント 29
31. 予測モデル • 時系列 = トレンド + 周期性 + イベント • パラメータが直感的に理解できる • 調整可能なパラメータ ① 線形トレンド or ⾮線形トレンド ② 変化点、変化点の数 ③ 週周期と年周期 ④ イベント 31
32. ① トレンドの選択 • 線形トレンド ’linear’ • ⾮線形トレンド ʻlogistic’ 32
33. トレンドの選択 • ⾮線形トレンド – ビジネス時系列は基本的に⾮線形トレンド – 成⻑上限(キャパシティ)が決まっている 例: ユーザ数の予測では Web⼈⼝が上限 • 線形トレンド – 成⻑の各段階は線形で近似できる – Prophet のデフォルトは線形 33
34. ⾮線形トレンドの指定 • growth=”logistic” を指定 • df$cap に上限(キャパシティ)を指定 34
35. ⾮線形トレンド • 例: Wikipedia の R のページビュー 35
36. ② 変化点の指定 • 新機能のリリースなどでトレンドが変化 • 変化点の指定が可能: changepoints=⽇付のベクトル 36
38. 変化点の数を指定 • 等間隔に変化点を置いて推定 n.changepoints=変化点の数 • 変化点は指定した数だけ出⼒されるが、 変化量が微⼩なら変化点とみなさない ⇨︎ 変化点の⾃動検出 38
39. ③ 週周期と年周期 • ビジネス時系列は⼈の⾏動に影響される • 週周期と年周期が重要 • 週周期: – ⼈の⾏動は曜⽇によって変わる (平⽇ or 休⽇) • 年周期: – ⼈の⾏動は季節によって変わる (年末年始など) 39
40. 週周期と年周期の指定 • それぞれの周期を考慮するか指定できる weekly.seasonality = TRUE/FALSE yearly.seasonality = TRUE/FALSE • デフォルトは ”auto” 40
41. ④ イベント効果 • 不定期に発⽣するイベントの影響を考慮 して予測を作成したい • イベントの例: – 祝⽇、キャンペーン、テレビCM 41
42. イベント効果 • イベント⽇を列挙したデータフレームを ⽤意する 42 holiday ds lower upper 24時間テレビ 2015-08-22 0 1 24時間テレビ 2016-08-27 0 1 24時間テレビ 2017-08-26 0 1 クリスマス 2015-12-25 -1 0 クリスマス 2016-12-25 -1 0 クリスマス 2017-12-25 -1 0
43. イベント効果 • イベント⽇のデータフレームを渡す holidays = event_dataframe 43
44. 例: イベント効果 • Wikipedia ページビュー • ペイトン・マニング • アメフト選⼿ • イベント: 「アメフトリーグの決勝戦の⽇」 44
47. 3. まとめ • Prophet の予測モデル: 時系列 = トレンド + 周期 + イベント • パラメータが直感的に理解できる – トレンド、変化点、周期、イベント – ドメイン知識により調整可能 • パラメータ調整により精度向上できる 47
48. ⽬次 1. モチベーション 2. デフォルト設定で使ってみる 3. 業務知識を⼊れてみる 4. 統⼀的な評価で品質保証 5. まとめ 48
49. 4. 統⼀的な評価で品質保証 • Prophet の要件③: 統⼀的な予測精度の評価 ⇨ MAPE と SHF 49
50. 統⼀的な評価 • なぜ統⼀的な評価が重要か? • 分散型予測 • 各⼈がそれぞれで予測を作成する ⇨ 予測の品質がバラバラになる • これらの予測の品質を⼀定に保ちたい 50
51. 平均絶対パーセント誤差 • MAPE (Mean Average Percent Error) • 予測値が実績値から何パーセント外れて いるかを表す ⇨ 異なる単位の予測を⽐較できる 51
52. 平均絶対パーセント誤差 • どうやって求めるか? ⇨ Simulated Historical Forecast を提案 52
54. Simulated Historical Forecast 54 訓練データ テスト 全期間 複数の期間における予測誤差を出す
55. Simulated Historical Forecast • n ⽇先の予測に対して m 個の誤差 (⿊点) • 平均誤差を局所多項式回帰で求める (⻘線) 55
56. SHF の実⾏ • Prophet には SHF は実装されていない • ただし、実装は難しくない • 今回は⾃分で実装 • ペイトン・マニングデータのデフォルト 予測とイベントを考慮した予測を⽐較 56
57. • デフォルト設定(⾚線)よりもイベントを考慮した ⽅(⻘線)が予測精度が良い • 250⽇以降は予測精度が急激に悪くなる 57
58. 4. まとめ • 統⼀的な精度評価⼿法を説明 • 分散型予測の品質を保つため • 平均絶対パーセント誤差 (MAPE) • Simulated Historical Forecast を提案 58
59. ⽬次 1. モチベーション 2. デフォルト設定で使ってみる 3. 業務知識を⼊れてみる 4. 統⼀的な評価で品質保証 5. まとめ 59
60. まとめ • Prophet は時系列予測ツール • 次の特徴を持つ – デフォルト設定でいい感じの予測を作成 – ドメイン知識によって精度改善 – SHF によって統⼀的な精度評価 • 分散型予測で利⽤可能 60
61. Prophet の使い⽅ ① ⼤量のビジネス時系列に対してデフォル ト設定で予測を作成 ② SHF による評価で順位を付け、悪い⽅か ら順番にドメイン知識で精度改善 ③ それでも悪ければ専⾨家が予測を⾏う ⇨ 限りあるリソースの有効活⽤ 61
62. 参考⽂献 • Sean J. Taylor and Benjamin Letham, “Forecasting at Scale”, 2017 62