将来予測で用いられるライブラリ「Prophet」

こんにちは。スキルアップAI編集部です。

本ブログでは、AIを利用した時系列解析、特に将来予測でよく用いられているライブラリである「Prophet」について解説します。
近年、将来予測の定番となっているProphetですが、ライブラリによる実装方法に関する情報は簡単に入手できます。一方で、Prophetの理論的な部分についてはあまり知られていないため、本ブログでは理論部分を重点的に取り上げたいと思います。

<目次>
1.Prophetの概要
2.Prophetの解説
　2-1.将来予測に用いられる時系列データの特徴
　2-2.Prophetのモデル式
　2-3.Prophetの優れた点
3.まとめ
4.おわりに
5.参考文献

# 1.Prophetの概要
まず初めに、Prophetの基本情報をまとめます。
Prophetは2017年にFacebookのCore Data Science teamによって開発された時系列解析用のライブラリです。PythonとRの両方でライブラリが提供されています。
また、このProphetは、将来予測のタスクにおいて、柔軟なモデリングができるため、AWS、Azure、DataRobotなどのAutoMLサービスにテンプレートなどとして組み込まれています。

公式ドキュメントは以下からアクセスすることができます。
[公式ドキュメント](https://facebook.github.io/prophet/)

# 2.Prophetの解説
さて、本ブログのテーマであるProphetの解説をしていきます。

## 2-1.将来予測に用いられる時系列データの特徴
まず最初に、将来予測の対象である時系列データの特徴を確認します。将来予測では、売上金額や来客数、広告クリックなどのイベント数などの時系列データがよく用いられます。

図1のグラフは日別のFacebook内のイベント投稿数をプロットしたグラフです。
<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/7f06ac9e-9b92-fd41-2bfc-32b3cb585057.jpeg">
図1. Facebook内のイベント投稿数（出典：参考文献[2]）

このデータについて、以下の4つのことがいえます。

- **周期性がある**
    - グラフを見ると、週単位、年単位の周期性を持っていることがわかります。例えば土曜日はその週の中で最もイベント投稿数が少ないです。また、1年の中で8,9月ぐらいの時期はイベント投稿数が少ない傾向にあります。
- **イベント効果がある**
    - どの年も、年末年始にはイベント投稿数が大きく減少します。
- **長期的なトレンドがある**
    - 2015年まではほぼ横ばいのトレンドが見られます。2016年からは上昇傾向のトレンドに変化しています。
- **外れ値(ノイズ)がある**
    - 2013年末などに外れ値が観測されています。

周期性、イベント効果、長期トレンド、外れ値というのは、このデータに限ったものではなく、一般的な時系列データにおいてよく見られる特徴です。将来予測のモデルを作るときには、これらの特徴をうまくモデルに取り入れる必要があります。

## 2-2.Prophetのモデル式
では、Prophetはどのように将来の値を予測するのでしょうか？

Prophetでは、4つの特徴をそれぞれモデル化し、それらを合わせることで、将来の値を予測します。このようなモデルを一般化加法モデル（Generalized Additive Model）といいます。

Prophetのモデル式は以下の通りです。

- y=g(t)+s(t)+h(t)+ϵ_t
    - y(t)：予測する変数
    - g(t) ：トレンドの項
    - s(t) ：周期性の項
    - h(t) ：祝日効果(イベント効果)の項
    - ϵ_t ：正規分布に従う誤差項(ノイズ)

    ※tは時点を表すインデックスです

誤差項以外の項はtの関数としてモデリングされます。各関数の具体的な解説については、参考文献[2]をご参照ください。

## 2-3.Prophetの優れた点
Prophetの優れた点として次の5つがあげられます。

- **統計の知識がなくてもモデルを作れる**
    - データを指定して、学習を実行するだけで、モデルが完成します。
- **ドメイン知識を取り入れやすい**
    - データ分析者が持っているドメイン知識を簡単に入れることができます。
- **特徴量エンジニアリングが必要ない**
    - Prophetの学習には、最低限の前処理が施されたデータを用います。トレンド成分の除去や移動平均系列への変換は、必要ありません。
- **欠損値があっても問題ない**
    - 学習データに欠損が存在してもエラーは発生せず、正常に学習が行われます。よって、事前に、欠損値を埋める必要はありません。
- **予測結果を解釈しやすい**
    - Prophetは、4つの項を足し合わせたモデルです。それぞれの項は、トレンド、周期性、イベント効果、誤差を表しており、予測後には、項ごとに成分を取り出し、得られた予測結果の考察を行うことができます。図2は、ある予測結果から成分を取り出した例です。

<img width="600" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/d6bc1586-600e-79da-7d85-4bc916f9bd2f.png">
図2. 予測結果から取り出した各成分（出典：参考文献[2]）

# 3.まとめ
Prophetでは、周期性の項、トレンドの項、イベントの項、誤差項の4つについてモデルをつくり、それらを足し合わせることで、将来の値を予測します。

Prophetの優れた点として、「統計の知識がなくてもモデルを作れる」、「ドメイン知識を取り入れやすい」、「特徴量エンジニアリングが不要」、「欠損値が含まれていてもそのまま予測可能」、「予測結果を解釈しやすい」の5点があげられます。

# 4.おわりに
スキルアップAIでは、関連講座として「[機械学習のためのPython入門講座](https://bit.ly/2ZmHfPJ)」を開講中です。 本講座では、Pythonプログラミング未経験レベルから、scikit-learnを用いて機械学習モデルを構築できるようになることを目指します。

# 5.参考文献
[1] [https://facebook.github.io/prophet/](https://facebook.github.io/prophet/)
[2] [https://peerj.com/preprints/3190/](https://peerj.com/preprints/3190/)

# 25卒向け！AIエンジニアになるための長期インターンプログラム参加者募集中！
25卒学生向けに、AIの基礎を学びながら就活も一括サポートする無料カリキュラムを提供しています。
修了するとE資格の受験資格も獲得できるプログラムとなっています！

<img width="700" alt="長期インターン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889700/bfce4c26-1ebe-c54d-bacb-e804048a7a08.png">

**特長①AIエンジニアやデータサイエンティストの基礎が身に付く**
AIジェネラリスト基礎講座や機械学習のためのPython入門講座など、市場価値向上のための基礎を習得。

**特長②AI・データ分析領域の優良求人を紹介**
非公開求人や選考直結型インターンをご紹介し、早期内定の獲得をサポート。

**特長③長期インターンプログラム専用の学生コミュニティ参加可**
学生同士で就活情報をシェアしたり、学習を進めるうえでアドバイスをしあったりできるコミュニティに参加可能。

＞＞[長期インターン詳細](https://bit.ly/3pXW5JM)

☆☆☆
スキルアップAIのメールマガジンでは会社のお知らせや講座に関するお得な情報を配信しています。
配信を希望される方は[こちら](https://share.hsforms.com/1_XlReV-4Te-zcxCl9lhffA2mtef)

また、SNSでも様々なコンテンツをお届けしています。興味を持った方は是非チェックしてください♪
Twitterは[こちら](https://twitter.com/SkillupAi)
Facebookは[こちら](https://www.facebook.com/skillupai)
LinkedInは[こちら](https://www.linkedin.com/company/skillup-ai)