Kaggleの体験としてTitanicをサブミットした (Random Forest版)

f:id:peroon:20180515193634p:plain

Kaggle api

GitHub - Kaggle/kaggle-api: Official Kaggle API

  • データダウンロードはコマンドから
  • API key発行
  • 指定フォルダに置く
  • コマンドプロンプトと同じ位置にダウンロードしたいので、
kaggle competitions download -c titanic -p .
  • これによりコマンド一発で提出できる
  • コメントも付けれる
  • スコアとコメントはleaderboardで見れる

Titanic Files

  • 軽いので練習に良い
  • gender_submission.csv 提出ファイルの例
  • test.csv テストデータ
  • train.csv 訓練データ

カラム

Titanic: Machine Learning from Disaster | Kaggle

  • 分類に影響しそうなカラムに★/△を付けた
    • PassengerId
    • Pclass チケットの等級★
    • Name
    • Sex ★
    • Age ★ ※NaNあり
    • SibSp 乗っている兄弟・配偶者の数 △
    • Parch 乗っている子・親の数 △
    • Ticket チケット番号
    • Fare 運賃
    • Cabin キャビン番号(文字列)★ ※NaNあり
    • Embarked 乗船港 C/Q/S ※NaNあり
    • Survived 0/1

サンプルを提出してみる

kaggle competitions submit -c titanic -f gender_submission.csv -m "submit sample"
  • score 0.76555 (max 1.0)

分類器を使ってみる

  • Python 3.6
  • Random Forest
  • 引っかかりポイント
    • male, femaleを数値にする必要
    • NaNもだめ ..NaNだと死んでる可能性高そう。-1にする
      • どちらもread_csvのconvertersで対応
  • predictできた
  • 結構手間かかる
    • 分類器に食わせるようにデータ整形
    • 結果が正しいと判断できる
    • 一般の人にはまだ無理そう

提出してみる

  • 0.71770
  • サンプルより下がった・・・
    • 分類器、全部デフォルト設定だからなぁー
  • ここからは知見が必要
  • https://www.kaggle.com/sshadylov/titanic-solution-using-random-forest-classifier/code
  • 試行錯誤してFareを足した時に下がった
    • 下がった時、実装がまずいのか、特徴を足すべきでなかったのか判定が難しい
  • 特徴を削って性別のみで判定したほうが精度が高い・・・
    • 性別のみで判定 score 0.76555 これをまず超える必要
    • どの特徴を含めるとテストが良いか、選んではサブミットを繰り返してもいいかも
  • ハイパパラメータ調整
    • 0.78468 こえた!(テストデータにフィットしただけとも言える
  • 同じような特徴を1つにまとめる
df[FamilySize] = df[SibSp] + df[Parch] + 1
  • NameからMrなどを取り出してTitleとして特徴に加える
  • 最終的に使ったカラムはPclass, Sex, Age, Fare, Embarked, FamilySize, Title
  • 絞り込んでAge, Fareを使わない場合は精度が下がった
  • 最終スコア 0.80861 780th

知見

  • 数値カラムでNaNだったら訓練データのMeanで埋める
    • Medianも可
  • 同じような特徴は1つの特徴にまとめる
  • 似て非なる値の扱い
    • 元特徴 Name: (例)xxx Mr xxx, yyy Mr yyy これを、
    • 新特徴 Title: (例)Mr
  • データをグラフにして観察することでよりよい(ノイズのない)特徴を作れる
  • Titleにて、Mlle = Missという知識があれば同一扱いできただろう
    • Ms = Miss
    • Mme = Mrs

Code

Kaggle Titanic by Random Forest · GitHub