🚢 泰坦尼克号生存预测竞赛指南

赛事详情参考:https://www.kaggle.com/competitions/titanic


📜 背景

1912年4月15日,号称“永不沉没”的皇家邮轮 泰坦尼克号(RMS Titanic) 在其首次航行中撞上冰山后沉没。船上共有 2224 名乘客和船员,但因救生艇数量严重不足,最终导致 1502 人遇难

虽然幸存有一定运气成分,但历史数据表明:某些人群的生存概率明显更高——例如女性、儿童、头等舱乘客等。

本竞赛的目标正是通过机器学习,回答一个核心问题:

==“哪些类型的人更有可能在泰坦尼克号沉没中幸存下来?”==


🎯 任务

你需要利用提供的乘客信息(如姓名、年龄、性别、社会经济阶层等),构建一个预测模型,判断测试集中每位乘客是否:

这是一个典型的 二分类(Binary Classification) 问题,非常适合机器学习初学者入门。


📁 数据集说明

你将获得两个结构相似的 CSV 文件:

1. train.csv(训练集)

2. test.csv(测试集)


🧾 字段说明

字段名 含义
PassengerId 乘客唯一ID
Survived 是否生还(0=否,1=是)—仅训练集有
Pclass 船票等级(1=头等舱,2=二等舱,3=三等舱)
Name 姓名
Sex 性别
Age 年龄(部分缺失)
SibSp 船上兄弟姐妹/配偶数量
Parch 船上父母/子女数量
Ticket 船票编号
Fare 票价
Cabin 客舱号(大量缺失)
Embarked 登船港口(C=瑟堡, Q=皇后镇, S=南安普顿)

📤 提交结果说明

你需要提交一个 CSV 文件,格式如下:

示例:

PassengerId,Survived
892,0
893,1
894,0
...
1309,1

⚠️ 多余列或行会导致提交失败!


🔧 主要工作流程

一、特征工程

  1. 数据分析:探索缺失值、分布、相关性
  2. 特征选取:选择对预测有帮助的字段
  3. 特征加工

二、模型工程

  1. 模型选型:逻辑回归、随机森林、XGBoost 等
  2. 训练模型:使用训练集拟合
  3. 验证评估:交叉验证、准确率(Accuracy)

✅ 代码

# 导入必要库
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

# 1. 加载数据
train_data = pd.read_csv("/kaggle/input/titanic/train.csv")
test_data = pd.read_csv("/kaggle/input/titanic/test.csv")

# 2. 特征工程:处理缺失值 & 构造特征
# 填充 Age 缺失值(用中位数)
train_data["Age"].fillna(train_data["Age"].median(), inplace=True)
test_data["Age"].fillna(test_data["Age"].median(), inplace=True)

# 填充 Embarked(用众数)
train_data["Embarked"].fillna(train_data["Embarked"].mode()[0], inplace=True)
test_data["Embarked"].fillna(test_data["Embarked"].mode()[0], inplace=True)

# 填充 Fare(测试集中可能缺失)
test_data["Fare"].fillna(test_data["Fare"].median(), inplace=True)

# 构造新特征:家庭规模
train_data["FamilySize"] = train_data["SibSp"] + train_data["Parch"] + 1
test_data["FamilySize"] = test_data["SibSp"] + test_data["Parch"] + 1

# 3. 选择特征
features = ["Pclass", "Sex", "Age", "Fare", "Embarked", "FamilySize"]

# 4. 转换分类变量为哑变量(One-Hot Encoding)
X_train = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])

# 确保训练集和测试集列一致(避免 Embarked_Q 等缺失)
X_train, X_test = X_train.align(X_test, join='left', axis=1)

# 5. 获取标签
y_train = train_data["Survived"]

# 6. 训练模型(随机森林)
model = RandomForestClassifier(
    n_estimators=100,
    max_depth=5,
    random_state=42
)

# 可选:交叉验证评估
scores = cross_val_score(model, X_train, y_train, cv=5, scoring='accuracy')
print(f"平均交叉验证准确率: {scores.mean():.4f} ± {scores.std():.4f}")

# 7. 拟合并预测
model.fit(X_train, y_train)
predictions = model.predict(X_test)

# 8. 生成提交文件
output = pd.DataFrame({
    "PassengerId": test_data["PassengerId"],
    "Survived": predictions
})

output.to_csv("submission.csv", index=False)
print("✅ 提交文件已保存为 submission.csv")

📌 使用说明

  1. 在 Kaggle 上创建新 Notebook(Python 类型)
  2. 将上述代码粘贴到第一个 cell 中
  3. 点击 “Run All” 运行
  4. 下载 submission.csv 并提交,或直接点击 “Submit” 按钮

💡 初始分数通常在 0.77~0.80 之间。后续可通过:


📘 延伸建议


祝你在 Kaggle 的第一个竞赛中取得好成绩!🎉 如有需要,我可继续提供特征优化、模型调参或可视化分析的代码。