DUICUO

Facebook が大規模予測ツール Prophet をオープンソース化。Python と R をサポート。

Facebookは最近、PythonとRで使用できる予測ツールであるProphetをオープンソース化したと発表しました。以下は、Facebookの研究ブログによるこのツールの紹介です。

予測はデータサイエンスの課題であり、組織内の多くの活動の中心を成しています。例えば、Facebookのような大規模組織は、限られたリソースを効果的に割り当て、ベンチマークと比較したパフォーマンスを測定するために、キャパシティプランニングを実施する必要があります。高品質な予測を作成することは、機械にとってもアナリストにとっても容易ではありません。私たちは、多岐にわたるビジネス予測を作成する中で、2つの主要なテーマに気づきました。

  • 完全に自動化された予測技術は脆弱で柔軟性に欠ける場合が多く、有用な仮説やヒューリスティックスを統合することができません。
  • 予測はデータサイエンスの分野において豊富な経験を必要とする専門的なスキルであるため、高品質の予測を作成できるアナリストは非常に少ないです。

これら2つのテーマは、一つの結果へと繋がります。それは、高品質な予測への需要が、アナリストが予測を作成できるスピードをしばしば超えてしまうことです。この状況こそが、私たちがProphetを開発する動機となったのです。専門家と非専門家の両方が、それぞれのニーズを満たす高品質な予測を簡単に作成できるようにしたいと考えました。

「スケール」に関する一般的な考慮事項には計算とストレージが含まれますが、これらは予測の核心的な問題ではありません。大規模な時系列予測における計算とインフラストラクチャの問題は比較的単純であることが分かっています。フィッティングプロセスは多くの場合簡単に並列化でき、予測自体はMySQLなどのリレーショナルデータベースやHiveなどのデータウェアハウスに簡単に保存できます。私たちの観察では、「スケール」の実際的な課題は、予測問題の多様性によってもたらされる複雑さと、生成された大量の予測の間でどのように信頼性を構築するかにあります。Prophetは、意思決定や製品機能にさえ活用できる、信頼性の高い予測を大量に作成するFacebookの能力において、重要なコンポーネントとなっています。

預言者の目的は何ですか?

すべての予測問題を同じ手順で解決できるわけではありません。Prophetは、Facebookで直面したビジネス予測タスクに最適化されており、これらのタスクは一般的に以下の特徴を備えています。

  • 少なくとも数か月 (***1 年) にわたる、時間別、日別、週別の履歴観察用。
  • 強力で多面的な「人間規模」の季節性: 毎週特定の曜日と毎年特定の時期。
  • 事前にわかっているが、不定期に行われる重要な休日 (例: スーパーボウル)。
  • 適度な数の欠損値または多数の異常値
  • 製品のリリースや記録の変更などにより、履歴の傾向は変化します。
  • 非線形成長曲線の傾向。そのいくつかは自然限界または飽和に達しています。

Prophet はデフォルト設定のままでも、経験豊富な予測者と同等の精度の予測を、はるかに少ない労力で実現できることがわかりました。予測結果が満足のいくものでなかったとしても、Prophet では完全に自動化されたプログラムに限定されることはありません。時系列分析手法のトレーニングを受けていないアナリストでも、解釈しやすい幅広いパラメータを用いて予測を改善または調整できます。特定のケースにおいて、自動予測とアナリスト・イン・ザ・ループ予測を組み合わせることで、非常に幅広いビジネスユースケースに適用できる可能性があることが分かりました。次の図は、大規模に適用可能な予測プロセスを示しています。

