当样本权重通过时,XGBoost 将所有内容预测为空

数据挖掘 机器学习 Python 分类 xgboost 加权数据
2022-02-15 21:48:28

我正在尝试使用观测数据建立一个 Uplift 模型。数据由对客户的集合调用组成,我的目标是预测由于处理(集合调用)而导致的增量概率。我正在使用 XGBoost 算法,并且在使用观察数据时,我需要进行逆概率加权 (IPW) 以消除由于随机测试组和对照组不可用而导致的偏差。因此,我使用逻辑回归预测了联系客户的概率,并使用概率来计算 IPW。现在,为了消除偏差,我需要在构建最终提升模型时使用 IPW 对数据的每个实例进行权衡。这就是我面临的问题,当我在训练时传递这些权重时,训练后 xgboost 将所有内容预测为 null 或 . 5 对于测试和训练数据中的每个数据点。当我不使用这些权重时,模型运行良好并给出适当的概率。下面是我正在使用的代码

X_train, X_test, Y_train, Y_test = model_selection.train_test_split(X, Y, train_size = 0.8,random_state = 42,stratify  = Y)
train_weights = X_train.sipw
test_weights = X_test.sipw
X_train.drop('sipw',axis=1,inplace=True)
X_test.drop('sipw',axis=1,inplace=True)
xgbmat_train = xgb.DMatrix(X_train,Y_train,missing=np.nan,weight=train_weights.values)
xgbmat_test = xgb.DMatrix(X_test,Y_test,missing=np.nan,weight=test_weights.values)
initial_params = {'learning_rate':0.1,'n_estimators':1000,'objective':'binary:logistic','booster':'gbtree','reg_alpha':0,
                'reg_lambda':1,'max_depth':5,'min_child_weight':1,'gamma':0,'subsample':0.8,'colsample_bytree':0.8,
                'scale_pos_weight':1,'missing':np.nan,'seed':27,'eval_metric':'aucpr','n_jobs':8,'silent':True}
xgb_1 = xgb.train(initial_params,xgbmat_train)
prob = xgb_1.predict(xgbmat_test)

我正在疯狂地思考为什么会发生这种情况,因为我之前使用与上面相同的代码(将 IPW 作为权重传递)构建了一个模型(针对不同的国家),它给了我完美的结果。虽然对于这个特定的数据集,我无法弄清楚为什么模型会返回这样的结果。任何帮助将不胜感激。

0个回答
没有发现任何回复~