Я использую пакет mlr и пытаюсь построить модель XGBoost в R studio на следующем наборе данных:
return age diff_in_days item_odds picky_users
0 50.75877 5 -14 -3
0 50.75877 NA -42 -3
1 49.74507 5 1 3
0 49.74507 5 16 3
1 49.74507 5 -31 3
1 49.74507 5 -27 3
0 49.74507 5 -30 3
Я пытаюсь предсказать, вернет ли клиент элемент или нет на остальных 4 переменных. Моя модель работает хорошо без переобучения, пока я не включу переменную picky_users.
picky_users - это специально разработанная функция, которая подсчитывает, сколько возвратов против невозвращений для идентификатора пользователя, так что вы могли выяснить, что моя модель сильно перегоняется при тестировании на новых данных. Однако я не хочу полностью исключать переменную, потому что думаю, что она может улучшить мои прогнозы.
Моя проблема в том, что XGBoost придает слишком большой вес этой переменной, поэтому я хотел бы знать, есть ли способ уменьшить это вручную, настраивая модель. Вот мой код:
>task <- makeClassifTask(data = train, target = "return", positive = "1")
>xgb.learner <- makeLearner("classif.xgboost", predict.type = "prob",
par.vals = list("verbose" = 0,
"early_stopping_rounds"=10))
xgb.parms <- makeParamSet(
makeNumericParam("eta", lower = 0.01, upper = 0.5),
makeNumericParam("lambda", lower = -1, upper = 20),
makeNumericParam("lambda_bias", lower = 0, upper = 200),
makeNumericParam("alpha", lower = -1, upper = 10),
makeIntegerParam("nrounds", lower=80, upper=700),
makeIntegerParam("max_depth", lower= 1, upper= 6),
makeNumericParam("gamma", lower = 0, upper = 10),
makeNumericParam("colsample_bytree", lower=0, upper = 1),
makeDiscreteParam("min_child_weight", values = 1),
makeNumericParam("subsample", lower=0, upper=1))
>tuneControl <- makeTuneControlRandom(maxit=100, tune.threshold = FALSE)
>rdesc <- makeResampleDesc(method = "RepCV", rep = 2, folds=3, stratify = TRUE)
>xgb.tuning <- tuneParams(xgb.learner, task = task, resampling = rdesc,
par.set = xgb.parms, control = tuneControl, measures = mlr::auc)
Я участвую в частном конкурсе Kaggle, поэтому не знаю, содержат ли новые данные некоторые идентичные идентификаторы пользователей. Существует ли вероятность того, что моя модель не должна переопределяться и что прогнозы не будут выполняться, потому что новые данные имеют совершенно разные идентификаторы пользователей?
Я не эксперт, поэтому любые советы по улучшению моего кода и не отвечаю на Вопрос напрямую также приветствуется.
Спасибо