Pull to refresh

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, test


Звучит интересно, как-нибудь попробую!

Sign up to leave a comment.

Articles