見出し画像

時系列分析ライブラリのProphet使ってみた。

分析屋の下滝です。

上記の記事で、Prophet(プロフェット?)というPythonとRの時系列分析ライブラリがあることを知りました。どうやら、普及しているライブラリのようです。

記憶に残す期待も込めて、公式ページのコードを動かしてみました。

公式の説明ではこのように書かれています。

Prophetは、RとPythonで実装された予測プロシージャです。高速で、完全に自動化された予測を提供し、データサイエンティストやアナリストが手作業でチューニングすることも可能です。

Prophet は、非線形トレンドに年、週、日の季節性、さらに休日効果を加えた加法モデルに基づく時系列データの予測プロシージャです。強い季節効果を持ち、数シーズンの履歴データを持つ時系列データで最も効果的に機能します。Prophet は、欠損データやトレンドのずれに対してロバストであり、通常、外れ値もうまく処理します。

公式ページを試してみる

適当に公式ページ通り動かしてみましょう。google colabだとProphetのインストールはせずに動きそうでした。

import pandas as pd
from prophet import Prophet

df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')
df.head()

まずは、pandasで csv を読み込んでいるだけです。Wikipedia の Peyton Manning という人の日時のページビューの時系列データです。2007年12月10日からのデータのようです。

Prophetへの入力は、上記のデータフレームのように、常に、ds (datestamp)カラムと y カラムのデータフレームとなります。y カラムは数値でなければならず、予測したい測定値を表します。

次に進む前に、読み込んだデータフレームのレコードがいつまであるのか確認します。

df.tail()

2016年1月20日まであるようです。2007年12月10日から2016年1月20日までのデータのようです。

では、Prophetを使っていきましょう。

fit メソッドに、先程のデータフレームを渡します。

m = Prophet()
m.fit(df)

続いて、予測を行います。予測は、予測が行われる日付を含むds列を持つデータフレーム上で行われます。make_future_dataframe メソッドを使えば、指定した日数の未来に広がるデータフレームを作成することができます。

以下では、365日分が追加されるデータフレームを作成しています。

future = m.make_future_dataframe(periods=365)

2007年12月10日から2016年1月20日までだったデータに、一年分が追加されたデータフレームが作成されました。

続いて予測を行います。先程作った未来分のデータフレームを、predict メソッドに渡します。

forecast = m.predict(future)
forecast[['ds''yhat''yhat_lower''yhat_upper']].tail()

predictメソッドは、futureの各行に予測値を割り当て、それをyhatと名付けます。過去の日付を渡すと、サンプル内のフィットが提供されます。ここでの forecast オブジェクトは新しいデータフレームとなります。データフレームには、予測値のyhat列、成分(component)と不確実性区間(uncertainty interval)の列含んでいます。

ちなみに、他のカラムは次のようなものでした。

ds
trend
yhat_lower
yhat_upper
trend_lower
trend_upper
additive_terms
additive_terms_lower
additive_terms_upper
weekly
weekly_lower
weekly_upper
yearly
yearly_lower
yearly_upper
multiplicative_terms
multiplicative_terms_lower
multiplicative_terms_upper
yhat

続いて予測をプロットしてみます。plotメソッドに予測データフレームを渡して呼び出すと、予測をプロットすることができます。

fig1 = m.plot(forecast)

予測成分を見たい場合は、plot_componentsメソッドを使用します。デフォルトでは、時系列のトレンド、年間の季節性、週間の季節性が表示されます。休日を含む場合は、それらもここに表示されます。

fig2 = m.plot_components(forecast)

まとめ

ということで、あんまり良くわかっていませんが、注目ライブラリということで、Prophet の公式ページのコードを見てみました。

何をやりたいかによりますが、API としては簡単に使えそうな雰囲気があります。

公式ドキュメントのメニューには、次のようなものがあり、機会があればまた見ていきたいと思います。

飽和状態の予測
 成長予測
 飽和最小値
トレンド・チェンジポイント
 Prophet におけるチェンジポイントの自動検出
 トレンドの柔軟性を調整する
 チェンジポイントの位置の指定
季節性,休日効果,回帰因子
 祝日や特別なイベントのモデル化
 国の祝祭日の組み込み
 季節性のフーリエ順序
 カスタム季節性の指定
 他の要因に依存する季節性
 休日と季節性の事前尺度
 追加的な回帰因子
 追加的な回帰因子の係数
乗法的季節性
不確実性の区間
 トレンドの不確実性
 季節性の不確実性
異常値
非日次データ
 サブデイリーデータ
 定期的なギャップがあるデータ
 月次データ
 休日集計データ
診断機能
 クロスバリデーション
 クロスバリデーションの並列化
 ハイパーパラメータのチューニング
ショックの扱い
 COVID-19のロックダウンを一過性の休日として扱う
 トレンドのセンスチェック
 COVID前と後の季節性の変化
その他のトピック
 モデルの保存
 フラットトレンドとカスタムトレンド
 フィットしたモデルの更新

株式会社分析屋について

ホームページはこちら。

noteでの会社紹介記事はこちら。

【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。