Я хочу предсказать количество деталей, возвращаемых производителю. Я хочу сделать это на уровне детали, а не на уровне дня (т. Е. Прогнозировать вероятность возврата каждой детали, а не использовать временные ряды, чтобы просто оценить, сколько деталей возвращено с течением времени). Мы говорим о крайне несбалансированном наборе данных (1-2% возвратов). У меня есть около 20 функций, которые я включаю, такие как производитель, материал, машина, производящая его и т. Д. Я использую XGBoost в качестве алгоритма классификации. Проблема в том, что в итоге меня больше интересует общий объем возвратов за день. Поэтому мне нужно было бы суммировать случаи, когда мы прогнозируем 1. Однако это число всегда является заниженным. Я попробовал другой подход, означающий, что я суммирую все вероятности, которые выводит XGBoost для каждой части (например, часть 1 возвращается с вероятностью 0,8, а часть 2 с вероятностью 0,2), чем я предсказываю, что 0,8 + 0,2 = 1 части вернулся. Могу ли я использовать этот подход?
Почему я так делаю?
Допустим, для 2 частей XGBoost каждый раз предсказывал бы вероятность как 0,4. Суммируя вероятности, я бы все же предсказал возврат 0,8 частей. Используя методы классификации, я бы предсказал 0 пакетов.
Я также пытался повысить (и уменьшить) и использовать классификацию, но у нас все еще есть недооценка.
Вот параметры, используемые для XGBoost:
xg_reg = xgb.XGBRegressor(objective ='binary:logistic', colsample_bytree = 0.3, learning_rate = 0.1,
max_depth = 5, alpha = 10, n_estimators = 500,num_boost_round=200,max_delta_step =2)
Я использую max_delta_step = 2
, так как источник данных сильно несбалансирован
Кто-нибудь может мне сказать, действителен ли мой подход? И как я могу настроить свой алгоритм, учитывая, что я использую объем в качестве метрики ошибки?