分位数建模中的模型性能

机器算法验证 回归 数据挖掘 预测模型 分位数回归
2022-03-04 23:33:14

我正在使用分位数回归(例如通过gbmquantreg在 R 中) - 不关注中位数,而是上分位数(例如第 75 位)。来自预测建模背景,我想衡量模型在测试集上的拟合程度,并能够向业务用户描述这一点。我的问题是如何?在具有连续目标的典型设置中,我可以执行以下操作:

  • 计算整体 RMSE
  • 按预测值对数据集进行十等分,并将实际平均值与每个十分位中预测的平均值进行比较。
  • 等等。

在这种情况下可以做什么,实际上没有实际价值(我至少不认为)可以将预测与预测进行比较?

这是一个示例代码:

install.packages("quantreg")
library(quantreg)

install.packages("gbm")
library(gbm)

data("barro")

trainIndx<-sample(1:nrow(barro),size=round(nrow(barro)*0.7),replace=FALSE)
train<-barro[trainIndx,]
valid<-barro[-trainIndx,]

modGBM<-gbm(y.net~., # formula
            data=train, # dataset
            distribution=list(name="quantile",alpha=0.75), # see the help for other choices
            n.trees=5000, # number of trees
            shrinkage=0.005, # shrinkage or learning rate,
            # 0.001 to 0.1 usually work
            interaction.depth=5, # 1: additive model, 2: two-way interactions, etc.
            bag.fraction = 0.5, # subsampling fraction, 0.5 is probably best
            train.fraction = 0.5, # fraction of data for training,
            # first train.fraction*N used for training
            n.minobsinnode = 10, # minimum total weight needed in each node
            cv.folds = 5, # do 3-fold cross-validation
            keep.data=TRUE, # keep a copy of the dataset with the object
            verbose=TRUE) # don’t print out progress

best.iter<-gbm.perf(modGBM,method="cv")

pred<-predict(modGBM,valid,best.iter)

现在怎么办——因为我们没有观察到条件分布的百分位数?

添加:

我假设了几种方法,我想知道它们是否正确以及是否有更好的方法——以及如何解释第一种方法:

  1. 计算损失函数的平均值:

    qregLoss<-function(actual, estimate,quantile)
    {
       (sum((actual-estimate)*(quantile-((actual-estimate)<0))))/length(actual)
    
    }
    

    这是分位数回归的损失函数——但我们如何解释这个值?

  2. 我们是否应该期望,例如,如果我们正在计算测试集上的第 75 个百分位数,则预测值应该在 75% 左右的时间大于实际值?

是否有其他正式或启发式的方法来描述模型预测新案例的能力?

2个回答

Haupt、Kagerer 和 Schnurbus (2011)可能是一个有用的参考,他们讨论了基于对各类分位数回归模型的交叉验证,使用分位数特定的预测准确性度量。

我会使用弹球损失(在https://arxiv.org/pdf/1102.2101.pdf第二页的开头定义)并将其解释为您正在建模的分位数的平均绝对误差(MAE),例如,假设误差为 100:“我们的模型关于我们测试数据中真实 75% 分位数的平均绝对误差为 100。”

请记住,这与 RMSE 无法比较,因为异常值的影响要小得多。

回答您的问题 (2):如果您对 75% 的分位数进行建模,您将适合分割数据质量的边界!逐点!比例为 75:25。那么大约 25% 的测试数据应该高于您的预测。