XGBoost - 具有不同曝光/偏移的泊松分布

2023-11-24

我正在尝试使用 XGBoost 对不等长的暴露期生成的数据的索赔频率进行建模,但无法让模型正确处理暴露。我通常会通过将 log(exposure) 设置为偏移量来做到这一点 - 你能在 XGBoost 中做到这一点吗?

(这里发布了类似的问题:xgboost,偏移曝光?)

为了说明这个问题,下面的 R 代码生成一些带有字段的数据:

  • x1、x2 - 因子(0 或 1)
  • 暴露 - 观察数据的保单期限长度
  • 频率 - 每单位风险的平均索赔数量
  • 声明 - 观察到的声明数量 ~Poisson(频率*曝光)

目标是使用 x1 和 x2 预测频率 - 真实模型是:如果 x1 = x2 = 1,则频率 = 2,否则频率 = 1。

暴露不能用于预测频率,因为在保单开始时并不知道。我们可以使用它的唯一方法是:预期索赔数量=频率*曝光。

该代码尝试通过以下方式使用 XGBoost 来预测这一点:

  1. 将曝光设置为模型矩阵中的权重
  2. 将 log(exposure) 设置为偏移量

下面,我展示了如何处理树(rpart)或 gbm 的情况。

set.seed(1)
size<-10000
d <- data.frame(
  x1 = sample(c(0,1),size,replace=T,prob=c(0.5,0.5)),
  x2 = sample(c(0,1),size,replace=T,prob=c(0.5,0.5)),
  exposure = runif(size, 1, 10)*0.3
)
d$frequency <- 2^(d$x1==1 & d$x2==1)
d$claims <- rpois(size, lambda = d$frequency * d$exposure)

#### Try to fit using XGBoost
require(xgboost)
param0 <- list(
  "objective"  = "count:poisson"
  , "eval_metric" = "logloss"
  , "eta" = 1
  , "subsample" = 1
  , "colsample_bytree" = 1
  , "min_child_weight" = 1
  , "max_depth" = 2
)

## 1 - set weight in xgb.Matrix

xgtrain = xgb.DMatrix(as.matrix(d[,c("x1","x2")]), label = d$claims, weight = d$exposure)
xgb = xgb.train(
  nrounds = 1
  , params = param0
  , data = xgtrain
)

d$XGB_P_1 <- predict(xgb, xgtrain)

## 2 - set as offset in xgb.Matrix
xgtrain.mf  <- model.frame(as.formula("claims~x1+x2+offset(log(exposure))"),d)
xgtrain.m  <- model.matrix(attr(xgtrain.mf,"terms"),data = d)
xgtrain  <- xgb.DMatrix(xgtrain.m,label = d$claims)

xgb = xgb.train(
  nrounds = 1
  , params = param0
  , data = xgtrain
)

d$XGB_P_2 <- predict(model, xgtrain)

#### Fit a tree
require(rpart)
d[,"tree_response"] <- cbind(d$exposure,d$claims)
tree <- rpart(tree_response ~ x1 + x2,
              data = d,
              method = "poisson")

d$Tree_F <- predict(tree, newdata = d)

#### Fit a GBM

gbm <- gbm(claims~x1+x2+offset(log(exposure)), 
           data = d,
           distribution = "poisson",
           n.trees = 1,
           shrinkage=1,
           interaction.depth=2,
           bag.fraction = 0.5)

d$GBM_F <- predict(gbm, newdata = d, n.trees = 1, type="response")

至少与glmR 中的函数、建模count ~ x1 + x2 + offset(log(exposure)) with family=poisson(link='log')相当于建模I(count/exposure) ~ x1 + x2 with family=poisson(link='log') and weight=exposure。也就是说,通过暴露量对计数进行归一化以获得频率,并以暴露量作为权重对频率进行建模。使用时,两种情况下的估计系数应该相同glm泊松回归。使用示例数据集亲自尝试一下

