Microsoft Malware Prediction
Kaggleのコンペの1つ「Microsoft Malware Prediction」のカーネルまとめ
CVとLBの点数に隔たりがある理由について解説しているカーネル。
原因は、TRAINデータとTESTデータでそれぞれ別の分布から引っ張ってきているから。具体的には、TRAINデータは2018年の8,9月のデータであるのに対し、Public TESTは10月、Private TESTは11月のデータ。検証のためにそれぞれのデータの分布を可視化し、TRAINデータを時系列Validationした場合の分布がランダムでValidationをした時に比べてTESTデータの分布に近いことを示している。
モデル1(ランダムValidation)とモデル2(時系列Validation)について、Adversarial Validationの手法を使ってそれぞれを区別できるかどうかを検証。モデル1では区別できる(テストデータと違いがある)が、モデル2ではできないことを実証。
最後に、TrainとPublic Testで違いが大きい説明変数を挙げ、より正確なValidationモデルを作るために分布がTestデータからずれているデータを、Testデータと分布が近い新しい値に変換する必要があると述べている。
TrainデータとTestデータがどちらもサイズが大きい。これを解決する方法を解説するカーネル。
データがアップスケールされて無駄にスペース(メモリ)を消費していないかチェックする。チェックする際にはすべてのデータを読み込む必要はなく、pd.read_csvのchunksizeを使うとよい(参考:pandas でメモリに乗らない 大容量ファイルを上手に扱う - StatsFragments)。
データ読み込みのコツは、 ①オブジェクトデータをカテゴリ変数として読み込む ②バイナリはint8指定 ③欠損値があるバイナリはfloat16に変換(intはnanを読み取れないため) ④64bitのエンコーディングはなるべく32,16bitへ変換する。 これらはread_csvのdatatypesを指定することで実現できる。