【问题标题】:Drastically different feature importance between very same data and very similar model for catboost非常相同的数据和非常相似的 catboost 模型之间的特征重要性截然不同
【发布时间】:2020-08-30 05:47:03
【问题描述】:

让我先解释一下我正在使用的数据集。

我有三套。

  1. 形状为 (1277, 927) 的火车,目标出现的时间约为 12%
  2. 形状为 (174, 927) 的评估集,目标出现的时间约为 11.5%
  3. 保持形状为 (414, 927) 的集合,目标出现的时间约为 10%

这个集合也是使用时间片构建的。训练集是最旧的数据。支持集合是最新数据。并且 Eval 集在中间集。

现在我正在构建两个模型。

模型1:

# Initialize CatBoostClassifier
model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations=300,
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',
)

## Fitting catboost model
model.fit(
    train_set.values, Y_train.values,
    cat_features=categorical_features_indices,
    eval_set=(test_set.values, Y_test)
    # logging_level='Verbose'  # you can uncomment this for text output
)

预测保留集。

模型2:

model = CatBoostClassifier(
    # custom_loss=['Accuracy'],
    depth=9,
    random_seed=42,
    l2_leaf_reg=1,
    # has_time= True,
    iterations= 'bestIteration from model1',
    learning_rate=0.05,
    loss_function='Logloss',
    logging_level='Verbose',

)

## Fitting catboost model
model.fit(
    train.values, Y.values,
    cat_features=categorical_features_indices,
    # logging_level='Verbose'  # you can uncomment this for text output
)

除了迭代之外,两个模型都是相同的。第一个模型修复了 300 轮,但它会将模型收缩到最佳迭代。第二个模型使用模型 1 中的最佳迭代。

但是,当我比较特征重要性时。看起来差别很大。

  Feature  Score_m1  Score_m2     delta
0      x0  3.612309  2.013193 -1.399116
1      x1  3.390630  3.121273 -0.269357
2      x2  2.762750  1.822564 -0.940186
3      x3  2.553052       NaN       NaN
4      x4  2.400786  0.329625 -2.071161

如您所见,在第一个模型中位于 top3 的特性 x3 在第二个模型中下降。不仅如此,给定特征的模型之间的权重也有很大的变化。模型 1 中存在的大约 60 个特征在模型 2 中不存在。模型 2 中存在的大约 60 个特征在模型 1 中不存在。 delta 是 Score_m1 和 Score_m2 之间的差异。我已经看到模型变化在哪里得分不是那么剧烈。当我使用模型 1 或模型 2 时,AUC 和 LogLoss 并没有太大变化。

现在我有以下关于这种情况的问题。

  1. 此模型是否由于样本数量少和特征数量多而不稳定。如果是这种情况,如何检查?

  2. 此模型中是否存在功能只是没有提供有关模型结果的太多信息,并且存在随机变化,它正在创建分裂。如果是这种情况如何检查这种情况?

  3. 这个 catboost 是适合这种情况的模型吗?

任何有关此问题的帮助将不胜感激

【问题讨论】:

    标签: python machine-learning catboost


    【解决方案1】:

    是的。一般来说,树木有些不稳定。如果你去掉最不重要的特征,你会得到一个非常不同的模型。

    拥有更多数据可以减少这种趋势。

    拥有更多特征会增加这种趋势。

    树算法本质上是随机的,所以结果会有所不同。

    要尝试的事情:

    1. 多次运行模型,但使用不同的随机种子。使用结果来确定哪个特征似乎最不重要。 (你有多少功能?)

    2. 尝试平衡您的训练集。这可能需要您对罕见的情况进行上采样。

    3. 获取更多数据。也许您必须将您的训练集和测试集结合起来,并使用holdout 作为测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2014-06-23
      • 2019-07-18
      • 2012-02-22
      • 2014-06-20
      相关资源
      最近更新 更多