共用方式為


遺漏值 (Analysis Services - 數據採礦)

適用於: SQL Server 2019 和舊版 Analysis Services Azure Analysis Services Fabric/Power BI Premium

重要

SQL Server 2017 Analysis Services 中已淘汰數據採礦,現在已在 SQL Server 2022 Analysis Services 中停止。 檔不會更新為已淘汰和已停止的功能。 若要深入瞭解,請參閱 Analysis Services 回溯相容性

正確處理 遺漏值 是有效模型化的重要部分。 本節說明什麼是遺漏值,並描述 SQL Server Analysis Services 中提供的功能,以在建置數據採礦結構和採礦模型時處理遺漏值。

數據採礦中遺漏值的定義

遺漏的值可以表示一些不同的專案。 也許欄位不適用、事件未發生,或數據無法使用。 輸入數據的人員可能不知道正確的值,或不在意欄位是否未填入。

不過,有許多數據採礦案例遺漏值會提供重要資訊。 遺漏值的意義主要取決於內容。 例如,發票清單中的日期遺漏值與數據行中指出員工僱用日期的日期差異很大。 一般而言,SQL Server Analysis Services 會將遺漏值視為資訊,並調整機率,將遺漏值納入其計算中。 如此一來,您就可以確保模型已平衡,且不會太重地加權現有的案例。

因此,SQL Server Analysis Services 提供兩種不同的機制來管理和計算遺漏值。 第一個方法會控制採礦結構層級的 Null 處理。 第二種方法在每個演算法的實作中有所不同,但通常會定義遺漏值在允許 Null 值的模型中處理和計算的方式。

指定 Null 的處理

在您的數據源中,遺漏的值可能以許多方式表示:以 Null 表示、電子表格中的空白單元格、N/A 值或其他程式代碼,或做為 9999 之類的人工值。 不過,為了數據採礦的目的,只有 Null 會被視為遺漏值。 如果您的數據包含佔位元值而非 Null,它們可能會影響模型的結果,因此您應該盡可能以 Null 取代它們,或推斷正確的值。 您可以使用各種工具來推斷和填入適當的值,例如 SQL Server Integration Services 中的查閱轉換或數據分析工具工作,或 Excel 數據採礦 Add-Ins 中提供的填滿範例工具。

如果您要建立模型的工作指定數據行永遠不能有遺漏值,則當您定義採礦結構時,應該將 NOT_NULL 模型旗標套用至數據行。 這個旗標表示如果案例沒有適當的值,處理應該會失敗。 如果處理模型時發生此錯誤,您可以記錄錯誤,並採取步驟來更正提供給模型的數據。

遺漏狀態的計算

對數據採礦演算法,遺漏的值具有資訊性。 在數據表中,遺漏 是與其他任何狀態一樣的有效狀態。 此外,數據採礦模型可以使用其他值來預測值是否遺漏。 換句話說,遺漏值的事實不是錯誤。

當您建立採礦模型時,遺漏 狀態會自動新增至所有離散數據行的模型。 例如,如果輸入數據行 [Gender] 包含兩個可能的值:Male 和 Female,則會自動新增第三個值來代表 Missing 值,以及顯示數據行所有值分佈的直方圖一律包含 Missing 值的案例計數。 如果 [性別] 數據行未遺漏任何值,直方圖會顯示在0種情況下找到遺漏狀態。

當您考慮數據可能沒有所有可能值的範例時,預設包含 遺漏 狀態的理由會變得清楚,而且您不希望模型因為數據中沒有範例而排除可能性。 例如,如果商店的銷售數據顯示購買特定產品的所有客戶都是女性,您就不想建立預測只有女性可以購買產品的模型。 相反地,SQL Server Analysis Services 會新增額外的未知值的佔位符,稱為 遺漏,以容納可能的其他狀態。

例如,下表顯示針對 Bike Buyer 教學課程建立的判定樹模型中 (All) 節點的值分佈。 在範例案例中,[Bike Buyer] 數據行是可預測的屬性,其中 1 表示 「是」,0 表示「否」。

價值
0 9296
1 9098
失蹤 0

此發行版顯示,大約一半的客戶購買了自行車,一半沒有。 這個特定的數據集非常乾淨;因此,每個案例在 [Bike Buyer] 數據行中都有一個值,而且 遺漏 值的計數為 0。 不過,如果 [Bike Buyer] 欄位中有任何 Null 的情況,SQL Server Analysis Services 會將該數據列計算為 遺漏 值的情況。