この予測プロセスのモデリング段階では、現在利用可能なツールは限られています。Rob Hyndman氏による優れた予測Rパッケージ(http://robjhyndman.com/software/forecast/)は、現時点ではおそらく最良の選択肢でしょう。また、GoogleとTwitterも、より具体的な時系列機能を備えたパッケージ(それぞれCausalImpact(https://google.github.io/CausalImpact/)とAnomalyDetection(https://github.com/twitter/AnomalyDetection))をリリースしています。私たちの知る限り、Pythonを使った予測に利用できるオープンソースパッケージは非常に限られています。

Prophet には主に次の 2 つの利点があるため、多くの設定で予測パッケージの代替としてよく使用されます。

Prophetは、よりシンプルかつ直接的に、合理的かつ正確な予測を可能にします。この予測パッケージには、ARIMA、指数平滑法など、それぞれに長所、短所、調整パラメータを持つ様々な予測手法が含まれています。モデルやパラメータの選択を誤ると、多くの場合、誤った結果につながることが分かっており、選択肢が多すぎると、経験豊富なアナリストであっても、適切なモデルとパラメータを効果的に選択することは困難です。

Prophetの予測は、専門家でなくても直感的にカスタマイズできます。季節平滑化パラメータでは、過去のサイクルへの近さを調整でき、トレンド平滑化パラメータでは、過去のトレンドへの追従度合いを調整できます。成長曲線については、「キャパシティ」、つまり成長曲線の上限を手動で設定できるため、予測する成長または減少に関する事前情報を入力できます。さらに、スーパーボウル、感謝祭、ブラックフライデーなどの不定期の祝日をモデルに指定することもできます。

Prophetの仕組み

本質的に、Prophet プログラムは、次の 4 つの主要コンポーネントで構成される加法回帰モデルです。

  • 区分線形またはロジスティック成長曲線のトレンド。データから変化点を選択することで、Prophetはトレンドの変化を自動的に検出します。
  • 各年の季節要素はフーリエ級数を使用してモデル化されます。
  • ダミー変数を使用した週次季節成分。
  • ユーザーによって提供された重要な休日のリスト。

例えば、特徴予測の例を見てみましょう。Wikipediatrendパッケージ(https://cran.r-project.org/web/packages/wikipediatrend/index.html)を使用してダウンロードされた、ペイトン・マニングのWikipediaページの閲覧回数のログです。ペイトン・マニングはアメリカンフットボール選手だったため、彼の重要性が年ごとに季節的に変動していることがわかります。また、明確な週ごとの周期性も確認できます。***また、特定のイベント(プレーオフ出場など)もモデル化できる可能性があります。

Prophet は、適合するモデルをグラフィカルに説明するコンポーネント プロットを提供します。

このサブプロットは、ペイトン・マニングのウェブページ(レギュラーシーズンおよびプレーオフシーズン)の閲覧に関する年間および週ごとの季節性をより明確に示しています。試合当日と試合後(日曜日と月曜日)はアクセス数が多くなっています。また、最近の引退以降、トレンド成分が下方修正されていることも確認できます。

Prophetの根底にある考え方は、トレンド成分をより良く、より柔軟にフィッティングすることで、季節性をより正確にモデル化し、より高精度な予測を実現できるというものです。このタスクでは、従来の時系列モデルではなく、非常に柔軟な回帰モデル(曲線フィッティングに似たもの)を使用することを推奨します。回帰モデルは、より柔軟なモデリング、より容易なモデルフィッティング、そして欠損データや外れ値のより洗練された処理を可能にするためです。

Prophetは、時系列における将来のトレンド変化をシミュレートすることで、トレンド成分に不確実な区間をデフォルトで提供します。将来の季節要因や休日要因の影響の不確実性をモデル化したい場合は、数百回のHMC反復(数分で完了)を実行でき、予測には季節的な不確実性の評価が含まれます。

ProphetモデルはStan (http://mc-stan.org/) を用いてチューニングし、Prophetプロセスのコア部分をStanの確率的プログラミング言語で実装しました。Stanは、パラメータのMAP最適化を非常に高速(1秒)で実行し、不確実なパラメータをハミルトンモンテカルロアルゴリズムを用いて評価するオプションも提供し、複数のインターフェース言語間でフィッティング手順を再利用することも可能です。現在、PythonとRでProphetの実装を提供しています。これらはほぼ同一の機能を共有しており、両方の実装を提供することで、この予測手法がデータサイエンスコミュニティでより広く利用されることを期待しています。