連載
» 2019年04月18日 05時00分 公開

非統計家が高精度な時系列予測を行えるProphet(前編):「Prophet」とは――Facebook製時系列予測OSSは何が便利なのか (2/2)

[羽鳥冬星,リクルートテクノロジーズ]
前のページへ 1|2       

なぜ、Prophetを採用したのか――Prophetの機能

 リクルートテクノロジーズがProphetを採用した理由の一つとして、コンバージョン予測の案件を挙げておきます。このときは、さまざまな媒体、事業に投下する広告宣伝費とコンバージョンの関係に時系列の要素を加味して予測するのがテーマでした。

 この手のテーマだとよく用いられる手法は「線形回帰」「状態空間モデル」などといったコストの要素と時間の要素を同時に考慮できるアルゴリズムになると思います。しかし、これらの手法を用いるに当たって避けては通れない「季節性を表現する特徴量構築」というフェーズがあります。

 例えば線形回帰だと、下記のように定式化してしまうと、季節変動が考慮できなくなってしまいます。

cv=a*cost+b

 そのため、下記のように表現したい季節性をフラグ変数として特徴量化することが必要になります。

cv=a*cost+b+c*月曜_フラグ+d*7月_フラグ……

 しかし、この作業はもはや「職人芸」といえるでしょう。データを注意深く観察し、ドメイン知識も利用しながら慎重に特徴量を設計する必要があります。当然必要とする工数も大きく、時系列予測の案件では最も苦労するところといっても過言ではありません。

 ちなみに、「年、月、日、曜日など考えられるものを全部入れて変数を選択すればいいじゃないか」といった考え方もあると思います。しかし時系列データでは多くの場合、1年分あったとしても365点程度しかデータが存在せず(日次の場合)、サンプルサイズがかなり小さくなります。そのため多くの場合、「ステップワイズ」「L1正則化回帰」などで変数選択を試みてもうまくいきません。よって、線形回帰や状態空間モデルを使う際は、データを観察しながら特徴量を追加するフェーズが必要不可欠になります。

 また、系列の上昇/下降トレンドの表現も悩ましいところです。経過時間に比例して大きくなるようなトレンド項を説明変数に入れようとしても、現実のデータには季節性、トレンド、イベント効果などが分散し、入り交じっています。そのため目視でトレンドの傾向を把握するのはとても難しく、トレンド効果の投入は難しくなりがちです。

 一方Prophetを用いれば、これらの問題に頭を悩ませる必要はなくなります。

 Prophetには、1日、1週、1年など人間の直感に合わせた周期の中で「フーリエ級数展開」を行い、sin、cosの波として季節性を自動的に推定してくれる機能があります。これによって「土日は売り上げが増える」「2、8月は落ち込む」「月曜に最高値を付けた後は緩やかに減少し、土曜にかけて盛り返す」といった事象が自動で推定可能となり、職人芸的な季節変数の特徴量設計は不要になります。

青い線:周期性、赤い線:フーリエ級数による表現(「フーリエ級数 - Wikipedia」から引用)

 またProphetは、説明変数を入れことができる機能があります。このため、明示的に季節変数を投入することも可能となり、柔軟性が非常に高いライブラリといえます。季節性と同様にトレンドについても、推定に頭を悩ませることはほとんどありません。「区分線形」「区分logistic回帰」によって、大きなトレンドと、その変化を自動的に表現してくれます。

Googleトレンドから「釧路湿原」の検索数を表示。黒い点が実データ、青い線が推定された予測値、赤い実線が推定されたトレンド、赤い縦線が変化点

 少しだけ理論的な話をすると、Prophetは下記のように時系列を表現しており、各種のパラメーターについては、「Stan」を使ってMAP(Maximum A Posteriori:最大事後確率)推定を行っています。

y=トレンド(t)+季節性(t)+イベント(t)+外部説明変数

 このとき季節性には事前分布として「Normal(0,σ2)」が、イベントと説明変数の事前分布には「Normal(0,γ2)」が設定されており、「L2正則化回帰」と同じ機能を果たしています。このため、各変数の係数は比較的マイルドに推定されることになります。

 また、トレンド項は事前分布に「Laplace(0,τ)」が設定されており、L1正則化回帰と同じ機能を持っています。これによってトレンドの変化を起こす点は区間の中の一部だけになるので、推定されたポイントを見てもとても自然な推定となるのです。

 この2つの機能によって、チューニングなしでも高精度な予測が可能になっています。加えて、デフォルトパラメーターの選択方法が非常に良く設計されているため、季節性とトレンドがはっきり出ているデータであれば、かなり納得のいく予測値を出してくれる傾向にあります。

 さらに特筆すべき機能としては、ドメイン知識をイベント効果という観点から特徴量化できることが挙げられます。例えば、売り上げ予測であれば販促キャンペーンを打った日は売り上げが上がるでしょうし、お盆や年末年始であれば平常時に比べて異なった数字になるでしょう。このようなイレギュラーな日については日付を指定するだけでその効果を推定してくれます。予測するタイミングで将来の販促キャンペーンの日が分かっていれば、その効果を含めた予測をすることが可能になります。

まとめと次回予告

 今回はProphetがどのようなライブラリで、どういった利点があるのかを中心に紹介しました。次回は、もう少し踏み込んで、Prophetを使った実案件で得られたチューニングのテクニックや、運用に当たって気を付ける点などをお伝えします。

筆者紹介

羽鳥 冬星(はとり とうせい)

大学院でクラスタリングを研究した後、2015年リクルートホールディングスに新卒入社。リクルートテクノロジーズ配属後、データイノベーション推進部で時系列予測やレコメンドシステムのエンジン部分のチューニングを担当。好きな教師なし学習のアルゴリズムは「fuzzy c-means」。2019年の目標はkaggle masterになること


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。