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」との相関を考える。
今回は以上です。最後まで読んでいただき、ありがとうございました。