Я работаю над регрессионной моделью с использованием XGBoost, пытаясь предсказать, сколько долларов потратят клиенты за год. У меня ~ 6000 выборок (клиентов), ~ 200 функций, связанных с этими клиентами, и сумма, которую они потратили за год (моя переменная результата). Я разделил свои данные на 75% / 25% разделение поезд / тест и запустил несколько моделей XGBoost с разной степенью успеха ...
В моей исходной модели, похоже, есть некоторая перегрузка без настройки (по умолчанию параметров), которые имели следующие значения R 2 :
• Обучение R 2 - 0,593
• Тест R 2 - 0,098
Затем я запустил поиск по сетке следующих гиперпараметров, что не улучшило модель значительно.
param_grid = {'learning_rate' : [0.05, 0.10, 0.20],
'min_child_weight': [1, 5, 10],
'gamma': [0.5, 1, 5],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0],
'max_depth': [3, 4, 5]
}
grid = GridSearchCV(xgb.XGBRegressor(silent=True)
,param_grid
,n_jobs=1
,cv=3
,scoring='r2'
,verbose=1
,refit=True)
• Обучение R 2 - 0,418
• Тест R 2 - 0,093
Я также вручную настроил гиперпараметры и был смог получить следующие результаты, но это все.
• Тренировка R 2 - 0,573
• Тест R 2 - 0,148
Эти 6000 клиенты представляют всех клиентов за год, поэтому я не могу ввести дополнительные образцы, чтобы улучшить размер выборки.
Мой вопрос: Есть ли предложения по настройке других гиперпараметров или стратегий? Мне следует постараться сделать модель более согласованной при разделении поезд / тест и уменьшить перегрузку? Возможно, что слишком большая разница в моей переменной результата (потраченные доллары) не позволяет создать согласованную модель, но я хочу попытаться исчерпать все варианты.