🚢 Kaggleに初挑戦!タイタニック号の生存者予測
こんにちは!今回は私が 初めてKaggleに挑戦した備忘録をまとめました。Kaggleの定番コンペ「Titanic: Machine Learning from Disaster」に取り組み、 機械学習の基本的な流れ を学ぶことができました。
📝 目次
-
本記事の概要
-
用語解説(初心者向け)
-
機械学習の実装ステップ
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:データの収集・準備
👀 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)/死亡(0)の分類
-
解釈しやすい:特徴量の影響が係数でわかる
-
計算コストが低い:処理が速くて楽!
-
実装が簡単:初心者向け
-
過学習しづらい:モデルがシンプルで汎化性能が高い
🏁 まとめと感想
今回、KaggleのTitanicコンペに取り組んでみて、
-
データの前処理がとにかく大事!
-
可視化で理解が深まる
-
モデルはシンプルで十分学びがある
と強く感じました。これからランクアップを目指して、他のアルゴリズムやパラメータ調整にも挑戦していきたいです🔥
📌 次のステップ
-
ランダムフォレストなどの他モデルにも挑戦してみる
-
スコア向上を目指して特徴量エンジニアリングを極める
-
Kaggleの他の初心者向けコンペにもチャレンジ!
読んでくださってありがとうございました!
コメント・フィードバックもお待ちしています✨
修正点や追加のリクエストがあれば、お気軽にどうぞ!