Aidemy 2020/10/30
はじめに
こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
今回は「データ分析 タイタニック号」の一つ目の投稿になります。どうぞよろしくお願いします。
*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。
今回学ぶこと
・タイタニック号の生存者予測モデルの流れの確認
・②訓練データ/テストデータの取得
・③データの整形、作成、クレンジング
・④パターンの分析,データの分析(一部、残りは次回行う)
タイタニック号の生存者予測
予測の流れ
①明らかにしたい問い、問題の定義
②訓練データ/テストデータの取得
③データの整形、作成、クレンジング
④パターンの分析、特定、また探索的なデータの分析
⑤問題のモデル化、予測、解決
⑥問題解決のステップと最終的な解決方法を視覚化、報告
①明らかにしたい問い、問題の定義
・今回は「タイタニック号の生存者予測」についての予測モデルを構築する。「Kaggle」というサイトでは「コンペ」と呼ばれる「モデルのオークション」のようなものが開催されており、これはその課題の一つである。
・Kaggleでは、課題の訓練データが渡される。今回もそれを使っていく。
・問題の定義について
・今回の訓練データには「乗客のデータ」と「生存/死亡」のラベルが付与されており、テストデータにはこのラベルはついていない。
・このテストデータに構築したモデルを適用すれば乗客の状態を予測できる。
②訓練データ/テストデータの取得
・データ取得は「pd.read_csv()」で行う。
・また、どの特徴量(変数)をデータセットとして使うかを決めるために、Pandasでデータの特徴量(変数)を確認する。これには、train_dfの列名を見ればいいので、「train_df.columns.values」で出力する。
・また、どのようなデータが入っているかを確認するために、データの先頭と後ろの数行を出力する。これは「head()/tail()」で確認すれば良い。
・各特徴量について
・Survived:生存したか 「0」がYes/「1」がNo
・Pclass:席のグレード 「1」>「2」>「3」
・Sex:性別
・Age:年齢
・Sibsp:乗船していた兄弟/配偶者の数
・Parch:乗船していた親/子供/孫の数
・Ticket:乗船番号
・Fare:乗船費用
・Cabin:客室の番号
・Embarked:出航した港名
③データの整形、作成、クレンジング
特徴量の種類
・特徴量には「カテゴリ値」と「数値」が存在する。
カテゴリ値
・カテゴリ値は、'文字列'か'決まった数値'しか取らない特徴量のことである。それぞれ「名義データ」と「順序データ」と呼ばれる。
・前項で確認した特徴量のうち、名義データは「Survived」「Sex」「Embarked」になる。(Survivedは「Yes/No」を示す)
・順序データは決まった数値「1,2,3」という順番を示す「Pclass」になる。
数値
・数値データは「離散データ」と「連続データ」に分けられる。
・今回のデータでは、離散データは「Sibsp」「Parch」、連続データは「Age」「Fare」になる。
欠損値のカウント
・次に、欠損値の処理を行うために、データに欠損値があるか、どの特徴量にあるかということを確認していく。
・データに欠損値があるかは「info()」で確認する。
・出力されたコードを見ると、「RangeIndex」が891となっているので、データは全部で891件あることがわかる。ここで各特徴量を見たとき、個数が891より少なくなっているものは、その分だけ欠損値が含まれているということになる。(例えばAgeは714個しかないので、177個が欠損値ということになる)
・train_df、test_df共に「Age」「Fare」「Cabin」に欠損値が含まれているので、③ではこれらの欠損値を補完していく。
データの重複の確認
・データが重複していた場合、削除する必要がある。重複があるかは「describe()」で確認する。
・引数に「include=['O']」と指定することで、オブジェクトデータに関する情報を表示できる。具体的には「count(データ数)」「unique(重複排除後のデータ数)」「top(最も多いデータ)」「freq(topの個数)」が表示される。
・ここでは重複データの個数が知りたいので、「unique」の個数を見れば良い。
③以降の方針
・ここからは、このデータを使ってモデルを構築していくのだが、今までに見てきたデータからその際の方針を考えていく。
・この時の方針(目標)になる物が7つある。「分類」「相関」「変換」「補完」「修正」「作成」「グラフ」である。これらについて「どの特徴量に対してどのように行うか」を考えていく。
・相関:モデルで予測していくのは乗客が生き残ったかどうか、すなわち「Survived」である。他の特徴量がSurvivedにどのような影響を与えているかを分析するために相関を調べる。
・補完:データの補完は相関の強そうなものから優先的に行う(相間の弱そうなものは次の修正を行った方が良い)。今回は「Age」「Embarked」から補完する。
・修正:Survivedと明らかに相関がなさそうなものを除外する。「Passenerld」「Name」は乗客の識別のためのデータであるため、生き残ったかどうかは無関係であるので除外とする。また、「Ticket」については重複率が高く、Survivedとの相関もない可能性があるので、除外される可能性がある。「Cabin」については欠損値が非常に多いため、削除される可能性がある。
・作成:特徴量に対して分割や抽出を行うことで新しい特徴量を作成する。今回は同系統の特徴量「Parch」「Sibsp」について「FamilySize」という新しい特徴量を作成する。また、連続データである「Age」「Fare」は離散データにした方が予測しやすいので、範囲を指定して分割した新しい特徴量を作成する。
・分類:タイタニック号の生存可能性は「子供」「女性」「上層階(上位クラス)」が高いとされる。この仮説に基づいてデータを見ると「Sex=Female」「Age<?」「Pclass=1」は「Survived=1」の可能性が高いということになる。
④パターンの分析,データの分析
特徴量の集計(相関)
・今回のような大量のデータを集計、分析するときは「ピボットテーブル」を使う。
・ピボットテーブルは欠損値を含まないデータでのみ行える他、「カテゴリ値、順序データ、離散データ」で行うことが望ましい。
・分析としては、特徴量間の相関関係を分析する。
Pclass(順序データ)とSurvivedのピボットテーブル作成
・「train_df[["Pclass","Survived"]]」の部分は今回作るテーブルの要素をtrain_dfの列から指定している。
・「groupby(["Pclass"],as_index=False)」はPclass列でグループ化(集計)を行っている。Pclass自体は「1,2,3」の値を持つが、これはそのままcolumnとして使いたいので、index化は行わない。
・「mean()」は値Survivedの平均を算出している。
・「sort_values(by="Survived",ascending=False)」はSurvivedの平均値を降順でソートしていることを示す。
・これを「Sex」「Parch」「SibSp」についても同様に行う。
まとめ
・タイタニック号の生存率予測のモデルを作成していくにあたり、はじめに行うことがデータの取得である。
・データを取得したら、次回以降でデータの整形を行うときnのために、欠損値や重複が存在するかを確認する。
・ここまでのデータから、次回以降の方針を考える。まずは「相関」の部分から行う。相関は、モデルの教師ラベルとなる「Survived」との相関を考える。
今回は以上です。最後まで読んでいただき、ありがとうございました。