Можно ли предсказать количество деталей, возвращаемых производителю, используя сумму возможностей с помощью XGBoost (прогнозирование объема) - PullRequest
0 голосов
/ 28 мая 2019

Я хочу предсказать количество деталей, возвращаемых производителю. Я хочу сделать это на уровне детали, а не на уровне дня (т. Е. Прогнозировать вероятность возврата каждой детали, а не использовать временные ряды, чтобы просто оценить, сколько деталей возвращено с течением времени). Мы говорим о крайне несбалансированном наборе данных (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, так как источник данных сильно несбалансирован

Кто-нибудь может мне сказать, действителен ли мой подход? И как я могу настроить свой алгоритм, учитывая, что я использую объем в качестве метрики ошибки?

...