如果輸入是連續資料行,則模型會為 屬性表化兩個可能的狀態:現有遺漏。 換句話說,數據行包含某些數值數據類型的值,或不包含任何值。 對於具有值的案例,模型會計算平均值、標準偏差和其他有意義的統計數據。 對於沒有值的案例,模型會提供遺漏 值 計數,並據以調整預測。 調整預測的方法會根據演算法而有所不同,如下一節所述。

注意

對於巢狀數據表中的屬性,遺漏的值不會提供資訊。 例如,如果客戶尚未購買產品,巢狀 Products 數據表就不會有對應至該產品的數據列,而採礦模型不會為遺漏的產品建立屬性。 不過,如果您對未購買特定產品的客戶感興趣,您可以使用模型篩選條件中的 NOT EXISTS 語句,建立根據巢狀數據表中產品不存在的篩選模型。 如需詳細資訊,請參閱 將篩選套用至採礦模型

調整遺漏狀態的機率

除了計算值之外,SQL Server Analysis Services 也會計算數據集中任何值的機率。 Missing 值也是如此。 例如,下表顯示上一個範例中案例的機率:

價值 概率
0 9296 50.55%
1 9098 49.42%
失蹤 0 0.03%

當案例數目為 0 時,遺漏 值的機率計算為 0.03%,這似乎很奇怪。 事實上,此行為是設計方式,並代表可讓模型正常處理未知值的調整。

一般而言,機率會計算為有利案例除以所有可能案例。 在此範例中,演算法會計算符合特定條件的案例總和([Bike Buyer] = 1 或 [Bike Buyer] = 0),並將該數位除以數據列總數。 不過,為了考慮 遺漏 案例,1 會新增至所有可能案例的數目。 因此,未知案例的機率不再是零,而是一個非常小的數位,表示狀態只是不可能的,不可能。

加入小型 遺漏 值並不會變更預測值的結果:不過,它會在歷程記錄數據不包含所有可能結果的案例中,啟用更佳的模型化。

注意

數據採礦提供者處理遺漏值的方式不同。 例如,某些提供者假設巢狀數據行中遺漏的數據是疏鬆表示法,但非巢狀數據行中遺漏的數據是隨機遺漏的。

如果您確定數據中指定了所有結果,而且想要防止機率調整,您應該在採礦結構中的數據行上設定NOT_NULL模型旗標。

注意

每個演算法,包括您可能從第三方外掛程式取得的自定義演算法,都可以以不同的方式處理遺漏值。

判定樹模型中遺漏值的特殊處理

Microsoft判定樹演算法會計算與其他演算法不同之遺漏值的機率。 判定樹演算法會使用稍微不同的公式來調整 遺漏 狀態,而不是只將 1 新增至案例總數。

在判定樹模型中,遺漏 狀態的機率計算如下:

StateProbability = (NodePriorProbability)* (StateSupport + 1) / (NodeSupport + TotalStates)

判定樹演算法提供額外的調整,可協助演算法補償模型上的篩選條件是否存在,這可能會導致在定型期間排除許多狀態。

在 SQL Server 2017 中,如果在定型期間存在狀態,但恰好在特定節點中只有零支援,則會進行標準調整。 不過,如果在定型期間從未遇到狀態,演算法會將機率設定為完全為零。 這項調整不僅適用於 遺漏 狀態,也適用於存在於定型數據中的其他狀態,但模型篩選的結果為零支援。

此額外調整會產生下列公式:

StateProbability = 0.0,如果該狀態在定型集中有 0 個支援

ELSE StateProbability = (NodePriorProbability)* (StateSupport + 1) / (NodeSupport + TotalStatesWithNonZeroSupport)

這項調整的凈效果是維護樹狀結構的穩定性。

下列主題提供有關如何處理遺漏值的詳細資訊。

任務 連結
將旗標新增至個別模型數據行,以控制遺漏值的處理 檢視或變更模型旗標 (資料採礦)
設定採礦模型的屬性以控制遺漏值的處理 變更採礦模型的屬性
瞭解如何在 DMX 中指定模型旗標 模型旗標 (DMX)
改變採礦結構處理遺漏值的方式 變更採礦結構的屬性

另請參閱

採礦模型內容 (Analysis Services - 數據採礦)
模型旗標 (數據採礦)