我有一个包含 1000 万个观测值的庞大数据集,但 40% 的记录中的大多数变量都丢失了。整个数据集有几个变量可用,例如 sic 代码(行业类别)和公司地址。
如果我在其他 60% 的记录(非缺失值)上构建模型,可能会出现什么问题?在花时间构建模型之前,您能建议采取任何措施/行动吗?
- 我计划做几件事来确保 60% 的记录代表人口:
60% 记录(非缺失值)与 100% 记录按行业类别/州划分的公司分布
60% 记录(非缺失)与 100% 记录的目标变量分布
我有一个包含 1000 万个观测值的庞大数据集,但 40% 的记录中的大多数变量都丢失了。整个数据集有几个变量可用,例如 sic 代码(行业类别)和公司地址。
如果我在其他 60% 的记录(非缺失值)上构建模型,可能会出现什么问题?在花时间构建模型之前,您能建议采取任何措施/行动吗?
60% 记录(非缺失值)与 100% 记录按行业类别/州划分的公司分布
60% 记录(非缺失)与 100% 记录的目标变量分布
一般来说,您应该调查您的价值观缺失的过程并尝试处理它。我假设你检查过:
如果你检查了,你可以继续下一步:建模。你如何构建你的模型取决于它的目的是什么,你想用它做什么。在这里,你应该问自己一些关于那些有缺失值的 40% 记录的实际问题。
第一个是:你真的需要为那些有很多缺失值的实例输出一些东西吗?
在某些情况下,特别是当输出是公开的(或可以单独提出质疑)时,最好不要输出任何内容或类似“我们没有足够的数据”这样的情况。实际上,这意味着将它们从您的数据集中移除并在您的其他实例上构建您的模型。
相反,当您寻找性能(而不是向某人解释)时,您可能希望将该模式用作信息。最好的方法是引入一些计算该实例缺失值比例的功能。它可能有助于一般模型(见下文)处理该信息。
如果你需要输出一些东西,因为你需要某种平均值,或者因为管理层要求它,那么考虑第二个问题:你应该制作多个模型吗?
一种方法是只使用一个模型。一些模型,主要是树,可以处理缺失值。XGBoost(eXtreme Gradient Boosted trees)等更高级的方法甚至被认为是公司数据等表格数据的最新技术。一般来说,这很有效(并且可能与 XGBoost 一起工作得很好)。然而,如果我自己这样做了,你最终会得到一些很难解释的东西,而且总体而言,你会混淆你的人口中有很大一部分缺少数据。更具体地说,在像您这样的块中缺少数据的情况下,您可能最终会在树中出现一个非常早期的分裂,并且实际上在一个模型中包含两个模型,并且可能存在奇怪的交互。
另一种方法是设计两个模型:一个非常高性能(比如 XGBoost),用于您的数据几乎没有缺失值,另一个更简单地处理您的其他数据。这将帮助您非常有效地处理具有大量缺失值的实例。对于有大量缺失数据的公司数据,您可能只想按主要描述词(规模、行业、地理区域)构建一个简单的结果平均值表。这将使您有大部分时间来处理更复杂的模型及其解释(这可能是您获得报酬并且更有趣的原因)。
我同意主要的潜在问题是由于一组特定的实例在缺失值中被过度表示而导致的偏差。例如,在未知或不明确的情况下,公司类型可能会丢失,这可能对应于特定的公司简介(例如,较小的、较新的......)。对我来说,您提出的确保剩余数据具有代表性的措施看起来不错(当然这取决于数据的具体情况)。
另一个需要考虑的重要点是模型将用于什么:如果它要用于从看不见的实例中预测某些东西,那么这些未来实例中的一些可能也会有缺失值。在这种情况下,如果模型不能处理它们,它可能就没那么有用了。