前回はそもそもデータの加工作業では何をするのかをまとめていました。
手順として下記のような作業が発生すると書きました。
- 欠損値処理 (missing value processing)
- 外れ値処理 (outlier processing)
- 特徴量エンジニアリング (Feature Engineering)
- 変数選択 (Feature Selection)
- アンバランスデータの処理 (imbalaced data processing)
そこで、タイタニックのデータセットでは具体的にどういうことをしたらいいか考えてみました。
下記のKaggleでKagglerが公開しているチュートリアルを参考にしました。
① 欠損値処理 (missing value processing)
まずは、2レコードしか欠損していないEmbarkedカラムから欠損値処理をしたいと思います。
こちらは最頻値の値を代入するか、簡単なクロス集計をしてEmbarkedカラムの値を推定したいと思います。
※ チュートリアルを見ると実際に欠損レコードの対象者をGoogle検索してどこから乗船したのか分かるようです。
次に、20%ほど欠損があるAgeカラムです。
基礎俯瞰をした時にAgeは生存率の関係がありそうなファクターだと感じたので、補完してあげたいと思います。
クロス集計でもよいですが、せっかくなので目的変数をAgeにした回帰モデルを作成して年齢を推定させてあげようと思います。
最後に77%欠損があるCabinカラムです。
客室と生存は間違いなく関係ありそうなので、悩みどころです。
個人的には欠損値が多すぎるのでカラムごと除外してしまってもいいのかなと思っています。
参考までにチュートリアルによると、Cabinの先頭のアルファベットが客室のおおよその場所を示しており、Pclassによってどこからどの場所か推定できるようです。
② 外れ値処理 (outlier processing)
まずは、外れ値があるかどうか確認したいと思います。
数値データに対して実施し、データを現状ママか削除か変換かを判断したいと思います。
基礎俯瞰のときに、Fareカラムが裾の長い分布になっていたので、外れ値があるのかもしれません。
(一緒に乗船している人数分の合算になっているかも知れないので、確認は必要。)
外れ値かどうかはせっかくなのでGrubbs'TestやTietjen-Moore Testなどの検定を試したいと思います。
③ 特徴量エンジニアリング (Feature Engineering)
チュートリアルを参考にしつつ、下記変数を追加で作成したいと思います。
- 一緒に乗船している家族の人数を作成。さらに1人での乗船かどうかのフラグも作成
- 1人での乗船でもTicketは同じ番号だと知人と一緒に乗船しているようですので、Ticket番号の重複数をカウントした変数を作成
- Nameから敬称を抽出が可能なようです (Mr,Mrs,Dr.など)。特定の敬称は生存率が高いようです。
- ダミー変数の作成。カテゴリ型の変数を各区分ごとに1/0のフラグにした変数を作成。0/1に変換することによって、機械学習に投入することが可能になります。
④ 変数選択 (Feature Selection)
相関係数とVIFの値を算出し、多重共線性の確認をしたいと思います。
その上でどちらかの変数を採用するなど決めたいと思います。
⑤ アンバランスデータの処理 (imbalaced data processing)
今回はバランスデータになっているようなのでやりません。
まとめ
タイタニックのデータセットのデータ加工の計画をたてました。
仮説検定も時間があれば試してみたいと思います。