LoginSignup
0
4

More than 3 years have passed since last update.

タイタニック号の乗客の生存予測 を体験してみる(探索的データ解析編)

Last updated at Posted at 2020-05-01

目的

機械学習の一連の流れをタイタニック号の乗客の生存予測モデル作成を通して体験する。
先駆者の残してくれた記事に習い、どういう思考プロセスで開発しているのかを知る。
わからない関数、処理があれば調べてコメントとして残しておく。

参考元

以下の「キヨシの命題」様の記事を参考にさせていただきます。

タイタニック号の乗客の生存予測〜80%以上の予測精度を超える方法(探索的データ解析編)
https://yolo-kiyoshi.com/2018/12/16/post-951/

探索的データ解析編 をやってみる

「キヨシの命題」様のサイトには複数のタイタニック号の乗客の生存予測の記事が存在していた。
私はその中でも副題に「80%以上の予測精度を超える方法」がついている2記事を体験してみることにした。

2記事と言っても前編と後編に別れている。
「探索的データ解析編」と「モデル構築&推論編」である。

本記事では前編の「探索的データ解析編」を体験する。
その前に探索的データ解析のことを理解しておく必要があるので以下復習。

探索的データ解析
英語ではExplanatory Data Analysis(略してEDA)データの特徴を探求し、構造を理解することを目的としたデータサイエンスの最初の一歩です。

探索的データ解析は機械学習のタスクの一番最初のフェーズで、まずはデータに触れてみて、データを視覚化したり、データのパターンを探したり、特徴量やターゲットの関係性/相関性を感じるとるのが目的です。

【データサイエンティスト入門編】探索的データ解析(EDA)の基礎操作をPythonを使ってやってみよう より抜粋

環境

  • Pythonでバージョンは3.7
  • Colaboratory

環境準備

紹介されていたkaggleのサイトからデータ(csvファイル3つ)をダウンロードした。
https://www.kaggle.com/c/titanic/data

  • gender_submission.csv
  • test.csv
  • train.csv

ダウンロードしたファイルをColaboratoryにアップロードする。
参考サイトに習いtrain.csvとtest.csvを/data/rawを作成後、配下に格納した。
スクリーンショット 2020-04-28 11.15.31.png

データ準備

inputの通り入力し、outputの通り出力されることを確認した。
わからない関数、ぱっと説明ができないライブラリに関しては調べてメモを書いた。
スクリーンショット 2020-04-28 12.15.19.png

結合できました。
indexを振り直すところは他のやり方もあるみたいなのでちょっと脱線してお試しもしてみた。
変数につけた「mid」は何の略何だろうか? 分かる人いたら教えて欲しいです。

スクリーンショット 2020-04-28 15.04.05.png

探索的データ解析

判断基準が「生存率約0.38」というのがキモであることがわかった。
スクリーンショット 2020-04-28 16.03.02.png

Pclass に着目

pandasやseabornを使ってデータの解析をする。
平均を取ったり、グラフ化してデータを客観的にみる。

スクリーンショット 2020-04-28 16.17.06.png
スクリーンショット 2020-04-28 16.14.02.png

Name に着目

ミドルネームに着目する。
Nameからミドルネームだけ抽出。
テストに関係ないものは除外。
少数レコードは統合。(抽象化?)

スクリーンショット 2020-04-28 20.22.09.png
スクリーンショット 2020-04-28 20.23.09.png
スクリーンショット 2020-04-28 20.23.40.png
スクリーンショット 2020-04-28 20.24.34.png

この数値から関係がありそう。。。とは自分は見えない。
数学的知見からだとそう見えるのだろうか。

Fare に注目

distplot関数をちょいちょいいじって遊んでみたが、
デフォルト設定に頼り切ってしまうと痛い目にあいそうと理解した。
log1p関数については今の段階では何をしているのか理解できなかった。掘り下げが必要。

スクリーンショット 2020-04-30 11.25.43.png
スクリーンショット 2020-04-30 11.26.17.png

Age に注目

欠損値は除外して考えているがどうにかして推定できないか。。。

スクリーンショット 2020-05-01 9.08.22.png

Family に注目

「家族数」の列を新たに作成する。
参考記事の後述リンク先にもあるが「家族単位で行動していた可能性が高い」という点から、この変数を作成するに至っているらしい。
ビニング処理のやりたいことはわかった!

スクリーンショット 2020-04-30 14.59.55.png

Cabin に注目

「Cabinの頭文字は部屋がどの階層にあったのかを示すものなので、、、」
こう言った前情報を把握する能力もであることが分かる。
単に数字だけみていてもわからない。
テストで使用しない"T"を排除することも忘れずに行う。(この後にするのかな?)

スクリーンショット 2020-05-01 8.37.02.png

スクリーンショット 2020-05-01 8.35.03.png

Ticket に着目

「発想を転換し、Ticketに重複カウントがないのかを調べてみます。」
ここがミソですね。

一見規則性の見えない情報から関連関連性を見出すことが重要。
「とりあえず重複ないか見てみよう」というスタンスを持ってみる。
「そこから生存率と関連ある?」という黄金パターンで見ていく流れをつくる。

スクリーンショット 2020-05-01 8.44.40.png
スクリーンショット 2020-05-01 8.45.23.png
スクリーンショット 2020-05-01 8.46.23.png
スクリーンショット 2020-05-01 8.47.26.png

前編は以上です。

前編を終えて

  • 手を動かしながらは楽しいです。
  • わからない関数も調べながら、値を変えて試しながら学べているので、一つひとつを「当事者」の目線で勉強できている。
  • 参考書を買って「この関数いつ使うねん!」って思いながら勉強するよりも身についている気がする。
  • mapとlambdaを使う場面でも実践で使えるコーディングを学べている。

成果物

Colaboratryのノート(titanic_EDA.ipynb)
https://colab.research.google.com/drive/1EUikceUGYfmkED5Pa3YFh9IAEr3fntjW

後編に続きます。

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4