输出为概率的回归模型

机器算法验证 回归 物流
2022-03-18 13:39:45

我正在尝试拟合模型,并且怀疑我所做的不太正确。数据跟踪做出决定的人的比例,以及做出决定时哪些因素是活跃的,例如:
[1,0,1,0, 23%]
[1,1,0,1, 41% ]
等...
我也知道每个组有多大。目标是根据二进制输入预测百分比。我最初的想法是,模型不可能是直线组合,如果只是因为输出是有界的。它也不完全是逻辑回归,因为输出不是标签,而是每组的平均值。我的第一个想法是以类似于逻辑回归的方式将输出转换为 log (p/(1-p)),并拟合线性回归。这给了我一些不错的结果,但我总觉得这不太对劲。除了输出转换之外,我还担心将输入视为数字,当它们真正表示二进制值时,可能不是最好的方法。
所以我的问题是,如果这不是正确的方法,是否有解决这种特定情况的模型?我应该寻找什么?

[编辑澄清]从评论/回复看来我对数据的描述有点缺乏,所以这里还有一点,以及为什么我不确定使用逻辑回归。我会用类似的数据来说明。假设产品具有一组二元特征,将各种产品呈现给客户,并记录结果(买/不买)。然后原始数据集将如下所示:
F1,F2,F3,... Fn, Buy/No Buy
1, 1, 0, .. 0, 1
1, 1, 1, .. 1, 0
其中每一行是一个特定的产品,以及客户做了什么。现在我可以将这些按具有相同特征的相同产品汇总,并简单地记录购买比例以及提供该选择的客户数量。这基本上就是我所拥有的。
我可以分解回原始数据集,并对其进行逻辑回归,但这些组本身非常大,而且大小也非常不同。最重要的是,我有两个问题。首先,我可以重建与原始比例相同的合成组(即,如果 4% 购买,则构建 4 个购买,96 个不购买行),但购买/不购买比率非常小,这意味着重建大型组适当地近似。其次,群体的规模非常不同,我认为完整样本中的群体组成应该与原始群体的组成相似,这意味着创建潜在的非常大的群体。这就是为什么我本质上想知道是否有一种方法可以直接处理小得多的数据集,而无需重建人工的巨大数据集。
我目前的方法是使用梯度下降法,按组大小加权观察,但我想知道是否有更聪明的方法来处理这个问题!

4个回答

我认为您应该查看二项式回归模型。不是对比例(百分比)进行建模,而是对决策的计数进行建模(每组仍然只有一行。)即具有二项式而不是通常的伯努利似然的广义线性模型。是如何在 R 中完成的描述。

您可以将其转换为逻辑回归,而无需将数据集设置为组的大小,您只需要使用权重即可。对于第一组,您可以将其拆分为 [1,0,1,0,1](最后一列是响应),权重为 [(# in that group) * 0.23] 和 [1,0, 1,0,0],权重为 [(该组中的#) * 0.77]。请参阅带有参数“权重”的 GLM 的 R 文档,了解如何在 R.T 中执行它

之后,这是一个简单的逻辑回归。这相当于其他人建议的二项式回归。

如果我理解正确,您实际上是在尝试测量不同大小组之间的事件计数。您可以使用泊松回归并为每个组的大小添加偏移量。请参阅何时在泊松回归中使用偏移量?泊松与逻辑回归以获得更多解释。

不确定从预测的角度来看这是否会更好。我使用线性模型或以比率作为因变量的 GBM 取得了很好的预测成功。如果您有许多接近 0 或 1 的比率,这将是一个问题,因为线性 reg 将开始预测该范围之外的比率。

看到您的更新后,我将分解数据并将该组用作逻辑规则中的因子变量。大型数据集有什么问题?

您应该能够为每个组仅使用一行数据:

有了这两条信息:“数据追踪了做出决定的人的比例”“我也知道每个群体有多大”,您可以将数据转化为成功和试验(或失败)的计数:简单将组的大小乘以每个组中的比例得到成功的次数,并从组的大小中减去失败的次数。然后,您可以拟合逻辑回归。R、SAS 和(我假设)其他软件包可以拟合逻辑模型,其中的数据指定为成功和失败或试验的计数。

例如,在 R 中,响应变量可以是“一个两列矩阵,其中的列给出成功和失败的数量”(引用 glm() 函数的文档)。或者,在 R 中,您可以将模型与响应变量作为比例拟合,并使用权重向量来指定试验次数(组大小)。

“我还担心当输入真正代表二进制值时,将输入视为数字。”

您可以告诉软件这些是分类变量(例如,将它们转换为 R 中的因子或使用 SAS 中的类语句),但是对于二进制变量,这并不是绝对必要的(无论如何,类别都会“在后台”转换为二进制虚拟变量)。不过,它可能会使代码更清晰。