【Titanic】前処理・特徴量・ベースライン・提出
最小構成の前処理とモデルで Titanic の submission.csv を作り、初提出までを通します。
ベースラインの方針#
まずは提出まで通すことを最優先にします。欠損を簡単に埋め、 カテゴリを数値化し、扱いやすいランダムフォレストで予測します。
前処理と特徴量#
import pandas as pd
train = pd.read_csv("/kaggle/input/titanic/train.csv")
test = pd.read_csv("/kaggle/input/titanic/test.csv")
features = ["Pclass", "Sex", "Age", "SibSp", "Parch", "Fare", "Embarked"]
def preprocess(df):
df = df.copy()
df["Age"] = df["Age"].fillna(df["Age"].median())
df["Fare"] = df["Fare"].fillna(df["Fare"].median())
df["Embarked"] = df["Embarked"].fillna("S")
return df
X = pd.get_dummies(preprocess(train)[features])
X_test = pd.get_dummies(preprocess(test)[features])
X, X_test = X.align(X_test, join="left", axis=1, fill_value=0) # 列をそろえる
y = train["Survived"]注意
get_dummies を train/test で別々に作ると列がズレることがあります。align で
列をそろえるか、pd.concat してから分割しましょう。列の不一致は提出時エラーの定番原因です。
学習と submission の作成#
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=300, max_depth=5, random_state=42)
model.fit(X, y)
pred = model.predict(X_test)
submission = pd.DataFrame({"PassengerId": test["PassengerId"], "Survived": pred})
submission.to_csv("submission.csv", index=False)
submission.head()index=False を忘れると余分な列が入り、形式エラーになります。
提出する#
生成した submission.csv をコンペの Submit Predictions(Notebook なら Submit)から提出すると、
Public リーダーボードにスコアが出ます。まずスコアが出れば成功です。
理解度チェック#
次のステップ#
次は交差検証で安定したスコアを測り、特徴量を足して改善していきます。