遺漏值(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、試算表中的空白儲存格、N/A 或其他代碼,或像 9999 這樣的人工值來表示缺失值。 不過,為了數據採礦的目的,只有 Null 會被視為遺漏值。 如果您的數據包含佔位元值而非 Null,它們可能會影響模型的結果,因此您應該盡可能以 Null 取代它們,或推斷正確的值。 可以使用各種工具來推斷並填入適當的值,例如 SQL Server Integration Services 中的查找轉換或資料配置器任務,或 Excel 資料探勘增益集中提供的依範例填充工具。

如果你建模的任務不允許欄位有缺失值,定義挖礦結構時就套用 NOT_NULL 建模標記。 此旗標表示,若個案沒有適當的值,則處理作業應失敗。 如果處理模型時發生此錯誤,您可以記錄錯誤,並採取步驟來更正提供給模型的數據。

缺失狀態的計算

資料探勘演算法將缺失值視為資訊性。 在案例表中, 缺失 是有效的狀態。 資料探勘模型可以用其他值來預測值是否遺失,因此缺失值不算錯誤。

當您建立資料探勘模型時,所有離散欄位的缺失 狀態會自動新增到模型中。 例如,若輸入欄 [Gender] 包含男性與女性兩個值,模型會加入第三個值,為 缺失。 該欄的直方圖包含處於 遺漏 狀態的案例數量。 如果 [性別] 數據行未遺漏任何值,直方圖會顯示在0種情況下找到遺漏狀態。

當你考慮到資料可能沒有所有可能值的範例,且你不希望模型僅因資料中沒有範例就排除這種可能性時,預設包含 缺失 狀態的理由就變得清晰。 例如,如果商店的銷售數據顯示購買特定產品的所有客戶都是女性,您就不想建立預測只有女性可以購買產品的模型。 取而代之的是,SQL Server Analysis Services 會為額外的未知值(稱為 缺失)加上一個佔位符,以容納可能的其他狀態。

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

價值 案例
0 9296
1 9098
失蹤 0

分布顯示約有一半的顧客購買自行車,另一半則不購買。 本資料集中的每個案例在[Bike Buyer]欄位都有一個值,因此 遺失 值的數量為零。 若案件在 [Bike Buyer] 欄位有空,SQL Server Analysis Services 會將該列視為有遺失值的案件。

若輸入為連續欄位,模型會為該屬性列出兩種可能狀態: 存在 狀態與 缺失狀態。 換句話說,數據行包含某些數值數據類型的值,或不包含任何值。 對於具有值的案例,模型會計算平均值、標準偏差和其他有意義的統計數據。 對於沒有值的情況,模型會提供缺失值的計數,並相應調整預測結果。 調整預測的方法會根據演算法而有所不同,如下一節所述。

注意

對於巢狀資料表中的屬性,缺失值並不會帶來什麼有用的資訊。 例如,如果客戶沒有購買某產品,巢狀 產品 表中沒有該產品的資料列,挖礦模型也不會為該產品建立屬性。 要識別未購買特定產品的顧客,可以在模型篩選器中使用 NOT EXISTS 陳述式,篩選巢狀表格中不存在的產品。 欲了解更多資訊,請參閱 「對採礦模型應用過濾器」。

對漏失狀態的機率調整

除了計算值之外,SQL Server Analysis Services 也會計算數據集中任何值的機率。 同樣的計算也適用於 遺失 值。 例如,下表顯示上一個範例中案例的機率:

價值 案例 概率
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

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

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

這些資源說明了如何處理遺失值。

任務 連結
在每個模型欄位新增旗標,以控制模型如何處理遺失值 檢視或更改建模旗標(資料探勘)
設定挖礦模型屬性來控制模型如何處理遺失值 改變採礦模型的性質
在 DMX 中指定建模標誌 建模旗標(DMX)
改變挖礦結構處理遺失值的方式 改變採礦結構的性質

另請參閱

挖礦模型內容(分析服務-資料探勘)
建模旗標(資料探勘)