我不太确定是什么objective='count:poisson'对应于,但我希望将目标变量设置为频率(计数/曝光)并使用曝光作为权重xgboost当曝光变化时,这将是一个可行的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XGBoost - 具有不同曝光/偏移的泊松分布 的相关文章

  • 将所有 0 值替换为 NA

    我有一个包含一些数字列的数据框 某些行具有 0 值 在统计分析中应将其视为空 在R中将所有0值替换为NULL的最快方法是什么 将所有零替换为 NA df df 0 lt NA 解释 1 它不是NULL你应该用什么来替换零 正如它所说 NUL
  • 如何将 r 数据框转换为 h2o 对象

    我对 R 和 H2O 很陌生 我试图找到一种将 r 数据帧转换为 h2o 对象的方法 我花了一些时间研究如何做到这一点 但没有运气 其他方式也是可能的 并且有详细记录如下 prosPath system file extdata prost
  • 使用 data.table 对分组数据进行插值

    这是我最初发布的问题的延续http r 789695 n4 nabble com subset Between data table list and single data table object tp4673202 html http
  • 有没有一种简单的方法可以在 R 的 igraph 中按度数对网络节点进行着色?

    使用igraphR 包 我想按度数对网络节点进行着色 颜色应代表渐变 例如从蓝色到红色 或从黄色到红色 从网络中观察到的最低程度到最高程度 我找到了一个可行的解决方案 https stackoverflow com questions 40
  • 使用 ggplot 2 使用线条或线段将堆栈条形图与多个组连接起来

    我正在对一些患有某种疾病的患者进行一项研究 并在 3 个不同的时间点使用顺序量表评估功能状态 我想在这些时间点的堆叠条形图中连接多个组 我查看了这些主题 但尚未使用这些建议使其发挥作用 如何将线条放置在堆积条形图的边缘 https stac
  • 删除第一次出现某个值后的行

    我有以下 df df lt data frame var1 c 1 2 2 3 4 5 5 6 7 8 9 var2 c a b c d e f g h i j k 我想在达到前 5 var1 后进行过滤 所以结果应该是 var1 var2
  • 根据一个或多个下拉选项创建具有不同类型线型的折线图

    在下面闪亮的应用程序中 我尝试根据侧边栏中的下拉选择创建点线图 我已成功在选择一个指标时创建折线图 但无法选择 2 个指标 为了x and y我想要一个solid线 对于x1 and y1我想要一个dashed线和对于x2 and y2一条
  • R 和系统调用

    我过去曾使用 R 对命令行进行非常基本的调用 例子可以找到here https stackoverflow com questions 3284301 command line in r code 这一次 我希望模仿这段从 Windows
  • 使用 Rgraphviz 中的 pos 参数来固定节点位置

    基于这个问题当弧与另一弧重叠时自动弯曲 https stackoverflow com questions 45721802 automatically curving an arc when it is overlapping with
  • 在 R 中使用 apply() 时出现未使用参数错误

    当我尝试对日期列使用 apply 条件以返回一组系数时 收到错误消息 我有一个数据集 为简单起见 此处进行了修改 但可重现 ADataset lt data table Epoch c 2007 11 15 2007 11 16 2007
  • 如何扩展 ggplot y 轴限制以包含最大值

    通常 在图中 Y 轴值标签会在绘制的最大值下方被截断 For example library tidyverse mtcars gt ggplot aes x mpg y hp geom point 我知道scale y continous
  • 连接路径的函数?

    是否有现有的函数来连接路径 我知道实施起来并不困难 但仍然 除了照顾尾随 or 我需要注意正确的操作系统路径格式检测 即我们是否编写C dir file or dir file 正如我所说 我相信我知道如何实施它 问题是 我应该这样做吗 现
  • 如何通过在R闪亮循环中读取.csv文件来动态生成dataTableOutput?

    我有一个函数可以生成 n 个数据帧并将其作为 csv 文件保存在某个位置 并且该函数返回已保存 CSV 的文件名 我希望获取这些 csv 文件 使用以下命令读取它read csv 然后使用 renderUI 和 renderDataTabl
  • 将多个函数应用于一个向量

    我正在寻找一种将多个函数应用于一个向量的选项 我认为这对于逆应用函数来说是一种仁慈 其中一个函数应用于许多向量 或列 有没有办法指定两个或多个函数 例如 min 和 max 并将其应用于向量 与 CathG的评论类似 但没有get v lt
  • 正则表达式在 R 中同时多次包含字母/特殊字符时删除单词

    我想删除那些单词中字母 特殊字符的数量同时出现两次以上的单词 例如 输入就像 Google in theee lland of whhhat c c and e 输出应该是 Google in lland of c c and x lt G
  • 挑战:优化取消列出[简单]

    因为 SO 最近有点慢 所以我发布了一个简单的问题 如果大鱼们能在这场比赛中留在替补席上并给新秀们一个回应的机会 我将不胜感激 有时我们的对象具有大量的大列表元素 向量 您如何将这个对象 取消列出 到单个向量中 证明你的方法比unlist
  • Dplyr 过滤多个类似条件

    我正在尝试在 dplyr 中做一个过滤器 其中的列就像某些观察结果 我可以使用 sqldf 作为 Test lt sqldf select from database Where SOURCE LIKE ALPHA OR SOURCE LI
  • 如何使用 Rcpp 将 C 结构从 C 库公开到 R

    我正在尝试将 C 结构从 C 库公开到 R 中 例如 struct A int flag 库提供 API 来构造和销毁是很常见的A A initA void freeA A a 感谢RCPP MODULE 很容易暴露它而不考虑析构函数 in
  • “条件长度 > 1 并且仅使用第一个元素”错误

    我对 f 语句有疑问 因为它返回给我以下错误消息 条件长度 gt 1 并且仅使用第一个元素 我有一个名为 data summary 的数据框 我想创建两个新变量vol up and vol down取决于我的数据框的其他变量 这是我的脚本代
  • 如何在 R 中创建“堆叠瀑布”图表?

    I was able to find several packages to create a waterfall chart in R which look like this But I could not find a way to

