hamakou108 blog

Kaggle の Titanic Competition に取り組んだ

Cover Image for Kaggle の Titanic Competition に取り組んだ

Kaggle のチュートリアル Competition である Titanic - Machine Learning from Disaster に取り組んだ。 Kaggle の Competition に取り組むのはこれが初めてで、右も左も分からない。 公開されている Notebook から3つ選んで、読んだり写経したりして入門してみた。

Titanic - Machine Learning from Disaster とは

Titanic - Machine Learning from Disaster

タイタニック号の乗客のデータを使って、どのような特徴を持つ乗客が生き残りやすいのか予測することがこの Competition のゴールだ。 乗客のデータとしては名前、年齢、性別、親兄弟の数、チケットのクラスなどがある。

読んだ Notebook

Titanic Tutorial

Titanic Tutorial

Titanic の Overview でまず読むことが推奨されている Notebook がこの "Titanic Tutorial" だ。 この Notebook では最速で Submission に到達することを目標としており、 Kaggle Notebook の作成と実行、ディレクトリ構成の理解、予測結果の submission までを行う内容となっている。 これによって Kaggle の Competition がどのように構成されているのか、ざっくり把握することができる。

また Submission を行った後、さらに Upvote と Notebook へのコメントを行うことで Competitions Contributor の要件を満たすことができる。

Titanic Data Science Solutions

Titanic Data Science Solutions

2022年1月23日現在で最も vote 数を集めている Notebook 。

この Notebook では主にデータの探索や可視化、クレンジングの進め方について丁寧に解説されている。 データを分析する際にどこから手を付けてどのように進めれば良いのかイメージさせてくれた。 特に 7つの Workflow Goals の観点で仮説設定し、それに基づいて観察、判断するというステップは Kaggle という枠を超えて様々な場面で踏襲できそう。

  • Classifying
  • Correlating
  • Converting
  • Completing
  • Correcting
  • Creating
  • Charting

この過程でデータの可視化に Seaborn が多く利用されている。 グラフ描画と言えば Matplotlib 一択というイメージだったが、 EDA において Seaborn はどうやら必須ツールのようだ。

sample
練習用に Notebook を写経して Seaborn で描画したグラフ

Notebook の終盤では、代表的な分類のモデリング手法を一通り試している。

  • Logistic Regression
  • KNN or k-Nearest Neighbors
  • Support Vector Machines
  • Naive Bayes classifier
  • Decision Tree
  • Random Forrest
  • Perceptron
  • Artificial neural network
  • RVM or Relevance Vector Machine

自分はほぼ全ての手法について知らない状態なので、今後の勉強の題材選びに役立ちそう。

あと蛇足ではあるが、 Copy & Edit から Notebook を作成した際、実行環境はその Notebook が作成された当時の Docker イメージに固定されている。 最新の Docker イメージに変更する際は、右側サイドメニューの SettingsEnvironment で設定変更する必要がある。

最新のバージョンでは、 Correlating categorical features のセクションで pointplotSex が逆転してしまう事象があった。 オプションに hue_order を指定すれば問題を解消できる 1

grid.map(sns.pointplot, 'Pclass', 'Survived', 'Sex', order=[1,2,3], hue_order=["male", "female"], palette='deep')

Introduction to Ensembling/Stacking in Python

Introduction to Ensembling/Stacking in Python

Kaggle ではアンサンブル学習を用いてスコアを上げることが重要という話を小耳に挟んだので、簡単なアンサンブル学習を行うこの Notebook も読んだ。

scikit-learnKFold は、最新版で動かすには幾つかコードの修正が必要だった。

まず namespace が sklearn.cross_validation から sklearn.model_selection に変更されている。

from sklearn.model_selection import KFold

次に KFold のコンストラクタの引数名が変更されているので、次のように修正する 2

kf = KFold(n_splits=NFOLDS, shuffle=True, random_state=SEED)

KFold() が返すオブジェクトは iterable ではなくなっているため、 get_oof メソッド中で enumerate(kf) のように書くとエラーになる。 split() というメソッドが提供されているので、これを利用する。

def get_oof(clf, x_train, y_train, x_test):
    # ...

    for i, (train_index, test_index) in enumerate(kf.split(x_train)):

    # ...

またデータの可視化において、前回の Notebook で Seaborn が重要だ!と思っていたら、今度は Plotly というツールが現れた。 こちらはウィジェットを作成できるようなので、よりカスタマイズしたグラフを作成したい場合には有用そうだ。

まとめ

Kaggle の Titanic Competition で取り組んだ内容をまとめた。 自分はどちらかと言うとアウトプットの前に体系的なインプットを行うタイプの人間だが、今回は手を動かすことを優先し、 Competition の Notebook の写経を行った。 結果的には次に何をインプットすれば良いか目星が付いたので、今回の判断は正解だったと思う。

次のステップとして、データサイエンスのための統計学入門の5章と6章で今回出てきた分類のモデリング手法が紹介されているようなので、それらを学びたい。 また Competition はしばらく写経ベースで取り組んでいくが、少しずつ自分独自の工夫も取り入れて慣れていきたいと思う。