当前位置: 首页 > news >正文

决策曲线分析(DCA)中平均净收益用于评价模型算法(R自定义函数)

决策曲线分析(DCA)中平均净收益用于评价模型算法

DCA分析虽然不强调用来评价模型算法或者变量组合的优劣,但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性,其实这种一致性也可以找到内在的联系,比如通过净阈值的计算公式可以知道净阈值的大小与真阳性率有密切的关系,而真阳性率和模型的效能也有一致性。

如果想用DCA曲线来挑选算法或者变量组合,有一个定量的指标就更加方便一些,这就有了为DCA曲线找一个定量指标的想法。

1. 微积分法

曲线下面积可能是比较直观的一种方法,首先想到的是用微积分的方法计算DCA曲线下面积,代码如下。因为对微积分并不熟悉,加上计算出的结果还会有负值的情况,所以不是太确定代码的正确性,大家谨慎采用。

WA_NBC <- function(df, pred, real, integration_limits = c(0, 1), prevalence) {# 内部函数计算净获益calculate_nbc <- function(pt) {# NBC函数的代码tp <- sum(df[[pred]] >= pt & df[[real]] == 1)fp <- sum(df[[pred]] >= pt & df[[real]] == 0)net_benefit <- tp/nrow(df) - fp/nrow(df) * pt/(1-pt)if (!is.null(prevalence)) {net_benefit <- net_benefit / prevalence}return(net_benefit)}# 计算加权平均净获益integrand <- function(x) {calculate_nbc(x)}integral_result <- stats::integrate(integrand, lower = integration_limits[1], upper = integration_limits[2])wa_nbc <- integral_result$value / diff(integration_limits)return(wa_nbc)
}

2. 净收益平均法

这种方法是计算指定阈值范围内的净阈值然后求平均。感觉更好理解一些,但是似乎技术含量低些。

library(purrr)mean_benefit <- function(df, pred, real, integration_limits = c(0, 1), prevalence) {calculate_nbc <- function(pt) {# NBC函数的代码tp <- sum(df[[pred]] >= pt & df[[real]] == 1)fp <- sum(df[[pred]] >= pt & df[[real]] == 0)net_benefit <- tp/nrow(df) - fp/nrow(df) * pt/(1-pt)if (!is.null(prevalence)) {net_benefit <- net_benefit / prevalence}return(net_benefit)}# 使用map_dbl对每个阈值计算净获益net_benefits <- map_dbl(seq(integration_limits[1], integration_limits[2], by = 0.01), ~ calculate_nbc(.x))# 计算加权平均净获益mean(net_benefits)
}

初步测试感觉在一定程度上能达到设计的目的,能反映变量组合之间的优劣(如下图),但是也有不好解释的地方,比如计算出的绝对值有没有意义,欢迎大家测试反馈。在和鲸社区上有一个项目可以进行体验和测试,包含了数据和代码。
在这里插入图片描述


http://www.mrgr.cn/news/80321.html

相关文章:

  • 期末速成C++【初识C++】
  • 【目标检查】YOLO系列之:Triton 推理服务器Ultralytics YOLO11
  • 在线图片格式转换器 - 加菲工具
  • [2024-12 CISCN 长城杯] Crypto
  • 实现SpringBoot项目嵌入其他项目
  • C# OpenCvSharp DNN 实现百度网盘AI大赛-表格检测第2名方案第三部分-表格方向识别
  • 深度学习之pytorch环境安装:win10-python3.9-cuda10.1-cudnn7.6.4-pytorch1.7.1
  • 【Linux】环境变量 程序地址空间
  • IS-IS协议
  • uniapp 常用的指令语句
  • uniapp跨端适配—条件编译
  • WPF 消息循环(二)
  • Vue日历组件FullCalendar使用方法
  • 基于32单片机的RS485综合土壤传感器检测土壤PH、氮磷钾的使用(超详细)
  • 人工智能与Java应用场景:智能推荐系统的实现
  • 使用金沙滩51单片机实现——用AD测量DA,按键可以调整DA值,AD测量到模拟量后液晶显示模拟量
  • openGauss开源数据库实战二十八
  • 若依-帝可得app后端
  • 一行代码解决vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程无bug
  • 红米Note 9 Pro5G刷LineageOS