こんにちは。 前回は時系列解析の用語の定義と簡単にplotを見ました。触れたアルゴリズムは次の2つでした。
  • AutoRegressice model
  • Moving Average model
今回はこのアルゴリズムの実際にbitcoinのデータに当ててみましょう。ですがその前に時系列を行う際の注意点を簡単にまとめます。

まずは、定常性です。これは前回も出ましたね、簡単にいうとずっと変動が一定の時系列データのことを言います。例えば、アイスの売り上げを考えた場合、夏の方が絶対売り上げ良いですよね、つまり季節性を持つのでこの例は定常性はありません。この場合、季節の周期は大体12ヶ月ですよね、直感的に。もう少し考えましょう。なぜ12ヶ月周期なのか?つまり、今年の夏と去年の夏によく売れるということですよね、これはつまり、今年の夏と去年の夏の自己相関が高いということになりますね。

そうです、自己相関は季節性の確認にも使えるのです。とはいえ、時系列解析において定常性は非常に重要な仮定です。満たされないと色々と面倒になります。日定常なデータ、つまり上記のような季節性のあるデータや、株価のようなトレンドのあるデータ、もはや実データのほとんどは定常性を満たさないのです。

では時系列解析を諦めるしかないのか?と思うでしょうが、いくつかの策があります。例えば、ディッキー–フラー検定は定常性の検定が可能です。しかし、これは少し難解なので今回はそんなのがあるのかぁ、くらいで済ましましょう。よって、もう少し簡単に行える策について触れることにします。

機械学習を行なっている方なら標準化・正規化などの前処理を知っていることでしょう。これは学習速度を早めたりなどのメリットがありました。実は時系列解析においてもこのような前処理と呼ばれるものがあります。そしてこれは定常性を無理やり生成する変換でもあります。例えば、回帰問題においては回帰モデルの正規性の仮定を確認するために、回帰から得られた残散のQQ-norm-plotを行います。少し先走ったので詳しく説明すると回帰問題においてはモデルによりますが正規性の仮定があります。これは残差つまりエラーが正規分布に従うことやその等分散性の仮定があるということです。(実際、これに注意して分析してるコードはそれほど見ないですが、、、) QQ-norm-plotが直線であれば仮定は満たされますがS字のように曲がっていると仮定が破られていることにになり適した分析ではないです。そこで例えば目的変数の対数変換を行います。こうすることで仮定が満たされることがあります。
例えばしたのグラフは以前lassoの暑かったkaggleのデータのQQ-norm-plotなのですが目的変数であったSalesPriceの対数変換前が左、変換後が右で直線っぽく変換されているのがわかります。histplotしても確認できます。



時系列解析でも全く同じ変換、つまり対数変換があります。ちなみに前回記事の最後のコードのところで階差についても触れましたがあれも前処理のようなものです。他にもロジット変換や平均移動などのメジャーなものもあります。

では今回は説明はこれくらいにして実際に手を動かしてみましょう。今回は可視化ツールに力を入れました。具体的にはBokehというライブラリを使いました。Pythonで可視化といえばmatplotlibが最もメジャーなのでしょうが、今回はちょっと勉強の意味も含めて触ってみました。ちなみにプロット関係をまとめると僕が知っている限り次のものがあります。
  • matplotlib
  • seaborn
  • plotly
  • dash
  • Bokeh
ではコードにも物語形式でコメントついてるのでそっちも見てください。
Bokehの埋め込みが難しい。 でわ