Kaggle チャレンジ 1日目 タイタニックの問題からデータを読み解いてみる

シェアする

  • このエントリーをはてなブックマークに追加
スポンサーリンク

はじめに

 機械学習を学ぶ上で、どうしても当たってしまう壁があります。それは、データセットの有無です。せっかく学びたいと思っても練習に使えるデータセットがない、もしくはいつも同じデータセットでしかできない。こんな方はぜひKaggleでアウトプットして学びましょう。


Kaggle

 Kaggle には世界中の機械学習・データサイエンスに携わっている方が集まっています。また、Kaggleには初心者向けの一つの機能として「Kernels」というものがあり、ここには各データセットに対して、他のユーザーが構築した予測モデルのコードや説明が公開されています。

 Kaggleの中でも特に有名な課題として「Titanic : Machine Learning from Disaster」(訳:タイタニック号:災害からの機械学習)があります。Kaggleという言葉は、機械学習を学んでいる人であれば1度は耳にするでしょう。今回はこのデータセットでKaggleに入門していきたいと思います。


やること

 今回、「Kaggle チャレンジ〇日目」という名前で、KaggleにあるデータセットをKernelsをつかいながらどんどん試していこうと思います。また、ほかの記事でも多く使っているのですが、できる限りGoogleColaboratoryを使用していこうと思います。理由としては、初心者に優しいし、すごくいいサービスだと思っているからですね。

・GoogleColaboratoryの使い方はこちら

対象者

機械学習をKaggleを使って学びたい方、Kaggleに興味があるけどどうすればいいかわからない方。

 

Titanic : Machine Learning from Disaster

データのダウンロード

 まず、Titanic : Machine Learning from Disaster で、利用規約へ同意し、データセットのダウンロードしましょう。利用規約に同意し、このコンペに参加できたら、「Data」というタブがあるので、そこをクリックし、データをダウンロードしましょう。

KaggleAPIを使ってダウンロードする方法と直接「Download All」というところをクリックしてダウンロードする2つの方法があります。今回はHP上で直接ダウンロードしましょう。


データをGoogleColaboraty上で使う

 まず、今回ダウンロードしたデータがzipファイルだと思うので、それを解凍して下さい。そして、解凍したフォルダを GoogleDrive にあげてください。そうしたら、次はGoogleColaboratory を開き、pydrive pipでインストールし、次のコマンドをうってください。

そうすると、リンクが表示されるので、リンクをクリックし、Googleアカウントを選び、コードを取得します。そして、取得したコードをリンクと一緒に表示されている入力フォームに入力して下さい。これにより、Googledrive 上のデータに、GoogleColaboratory でアクセスできるようになります。

 つぎに、アクセスしたいファイルを右クリックして、「共有可能なリンクを取得」をクリック。リンク共有を「オン」にして、表示されたリンクの「id=************」のアスタリスクの部分をコピーします。

 そして、次のコマンドのアスタリスクの部分にコピーしたものをペーストします。

 これで、準備が整いました。次はKernelsに行ってみましょう。


Kernels入門

では、Kernelsに移動し、今回投票が多かったものを真似してみましょう。Titanic Data Science Solutions このページに沿って進めていきます。Kernelに投稿されている記事は英語でしかもそのページをgoogle翻訳したいと思ってもできません。頑張って英語を読むか、google翻訳を開いて書かれているものをコピペして翻訳してください。

 今回は抜粋して取り上げていきます。

冒頭

 私は、このノートブックで使用されている手法をAPIにまとめた新しいPythonパッケージSpeedmlをリリースしました。しかも Speedmlは、コードの行数を約70%削減できた。このノートブックは、問題を解決する典型的なワークフローに沿って進めていきます。ワークフローは、書籍で説明されている通り、7つの段階で進めている。

  1. 問題の定義
  2. トレーニングとテストのデータを取得する。
  3. データの前処理
  4. パターンを分析し、データを探索する
  5. モデルを作成して問題を予測、解決する
  6. 問題解決のステップと最終的な解決策を視覚化して報告する
  7. 結果を提出する

ワークフローの目標

  • Classifying(識別要因)
  • Correlating(相関->数値特徴)
  • Converting. (データ変換)
  • Completing(欠損値の補完)
  • Correcting(修正, 不要な特徴の削除)
  • Creating(既存の特徴を組み合わせて新しい特徴を作る)
  • charting(可視化)

問題の定義

 まず、この問題は、タイタニック号の話で、年齢、性別、チケットの番号などの特徴量から生存しているかしていないかを予測するものである。トレーニングデータには、そういった特徴量(詳しくは、トレーニングデータの中身を見てほしい)と生存情報があり、テストデータには、特徴量のみで生存情報がない。このタイタニックの死亡原因の一つが、乗客を乗せる十分な量の救急ボートがなかったことである。そのことを考えると、女性や年配の人の方が助かった可能性が高かったでしょう。

ベストプラクティス

  • プロジェクトの早い段階で特徴の相関分析を実行する。
  • 可読性のために複数のプロットを使用する。

データ分析

