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
    • 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では自前で学習したほうがスコアは良かった(らしい)
    • 人力特徴量

      • 文の長さ、単語数、Char数、Punctuation数、Stopward数、Alphabet数、Digits数、Emojis数、Uniqueな単語数、単語VS文の長さ(他にも色々なVS)
  • Image Features

    • 人力特徴量

    • ImageNetのPretrainedModelを使う方法

      • 例えばResnet50のPretrainedModelを持ってきて、画像の(中間/最終)層の出力を特徴量とするとか
        • このときデータをFloat32で持つとかなり容量がでかくなって大変なので、Uintに直す(0or1で持つ)とか工夫がいる
      • 画像の分類結果も使えるかも

Validation

  • Validation setをどう作るか
    • kFold
    • 時系列の場合はランダムサンプリングだとうまくいかない…とか

Stacking

  • fold(k-foldとか)を切って、各foldの予測値を新たな特徴量として使う

CVとLB

  • CVとPublic LBの差が少ないモデルのほうが結果的にPrivate LBを最大化(最小化)できることが多いように思う
    • だからそのようなValidationSetの作り方を検討する

Process

  • はやめに良いCVを見つけておく
  • 特徴量作成 → 学習 → スコア確認のサイクルを自動化できるようコードを組んでおくほうがいい