Comments 2
Можно попробовать вместо Age использовать AgeBin - возраст в бинах.
В Titanic влияние возраста скорее пороговое (дети, взрослые, пожилые), а не линейное, плюс много пропусков. Бины часто дают более стабильный результат для RandomForest и меньше чувствительны к способу заполнения возраста.
У меня она выглядит вот так:
def add_age_bin(
train: pd.DataFrame,
test: pd.DataFrame,
) -> Tuple[pd.DataFrame, pd.DataFrame]:
"""
Заполнить Age и добавить категориальный признак AgeBin.
Бины: 0-12, 12-20, 20-40, 40-60, 60-100.
"""
train = train.copy()
test = test.copy()
age_median = train["Age"].median()
train["Age"] = train["Age"].fillna(age_median)
test["Age"] = test["Age"].fillna(age_median)
age_bins = [0, 12, 20, 40, 60, 100]
age_labels = ["child", "teen", "adult", "mature", "senior"]
train["AgeBin"] = pd.cut(
train["Age"], bins=age_bins, labels=age_labels, include_lowest=True
)
test["AgeBin"] = pd.cut(
test["Age"], bins=age_bins, labels=age_labels, include_lowest=True
)
return train, testSign up to leave a comment.
Титаник глазами новичка в 2026