Pythonによるデータ分析④ タイタニックの生存予測をしよう!



決定木分析やランダムフォレストをつかって分析をしたいけど、どうすればいいかわかないよ。。。

この記事では、Python初心者でもできるように、タイタニック生存予測をレクチャーしていきます!

記事にでてくるコードは配布しております。下記LINE@からダウンロードください。

メッセージにて、「データ分析」とお送りいただければダウンロードができます。

友だち追加

このシリーズを読むとわかること

  • Python初心者でも、そもそもデータ分析とはなにかざっくり理解する
  • ランダムフォレストを用いて、タイタニックの生存予測を分析することができる

今回は、

  • 決定木分析を用いて予測をする
  • 予測結果をわかりやすく表にまとめる
  • ランダムフォレストで予測し、特徴量と重要度を出力する

という流れをサンプルコードとともに解説をします!

第3回ではデータの前処理をおこない、予測するための下準備をしました。

それをふまえ、データ分析の醍醐味の予測をしていきたいと思います!

それでは一緒に学んでいきましょう!

タイタニックの生存予測をしよう!

船 イルミネーション

今回は、「決定木分析」と「ランダムフォレスト」を用いてデータ分析をおこないたいと思います!

ランダムフォレストは後ほど説明しますので、ここでは決定木分析について話します。

決定木分析とは

Yes/Noなどの条件に属するかどうかで確率を算出する分析方法。

イメージとして、以下の画像を見てください。

分岐図

「引用:決定木分析とランダムフォレスト

画像のとおり、条件を複数作成することによって、最終的に生存するかどうかを予測するものが決定木分析です!

why
言葉で説明するのはここまでにして、実際にプログラムを実行して分析していきましょう!

分析するデータを読みこむ

まずは、下記のLINE@から「データ分析第4回」のファイルと「csv_data」のフォルダをダウンロードします。

メッセージにて、「データ分析」とお送りいただければダウンロードができます。

友だち追加 python フォルダ

第3回の前処理を実行する

前回の前処理した流れをまとめて実行し、予測できる手前までにしていきます!

python コード

確認として実行結果も載せておきます!python コード

trainとtestにわける

ここで、前処理をした”train”データと”test”データのデータフレームをわけていきます!

trainデータとは
日本では、訓練データと言い、予測をするために学習するデータになります。
testデータとは
日本では、テストデータと言い、予測結果を判定するデータになります。

 

ここでは試しに、trainデータを8割testデータを2割の配分でデータをわけていきます!

python コード

ここでは、”train”と”test”両方に、Yに生存したかどうかのデータ、Xに生存したか関係ありそうなデータをそれぞれ入れています!

今後、こちらを用いて予測に入っていきます!

決定木分析の予測モデルを作成し予測結果を出力する

いよいよ、まちにまった予測をしていきましょう!!

ここでは、決定木分析で予測するためのモデルを作成し、訓練データを使い機械に学習させていきます!

python コード

学習させたものをつかい、テストデータを予測し正解率を出力します!!

python コード今回は、78.2%と結果が出ました!



予測結果をわかりやすく表にまとめよう

先ほど、78.2%という予測結果が出力されました!

しかし、78.2%という結果は、

  • ”生存と予想していたが死亡していた”
  • ”死亡と予想していたが生存していた”

というように詳しい判定情報がわかりせん。

加えて、クライアントに分析結果を説明する際など、表にまとめるシーンは数多く存在します。

それをふまえ、簡単にですが78.2%という結果を表にまとめていきましょう!

混合行列を作成する

ここでは、訓練データとテストデータをつかい、混合行列を作成していきます。

混合行列とは

生存したかどうかといった、分類をするモデルの性能を確認するための行列。

混合行列が用いられる例として、コロナウイルスを用いて説明します。

例えば、コロナウイルスに感染したかどうか80%予測する2つのキットがあるとします。

このとき、同じ80%でも、

  • 陽性と判定され陰性だった人が比較的多いキット
  • 陰性と判定され陽性だった人が比較多いキット

上記2つでは、前者のキットの方が採用させやすいと考えます。

理由としては、陰性(コロナウイルスに感染していない)と判定されたけど実は陽性だった人が他の人に感染させてしまうリスクが特にあるからです。

このように、精度だけでなく精度の内訳も見ることができるのが混合行列です!

もっと知りたい方は、こちらの記事を見てください!(機械学習 – 混同行列、真偽性、偽陽性、真陰性、真陽性について

それでは、混合行列を作成していきましょう!

python コード

混合行列をみると、diedと予想してdiedだった人が94人、diedと予想してsurviedだった人が12人…と出力されていることがわかります!

ヒートマップを作成しよりわかりやすくする

先ほど作成した混合行列をよりわかりやすくしていきましょう!

今回は、人数が多いほど色が濃くなるヒートマップを作成していきます!

ヒートマップとは

行列の個々の値を、色や濃淡として表現した可視化グラフの一種。

python コード ヒートマップ

こちらをみると、78.2%がどういった内訳でそうなったのか更に可視化されたことがわかります!



ランダムフォレストで予測し、特徴量と重要度を出力しよう

ここでは、ランダムフォレストを用いてより精度を上げる方法を考えていきます!

ランダムフォレストは、決定木分析の複数のパターンの結果から精度が一番良かったものを採択する手法です。

決定木分析とは

多様な決定木を多く作り、各々の決定木のアウトプットの多数決を取るアルゴリズム。

単純に1つの決定木分析のみで分類するよりも、精度が高くなりやすいことが知られています。

今回は、予測に加え、特徴量(後述します)や重要度(後述します)も求めていきます!

ランダムフォレストを用いて予測する

まずは、決定木分析と同様に、ランダムフォレストのモデルを作成します。

python コード

その後、訓練データを機械に学習させ、正解率を出力します!

python コード

結果は、78.8%と出ました!

少しですが、精度が上がっていることがわかります!

特徴量と重要度を出力する

最後に、今回用いたタイタニックの生存データの特徴量と重要度を、ランダムフォレストを用いて求めていきます!

特徴量とは

対象の特徴が数値化されたもののこと

重要度とは

あるデータがどれだけ全体に影響を及ぼしているかの割合

つまり、特徴量は今まで数値化しようとして頑張ってきたデータ群であり、重要度はそうしたデータ群がどれだけ全体の影響を及ぼしているのかの割合です。

これを求めることで、今回のデータで重要なものは何だったのかを知ることができ、今後データ分析をするための戦略にも活かすができます!

特徴量と重要度を求めていきましょう!

python コード

こちらをみると、Sex(性別)、Age(年齢)、Fare(運賃)が全体の6割強を占めていることがわかります!



まとめ

今回は、

  • 決定分析を用いて予測をする
  • 予測結果をわかりやすく表にまとめる
  • ランダムフォレストで予測し、特徴量と重要度を出力する

といったことをサンプルコードとともにレクチャーしていきました!

これを通して、データ分析の基本的な流れはマスターできたと思います!

ここまで読んでくださりありがとうございました!!

    コード配布はLINE@にて!

    友だち追加

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

    CAPTCHA