有谁知道是否描述了以下内容以及(无论哪种方式)听起来像是一种学习目标变量非常不均衡的预测模型的合理方法?
通常在数据挖掘的CRM应用程序中,我们将寻求一个模型,其中相对于大多数事件(负面事件)而言,积极事件(成功)非常罕见。例如,我可能有500,000个实例,其中只有0.1%是感兴趣的正类(例如,购买的客户)。因此,为了创建预测模型,一种方法是对数据进行采样,从而保留所有正类实例,而仅保留一个负类实例的样本,以使正类与负类的比率更接近1(可能为25%达到75%(从正面到负面)。文献中有过采样,欠采样,SMOTE等所有方法。
我很好奇的是将上面的基本采样策略与否定类的装袋相结合。
- 保留所有积极的课堂实例(例如1,000个)
- 对否定类实例进行采样,以创建一个平衡的样本(例如1,000)。
- 拟合模型
- 重复
有人听说过吗?似乎没有装袋的问题是,当存在500,000个样本时,仅对1,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次。然后针对这100个模型中的每一个,在验证样本的情况下预测Y = 1的概率。我只是将这100个概率取平均值进行最终估算。我在验证集上确定了概率,并在每个十分位中计算了Y = 1(模型估算能力的传统方法)的百分比。
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
表演如下:
为了了解与没有套袋相比的情况,我仅使用第一个样本(所有阳性病例和相同大小的随机样本)预测了验证样本。显然,所采样的数据太稀疏或过拟合,以至于无法对保留的验证样本生效。
当发生罕见事件且n和p较大时,建议套袋程序的有效性。