Kaggle Tips - teketekere/paperMemo GitHub Wiki
Feature Engineering
-
Categorical feature
-
Target encoding
Target variableを使ってCategorical featureをEncodingする- TargetがBoolean
- Category毎のTarget VariableがTrueのProbability, count
- Targetがreal number
- Category毎のTarget Variableのmean, count
- TargetがBoolean
-
weight of evidence https://github.com/h2oai/h2o-meetups/blob/master/2017_11_29_Feature_Engineering/Feature%20Engineering.pdf
woe seems to be good?- 重要なこと
Target EncodingでもWoEでもTrainingのEncodingをTraining全体を使ってやらないこと
Out of Fold(k分割とか)して、それぞれのFoldの平均をとるなどする
TestDataはTrainingの平均を撮ればよい
- 重要なこと
-
Aggregation
- count, cumcount, time-delta, unique-count, mean, var, median, N%-quantile, top-n-count, ...
-
協調フィルタリング
- SVD
- MatrixFactorization(疎な場合はSVDよりいいらしい)
- Factorization Machines(MFよりもこっちのがいいらしい)
- pythonだとlibfm使うと手軽に計算できる
- 3変数以上のときはkerasのlibfm使ってEmbeddingした(TalkingdataAdtracking 4th place)
-
-
Numerical Feature
- Categorical Featureでgroupbyしてmean, var, medianとか
- また元データ、groupbyしたmean、…などのDiffをとるのも(2018Avitoでは有効だった)
-
Text Feature
-
TFIDF
- TFIDFでSparseなデータを作ってそれを特徴量にしてRidgeで学習(2018Avito)
- SparseなTFIDF値をそのまま特徴量にする
- SVD等でCompressionする(次元は100とか300とか500とか色々試すしかない)
-
WordEmbedding
- W2V, Glove, FastText
- Pretrainedを使うか、データから学習するかの選択がある。2018Avitoでは自前で学習したほうがスコアは良かった(らしい)
- W2V, Glove, FastText
-
人力特徴量
- 文の長さ、単語数、Char数、Punctuation数、Stopward数、Alphabet数、Digits数、Emojis数、Uniqueな単語数、単語VS文の長さ(他にも色々なVS)
-
-
Image Features
-
人力特徴量
-
ImageNetのPretrainedModelを使う方法
- 例えばResnet50のPretrainedModelを持ってきて、画像の(中間/最終)層の出力を特徴量とするとか
- このときデータをFloat32で持つとかなり容量がでかくなって大変なので、Uintに直す(0or1で持つ)とか工夫がいる
- 画像の分類結果も使えるかも
- 例えばResnet50のPretrainedModelを持ってきて、画像の(中間/最終)層の出力を特徴量とするとか
-
Validation
- Validation setをどう作るか
- kFold
- 時系列の場合はランダムサンプリングだとうまくいかない…とか
Stacking
- fold(k-foldとか)を切って、各foldの予測値を新たな特徴量として使う
CVとLB
- CVとPublic LBの差が少ないモデルのほうが結果的にPrivate LBを最大化(最小化)できることが多いように思う
- だからそのようなValidationSetの作り方を検討する
Process
- はやめに良いCVを見つけておく
- 特徴量作成 → 学習 → スコア確認のサイクルを自動化できるようコードを組んでおくほうがいい