Кто-нибудь знает, было ли описано следующее (и так или иначе), если это звучит как правдоподобный метод изучения прогностической модели с очень несбалансированной целевой переменной?
Часто в CRM-приложениях интеллектуального анализа данных мы будем искать модель, в которой положительное событие (успех) очень редко по сравнению с большинством (отрицательный класс). Например, у меня может быть 500 000 случаев, когда только 0,1% относятся к положительному классу интересов (например, клиент купил). Таким образом, для создания прогнозирующей модели один из методов - это выборка данных, при которой вы сохраняете все экземпляры положительного класса и только выборку экземпляров отрицательного класса, чтобы отношение положительного к отрицательному классу было ближе к 1 (возможно, 25% до 75% от положительного до отрицательного). Чрезмерная выборка, недостаточная выборка, SMOTE и т. Д. - все это методы в литературе.
Что меня интересует, так это объединение базовой стратегии выборки, описанной выше, но с упаковкой отрицательного класса. Что-то вроде этого:
- Сохраните все положительные экземпляры класса (например, 1000)
- Сэмплируйте отрицательные экземпляры Клэсса, чтобы создать сбалансированный сэмпл (например, 1000).
- Подходит модель
- Повторение
Кто-нибудь слышал об этом раньше? Проблема без упаковки заключается в том, что выборка только из 1000 экземпляров отрицательного класса при наличии 500 000 состоит в том, что пространство предикторов будет редким, и у вас может не быть представления возможных значений / моделей предикторов. Мешки, кажется, помогают этому.
Я посмотрел на rpart, и ничто не «ломается», когда один из образцов не имеет всех значений для предиктора (не прерывается при прогнозировании экземпляров с этими значениями предиктора:
library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))
Есть предположения?
ОБНОВЛЕНИЕ: Я взял реальный набор данных (маркетинговые данные ответов по прямой почтовой рассылке) и случайно разделил его на обучение и проверку. Есть 618 предикторов и 1 двоичная цель (очень редко).
Training:
Total Cases: 167,923
Cases with Y=1: 521
Validation:
Total Cases: 141,755
Cases with Y=1: 410
Я взял все положительные примеры (521) из обучающей выборки и случайную выборку отрицательных примеров того же размера для сбалансированной выборки. Я подгоняю дерево rpart:
models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")
Я повторил этот процесс 100 раз. Затем прогнозировали вероятность Y = 1 в случаях проверочной выборки для каждой из этих 100 моделей. Я просто усреднил 100 вероятностей для окончательной оценки. Я расшифровал вероятности на наборе валидации и в каждом дециле вычислял процент случаев, где Y = 1 (традиционный метод оценки ранжирующей способности модели).
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
Вот производительность:
Чтобы увидеть, как это сравнивается с отсутствием упаковки, я предсказал проверочную выборку только с первой выборкой (все положительные случаи и случайная выборка того же размера). Ясно, что выборочные данные были слишком скудными или не подходящими для того, чтобы быть эффективными в контрольной выборке.
Предполагая эффективность процедуры упаковки в пакеты при редких случаях и больших значениях n и p.