はじめに
時系列の予測問題で、多くの特徴量から予測を行うタスクを行っていた際、ミスがきっかけで精度が上がったので、その手法を紹介したいと思います。
lightGBMなどの決定木系のアルゴリズムで、過学習を回避できる手法になっているかもしれません。
一般的に過学習回避には、「特徴量削減」「正則化パラメータ調整」などの手法がとられると思いますが、今回はかなり変わった手法です。
思い立った経緯
周期性は再現できるがトレンドの予測が難しいという時系列タスクで、特徴量を解析していると、トレンドと同時期に変化する変数を発見しました。
その特徴量を追加したら精度が上がったのですが、問題がありました。
その特徴量は、予測用データの中身はほとんど欠損値になっていたのです。
その理由は、多くの時刻のデータを使用して計算する特徴量で、時間的につながりのある学習用データと予測用データを別々に処理していたからです。
欠損値を埋めて処理したところ、上がっていた精度がなぜか下がり、特徴量を追加する前の精度と同じもしくは少し悪化していました。
それならもう、学習時には普通に学習して、予測時に、その特徴量を欠損値にしてしまえば、精度が上がるんじゃないかと。
試すと実際精度は上がりました。
手法(選択的欠損化)
- 決定木系のアルゴリズムで、通常通り学習する
- 過学習を起こしていそうな特徴量を見つける
- 予測時のみ、その特徴量をnanに置換する
- 予測を行い精度をみる
考察
学習データではよくモデリングできているが、予測時のデータの傾向とあっていない特徴量がある場合、欠損値を用いることによって平均的な値が出力されるようになり精度が上がるのではないかと考察しています。
そのような特徴量を予測時に、欠損値にすると、決定木系の特徴である、欠損値は、精度が高くなる方のどちらかの方向に分岐する、という特徴から精度向上につながると考えられます。
課題
- システマティックな特徴量の選考基準
- 再現性の有無を確認する
終わりに
本当に偶然の産物だと思うので、参考になるかはわかりませんが、過学習で困っていて、次の手が全くないという人は、試してみてもよいのかも。
かなり無理やりな手法ですが、予測値の説明変数を一部nanに変えるだけで意外と汎用性を高めてくれるかもしれません。
ただ、やはり無理やりな手法なので、全く効果がない可能性も高いです。
同じようなことで悩んでいる方の参考になれば幸いです。
ご意見・ご批判もお待ちしています!
(本質的にあまり意味も無いので)異論は認めます。