SMOTEを使うタイミング
今日、プログラムを書いているときに指摘されて、すべての工程をやり直しになるほどの失敗を犯しました。
ほぼ初心者であるための失敗なのかどうか分からないので、私のような不幸物を二度と出さないことを祈りつつ書きます。
##私の失敗例
陽性データと陰性データが偏っていたので、SMOTEを使って増やそうとしました。
普通にSMOTEを使って、陽性と陰性のデータ数を合わせて、データインバランスを解消しました。
その後、学習データとテストデータに分割しました。
学習データで機械学習にガンガン学習させて、テストセットで評価しました。
……ここですでに間違いがありました。
##SMOTEで作ったデータをテストセットに入れてはいけない
よく考えたら当たり前ですが、実際に存在しないデータで評価したところで何の意味もありませんでした。
テストセットは実際に実在するデータを用いてこそ、汎化性能を評価することができるのであります。
##つまり……?
SMOTEを用いるときは、テストセットはインバランス状態になってもいいので、先にデータを学習データとテストデータに分割しておく。
次に、インバランス状態の学習データをSMOTEで増やして、インバランスを解消します。
こうすれば学習データはちゃんと増えているし、テストデータは実際のデータのみで構築することができます。
さっさと気づいていればよかった。