SlideShare a Scribd company logo
Prophet ⼊⾨【Python編】
Facebook の時系列予測ツール
2017/05/25
牧⼭ 幸史
1
⾃⼰紹介
•  ヤフー株式会社
データサイエンティスト
•  SBイノベンチャー(株)
AI エンジニア
•  株式会社ホクソエム
代表取締役社⻑
2
本⽇の内容
•  Facebook が開発した時系列予測ツール
Prophet
を紹介
•  R と Python のライブラリがあります
https://github.com/facebookincubator/prophet
•  本資料では Python 版の使い⽅を説明
3
Prophet とは
•  Prophet = 予⾔者
•  時系列予測ツール
–  統計知識不要
–  業務知識で精度向上
–  精度評価で品質保証
•  誰でも予⾔者に!
4
⽬次
1.  モチベーション
2.  デフォルト設定で使ってみる
3.  業務知識を⼊れてみる
4.  統⼀的な評価で品質保証
5.  まとめ
5
1. モチベーション
•  ビジネスにおいて様々な時系列データの
将来予測は重要
•  例: 売り上げ予測
6
ビジネス時系列の予測
•  精度の良い予測をしたい
•  必要なスキル
–  統計モデル (ARIMA, 状態空間モデル, etc.)
–  ドメイン知識 (季節性, イベント, etc.)
•  両⽅を兼ね備えた⼈材はほとんどいない
⇨ ⾼品質な予測は⾼コスト
7
課題
•  ⼤量のビジネス時系列データ
•  ⾼品質な予測が欲しい
•  コストは抑えたい
⇨ 予測のスケール化
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 も最新版にが吉
※ Windowsではpystanを先にinstallが吉
15
本発表のデータ
•  GitHub 上のデータを使⽤します
•  https://github.com/facebookincubator/
prophet/tree/master/examples
•  Wikipedia
•  ペイトン・マニング
•  アメフト選⼿
•  ⽇次ページビュー数
16
データの読み込み
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 2017-01-19 8.170898
21
予測のプロット
•  plot() メソッドで簡単にプロット
22
予測のプロット
23
予測
2. まとめ
•  Prophet はデフォルト設定でいい感じの予測を
作成でき、可視化までできる!
24
⽬次
1.  モチベーション
2.  デフォルト設定で使ってみる
3.  業務知識を⼊れてみる
4.  統⼀的な評価で品質保証
5.  まとめ
25
3. 業務知識を⼊れてみる
•  Prophet の要件②:
ドメイン知識を⼊れて精度向上できる
⇨ 分かりやすい調整パラメータ
26
予測モデル
•  従来の予測モデル(⽣成モデル)
–  データがどのように発⽣するかを考える
–  パラメータの意味が分かりにくい
(例: ARIMA の移動平均や⾃⼰回帰の次数)
•  Prophet
–  予測を曲線フィッティングの問題と考える
–  パラメータが直感的に理解できる
27
予測モデル
•  時系列 = トレンド + 周期性 + イベント
28
29
=
+
トレンド 周期性
時系列データ
予測モデル
•  時系列 = トレンド + 周期性 + イベント
•  パラメータが直感的に理解できる
•  調整可能なパラメータ
①  線形トレンド or ⾮線形トレンド
②  変化点、変化点の数
③  週周期と年周期
④  イベント
30
① トレンドの選択
•  線形トレンド
’linear’
•  ⾮線形トレンド
ʻlogistic’
31
トレンドの選択
•  ⾮線形トレンド
–  ビジネス時系列は基本的に⾮線形トレンド
–  成⻑上限(キャパシティ)が決まっている
例: ユーザ数の予測では Web⼈⼝が上限
•  線形トレンド
–  成⻑初期段階では線形で近似できる
–  Prophet のデフォルトは線形
32
⾮線形トレンドの指定
•  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-26 0 1
クリスマス 2015-12-25 -1 0
クリスマス 2016-12-25 -1 0
クリスマス 2017-12-25 -1 0
イベント効果
•  イベント⽇のデータフレームを渡す
holidays=event_dataframe
42
例: イベント効果
•  Wikipedia ページビュー
•  ペイトン・マニング
•  アメフト選⼿
•  イベント:
「アメフトリーグの決勝戦の⽇」
43
イベント効果なし
44
決勝の⽇は
モデルから
⼤きく外れる
イベント効果を考慮
イベント効果
として処理
次の決勝戦
3. まとめ
•  Prophet の予測モデル:
時系列 = トレンド + 周期 + イベント
•  パラメータが直感的に理解できる
–  トレンド、変化点、周期、イベント
–  ドメイン知識により調整可能
•  パラメータ調整により精度向上できる
46
⽬次
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 による評価で順位を付け、悪い⽅か
ら順番にドメイン知識で精度改善
③  それでも悪ければ専⾨家が予測を⾏う
⇨ 限りあるリソースの有効活⽤
60
参考⽂献
•  Sean J. Taylor and Benjamin Letham,
“Forecasting at Scale”, 2017
61

More Related Content

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