使用带空值的连续变量进行回归

机器算法验证 回归 物流 分类数据 连续数据
2022-03-25 03:37:12

我对正在研究的逻辑模型有点困惑。作为解释变量之一,我想包括“自上次访问以来的天数”(或对其进行一些转换),但是我预测的大约 20% 的人口从未访问过,因此他们的值将是 Null .

我知道的选项:

  • 将 Null 设置为 -/+ ∞。我宁愿避免这样做,因为它基本上将我 20% 的人口的预测写成 0 或 1

  • 为“Is Null”添加一个分类变量并随之回归。这对我来说似乎是最直观的,但我仍然不确定如何转换模型以捕获连续元素(即访问后 1 天与访问后 4 天之间的差异)。我的直觉说有一种方法可以通过交互变量优雅地做到这一点,但我不确定那是什么。

  • 将连续值转换为分类组(即无访问、0-10 天、11-20 天等)。可能我现在要做的是,我希望能够使用连续变量来划分粒度倾向,但这对我来说似乎是最直接的,我认为数据太薄而无法将自上次访问以来的天数直接转换为分类。

提前感谢您的想法!

编辑 8/28:我想在这里更新我想到的第二点,比如说我有一个包含以下值的表。(由于某种原因,我的降价表没有显示)

上次访问 | 旗帜 | 相互作用

空 | 0 | 0

5 | 1 | 5

空 | 0 | 0

7 | 1 | 7

我将在我的回归中包含标志和交互变量,希望由于标志 = 0 和交互 = 0 具有完美的共线性,交互项系数估计的值将仅基于非空数据。

2个回答

顺便说一句,您现在遇到的问题是“丢失数据”问题。这可能是一个问题,这就是他们每次去看医生时都会对你进行重复检查的原因之一,无论你是否觉得它相关。没人愿意对付NULL怪物。

处理起来可能会令人沮丧,但是有很多选择......有些比其他更复杂......有些非常非常复杂......关于这个主题的大量书籍......这还不错尽管。

首先,考虑一下你的目标是什么......你真的需要所有从未访问过模型的人吗?如果它们与您真正寻找的信息无关,特别是如果它们具有多个 NULL 值,它们确实会导致问题(可能是因为它们可能还有其他为 NULL 的数据......只是猜测)......然后我实际上只是删除它们并与它们执行复杂的不同回归/分析。我假设你觉得它们很重要,否则你不会在这里问这个问题,包括它们。

正如您通过提出问题已经认识到的那样......但我要重申:

空值或缺少数据永远不应被解释为 0...这是字面意义上的信息缺乏...这是一个空白...如果您要测量某些东西并且它是“0”,那么这就是数据... .这是信息。如果您无法测量任何东西,那么就没有数据或信息。

1st)我从未听说过将它们的值设置为 +/- 无穷大。也许这是一种我不知道的技术,但似乎它搞砸了很多东西。

2nd)我肯定会有一个二进制变量来指示他们是否曾经访问过。这是超级重要的。回归算法可能会通过系数 * (1) 或 (0) 分配某种权重,以平衡从未访问过的人与访问过的人。事实上,您可能会发现它是您最重要的变量之一。

尽管您可以像您提到的那样将所有内容分成桶(看起来会更容易)......但这可能会将回归算法与包含永不显示的桶混淆。您还通过将唯一值汇总到存储桶中来不必要地消除信息。你只是把它全部扔掉......但无论如何,这就是我要做的一些事情:

你觉得你有足够的其他数据,比如说,在其他列中,关于这些你将在回归中使用的没有显示的数据。老实说,如果它们没有显示,那么您可能有更多的列,其中没有显示的相应 Null 值用于匹配... Null 单元格...如果您这样做,那么此时这超出了我的想象,并且我只是将它们移到您研究的单独回归中。

记录的空值和测量值仿佛来自不同的世界。我什至会自己研究 Nulls……如果重要的话……取决于上下文。尽管 NULL 表示特定参数缺少数据,但它可能(很可能)也与您为它们拥有的许多其他值的值有关......

它们是特殊情况。

无论如何,这是更高级且可能更好的方法的开始。根据您使用的统计软件,它可能已经具有执行此类操作的功能……或更强大……或使用不同的方法。

回归插补

通过这样做,你只是让你的回归算法表现得更好。您没有添加任何价值或附加信息——这是需要牢记的。尽管就误差范围而言,您确实会受到惩罚……因为您没有使用真实数据……它是……模拟的……

因此,您将案例存在的列设置为 NULL 作为 Y 的解释值。然后对所有其他案例运行回归并获得一个公式,然后您可以使用该公式来预测它们的 NULL 值“本来应该是”如果“它在那里”。

这只允许您的回归算法正确和准确地运行。如果你这样做,那么之后你肯定需要额外的二元变量列来表示当你执行“最终回归”时它们是否没有出现。

对于一个更高级的人...... 多重回归插补

您还可以通过 1st)通过将 NULL 值设置为 Y 并按照上面的说明进行预测,从而获得更好的结果……然后您就拥有了一个完整的数据集。

您获取完整的数据集并对其进行一系列测试....例如对应分析,然后检查您的数据“完整”程度的其他类型...我会将您链接到我所在的网站在一秒钟内引用..自从我做了其中一个以来已经有一段时间了。

我相信您实际上以不同的方式使用新的模拟值制作了多个数据集(即每次执行时使用不同的变量产生不同的预测值)

然后在测量所有新数据集之后......您运行测试,向您解释数据分析......然后您将所有这些数据与模拟数据测试您的非空数据并希望找出任何,如果,您可以使用其他 x 变量/情况来最准确地预测实际值。

当您试图通过研究与 NULL 的关系来调整您所招致的错误惩罚时,这使您比仅仅一个回归插补更接近。

是的,所以它会变得混乱。

这是处理 NULL 值的所有技术的一个很好的总结,以及如何识别你拥有的 null 值的类型以及如何处理它...... https://www.ncbi.nlm.nih.gov/ pmc/articles/PMC3668100/

这听起来像您有一个仅与部分人口相关的预测因子。我的建议是(从概念上)将您的人口分成两组。然后写下每个组的线性预测器应该是什么样子的方程。然后考虑这些是否可以重新合并为一个模型,或者您是否需要单独的模型。

使用给出的示例,组为 NULL 与否。现在假设这是唯一具有空值的变量(为简单起见),并且您还有其他变量,因此您的预测器看起来像其中是自上次访问(或转换)以来的天数,是模型中的其他预测变量。现在,如果我在此模型中设置的值- 两组都具有相同的线性预测器。这可能是好是坏,这取决于模型(尽管在您的情况下可能很糟糕)。你可能还想要参数变化,所以我们有或者可能是一个不同的子集,所以你有 ηiNULL=xiTβηinotNULL=xiTβ+ziαzixizi=0βNULLηiNULL=x1,iTβ1,NULL+x2,iTβ2ηinotNULL=x1,iTβ1,notNULL+x2,iTβ2+ziα

这最终归结为在您的模型中包含一个 NULL 指示变量,并决定它应该和不应该与哪些其他变量交互。一旦你有了这个,将 NULL 值设置为零是合适的。之间存在交互项x1