在训练模型期间,我的数据集中有一个连续(高基数离散)变量 'numInteractionPoints' - 我将此功能分箱以避免过度使用,第一个顶部条形图来自训练,第二个条形图来自测试此分箱功能。两个数据集的分布与以下条形图相同
这就是我为此功能创建 bin 的方式
我使用基于视觉分析的简单 bin 方法将变量“numInteractionPoints”转换为 bin
bins = [0, 6, 12, np.inf]
names = ['0-6', '6-12','12+']
train_data['numInteractionPointsRange'] = pd.cut(train_data['numInteractionPoints'], bins, labels=names)
train_data['numInteractionPointsRange']=train_data['numInteractionPointsRange'].astype('object')
在这两种情况下,当我包含不带 bin 的原始变量 numInteractionPoints 并且使用上述定义的存储桶时,模型的总体 F1 分数在测试数据上从 0.47 下降到 0.33,对于 1 类。在验证数据集上它给出 0.47,而在测试中它给出 0.33 或没有垃圾箱
知道我缺少什么吗?这种行为在算法 Xgboost 和 catboost 中都有,目标类高度不平衡,我正在控制它 Xgboost 参数 scale_pos_weight。为什么由于定义的存储桶而导致模型过拟合,正如您在上面看到的两个数据集的条形图分布相同

