如何在评分模型中稳健地选择变量

更多变量并不能形成更好的评分模型。稳定变量可以。以下是找到它们的方法。《如何在评分模型中稳健地选择变量》一文首先出现在《走向数据科学》上。

来源:走向数据科学

失败的原因有一个:错误的变量选择。您选择适用于训练数据的变量。他们在新数据上崩溃了。该模型在开发过程中看起来很棒,但在生产过程中却出现了问题。

有更好的方法。本文向您展示如何选择稳定、可解释且稳健的变量,无论您如何分割数据。

核心理念:稳定性重于性能

如果变量对数据的每个子集(而不仅仅是整个数据集)都很重要,则该变量是稳健的。

为了检查这一点,我们使用分层交叉验证将训练数据分为 4 部分。我们按默认变量和年份进行分层,以确保每次折叠都代表全部人口。

从 sklearn.model_selection 导入 StratifiedKFold。

skf = StratifiedKFold(n_splits=4, shuffle=True, random_state=42)

train_impulated["折叠"] = -1

对于折叠,(_, test_idx) in enumerate(skf.split(train_impulated, train_impulated["def_year"])):

train_impated.loc[test_idx, "fold"] = 折叠

然后我们构建四对(训练、测试)。每对都使用三折进行训练,一次折叠进行测试。我们仅将每个选择规则应用于训练集,而不是测试集。这可以防止数据泄露。

折叠 = build_and_save_folds(train_impulated, Fold_col="fold", save_dir="folds/")

  • 仅当变量通过所有四次折叠的条件时,它才能在选择中幸存。一个弱折叠就足以消除它。
  • 数据集
  • 我们使用 Kaggle 的信用评分数据集。它包含向个人借款人发放的 32,581 笔贷款。

  • 这些贷款涵盖医疗、个人、教育和专业需求以及债务合并。贷款金额从 500 美元到 35,000 美元不等。
  • 数据集有两种类型的变量:
  • 合同特征:贷款金额、利率、贷款用途、信用等级、起始时间
  • 借款人特征:年龄、收入、经验年限、住房状况
  • 我们确定了 7 个连续变量:
  • 个人收入
  • person_age
  • person_emp_length
  • 贷款金额

    贷款利率

    贷款百分比收入cb_person_cred_hist_length贷款意图[1][2][3]