時系列のCVに関する質問
質問
時系列のCVに関する質問です。
Testデータと近い性質/分布のデータをValidとしておくのが良いとざっくり認識していますが、仮にTestのTargetの値が大きく、それに近いデータが手元になかった場合は、FeatureがTestと似通っているものをValidとしておくのがベターでしょうか
例えば、コロナ明けもありTargetが直近数年よりもさらに多くなる長期休暇(holiday featureが1)がTestだった場合のCVは、直前の長期休暇ではないデータをValidに置くのではなく、以下のようなものになるでしょうか。
1. Validにはholiday featureが1のデータのみを入れる(= 祝日や長期休暇のデータ)。
2. Trainには平日も祝日もどちらも入れる(祝日は全体数としては非常に少ない)
Validなしで単に学習するとholiday Featureはほとんど使用されない一方、上記のようなValidだとHoliday featのimportanceが高くなるように学習されるため、長期休暇の直前(Holiday=0)をValidとしておくよりかは、適切かと認識しています。
また、上記はTestと同じかそれ以上のTargetを持つデータが手元にないケースを想定しており、GBDTなどのTree系だと外挿が効かないため、NNなどのLinear Modelがベターなのかな?と思っています。
様々な要素を詰め込んだ質問になってしまいましたが、そもそも根本的にこういうアプローチにした方が良い等ありましたら教えていただけますと幸いです。
答え
TestのTargetの値が大きいというのはよくわからなかったです。TestのTargetがわかっているんでしょうか?
Validationの目的としては、Testデータで実現する精度を見積もることと、Early stoppingをValidationのベストのところですることなので、TestとValidationのデータが似ているものをValidationにしておくのが良いというのはそうですね。
Validにholiday featureが1のデータのみ入れるかはテストデータ次第なので、この問題設定からはよく分からないですが、上記の目的を達成するために、良いValidationデータを選びましょう。
でEarly stoppingのiteration数を決めたあとは、この課題ならValidationのデータも学習データにしても良いかもしれないと思いました。時系列データのvalidationに関する質問に回答します|カレーちゃん|noteで書いたうちのa-1のパターン。testに近いデータは学習にも使ったほうが良いので。
Validなしで単に学習するとholiday Featureはほとんど使用されない一方、上記のようなValidだとHoliday featのimportanceが高くなるように学習されるため、長期休暇の直前(Holiday=0)をValidとしておくよりかは、適切かと認識しています。
ここはよくわからなかったです。Validationの設定自体で学習データでの学習自体には変わらないので誤解があるのでしょうか?それともiterationに影響があってimportanceが変わるという話ですかね。
書籍
ツイート
https://twitter.com/currypurin/status/1550844661513977857
#質問と回答