有谁知道是否已经描述了以下内容以及(无论哪种方式)这听起来是否像是一种用于学习具有非常不平衡的目标变量的预测模型的合理方法?
通常在数据挖掘的 CRM 应用中,我们会寻求一个模型,其中积极事件(成功)相对于大多数(消极类)非常罕见。例如,我可能有 500,000 个实例,其中只有 0.1% 属于积极的兴趣类别(例如客户购买)。因此,为了创建预测模型,一种方法是对数据进行采样,从而保留所有正类实例和负类实例的样本,以使正负类的比率更接近 1(可能为 25%到 75% 的阳性到阴性)。过采样、欠采样、SMOTE等都是文献中的方法。
我很好奇的是结合上面的基本抽样策略,但与负类的装袋。就像:
- 保留所有正类实例(例如 1,000 个)
- 对负类实例进行采样以创建平衡样本(例如 1,000)。
- 适合模型
- 重复
有人听说过这样做吗?没有装袋的问题似乎是,当有 500,000 个负类实例时,仅对 1,000 个负类实例进行采样是预测空间将是稀疏的,并且您很可能没有可能的预测值/模式的表示。Bagging 似乎对此有所帮助。
我查看了 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))
这是表演:

为了了解这与没有 bagging 相比如何,我仅使用第一个样本(所有正例和相同大小的随机样本)预测了验证样本。显然,采样的数据过于稀疏或过拟合,无法对保留验证样本有效。
当发生罕见事件且 n 和 p 较大时,建议 bagging 例程的有效性。
