kaggle始めてみた【タイタニック生存予測②】

シェアする

まつよう
こんにちは。

kaggleによるタイタニック生存者予測第二弾。

今回は積み上げヒストグラム生成、欠損値処理、k-fold法による正答率計算などを追加で行いました。


前回記事

kaggle始めてみた【タイタニック生存予測】
kaggle始めてみた【タイタニック生存予測】
機械学習モデルの構築練習が出来るサービス、kaggleを始めてみました。kernelを用いて初めてsubmitするまでに行ったことを...

前回はkaggleアカウントを作成し、簡単な機械学習モデルを作成して提出するまでを行いました。

今回はそこから少し改良を加えていきます。

データの可視化

まずは前回も行った性別と乗客の階級の可視化から。

特徴量1:性別(Sex)

seabornのfactorplotで、性別の生存率を1行で可視化することができます。

特徴量2:乗客の階級(Pclass)

これらの特徴量は今回も使用します。

欠損値処理、特徴量追加

ここからさらに、特徴量を増やしていきます。

特徴量3:乗船場所(Embarked)

グラフを見ると、乗船位置によって生存率にばらつきがあることが分かります。

しかし、このデータは一部欠損しているため、そのままでは学習させることができません。

場所別の乗船者数をみると、データの最頻値は”S”であることが分かります。

なので、欠損している値はとりあえず”S”で埋めることにしました。

特徴量4:年齢

まずは年齢のばらつきをヒストグラムで確認。

次に、ヒストグラムを生存者と死亡者に色分けして表示してみました。

よく見ると、6歳以下の生存率が比較的高いことが分かります。

今回は、新たな特徴量として変数”Child”を設定し、6歳以下かどうかで分類しました。

年齢が欠損しているデータについては、20歳(“Child”=false)として設定しています。

特徴量5:料金

年齢と同様、船の乗船料金もヒストグラムで表示しました。料金が高いほど生存率が高そうです。

このデータから、料金が50以上で分類する新たな変数”Rich”を追加しました。

データ整形

前回と同様、判定に用いない不要な変数は取り除きます。

また、性別(Sex)と乗船地(Embarked)のデータは数値に変換しました。

結果は以下の通り。

Pclass, Sex, Embarked, Chile, Rich 5つの特徴量を用いて予測を行っていきます。

ランダムフォレストによる予測→提出

ランダムフォレストを用いて学習モデルの作成を行います。

学習モデル作成後、提出を行う前に、k-fold法で訓練データでの正答率を求めてみました。

訓練データの正答率は80%ほどでした。

まずまず良さそうなので、これを用いてテストデータの判定を行い、提出します。

提出した結果↓

0.76555→0.77033

と、ほんの少しだけ精度が向上しました。

上位58%ほどなので、まだまだポンコツです。

おわりに

欠損値のあるデータを上手く加工して特徴量に加えることで、少しだけ精度を向上させることができました。

今回ヒストグラムからあたりをつけてイイ感じの新たな特徴量を生成する、ということをしましたが、データ数が少ないため、あまり良い方法ではないかもしれません。(訓練データで見られた傾向が、必ずしもテストデータでも見られるとは限らないため)

まだ改善の余地があるとすれば、機械学習モデルの生成方法がランダムフォレスト以外にも色々あるので、次回はそれを試してみたいなと思います。

参考にしたサイト

matplotlibでstacked histogram (積み上げヒストグラム) を書く - Qiita
積み上げヒストグラムが正しい訳なのかはわからない。import matplotlib.pyplot as Pone = (100, 100, 500, 600, 800)two = (100,…
Pandasで欠損値処理 - Qiita
はじめにpandasでデータ分析を行うとき、分析したいデータが欠損している場合があります。データの欠損を放置したまま分析を行うと、おかしな分析結果が導かれてしまう可能性があります。そこで、この記事…
スポンサーリンク

シェアする

スポンサーリンク