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

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

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

  • 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

×