LoginSignup
3
1

More than 3 years have passed since last update.

Splunk DLTK : 時系列予測分析をしたい! prophetのサンプルコードを実行してみる

Last updated at Posted at 2020-12-18

はじめに

Splunk DLTKのサンプルコードを眺めてみようシリーズです。
今回は prophet を使った時系列予測モデルのサンプルコードです。将来の動きを予測したい場合など利用できるのでは?

prophetとは?

Facebookが作ったOSSの時系列予測アルゴリズムになります。従来のARIMAなどの自己相関を元にしたアルゴリズムに比べて非常に簡単に、しかも状態空間モデルも加味しながら、かつ季節性も取り入れられるといったメリットがあるとのことです。

Splunk MLTKにある StateSpaceアルゴリズムを使ったものよりも、季節性も取り入れられる点で優秀と言えるかもしれません。

今回こちらの記事を参考にさせていただきました。
https://www.atmarkit.co.jp/ait/articles/1904/19/news009.html

また細かいオプションなどはオリジナルのマニュアルが充実しております。
https://facebook.github.io/prophet/docs/quick_start.html

DLTKについて

今回はDLTKの使い方については解説しません。DLTKのセットアップや使い方についてはこちらの記事をご覧ください。
https://qiita.com/maroon/items/5a8b027631a674d6d8be

サンプルコードを確認

それでは早速 DLTKに含まれるサンプルコードをみてみます。

まずはライブラリのインプート箇所です。Prophet ライブラリが入ってますね。

image.png

Stage1: データの読み込み

DLTKは Splunkからデータを取り込みます。そのため取り込みのためのSPLを実行します。データの中身はBluetoothのある拠点のユニークなアドレス数を時間あたりにカウントしたものです。

image.png

注意 ノートブックにあるSPLのサンプルコードには以下のオプションが抜けており、そのまま実行すると学習時(Fit)や適用時(apply)で失敗します。 以下のように(fit_range_start / fit_range_end)オプションを追加してください。 このオプションは学習に利用する期間を指定してます。

| inputlookup bluetooth.csv
| where probe="AxisBoard-5"
| timechart dc(address) as distinct_addresses span=1h
| eval ds=strftime(_time, "%Y-%m-%d"), y=distinct_addresses
| fit MLTKContainer mode=stage algo=prophet_forecast fit_range_start=1 fit_range_end=1000 y from ds into app:prophet_forecast

image.png

実際のデータをグラフでみるとこんな感じになります。
image.png

Stage2: 初期化

単純に Prophetのインスタンスを立ち上げただけですね。
Prophetのオプションを指定する場合は、こちらで指定する必要があります。

image.png

Stage3: 学習(fit)

SPLの引数で範囲指定された箇所を抜き出して、学習します。

image.png

Stage4: 適用(apply)

学習したモデルを使って、読み込んだデータを予測します。
changepoints というのを追加して、予測結果と合わせてリターンするようです。

image.png

Stage5-7: その他

あとは、モデルの保存やロード、サマリー出力を定義します。
image.png

Splunkから実行してみる

それでは、同じデータですが、Splunkから実行するとどのような結果になるか見てみます。

学習前のオリジナルデータです。どうやら prophetを使う場合 field名を dsと yとしてインプットする必要があるようです。
image.png

実行結果
image.png

うっ。なんかいっぱい出てきた。。 fieldsummaryでチェックすると、大きく分類すると以下の項目が出力されます。
それぞれの lower, upperが出力されているため、大量に出力されるように見えます。

  • yhat: yの予測値
  • trend: トレンドライン
  • daily: 周期性(daily)
  • weekly: 周期性(weekly)
  • additive_terms: 周期性モード( addtive : リニアに増加)
  • multiplicative_terms: 周期性モード (multiplicative : percentage的に増加)
  • changepoint: トレンドの変化点

image.png

prophetは、これらの周期性を組み合わせて予測してますが、これらの周期性も確認できるのはありがたいですね。
(ちなみに、predicted_y, ds.1 というフィールドも出力されてますが、これらは無視して大丈夫です。)

デフォルト設定だと、8:2で指定した期間のデータを学習とテストデータに分けているみていです。そのため changepointも8割までのデータにしか適用されないため、後半は出力されてません。

ダッシュボードサンプル

DLTKにはダッシュボードサンプルまで用意されております。

image.png

1つ目のチャートは、実際の値(y)と予測値(yhat as forecast)とその差分(resident)をグラフ化したものです

2つ目のチャートは、トレンドと周期性(daily/weekly)と変化点(changepoint)を可視化したグラフです。
Splunkではあまり見たことがないチャートですですが、通常のLine Chartにオプションで以下のものをつけてました。

annotation(注釈)
changepointが annotationとして表示されてます。これはコメントをグラフに追加する機能をうまく応用して表現してます。(参考になりますねー)

まとめ

如何だったでしょうか? prophetは時系列予測としては非常に注目されてたので、Splunkでも利用できるのはありがたいですね。でも使いこなすにはオプションなどももっと勉強しなければ・・・ 

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1