プログラミングを頑張る土木系専攻大学院生のブログ

主にプログラミングについて開発備忘録的な形で投稿しています。

Kaggleに初挑戦!タイタニック号の生存者予測

🚢 Kaggleに初挑戦!タイタニック号の生存者予測

こんにちは!今回は私が 初めてKaggleに挑戦した備忘録をまとめました。Kaggleの定番コンペ「Titanic: Machine Learning from Disaster」に取り組み、 機械学習の基本的な流れ を学ぶことができました。


📝 目次

  1. 本記事の概要

  2. 用語解説(初心者向け)

  3. 機械学習の実装ステップ


1. 本記事の概要

  • 使用コンペ:Kaggle「Titanic - Machine Learning from Disaster」

  • 目的:乗客の情報から生存者を予測するモデルを作成する

  • 使用言語:Python

  • 使用ライブラリ:Pandas、Seaborn、scikit-learnなど

  • アプローチ:ロジスティック回帰モデルを使ったベースライン作成


2. 🧠 用語解説(初心者向け)

📦 データセットの種類

  • trainデータ:モデルを学習させるデータ

  • validationデータ:学習中に使う検証用データ(ハイパーパラメータ調整など)

  • testデータ:モデルの最終的な性能を評価するためのデータ(学習では使わない!)

✅ testデータは「最後の評価専用」。学習に使うと過学習になる危険あり!


🏷️ カテゴリ変数とエンコーディング

機械学習モデルは数値しか扱えません。
そのため、**性別や港などの文字情報(カテゴリ変数)**を数値に変換する必要があります。

代表的な手法は以下の2つ👇

🔹 ワンホットエンコーディング(One-Hot Encoding)

Sex female male
male 0 1
female 1 0

🔸 ラベルエンコーディング(Label Encoding)

Sex 数値
male 0
female 1

🔗 参考:カテゴリ変数のエンコーディング


3. ⚙️ 機械学習の実装ステップ

ここからはTitanicのデータを使って、実際に予測モデルを作成した流れを紹介します!


✅ STEP1:ビジネスの理解・課題の定義

目的:乗客の情報から「生き残ったか(Survived)」を予測するモデルを作成する。


📊 STEP2:データの収集・準備

  • Kaggleからtrain.csvとtest.csvをダウンロード

  • Pandasで読み込み&前処理


👀 STEP3:データの確認・可視化

🔍 基本情報のチェック

df.info()
df.describe()
df.isnull().sum()

📌 欠損値の可視化

df.isnull().sum()

欠損値の確認


📈 性別の分布を可視化

sex_counts = combined_df.groupby("Sex")["PassengerId"].count()
sns.countplot(data=combined_df, x="Sex")
plt.show()

🛠️ STEP4:データの加工・前処理

🔹 特徴量の選定

使用した特徴量は以下の通り👇

  • Pclass(チケットのクラス)

  • Sex(性別)

  • Age(年齢)

  • Embarked(乗船した港)


🔸 欠損値の補完

def fill_missing_values(df):
    df_filled = df.copy()
    df_filled['Age'].fillna(df['Age'].median(), inplace=True)
    df_filled['Embarked'].fillna(df['Embarked'].mode()[0], inplace=True)
    return df_filled

🔁 カテゴリ変数のエンコーディング

def encode_categorical_features(df):
    ohe_embarked = pd.get_dummies(df['Embarked'], prefix='Embarked')
    df_encoded = df.drop(columns=['Embarked'])
    df_encoded = pd.concat([df_encoded, ohe_embarked], axis=1)
    df_encoded['Sex'] = pd.get_dummies(df['Sex'], drop_first=True)
    return df_encoded

✂️ train/testデータの分離

train_data = df[df['Survived'].notnull()]
test_data = df[df['Survived'].isnull()].drop(columns=['Survived'])

📐 説明変数と目的変数の分割

X = train_data.drop(columns=["Survived", "PassengerId"])
y = train_data["Survived"]

🤖 STEP5:モデルの作成(ロジスティック回帰)

from sklearn.linear_model import LogisticRegression
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

📊 精度評価

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
print("Accuracy:", accuracy_score(y_train, model.predict(X_train)))

🤔 なぜロジスティック回帰を使ったの?

  1. 二値分類に最適:生存(1)/死亡(0)の分類

  2. 解釈しやすい:特徴量の影響が係数でわかる

  3. 計算コストが低い:処理が速くて楽!

  4. 実装が簡単:初心者向け

  5. 過学習しづらい:モデルがシンプルで汎化性能が高い


🏁 まとめと感想

今回、KaggleのTitanicコンペに取り組んでみて、

  • データの前処理がとにかく大事!

  • 可視化で理解が深まる

  • モデルはシンプルで十分学びがある

と強く感じました。これからランクアップを目指して、他のアルゴリズムやパラメータ調整にも挑戦していきたいです🔥


📌 次のステップ

  • ランダムフォレストなどの他モデルにも挑戦してみる

  • スコア向上を目指して特徴量エンジニアリングを極める

  • Kaggleの他の初心者向けコンペにもチャレンジ!


読んでくださってありがとうございました!
コメント・フィードバックもお待ちしています✨


修正点や追加のリクエストがあれば、お気軽にどうぞ!