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.

Prophet入門【Python編】Facebookの時系列予測ツール

29,401 views

Published on

データ解析・機械学習セミナー 【found IT project #7】発表資料
http://foundit.tokyo/seminar/20170525_03
https://foundit-project.connpass.com/event/56033/

Published in: Data & Analytics
  • Be the first to comment

Prophet入門【Python編】Facebookの時系列予測ツール

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

×