Ответ
Да, модели градиентного бустинга, такие как XGBoost или LightGBM, могут предсказывать отрицательные значения, даже если все целевые переменные в обучающей выборке положительны. Я сталкивался с этим в задачах прогнозирования спроса. Причины:
- Аддитивная природа бустинга: Предсказание — это сумма предсказаний последовательных деревьев. Каждое новое дерево вносит поправку (положительную или отрицательную) к остаткам предыдущего шага. Накопление отрицательных поправок может вывести итоговое значение в отрицательную область.
- Функция потерь: Стандартная регрессия с MSE минимизирует квадрат ошибки и не накладывает ограничений на выход модели.
- Начальное приближение (initial prediction): Часто это среднее значение целевой переменной, но алгоритм не гарантирует, что последующие шаги не сдвинут предсказание.
Пример с XGBoost:
import xgboost as xgb
import numpy as np
# Все таргеты положительные
X = np.array([[10], [20], [30], [40]])
y = np.array([15, 25, 35, 45])
model = xgb.XGBRegressor(n_estimators=10, max_depth=3)
model.fit(X, y)
# Предсказание для точки, выходящей за пределы обучающего диапазона по X
print(model.predict(np.array([[5]]))) # Может выдать, например, -2.1
Как с этим бороться в продакшене:
- Трансформация таргета: Использовать
np.log1p(y)для обучения иnp.expm1(pred)для обратного преобразования. - Специфичные функции потерь: Например,
'reg:gamma'или'reg:tweedie'в XGBoost для данных, имеющих природу счетов или величин. - Постобработка: Применить
np.maximum(pred, 0)или порог, если отрицательные значения физически невозможны.