如何提高罕见事件二元分类性能?

机器算法验证 机器学习 助推 罕见事件
2022-04-06 15:05:12

我正在构建一个二元分类模型来预测 R 中出现呼吸问题的患者入院。我的数据集中的每一行都是一个患者记录。因变量是承认与否(1或0),特征包括年龄、性别、天气信息和空气质量信息。所有变量都是数字类型。该数据集包含 70,000 条记录,录取率约为 3%。

我在网上搜索了处理罕见事件问题的可能技术。就像使用 xgboost,或者重新采样数据集并与 ML 算法相结合。

我正在使用三种算法来比较结果。1.xgboost。我的代码是:

   pos_weight <- sum(training_df$resp_admit==0)/sum(training_df$resp_admit==1)
   xgb_mod <- xgboost(data = dtrain,
                      eta = 0.01,
                      max_depth = 9,  nround=3000, nthread = 2,
                      subsample = 0.9, colsample_bytree = 0.9,
                      eval_metric = "error", eval_metric = "auc",
                      objective = "binary:logistic",
                      max_delta_step = 6,
                      scale_pos_weight = pos_weight,
                      verbose = 1)

2.逻辑回归和决策树与重采样方法(ovun.samplemethod = both

但是,使用参数调整和重采样方法,分类器性能对我来说仍然很糟糕。

   metric      logistic regression     xgboost
Sensitivity       0.0240480962         0.34482759
Specificity       0.9703949693         0.61143868
Pos Pred Value    0.0278422274         0.02945508
Neg Pred Value    0.9657548696         0.96465116
Precision         0.0278422274         0.02945508
Recall            0.0240480962         0.34482759
F1                0.0258064516         0.05427408
Balanced Accuracy 0.4972215327         0.47813313
AUC               0.4901495211         0.45190509

我是罕见事件问题的新手。我的问题是:

  1. 我知道不同问题的性能标准是不同的。但有一个整体标准吗?至少召回率或精度应该高于0.5?
  2. 我可以尝试哪些其他技术来提高性能?
  3. 我在构建模型时是否遗漏了任何需要注意的事项?
  4. 我随机挑选了一些我认为对构建简单模型很重要的基本特征。我还应该做特征工程吗?这一步对模型性能有很大影响吗?

以下是我构建数据集的方式。

  1. 从所有患者入院记录中,挑选出因呼吸系统问题入院的患者。这些记录与录取日期相关联。一名患者可能在不同入院日期有多个记录。(多次入院的患者占所有患者的 15%。)这些记录的因变量标记为 1。
  2. 按年月对上述记录进行分组。对于一个月中的每一天,如果患者当天没有入院,则复制患者信息,并标记为0。对当月的所有患者执行此操作,并针对每个不同的年月重复该过程。我没有在整个时间段内生成 0 条记录的原因是,如果我这样做了,那么罕见事件发生率将在 0.1% 左右。
  3. 结合所有 1 和 0 记录,按日期左加入天气和空气质量信息。

我还担心我构建数据集的方式。欢迎对此进行讨论。

该模型的最终目标是根据患者信息以及当前天气和空气质量信息,对患者名单进行呼吸入院风险预测。

2个回答

将其视为分类问题是一个重大失误。这本质上是一个“趋势估计”,即概率估计问题。这就是逻辑回归的全部意义所在。而且您选择了不正确的准确度分数——通过选择错误的特征并赋予错误的权重来优化分数。有关详细信息,请参阅http://www.fharrell.com/2017/01/classification-vs-prediction.htmlhttp://www.fharrell.com/2017/03/damage-caused-by-classification.html

除了弗兰克哈雷尔关于分类与预测的重要观点之外,您可能需要考虑您没有判断录取概率所需的信息。AUC 是您列表中不受任意选择分类截止值的影响的一种度量,它非常接近当您的模型不比随机更好时看到的 0.5 的值。确定一个人被录取的确切日期可能太难了,特别是对于第一次录取,这似乎是您的数据集构建和分析正在检查的内容。

使用生存模型处理重新录取特征可能是可能的。每种情况下的开始日期都是从第一次入院开始的出院日期。然后,您可以将天气和空气质量测量作为与时间相关的协变量合并到重新入院时间模型中。