kaggleで予測モデルを構築してみた (3) - データの構成を確認する
ということで,前回に引き続きタイタニックのデータを使って分析をしていきましょう.といっても今回は判別手法から戻って,データの前処理のお話です.
データの前処理とは
今回のデータはところどころに欠損があったり,推測の値が入っていたりして,機械学習にかけるにはわりと"汚い"データだといえるでしょう.そんなときに,前回のように適当な補完をしていたのでは,得られるはずの精度も得られなくなってしまいます.勝負は機械学習のパラメタチューニングをする前の,データ取得とデータ加工にかかっていることが多いです.
今回のデータは与えられたものであるため,データの取得部をがんばることはできません.なので,データの前処理をしていかに元の情報を損なわないように解析にかけてあげるか,というのがポイントになってきます.
まずはデータを眺める
ということで,まずはデータをじっくりと眺めてあげます.今回データセットに含まれている変数は以下の通り.
変数名 | 値 | 説明 |
---|---|---|
survival | 0 = No; 1 = Yes | 生存したか否か.予測変数 |
pclass | 1 = 1st; 2 = 2nd; 3 = 3rd | 客室のグレード |
name | 文字列 | 乗客名 |
sex | male = 男性; female = 女性 | 性別 |
age | 0以上の数字 | 年齢.小数点以下の値があるものは推測値.欠損あり |
sibsp | 0以上の数字 | 乗船していた兄弟または配偶者の数 |
parch | 0以上の数字 | 乗船していた親または子どもの数 |
ticket | 英数字 | チケット番号 |
fare | 0以上の数字 | 運賃 |
cabin | 文字列 | 客室番号.欠損多数 |
embarked | C = Cherbourg; Q = Queenstown; S = Southampton | 乗船した港 |
それではこれらを1つずつみていきましょう.
survival
まぁこれは特に何もすることはないですね.予測変数ですし.欠損もないのでそのままでいいでしょう.
pclass
これも客室のグレードということで,そのまま使ってよさそうです.
name
これはどちらかというと使う意味のない変数であると思われます.もしかしたら,高貴な名字とかそういうのがあるのかもしれないですが,残念ながらそういう知識はないためよくわかりません.常識的に考えて,この名字の人が助かる,というのはちょっと考えにくいですからね.不要な変数を入れる意味はないので,これは外す変数となります.
sex
そのまま使います.
age
これが難題ですね.欠損と推定値の両方が存在するという,やや面倒な変数です.しかし史実によると子ども→女性→老人野順で先にボートに乗せたといわれているので,年齢は大事な要素になると考えられます.そしておそらくは,推定値よりも欠損値のほうが重要になるわけです.年齢の推定というのは,おそらく写真や資料からの推定値であることを考えると,青年を老人と間違えたり,中年を赤子と間違えたりということはまず起こりづらいでしょう.なので,この年齢をどう推定するかがモデルの精度に大きく影響する可能性が高いです.
sibsp
これが船の沈没時にボートに乗るかに影響したとは,さすがに考えづらいです.むしろこれは,ageを推定するのに使うのが有効だと思われます.
parch
これも同様ですね.子どもはこの値が0になりやすく,逆にお年寄りは1以上の値を取りやすくなるのではないでしょうか.
ticket
これは値をみていても,正直法則がよくわからないですね.もう少し史実を詳しく調べないと,現時点で意味があるかどうかは判断しづらいです.後で再検討にします.
fare
これは単純に値が高いからいいというわけではないでしょう.運賃は一般的に,航行距離と部屋のグレードの2要因で決まると考えられるので,そのあたりの資料にあたらないと,これだけで判断はしづらいですね.ただ資料が入手できれば,pclassで取得した,3段階の部屋のグレードよりも細かいスコアが取得可能になると思われます.
cabin
これは大半が欠損なのですが,1等船室の大半には値があります.タイタニックの部屋割りと合わせて詳しく確認する必要がありそうです.
embarked
これが単体でどの程度意味を持つのかは不明ですが,他の変数を推定するのに役に立つかもしれません.
というわけで,ざっと全部の変数をみてきましたが,かなりいろいろ調べたり推定したりしないといけないことがありますね.そんなわけで,そのあたりの仕込みにしばらく時間がかかるので,続きは次回に.