0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

タイタニック号生存者予測をやってみた

0
Posted at

0.はじめに

 みなさんこんにちは!ゆめおです!(ネーミングセンスがないな...と日々思っているので、良い案があれば名前は変える予定...)

 今回はKaggleのTitanic問題における、乗客の生死をロジスティック回帰で分類することを試みました。

余談:Kaggleで復習するススメ

 現在、データサイエンスを学ぶ大学院に通っており、統計の講義を受講していますが、テストがないので知識が定着せず、生成AIにテストを作成してもらおうかと思っていました。

 あるときKaggleで機械学習モデルを作成することが、統計の復習になるのではないかと思い、コンペにいくつか出場しようと思っています。実務でデータサイエンスに携われない私のような人間には「統計の学習」と「Kaggleコンペ」を回すことが有効なのではないかと思います。

1.データセットについて

 以下のデータセットの説明は、恐縮ですが「@kaita_kakihara」様から引用させていただいたものです🙇‍♂️

カラム名 説明
PassengerId 乗客の一意の識別番号
Survived 乗客が生存したかどうか(1: 生存, 0: 死亡)
Pclass 乗客の社会経済的地位を示すクラス(1st, 2nd, 3rd)
Name 乗客の名前
Sex 乗客の性別
Age 乗客の年齢
SibSp タイタニック号に同乗している兄弟または配偶者の数
Parch タイタニック号に同乗している親または子供の数
Ticket チケット番号
Fare 乗船料金
Cabin 部屋番号
Embarked 乗船した港(C: Cherbourg, Q: Queenstown, S: Southampton)

 生存者の割合が極端に少ない場合、モデルが全て死者に分類するといった問題が発生するので、訓練データにおける生存者確率を求めましたが、約39%で極端な偏りはなかったです。

 削除する説明変数は3つあります。1つ目はPassengerIdで、乗客の識別番号(ID)で乗客の生死に関係ないため、削除します。2つ目はNameで、家族関係を示すものとなりうる気がするのですが、疎行列を作ってまで分析しようという気概は流石にないので、今回は削除します。3つ目はTicketです。

 その他の説明変数について、項番2〜4で対応を検討していきます。

 項番2では、AgeとCabin、Embarkedには欠損値があるため、それぞれどのように対応するのか検討します。

 項番3では、L1正則化の最適なパラメータの値をクロスバリデーションを行い、求めることにより、過学習を起こさないようにモデリングします。

2.欠損値処理

 AgeとCabin、Embarkedにて欠損値が見つかったので、それぞれについて対処していきます。

 欠損値処理では、欠損値がMCAR(Missing Completely At Random)、MAR(Missing At Random)、MNAR(Missing Not At Random)のどれに分類されるかで対応が変わります。それぞれ以下のような特徴があります。

MCAR 欠損値が完全にランダムなケース。 削除法
MAR 欠損であるかどうかが、そのデータの値の大小には影響を受けないが、その他の変数の値の大小に影響を受けるケース。 多重代入法
MNAR 欠損であるかどうかが、そのデータの値の大小に影響を受けるケース。 感情分析(?)

 Ageの欠損は、年齢の大小に影響を受けていると考えずらく、乗員の生死に影響を受けていると考えられます。これは、「そのデータ自身に影響を受けないが、その他の変数の大小に影響を受けるケース」なので、MARだと考えられます。ここでは多重代入法を用いることとし、重回帰分析で欠損値を補完します。

 Cabinの欠損については、「Cabinの記録があるのか、ないのか」自体が重要な情報であると思われますので、データが入力されている場合は「1」で置き換え、データが入力されていない(欠損)の場合は「0」で置き換えます。

 Embarkedは検証用データにおいて、1つも存在せず、訓練データにも欠損値は2つしか含まれなかったので、訓練データの欠損値は行ごと削除します。

3.L1正則化

 過学習を防ぐため、モデルにL1正則化を導入します。ロジスティック回帰ではパラメータC(正則化項λの逆数)が用意されており、大きくするにつれて正則化が強くなります。ここでは、クロスバリデーションで最適なパラメーターλの値を求めます。10分割のクロスバリデーションを行った結果、100前後でモデルの精度が一定となったため、「C=100」としてロジスティック回帰を実施しました。

4.さいごに

 上記の工夫を凝らしたモデルによる予測を提出したのですが、精度は76.315%でした。想像より低く、改善が必要だと思いました...

 原因として考えられることについて書いてみます。モデルについては、ロジスティック回帰ではなく、結果だけを求めるならディープラーニングでもよかったのではないかと思いました。また、最初に変数をいくつか削除していますが、削除せずに利用すべきだと思います(これに関しては時間をかける気概がないので、やる気のある方はぜひ...)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?