¿Alguien sabe si el siguiente se ha descrito y (de cualquier manera) si suena como un posible método para el aprendizaje de un modelo predictivo con una muy desequilibrado variable de destino?
A menudo en las aplicaciones de CRM de minería de datos, vamos a buscar un modelo en el que el evento positivo (éxito) es muy poco frecuente en relación a la mayoría (clase negativa). Por ejemplo, puedo tener 500,000 casos donde sólo el 0,1% de los positivos de la clase de interés (por ejemplo, el cliente compró). Así, con el fin de crear un modelo de predicción, es un método para el muestreo de los datos por el cual usted puede mantener todas positivo instancias de clase y sólo una muestra de la negativa de las instancias de una clase, de modo que la proporción de positivo a la negativa de la clase es más cercano a 1 (tal vez de un 25% a 75% de positivo a negativo). Durante el muestreo, con submuestreo, HIRIÓ etc, son todos los métodos en la literatura.
Lo que tengo curiosidad por saber es la combinación de los básicos de la estrategia de muestreo anterior pero con el embolsado de la clase negativa.Algo simplemente como:
- Mantener todo positivo instancias de la clase (por ejemplo, 1,000)
- Muestra el negativo de la classe instancias con el fin de crear un equilibrio de la muestra (por ejemplo, de 1.000).
- Ajuste el modelo
- Repita
Alguien oye de hacer esto antes? El problema parece sin embolsado es que el muestreo de sólo 1.000 instancias de la clase negativa cuando hay 500,000 es que el predictor espacio será escasa y puede que además de no tener una representación de un posible predictor de valores y patrones. Embolsado parece ayudar a esto.
Miré a rpart y nada "rompe" cuando una de las muestras de no tener todos los valores de un predictor (no se rompe cuando, a continuación, la predicción de los casos con los valores predictores:
library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))
Los pensamientos?
ACTUALIZACIÓN: Me llevó a un mundo real del conjunto de datos (marketing de respuesta directa por correo) y datos al azar con particiones en el entrenamiento y validación. Hay 618 predictores y 1 binario de destino (muy raro).
Training:
Total Cases: 167,923
Cases with Y=1: 521
Validation:
Total Cases: 141,755
Cases with Y=1: 410
Tomé todos los ejemplos positivos (521) del conjunto de entrenamiento y una muestra aleatoria de ejemplos negativos del mismo tamaño para un equilibrado de la muestra. Me cabe una rpart árbol:
models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")
He repetido este proceso 100 veces. Entonces la predicción de la probabilidad de que Y=1 en el caso de la validación de la muestra para cada uno de estos 100 modelos. Yo simplemente promedio de los 100 probabilidades para una estimación final. Yo deciled las probabilidades en el conjunto de validación, y en cada decil calculó el porcentaje de casos donde Y=1 (el método tradicional para calcular el ranking de la capacidad del modelo).
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
Aquí es el rendimiento:
Para ver cómo esto se compara con ninguna de embolsado, me predijo la validación de la muestra con la primera muestra sólo (todos los casos positivos y una muestra al azar del mismo tamaño). Claramente, los datos de la muestra era demasiado escasa o overfit para ser eficaz en la retención de validación de la muestra.
Lo que sugiere la eficacia de la embolsado de rutina cuando hay un evento poco frecuente y de gran tamaño n y p.