サクッと脱初心者するためのKaggle titanic攻略

記事の目的

 kaggleというコンペティションをご存知でしょうか。おそらく最も大規模なデータサイエンス・機械学習のコンペティションで、充実した賞金・入門資料の豊富さなど、コンテンツが非常に充実しています。
 一方で、英語でドキュメントが書かれていたり、出力に少しクセがあったりして、敷居は必ずしも低いわけではありません。そのため、本記事は初学者が写経しつつ、最速で提出をすることでkaggleのクセに慣れてしまい、挫折せずに入門してしまおうという趣旨の記事です。

今回参加するコンペティション

 おそらく最も有名なコンペティションであるhttps://www.kaggle.com/competitions/titanic

を利用します。これは、titanic号の乗客の生死を、年齢や性別などのパラメータ(説明変数)から予測するタスクになっています。
 とりあえず、(kaggleにアカウントを登録したら)まずは上のリンクに飛んで、Join Competitionをクリックします。その後、新たにnotebookを作成し、notebook右部のタブにあるAdd Inputをクリックし、そこでtitanicと打ち込んで最上部に出てきた+をクリックします。これで、必要なデータを読み込めるようになります。
notebook左部に目を移し、最初からあるセルを実行します。
ここまでで、機械学習に関係のないKaggleの煩雑な手順は終了です。
ここからが、機械学習の本番になっていきます。

モデルを作成しよう

欠損値を埋めよう

 Kaggleのデータに限らず、全てのデータには欠損というものが存在します。この処理をどうするかは、非常に難しく色々な具体例を見て慣れていくしかないと思います。今回は、欠損値を全て平均値で埋めたいと考えています。ですが、平均で埋めるにはデータをなるべく多く使いたい(train.csvとtest.csvで傾向が違ってしまうと予測も上手くいかないことが予想されるため)ので、まずはtrain.csvとtest.csvのデータフレームを結合してしまいましょう。

train = pd.read_csv("../input/titanic/train.csv")
test = pd.read_csv("../input/titanic/test.csv")
all_df = pd.concat([train, test], sort=False)

どのデータに欠損(NaN)があるのか知りたいので、若干オーバーキルですが、pandas-profilingを使いたいと思います。

import pandas_profiling as pdp
pdp.ProfileReport(all_df)

出てきたシートのMissing(%)を見れば、どのパラメータがどれだけ欠損しているのか見てわかります。

さて、今回使用する目的変数を以下の3つにしましょう。先ほども述べた通り、どの目的変数を特長量として使うのか(変換なども含め)は、非常に難しくデータを見ながら探索的に考えるしかありません。この部分を解説すると、長くなり今回のサクッと一周終わらせる趣旨にそぐわないと考えられるので、今回は一旦天下り的に利用するパラメータを限定します。

  1. Age : 年齢。量的変数。20%程欠損。

  2. Fare : 運賃。量的変数。0.1%欠損

  3. Sex : 性別。質的変数。欠損なし。

AgeとFareの欠損値から埋めたいと思います。それぞれ、平均値は次のコードで簡単にもとまります。(NaNは計算から自動で除外されるので心配は不要です。)

average_age = all_df["Age"].mean()
average_fare = all_df["Fare"].mean()

各列の欠損部分に平均値を代入するには、fillnaメソッドを使います。

all_df["Age"] = all_df["Age"].fillna(average_age)
all_df["Fare"] = all_df["Fare"].fillna(average_fare)

ここまでで、欠損値を埋めることに成功しました。
次に、性別という質的変数(カテゴリ変数)の処理を行います。

ここから先は

2,052字

¥ 150

この記事が気に入ったらサポートをしてみませんか?