У меня есть набор данных о возвратах акций, где Y-метка - это направление изменения цены (= 2, если тик вверх, = 1, если тик вниз, и = 0, если нет движения. Некоторые из функций, X, включают в себя отстающий значения меток (т.е. изменение направления цены предыдущего дня).
Я пытаюсь запустить модель классификации XGBoost, однако мои данные сильно разбалансированы. Большинство значений метки Y = 0, что означает, что цена акций не изменилась.
Как я могу включить этот дисбаланс в проблему классификации XGBoost с несколькими метками?
Мой код следующий:
X = df[["ret_D_lag_1", "ret_D_lag_2", "ret_D_lag_3"]]
y = df["ret_D_t1"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
# use DMatrix for xgboost
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# set xgboost params
param = {
'max_depth': 3, # the maximum depth of each tree
'eta': 0.3, # the training step for each iteration
'silent': 1, # logging mode - quiet
'objective': 'multi:softprob', # error evaluation for multiclass training
'num_class': 3} # the number of classes that exist in this datset
num_round = 20 # the number of training iterations
# Train the model
bst = xgb.train(param, dtrain, num_round)
# Predict and choose highest probability for each label
preds = bst.predict(dtest)
best_preds = np.asarray([np.argmax(line) for line in preds])