对罕见事件建模的逻辑回归

数据挖掘 r 预测建模 特征选择 逻辑回归
2022-02-22 12:04:41

我有一个数据集,其中包含有关消费者的数据以及他们是否表示对产品感兴趣的标志。我希望使用 R 构建一个模型,该模型能够在向消费者展示产品之前预测消费者是否会对产品感兴趣。然后,我将根据此模型输出进行过滤,以通过不向数据表明他们不感兴趣的消费者展示产品来降低下游成本。

这是我的数据集的摘要:

  • 行数:~300k

  • 列数:40

  • 列类型:1 位(兴趣标志)、37 num、2 char(分类)

char 列是就业/居住状态,因此包含全职、私人租户等内容。

这是我到目前为止所尝试的:

  1. 我在 R 中使用 Boruta 包进行特征选择,然后我使用 lm() 创建了一个回归模型并指定了所有重要特征。
  2. 我已经使用逐步回归进行特征选择,我从一个具有 0 参数的模型和一个具有所有参数的模型开始,并在它们之间“步进”,直到创建最佳模型。然后我抓住重要特征并再次使用 lm() 创建回归模型。

我遇到的问题是,由于兴趣标志非常罕见(大约 1,600 / 300,000 或 0.5%),模型使用 predict() 给出的值明显低于我为逻辑回归模型应用的 0.5 阈值。然后这体现在模型中,基本上说没有人对产品感兴趣。我的问题是:

  1. 这是因为我没有足够的描述性来构建一个好的模型吗?
  2. 为如此罕见的事件建立模型的最佳方法是什么?
1个回答

使用lm不是对二元结果建模的正确方法。在这种情况下,您将使用 Logit(请参阅此处的一些示例,看看为什么不在lm 这里)。

但是,(至少)还有两个问题:

  1. 你有一个高度不平衡的目标
  2. 你可能有“嘈杂”的特征

重新评分1:

您应该检查少数类的过采样或使用SMOTE是否有助于解决目标不平衡的问题。一般来说,当你有 99% 的类 1(和 1% 的类 0)时,你通常会得到一个准确率为 99% 的估计器,而所有预测值都分配给类 1。这当然不是一个好的预测(因为“朴素基线”是 99% 的准确率,即将所有案例分配到第 1 类)。

关于2:

Logit 可能不是一个好的选择(取决于解释变量的性质)。Logit 在参数中是“线性”的,这意味着 logit 模型看起来像

y=β0+β1x1+...+βnxn+u.

如果真正的数据生成过程“更复杂”,您可能会受益于使用不需要任何事前参数化的基于树的模型,例如随机森林或随机梯度提升(例如xgboost)。确保分类特征被编码为“虚拟”(或因子,取决于模型)。

您还可以检查特征生成是否有助于在数据中找到更详细的方面。总体思路:生成特征如x1/x2,x1x2等,并通过特征重要性检查它们是否具有良好的解释力。将有用的功能放在您无论如何都会包含的功能之上。

您还应该检查是否有多余的功能。您可以通过查看随机森林或 Boosting中的特征重要性来做到这一点。排除几乎没有或没有解释力的特征。

您还可以检查 Lasso/Ridge 方法(自动)“缩小”冗余特征是否会有所帮助。Lasso/Ridge也可以看作是研究特征重要性的工具。

Introduction to Statistical Learning ”是理解上面提到的一些模型的一个很好的来源(如果你不熟悉它们的话)。ISL 还附带 R 实验室,应该会有所帮助。这本书可以免费下载。