データ分析に移っていきます。まず、必要になるライブラリを一通りよんでおきます。

 次に、csvtsvなどの行列データを扱うのに便利なライブラリであるpandasを使ってデータを操作していくので、csvデータを読み込んでデータフレームにします。このkernelsでは、リストで組み合わせていますね。

 このtraintestのデータフレームのカラムを取得してみましょう。次のコマンドで、カラムを見ることができます。これが、データをダウンロードしたページに記載されている特徴量と一致していることを確かめてみてください。

output:

 実際に、trainデータの一部を取得してみましょう。headで最初の5件を取得することができ、tailで最後から5件を取得できます。また、取得する件数は引数で変更できるので、気になる方は試してみてください。

output:

output:

 このように最初の5件を取得してデータを見てみるのは、そのデータの特徴を捉えることができるので重要です。全てのデータを見るのは大変ですからね。また、このデータからわかることがあります。

 name の中には、()がある人がいる、また、MrやMissなど短縮に使われるものなど名前の表記にはいくつかの方法があるため、エラーや誤値が含まれる可能性があります。また、Ticketには、数字のみの人と英語と数字が入り混じっている人がいるがいます。この数件を取得して見ることにより、データについてわかることが多くあることが、このことからわかると思います。

 空の値を含むカラムには修正が必要ですね、Cabin、Age、 Embarkedのカラムには、トレーニングデータにいくつかの null が含まれています。まず、各特徴量のデータの型を見てみましょう。

output:

 次に、サンプルデータ全体の特徴量の分布を見てみましょう。

output:

  • 合計サンプル数は891で、タイタニック号(2,224)に搭乗した乗客の40%程度です。
  • 生存情報は、0または1の値を持つカテゴリ的な特徴です。
  • 生存率は38%程度となり、実際の32%より少し高い。
  • ほとんどの乗客(> 75%)は親または子供と一緒に旅行していない。
  • 乗客のほぼ30%が兄弟姉妹や配偶者を乗せていました。
  • 運賃は、乗客数の1%未満の人が512ドルという高い料金だったので大きく変動していた。
  • 65-80歳の高齢者はほとんどいなかった。

データは次のようになっています。

  • PassengerId – 乗客識別ID
  • Survived – 生存情報(0=死亡、1=生存)
  • Pclass – チケットクラス
  • Age – 年齢
  • SibSp – タイタニックに同乗している兄弟/配偶者の数
  • parch – タイタニックに同乗している親/子供の数
  • fare – 料金

output:

  • 名前は全員異なっていた。(count = unique = 891)
  • 性別は65%男性(上位=男性、頻度= 577 /count= 891)
  • 客室の値はいくつかのサンプルにわたって二重になっています。 あるいは、複数の乗客が客室を共有していた。
  • Embarkedは3種類で、 ほとんどの乗客はSポート(top = S)を使用していた。
  • チケットは、重複の比率が高い。

データ分析に基づく仮定

 これまでに行われたデータ分析から次の前提にたどり着きました。適切な操作をする前に、これらの前提条件をさらに検証することがあります。

Correlating(相関)

 私たちは、各カラムが生存情報とどれくらいよく相関しているかを知りたい。プロジェクトの早い段階でこの作業を行い、プロジェクトの後半でモデル化された相関関係とこれらの相関関係を一致させたい。

Completing(欠損値の補完)

 年齢と生存は明らかに相関しているので、欠損値の補完をしたいかもしれない。生存は他の重要な特徴量と相関する可能性があるため、Embarkedを補完させたいかもしれない。

Correcting(修正, 不要な特徴の削除)

  • 重複率が高く、チケットと生存率との間に相関がない可能性があるため、チケットの特徴は分析から削除する可能性がある。
  • 客室のデータは、トレーニングデータとテストデータの両方で多くのnull値を含んでいるため、削除する可能性がある。
  • 生存に関係しないため、PassengerIdはトレーニングデータセットから削除される可能性がある。
  • 名前は比較的非標準であり、生存に直接貢献しない可能性がある。

Creating(既存の特徴を組み合わせて新しい特徴を作る)

  • 私たちはParchSibSpに基づいてFamilyという新しい特徴を作成して、家族の総数を取得することができる。
  • タイトルを新しい特徴として抽出するために、名前を設計することができます。
  • 年齢層の新しい特徴を作りたいと思うかもしれません。これにより、連続的な数値で表されている年齢の特徴を、カテゴリー的な特徴に変えることができる。
  • また、もし分析に役立つなら、料金範囲の特徴を作成することもできます。

Classifying(識別要因)

また、前に述べた問題の記述に基づいて、私たちの前提に追加することもあります。

  • 女性(性別=女性)は生き残った可能性が高かった。
  • 小児(年齢<?)は生存していた可能性が高い。
  • 上位クラスの乗客(Pclass = 1)は生き残った可能性が高い。


 書いていたら長くなってしまったので一旦ここで区切りたいと思います。次は今回のデータ分析によって見えてきた仮説を元に実際にデータを使って、可視化しながら分析を進めていきます。

続きはこちらから

Kaggle チャレンジ 2日目 タイタニックの問題でデータ分析に挑戦

最後まで読んでいただきありがとうございました。よろしければこの記事をシェアしていただけると励みになります。よろしくお願いします。

スポンサーリンク
レクタングル広告(大)
レクタングル広告(大)

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
レクタングル広告(大)