正确处理 缺失值 是有效建模的重要组成部分。 本部分介绍缺失值是什么,并介绍了 Analysis Services 中提供的功能,以在生成数据挖掘结构和挖掘模型时处理缺失值。
数据挖掘中缺失值的定义
缺失的值可以表示多种不同的内容。 也许该字段不适用,事件未发生,或者数据不可用。 输入数据的人可能不知道正确的值,或者不关心字段是否未填写。
但是,存在许多数据挖掘场景,其中缺失值蕴含着重要信息。 缺失值的含义在很大程度上取决于上下文。 例如,发票列表中日期的缺失值与指示员工雇佣日期的列中缺少日期的含义有着显著的不同。 通常,Analysis Services 将缺失值视为信息性值,并调整将缺失值合并到计算中的概率。 这样做可以确保模型均衡,并且不会对现有事例进行过重的权重。
因此,Analysis Services 提供了两种截然不同的机制,用于管理和计算缺失值。 第一种方法在挖掘结构级别控制空值的处理。 第二种方法在每个算法的实现中有所不同,但通常定义如何在允许 null 值的模型中处理和计算缺失值。
指定空值的处理
在数据源中,缺失值可能以多种方式表示:null、电子表格中的空单元格、值 N/A 或其他代码,或作为人工值(如 9999)。 但是,出于数据挖掘目的,仅将 null 视为缺失值。 如果数据包含占位符值而不是 null 值,则它们可能会影响模型的结果,因此应将其替换为 null 或推断正确的值(如果可能)。 有多种工具可用于推断和填充适当的值,例如 SQL Server Integration Services 中的查找转换或数据探查器任务,或 Excel 数据挖掘 Add-Ins 中提供的“填充示例”工具。
如果要建模的任务指定列必须永远没有缺失值,则应在定义挖掘结构时将 NOT_NULL
建模标志应用于该列。 此标志指示如果案例没有适当的值,则处理应当失败。 如果在处理模型时发生此错误,可以记录错误并采取措施更正提供给模型的数据。
缺失状态的计算
对数据挖掘算法,缺失值是信息性的。 对于表, Missing
是与其他任何表一样的有效状态。 此外,数据挖掘模型可以使用其他值来预测值是否缺失。 换句话说,缺少值的事实不是错误。
创建挖掘模型时, Missing
状态会自动添加到所有离散列的模型中。 例如,如果输入列 [Gender] 包含两个可能的值:“男性”和“女性”,则会自动添加第三个值来表示 Missing
值,并且显示列所有值的分布直方图始终包含包含 Missing
值的事例计数。 如果“性别”列未缺少任何值,则直方图显示“缺失”状态在 0 种情况下。
当你认为数据可能没有所有可能值的示例时,默认包括 Missing
状态的理由就变得清晰了,并且你不希望模型仅仅因为数据中没有示例而排除这种可能性。 例如,如果商店的销售数据显示购买某种产品的所有客户都是女性,那么你不应该创建一个预测模型认为只有女性才能购买该产品。 相反,Analysis Services 会添加一个额外未知值的占位符 Missing
,以容纳可能的其他状态。
例如,下表显示了为 Bike Buyer 教程创建的决策树模型中(全部)节点的值分布。 在示例方案中,[Bike Buyer] 列是可预测属性,其中 1 表示“是”,0 表示“否”。
价值 | 例 |
---|---|
0 | 9296 |
1 | 9098 |
失踪 | 0 |
此分布显示大约有一半的客户购买了自行车,而另一半则没有。 此特定数据集非常干净;因此,每个事例在 [Bike Buyer] 列中都有一个值,值计数 Missing
为 0。 但是,如果 [Bike Buyer] 字段中有任何事例为 null,Analysis Services 会将该行视为具有 Missing
值的事例。
如果输入是连续列,则模型会为该属性制表两个可能的状态: Existing
和 Missing
。 换句话说,该列包含某些数值数据类型的值,或者不包含任何值。 对于具有值的情况,模型将计算平均值、标准偏差和其他有意义的统计信息。 对于没有值的情况,模型会提供Missing
的值计数,并相应地调整预测。 调整预测的方法因算法而异,如下一节所述。
注释
对于嵌套表中的属性,缺失值没有信息性。 例如,如果客户尚未购买产品,则嵌套 产品 表将没有与该产品对应的行,并且挖掘模型不会为缺失的产品创建属性。 但是,如果你对尚未购买某些产品的客户感兴趣,则可以使用模型筛选器中的 NOT EXISTS 语句创建一个模型,该模型根据嵌套表中的产品不存在进行筛选。 有关详细信息,请参阅 将筛选器应用于挖掘模型。
调整遗漏状态的概率
除了计算值外,Analysis Services 还计算数据集中任何值的概率。
Missing
的值也是如此。 例如,下表显示了上一示例中事例的概率:
价值 | 例 | 概率 |
---|---|---|
0 | 9296 | 50.55% |
1 | 9098 | 49.42% |
失踪 | 0 | 0.03% |
该值的 Missing
概率在事例数为0时被计算为0.03%,似乎很奇怪。 事实上,这种行为是经过设计的,代表了一种调整,以便模型能够优雅地处理未知值。
一般情况下,概率计算为有利事例除以所有可能的事例。 在此示例中,该算法计算满足特定条件([Bike Buyer] = 1 或 [Bike Buyer] = 0)的事例的总和,并将该数字除以总行数。 但是,为了考虑 Missing
这些情况,将 1 添加到所有可能的事例数中。 因此,未知事例的概率不再是零,而是一个非常小的数字,表明状态只是不可能的,并非不可能。
增加小 Missing
值不会改变预测器的结果;但是,在历史数据不包含所有可能的结果的情况下,它可以更好地建模。
注释
数据挖掘提供程序处理缺失值的方式有所不同。 例如,某些提供程序假定嵌套列中缺少数据是稀疏表示形式,但非嵌套列中缺少的数据是随机缺失的。
如果确定数据中指定了所有结果,并希望防止概率得到调整,则应在挖掘结构中的列上设置NOT_NULL建模标志。
注释
每个算法(包括你可能从第三方插件获取的自定义算法)都可以以不同的方式处理缺失值。
决策树模型中缺失值的特殊处理
Microsoft决策树算法计算缺失值的概率与其他算法不同。 决策树算法使用略有不同的公式来调整 Missing
状态,而不是只向事例总数添加 1。
在决策树模型中,状态的 Missing
概率计算如下:
StateProbability = (NodePriorProbability)* (StateSupport + 1) / (NodeSupport + TotalStates)
此外,在 SQL Server 2014 Analysis Services (SSAS)中,决策树算法提供了额外的调整,可帮助算法补偿模型中存在筛选器,这可能会导致训练期间排除许多状态。
在 SQL Server 2014 中,如果某个状态在训练期间存在,但恰好在特定节点中只有零支持,则会进行标准调整。 但是,如果在训练期间从未遇到某个状态,则算法会将概率设置为完全为零。 此调整不仅适用于Missing
状态,也适用于训练数据中存在的其他状态,但由于模型筛选,它们的支持为零。
此附加调整会导致以下公式:
StateProbability = 0.0(如果该状态在训练集中有 0 个支持)
ELSE StateProbability = (NodePriorProbability)* (StateSupport + 1) / (NodeSupport + TotalStatesWithNonZeroSupport)
这种调整的净效果是保持树的稳定性。
相关任务
以下主题提供有关如何处理缺失值的详细信息。
任务 | 链接 |
---|---|
向单个模型列添加标志,以控制缺失值的处理 | 查看或更改建模标志(数据挖掘) |
设置挖掘模型的属性以控制缺失值的处理 | 更改挖掘模型的属性 |
了解如何在 DMX 中指定建模标志 | 建模标志 (DMX) |
更改挖掘结构处理缺失值的方式 | 更改挖掘结构的属性 |