こんにちは、最近初めてグリコの売上予測ハッカソンで時系列データを扱ったのですがこれがむずかった。。。
最終的にコンペでは中の中の上ぐらいまではあげられたので、忘れないうちに助けていただいた記事たちをここにまとめておきたいと思います。
参考にさせていただいた記事の内容はざっくりまとめると以下のようになります。
- LightGBM
- LSTM
- RandomForest
- 遺伝的プログラミング
- 特徴量の作り方、データの見方
- statsmodelsの季節成分分解
- changefinderを利用した異常検知
記事まとめ一覧
- SIGNATE お弁当の売り上げをLightGBMで予測してみた
季節性のある時系列データをうまくLightGBMで分析できています。
トレンドを外して考えることで精度がよくなる一例で、RandomForestを使った特徴量選択の方法も記載してくださっており本当に助かりました。
このコードのおかげで中の中にたどりつくことができました。
- Pythonで時系列分析の練習(6)トレンド、季節性、残差に分解
Statsmodelsを使ってデータをトレンド、季節性、残差に分ける方法が記載されています。これと上記のLightGBMを組み合わせることでまあまあな成績がでました。
- Kerasで多変量LSTM
kerasでやってみようとしたのですがあまり精度はよくなかったです。
予測したい年にいろいろハプニングが発生し、例年のようには売れなかったためkeras の lstmのような過去のデータのみ参照する手法はよくなかったと考えられます。
ですがLSTMを用いる際のデータ処理の方法について学べたのは面白かったです。
- LSTMで仮想通貨の価格予測をする
こちらもkeras の LSTMです。LSTMをつかうにあたってCross Validationできるほどデータ数が多くなかったことも問題でした。(36ヶ月分しかありませんでした)
- 遺伝的プログラミングによる特徴量生成でLightGBMの精度向上【kaggle Advent Calendar 11日目】
最終日に精度があがらず困っていたので、Upuraさんの記事を参考にして自分で手動で特徴量を大量に作ってみたところ、見事あがりました!しかしそれでも混戦から抜け出せなかったのでこれは最後の最後に取っておくべき手法なのだと感じました。
また説明力がないので自分的にはちょっと気持ち悪いとも感じてしまいました。
- Pythonによる時系列分析の基礎
こちらのLogics of blueさんによる記事も大変参考になりましたが、やはりLSTMと同じく、イレギュラーなハプニングに対応できず没となりました。
- 【随時更新】Kaggleテーブルデータコンペできっと役立つTipsまとめ
最終日に見つけた記事です。精度があがらず困っている中でこの記事を読み始めたのですが、もっとはやく気づけばよかったと思いました。。。
- 状態空間モデル
Logics of blueさんによる状態空間モデルの解説です。もし仮に現在までのデータしか存在しないなかでこれからの予測をしなければいけないのなら、状態空間モデルが一番強いのかもしれません。
- 異常検知
python の changefinderを使って異常検知ができるときいて使ってみたのですが、パラメーター調整に主観が絡んでくるため没となりました。これが成功すれば売上が本来はうまくいくはずの月でも異常検知によって失敗することが予測できたかもしれない?
でも結局はデータをしっかりみることが大事
よく言われていますが、EDA大事です。優勝者はちゃんとデータをみて、目的変数と相関が高い特徴量をひとつ見つけ、それで単回帰をまわすだけで群を抜いてトップに躍り出ていました。なのでまずはデータをみた上でそれに応じた手法を考えるべきなのだと痛感させられたコンペでした。