如何补偿预测模型中的类不平衡?

数据挖掘 预测建模 数据集 阶级失衡 预言
2022-03-09 12:58:41

我正在尝试对客户的数据集运行预测模型,以预测新客户对购买产品 X 感兴趣的可能性,该产品由一家销售 X、Y 产品的公司提供,而 ZEg 会不会这个人,非客户,这个年龄和薪水的,对产品X感兴趣吗?

为了训练模型,我有一盆 100K 的公司客户,其中只有 5K 购买了产品 X,剩下的 95K 购买了其他产品。任何预测模型都会猜测“没有人会购买产品 X”,接受那些约 5% 的假阴性。

如何补偿数据的这种偏斜?即 95% 对 5%?谢谢

3个回答

有很多关于罕见事件或不平衡类的信息和技术。很抱歉发布链接,但(https://stats.stackexchange.com/search?q=rare+eventhttps://stats.stackexchange.com/search?q=imbalanced)但我不想复制所有其他工作。

根据我的经验,我经常不理会数据集。我通常会得到很好的结果。如果这是真实比率,那么我的模型应该知道这一点。有时我对多数类进行了下采样。我之前也玩过 SMOTE(https://arxiv.org/pdf/1106.1813.pdf)。

对于您上面的问题,是的 - 使用权重或过度/取消采样更改数据可能会使结果产生偏差。需要检查。如果您进行下采样,请确保您没有丢弃多数类的信号。

您可以尝试对每个样本设置不同的权重。例如,您可以为购买其他产品的人设置 0.05 权重,为购买产品 X 的人设置 0.95 权重。

sklearn中,有一个sample_weight提供此方法的参数。在 R 中,查看本指南

如果您使用的是XGBoost,这里有一个指南,展示了如何处理 XGBoost 中的不平衡类。

您已经描述了逻辑回归的空模型,在这种情况下,它将预测 P(will buy X)=0.05。任何其他包含您的年龄和薪水协变量的模型都会做得更好。您的响应中每个 1 有 19 个零这一事实不应阻止您尝试制作一个比空模型做得更好的模型

因此,只需将年龄和薪水作为回归中的线性项并从那里开始。