随机推荐

  • 用于旋转/平移的矩阵的适当乘法

    为了旋转 平移对象 仅绕 z 轴旋转 仅在 xy 平面内平移 不仅与全局中心 设备中心 有关 而且还与其他任意点有关 我创建了一个算法 这是正确的 因为所有高级我与之讨论过的编码员认为这是正确的 but删除一个需要很长时间不需要的翻译正在实
  • IndexedDB - DataError:提供给操作的数据不符合要求

    我看过其他类似的问题 我的情况有所不同 因为我插入的是简单的 json 对象 没有键 没有自动增量 这是执行插入的部分 function insertInto model data successCallback console log i
  • 检查字符串是否包含数字

    我发现的大多数问题都存在偏见 因为他们正在寻找数字中的字母 而我正在寻找我想要的无数字字符串中的数字 我需要输入一个字符串并检查它是否包含任何数字以及是否拒绝它 功能isdigit 只返回True如果所有字符都是数字 我只是想看看用户是否输
  • 了解 Java 数据类型

    1 为什么不允许以下分配 byte b 0b11111111 8 bits or 1 byte 但这个分配是允许的 int i 0b11111111111111111111111111111111 32 bits or 4 bytes 两种
  • Android 电话堆栈中的不同呼叫状态代表什么?

    The internal安卓类com android internal telephony Call包含一个名为 State 的枚举 定义如下 public enum State IDLE ACTIVE HOLDING DIALING AL
  • 如何在winform中将数据绑定到图表并刷新图表?

    我尝试将图表绑定到generatedSequence类型的List
  • 如何及时了解计算机(尤其是软件)安全性的最新信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我最近购买并阅读了一套关于
  • NSPredicate 和 CoreData - 决定 iOS 上的 Date 属性是否为“今天”(或昨晚 12 点到今晚 12 点之间)

    我正在使用一个NSFetchedResultsController and a UITableViewController从 CoreData 数据库填充 UITableView 我有一个NSDate对象保存到标记为 startTime 的
  • 如何使用 JDBC 连接从主机到 docker mysql 服务器

    我是 docker 新手 我尝试从本地计算机 主机 连接到 mysql 容器 我用以下命令拉取了最新版本的mysql docker pull mysql mysql server latest 并启动它 以及 myadmin 容器 其中包含
  • 如何检查是否有足够的可用堆内存?

    我有一项作业要求我创建一个分配和释放内存的 堆 类 我相信我的代码可以工作 并且解决方案可以正常构建和运行 但我想确保没有任何内存泄漏 我还需要添加一些代码来检查分配给堆的所需数量是否可用 如果有人要分配非常大的数量 如何检查堆上分配的内存
  • 如何将@noescape注释添加到可选闭包

    我的函数有这个签名 func foo bar String baz String gt nil 而现在我想让不必要的逃避self在给定的闭包内 但是当我尝试这个时 func foo bar String noescape baz Strin
  • 向 woocommerce 添加每页产品下拉列表

    我正在尝试在不使用插件的情况下将 每页产品 下拉列表添加到我的 woocommerce 店面子主题中 我将以下代码添加到我的functions php中source add action woocommerce before shop lo
  • 在 Apache 上使用 PHP 进行长轮询

    希望我能很好地解释这一点 我正在努力创建一个通过 PHP 处理 ajax 请求的 PHP 库以面向对象的方式 我目前正在考虑一种实现长轮询解决方案的好方法 但对某些事情感到好奇 Apache 不能很好地保持多个连接打开 每个请求一个线程的模
  • scipy中样条插值的系数

    我想通过 scipy 计算样条插值的系数 在 MATLAB 中 x 0 3 y 0 1 4 0 spl spline x y disp spl coefs 它会返回 ans 1 5000 5 5000 3 0000 0 1 5000 1 0
  • 在 Javascript contenteditable div 中插入文本

    有没有办法将文本 字符串 可能有也可能没有 html 标签 插入到div 它必须是一个div而不是一个textarea 首先 我需要获取光标位置 然后在该位置插入文本 和函数类似insertAdjacentText 但只能在标签之前或之后插
  • VS调试问题,谁能帮我解释一下?

    一段C 代码 var isTrue new List
  • 压缩字体以在网络中使用

    在用作网络字体之前可以对字体进行某种压缩吗 我有一个 150kB 的字体文件 能不能压缩一下 而且如果我要求两种字体 eot and ttf两者都会被浏览器下载吗 如果您使用 FontSquirrel font face 套件生成器 htt
  • WSO2 ESB DBLookup 中介查询多行

    正如 DBLookup Mediator 的文档中所述 它仅返回查询的第一行 其他结果 如果有 将被忽略 我想知道是否有 最佳方法 来运行返回多个记录然后处理它们的查询 SELECT FROM X 现在我们正在实现 axis2 服务 但是还
  • 正则表达式匹配文件夹和所有子文件夹

    我需要为备份排除过滤器编写正则表达式以排除文件夹及其所有子文件夹 我需要匹配以下内容 folder1 statistics folder1 statistics folder2 statistics folder2 statistics 我
  • XGBoost - 具有不同曝光/偏移的泊松分布

    我正在尝试使用 XGBoost 对不等长的暴露期生成的数据的索赔频率进行建模 但无法让模型正确处理暴露 我通常会通过将 log exposure 设置为偏移量来做到这一点 你能在 XGBoost 中做到这一点吗 这里发布了类似的问题 xgb