xgboost: da más importancia a las muestras recientes

22

¿Hay alguna manera de agregar más importancia a los puntos que son más recientes al analizar datos con xgboost?

kilojulios
fuente

Respuestas:

9

Puede intentar construir múltiples modelos xgboost, con algunos de ellos limitados a datos más recientes, y luego ponderando esos resultados juntos. Otra idea sería hacer una métrica de evaluación personalizada que penalice los puntos recientes con mayor intensidad, lo que les daría más importancia.

TBSRounder
fuente
44
El OP simplemente puede dar mayores pesos de muestra a observaciones más recientes. La mayoría de los paquetes lo permiten, al igual que xgboost.
Ricardo Cruz
30

Simplemente agregue pesos basados ​​en sus etiquetas de tiempo a su xgb.DMatrix. El siguiente ejemplo está escrito en R pero el mismo principio se aplica a xgboost en Python o Julia.

data <- data.frame(feature = rep(5, 5),
                   year = seq(2011, 2015), 
                   target = c(1, 0, 1, 0, 0))
weightsData <- 1 + (data$year - max(data$year)) * 5 * 0.01

#Now create the xgboost matrix with your data and weights
xgbMatrix <- xgb.DMatrix(as.matrix(data$feature), 
                         label = data$target, 
                         weight = weightsData)
wacax
fuente
Gracias por su respuesta, es realmente útil ver un ejemplo codificado. ¿Cómo afecta la magnitud de los coeficientes de la función de ponderación al modelo? Revisé los documentos de xgboost, pero no puedo encontrar información sobre el significado de estos valores numéricos.
kilojulios
No conocía este truco, bien. hay un pequeño dato en el documento xgboost debajo de la función setinfo(), aunque no es muy descriptivo
TBSRounder
12

En Python tienes un buen contenedor de scikit-learn, por lo que puedes escribir así:

import xgboost as xgb
exgb_classifier = xgb.XGBClassifier()
exgb_classifier.fit(X, y, sample_weight=sample_weights_data)

Más información puede recibir de esto: http://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit

lucidyan
fuente
Desearía que R caret también tuviera esto incorporado ..
pauljeba 03 de
1
eso debería estar xgb.XGBClassifier()en la segunda línea de código, pero stackexchange no permite ediciones de menos de seis caracteres ...
Andre Holzner