'​一文看懂數據清洗:缺失值、異常值和重複值的處理'

數據庫 Python 人工智能 隨機森林 華章科技 2019-09-02
"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
​一文看懂數據清洗:缺失值、異常值和重複值的處理

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分佈規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是,我們承認缺失值的存在,並且把數據缺失也作為數據分佈規律的一部分,將變量的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分佈狀態轉換為多個變量的真值分佈狀態。

  • 轉換前:性別(值域:男、女、未知)。
  • 轉換後:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。

然後將這3列新的字段作為輸入維度替換原來的1個字段參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用,很多模型對於缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基於密度的帶有噪聲的空間聚類)等。這些模型對於缺失值的處理思路是:

  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分佈的一種狀態,並參與到建模過程,例如各種決策樹及其變體。
  • 不基於距離做計算,因此基於值的距離做計算本身的影響就消除了,例如DBSCAN。

在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數量有多少)的字段對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的字段或特徵的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分佈佔比,以及缺失值是否具有顯著的無規律分佈特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有采集到數據,字段的值應該為Null,雖然由於在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
​一文看懂數據清洗:缺失值、異常值和重複值的處理

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分佈規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是,我們承認缺失值的存在,並且把數據缺失也作為數據分佈規律的一部分,將變量的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分佈狀態轉換為多個變量的真值分佈狀態。

  • 轉換前:性別(值域:男、女、未知)。
  • 轉換後:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。

然後將這3列新的字段作為輸入維度替換原來的1個字段參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用,很多模型對於缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基於密度的帶有噪聲的空間聚類)等。這些模型對於缺失值的處理思路是:

  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分佈的一種狀態,並參與到建模過程,例如各種決策樹及其變體。
  • 不基於距離做計算,因此基於值的距離做計算本身的影響就消除了,例如DBSCAN。

在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數量有多少)的字段對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的字段或特徵的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分佈佔比,以及缺失值是否具有顯著的無規律分佈特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有采集到數據,字段的值應該為Null,雖然由於在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

02 不要輕易拋棄異常數據

異常數據是數據分佈的常態,處於特定分佈區域或範圍之外的數據通常會被定義為異常或“噪音”。產生數據“噪音”的原因很多,例如業務運營操作、數據採集問題、數據同步問題等。

對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:

  • 一種是“偽異常”,這些異常是由於業務特定運營動作產生的,其實是正常反映業務狀態,而不是數據本身的異常規律。
  • 一種是“真異常”,這些異常並不是由於特定的業務動作引起的,而是客觀地反映了數據本身分佈異常的分佈個案。

大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

1. 異常值正常反映了業務運營結果

該場景是由業務部門的特定動作導致的數據分佈異常,如果拋棄異常值將導致無法正確反饋業務結果。

例如:公司的A商品正常情況下日銷量為1000臺左右。由於昨日舉行優惠促銷活動導致總銷量達到10000臺,由於後端庫存備貨不足導致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業務運營的結果,而非數據異常案例。

2. 異常檢測模型

異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。

異常檢測模型常用於客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預測、網絡入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。

3. 包容異常值的數據建模

如果數據算法和模型對異常值不敏感,那麼即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。

提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統計量、預測量進行替換。但這種方法不推薦使用,原因是這會將其中的關鍵分佈特徵消除,從而改變原始數據集的分佈規律。

"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
​一文看懂數據清洗:缺失值、異常值和重複值的處理

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分佈規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是,我們承認缺失值的存在,並且把數據缺失也作為數據分佈規律的一部分,將變量的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分佈狀態轉換為多個變量的真值分佈狀態。

  • 轉換前:性別(值域:男、女、未知)。
  • 轉換後:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。

然後將這3列新的字段作為輸入維度替換原來的1個字段參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用,很多模型對於缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基於密度的帶有噪聲的空間聚類)等。這些模型對於缺失值的處理思路是:

  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分佈的一種狀態,並參與到建模過程,例如各種決策樹及其變體。
  • 不基於距離做計算,因此基於值的距離做計算本身的影響就消除了,例如DBSCAN。

在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數量有多少)的字段對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的字段或特徵的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分佈佔比,以及缺失值是否具有顯著的無規律分佈特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有采集到數據,字段的值應該為Null,雖然由於在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

02 不要輕易拋棄異常數據

異常數據是數據分佈的常態,處於特定分佈區域或範圍之外的數據通常會被定義為異常或“噪音”。產生數據“噪音”的原因很多,例如業務運營操作、數據採集問題、數據同步問題等。

對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:

  • 一種是“偽異常”,這些異常是由於業務特定運營動作產生的,其實是正常反映業務狀態,而不是數據本身的異常規律。
  • 一種是“真異常”,這些異常並不是由於特定的業務動作引起的,而是客觀地反映了數據本身分佈異常的分佈個案。

大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

1. 異常值正常反映了業務運營結果

該場景是由業務部門的特定動作導致的數據分佈異常,如果拋棄異常值將導致無法正確反饋業務結果。

例如:公司的A商品正常情況下日銷量為1000臺左右。由於昨日舉行優惠促銷活動導致總銷量達到10000臺,由於後端庫存備貨不足導致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業務運營的結果,而非數據異常案例。

2. 異常檢測模型

異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。

異常檢測模型常用於客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預測、網絡入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。

3. 包容異常值的數據建模

如果數據算法和模型對異常值不敏感,那麼即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。

提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統計量、預測量進行替換。但這種方法不推薦使用,原因是這會將其中的關鍵分佈特徵消除,從而改變原始數據集的分佈規律。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

03 數據重複就需要去重嗎

數據集中的重複值包括以下兩種情況:

  • 數據值完全相同的多條數據記錄。這是最常見的數據重複情況。
  • 數據主體相同但匹配到的唯一屬性值不同。這種情況多見於數據倉庫中的變化維度表,同一個事實表的主體會匹配同一個屬性的多個值。

去重是重複值處理的主要方法,主要目的是保留能顯示特徵的唯一數據記錄。但當遇到以下幾種情況時,請慎重(不建議)執行數據去重。

1. 重複的記錄用於分析演變規律

以變化維度表為例。例如在商品類別的維度表中,每個商品對應的同1個類別的值應該是唯一的,例如蘋果iPhone7屬於個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當所有商品類別的值重構或升級時(大多數情況下隨著公司的發展都會這麼做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。

"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
​一文看懂數據清洗:缺失值、異常值和重複值的處理

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分佈規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是,我們承認缺失值的存在,並且把數據缺失也作為數據分佈規律的一部分,將變量的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分佈狀態轉換為多個變量的真值分佈狀態。

  • 轉換前:性別(值域:男、女、未知)。
  • 轉換後:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。

然後將這3列新的字段作為輸入維度替換原來的1個字段參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用,很多模型對於缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基於密度的帶有噪聲的空間聚類)等。這些模型對於缺失值的處理思路是:

  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分佈的一種狀態,並參與到建模過程,例如各種決策樹及其變體。
  • 不基於距離做計算,因此基於值的距離做計算本身的影響就消除了,例如DBSCAN。

在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數量有多少)的字段對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的字段或特徵的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分佈佔比,以及缺失值是否具有顯著的無規律分佈特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有采集到數據,字段的值應該為Null,雖然由於在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

02 不要輕易拋棄異常數據

異常數據是數據分佈的常態,處於特定分佈區域或範圍之外的數據通常會被定義為異常或“噪音”。產生數據“噪音”的原因很多,例如業務運營操作、數據採集問題、數據同步問題等。

對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:

  • 一種是“偽異常”,這些異常是由於業務特定運營動作產生的,其實是正常反映業務狀態,而不是數據本身的異常規律。
  • 一種是“真異常”,這些異常並不是由於特定的業務動作引起的,而是客觀地反映了數據本身分佈異常的分佈個案。

大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

1. 異常值正常反映了業務運營結果

該場景是由業務部門的特定動作導致的數據分佈異常,如果拋棄異常值將導致無法正確反饋業務結果。

例如:公司的A商品正常情況下日銷量為1000臺左右。由於昨日舉行優惠促銷活動導致總銷量達到10000臺,由於後端庫存備貨不足導致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業務運營的結果,而非數據異常案例。

2. 異常檢測模型

異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。

異常檢測模型常用於客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預測、網絡入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。

3. 包容異常值的數據建模

如果數據算法和模型對異常值不敏感,那麼即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。

提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統計量、預測量進行替換。但這種方法不推薦使用,原因是這會將其中的關鍵分佈特徵消除,從而改變原始數據集的分佈規律。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

03 數據重複就需要去重嗎

數據集中的重複值包括以下兩種情況:

  • 數據值完全相同的多條數據記錄。這是最常見的數據重複情況。
  • 數據主體相同但匹配到的唯一屬性值不同。這種情況多見於數據倉庫中的變化維度表,同一個事實表的主體會匹配同一個屬性的多個值。

去重是重複值處理的主要方法,主要目的是保留能顯示特徵的唯一數據記錄。但當遇到以下幾種情況時,請慎重(不建議)執行數據去重。

1. 重複的記錄用於分析演變規律

以變化維度表為例。例如在商品類別的維度表中,每個商品對應的同1個類別的值應該是唯一的,例如蘋果iPhone7屬於個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當所有商品類別的值重構或升級時(大多數情況下隨著公司的發展都會這麼做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

此時,我們在數據中使用Full join做跨重構時間點的類別匹配時,會發現蘋果iPhone7會同時匹配到個人電子消費品和手機數碼2條記錄。對於這種情況,需要根據具體業務需求處理。

  • 如果跟業務溝通,兩條數據需要做整合,那麼需要確定一個整合字段用來涵蓋2條記錄。其實就是將2條數據再次映射到一個類別主體中。
  • 如果跟業務溝通,需要同時保存兩條數據,那麼此時不能做任何處理。後續的具體處理根據建模需求而定。

相關知識點:變化維度表

變化維度表是數據倉庫中的概念。維度表類似於匹配表,用來存儲靜態的維度、屬性等數據,而這些數據一般都不會改變。但是變與不變是一個相對的概念,隨著企業的不斷髮展,很多時候維度也會隨著發生變化。因此在某個時間內的維度是不變的,而從整體來看維度也是變化的。

對於維度的變化,有3種方式進行處理:

直接覆蓋原有值。這種情況下每個唯一ID就只對應一個屬性值,這樣做雖然簡單粗暴也容易實現,但是無法保留歷史信息。

添加新的維度行。此時同一個ID會得到兩條匹配記錄。

增加新的屬性列。此時不會新增數據行記錄,只是在原有的記錄中新增一列用於標記不同時期的值。

具體到企業內使用哪種方式,通常由數據庫管理員根據實際情況來決定。

注意:真正的變化維度表或維度表不會以中文做主鍵,通常都會使用數字或字符串類作為唯一關聯ID,本節的示例僅做說明之用。

2. 重複的記錄用於樣本不均衡處理

在開展分類數據建模工作時,樣本不均衡是影響分類模型效果的關鍵因素之一。解決分類方法的一種方法是對少數樣本類別做簡單過採樣,通過隨機過採樣,採取簡單複製樣本的策略來增加少數類樣本。

經過這種處理方式後,也會在數據記錄中產生相同記錄的多條數據。此時,我們不能對其中的重複值執行去重操作。

3. 重複的記錄用於檢測業務規則問題

對於以分析應用為主的數據集而言,存在重複記錄不會直接影響實際運營,畢竟數據集主要是用來做分析的。

但對於事務型的數據而言,重複數據可能意味著重大運營規則問題,尤其當這些重複值出現在與企業經營中與金錢相關的業務場景時,例如:重複的訂單、重複的充值、重複的預約項、重複的出庫申請等。

這些重複的數據記錄通常是由於數據採集、存儲、驗證和審核機制的不完善等問題導致的,會直接反映到前臺生產和運營系統。以重複訂單為例:

  • 假如前臺的提交訂單功能不做唯一性約束,那麼在一次訂單中重複點擊提交訂單按鈕,就會觸發多次重複提交訂單的申請記錄,如果該操作審批通過後,會聯動帶動運營後端的商品分揀、出庫、送貨,如果用戶接收重複商品則會導致重大損失;
  • 如果用戶退貨則會增加反向訂單,並影響物流、配送和倉儲相關的各個運營環節,導致運營資源無端消耗、商品損耗增加、倉儲物流成本增加等問題。

因此,這些問題必須在前期數據採集和存儲時就通過一定機制解決和避免。如果確實產生了此類問題,那麼數據工作者或運營工作者可以基於這些重複值來發現規則漏洞,並配合相關部門,最大限度地降低由此而帶來的運營風險。

關於作者:宋天龍,大數據技術專家,觸脈諮詢合夥人兼副總裁,前Webtrekk中國區技術和諮詢負責人(Webtrekk,德國的在線數據分析服務提供商)。擅長數據挖掘、建模、分析與運營,精通端到端數據價值場景設計、業務需求轉換、數據結構梳理、數據建模與學習以及數據工程交付。

本文摘編自《Python數據分析與數據化運營》(第2版),經出版方授權發佈。

"
導讀:在數據清洗過程中,主要處理的是缺失值、異常值和重複值。所謂清洗,是對數據集通過丟棄、填充、替換、去重等操作,達到去除異常、糾正錯誤、補足缺失的目的。

作者:宋天龍

如需轉載請聯繫華章科技

​一文看懂數據清洗:缺失值、異常值和重複值的處理

01 數據列缺失的4種處理方法

數據缺失分為兩種:一種是行記錄的缺失,這種情況又稱數據記錄丟失;另一種是數據列值的缺失,即由於各種原因導致的數據記錄中某些列的值空缺。

不同的數據存儲和環境中對於缺失值的表示結果也不同,例如,數據庫中是Null,Python返回對象是None,Pandas或Numpy中是NaN。

在極少數情況下,部分缺失值也會使用空字符串來代替,但空字符串絕對不同於缺失值。從對象的實體來看,空字符串是有實體的,實體為字符串類型;而缺失值其實是沒有實體的,即沒有數據類型。

丟失的數據記錄通常無法找回,這裡重點討論數據列類型缺失值的處理思路。通常有4種思路。

1. 丟棄

這種方法簡單明瞭,直接刪除帶有缺失值的行記錄(整行刪除)或者列字段(整列刪除),減少缺失數據記錄對總體數據的影響。但丟棄意味著會消減數據特徵,以下任何一種場景都不宜採用該方法。

  • 數據集總體中存在大量的數據記錄不完整情況且比例較大,例如超過10%,刪除這些帶有缺失值的記錄意味著會損失過多有用信息。
  • 帶有缺失值的數據記錄大量存在著明顯的數據分佈規律或特徵,例如帶有缺失值的數據記錄的目標標籤(即分類中的Label變量)主要集中於某一類或幾類,如果刪除這些數據記錄將使對應分類的數據樣本丟失大量特徵信息,導致模型過擬合或分類不準確。

2. 補全

相對丟棄而言,補全是更加常用的缺失值處理方式。通過一定的方法將缺失的數據補上,從而形成完整的數據記錄,對於後續的數據處理、分析和建模至關重要。常用的補全方法如下。

  • 統計法:對於數值型的數據,使用均值、加權均值、中位數等方法補足;對於分類型數據,使用類別眾數最多的值補足。
  • 模型法:更多時候我們會基於已有的其他字段,將缺失字段作為目標變量進行預測,從而得到最為可能的補全值。如果帶有缺失值的列是數值變量,採用迴歸模型補全;如果是分類變量,則採用分類模型補全。
  • 專家補全:對於少量且具有重要意義的數據記錄,專家補足也是非常重要的一種途徑。
  • 其他方法:例如隨機法、特殊值法、多重填補等。
​一文看懂數據清洗:缺失值、異常值和重複值的處理

3. 真值轉換法

在某些情況下,我們可能無法得知缺失值的分佈規律,並且無法對於缺失值採用上述任何一種補全方法做處理;或者我們認為數據缺失也是一種規律,不應該輕易對缺失值隨意處理,那麼還有一種缺失值處理思路—真值轉換。

該思路的根本觀點是,我們承認缺失值的存在,並且把數據缺失也作為數據分佈規律的一部分,將變量的實際值和缺失值都作為輸入維度參與後續數據處理和模型計算中。但是變量的實際值可以作為變量值參與模型計算,而缺失值通常無法參與運算,因此需要對缺失值進行真值轉換。

以用戶性別字段為例,很多數據庫集都無法對會員的性別進行補足,但又捨不得將其丟棄掉,那麼我們將選擇將其中的值,包括男、女、未知從一個變量的多個值分佈狀態轉換為多個變量的真值分佈狀態。

  • 轉換前:性別(值域:男、女、未知)。
  • 轉換後:性別_男(值域1或0)、性別_女(值域1或0)、性別_未知(值域1或0)。

然後將這3列新的字段作為輸入維度替換原來的1個字段參與後續模型計算。

4. 不處理

在數據預處理階段,對於具有缺失值的數據記錄不做任何處理,也是一種思路。這種思路主要看後期的數據分析和建模應用,很多模型對於缺失值有容忍度或靈活的處理方法,因此在預處理階段可以不做處理。

常見的能夠自動處理缺失值的模型包括:KNN、決策樹和隨機森林、神經網絡和樸素貝葉斯、DBSCAN(基於密度的帶有噪聲的空間聚類)等。這些模型對於缺失值的處理思路是:

  • 忽略,缺失值不參與距離計算,例如KNN。
  • 將缺失值作為分佈的一種狀態,並參與到建模過程,例如各種決策樹及其變體。
  • 不基於距離做計算,因此基於值的距離做計算本身的影響就消除了,例如DBSCAN。

在數據建模前的數據歸約階段,有一種歸約的思路是降維,降維中有一種直接選擇特徵的方法。假如我們通過一定方法確定帶有缺失值(無論缺少字段的值缺失數量有多少)的字段對於模型的影響非常小,那麼我們根本就不需要對缺失值進行處理。

因此,後期建模時的字段或特徵的重要性判斷也是決定是否處理字段缺失值的重要參考因素之一。

對於缺失值的處理思路是先通過一定方法找到缺失值,接著分析缺失值在整體樣本中的分佈佔比,以及缺失值是否具有顯著的無規律分佈特徵,然後考慮後續要使用的模型中是否能滿足缺失值的自動處理,最後決定採用哪種缺失值處理方法。

在選擇處理方法時,注意投入的時間、精力和產出價值,畢竟,處理缺失值只是整個數據工作的冰山一角而已。

在數據採集時,可在採集端針對各個字段設置一個默認值。以MySQL為例,在設計數據庫表時,可通過default指定每個字段的默認值,該值必須是常數。

在這種情況下,假如原本數據採集時沒有采集到數據,字段的值應該為Null,雖然由於在建立庫表時設置了默認值會導致“缺失值”看起來非常正常,但本質上還是缺失的。對於這類數據需要尤其注意。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

02 不要輕易拋棄異常數據

異常數據是數據分佈的常態,處於特定分佈區域或範圍之外的數據通常會被定義為異常或“噪音”。產生數據“噪音”的原因很多,例如業務運營操作、數據採集問題、數據同步問題等。

對異常數據進行處理前,需要先辨別出到底哪些是真正的數據異常。從數據異常的狀態看分為兩種:

  • 一種是“偽異常”,這些異常是由於業務特定運營動作產生的,其實是正常反映業務狀態,而不是數據本身的異常規律。
  • 一種是“真異常”,這些異常並不是由於特定的業務動作引起的,而是客觀地反映了數據本身分佈異常的分佈個案。

大多數數據挖掘或數據工作中,異常值都會在數據的預處理過程中被認為是噪音而剔除,以避免其對總體數據評估和分析挖掘的影響。但在以下幾種情況下,我們無須對異常值做拋棄處理。

1. 異常值正常反映了業務運營結果

該場景是由業務部門的特定動作導致的數據分佈異常,如果拋棄異常值將導致無法正確反饋業務結果。

例如:公司的A商品正常情況下日銷量為1000臺左右。由於昨日舉行優惠促銷活動導致總銷量達到10000臺,由於後端庫存備貨不足導致今日銷量又下降到100臺。在這種情況下,10000臺和100臺都正確地反映了業務運營的結果,而非數據異常案例。

2. 異常檢測模型

異常檢測模型是針對整體樣本中的異常數據進行分析和挖掘,以便找到其中的異常個案和規律,這種數據應用圍繞異常值展開,因此異常值不能做拋棄處理。

異常檢測模型常用於客戶異常識別、信用卡欺詐、貸款審批識別、藥物變異識別、惡劣氣象預測、網絡入侵檢測、流量作弊檢測等。在這種情況下,異常數據本身是目標數據,如果被處理掉將損失關鍵信息。

3. 包容異常值的數據建模

如果數據算法和模型對異常值不敏感,那麼即使不處理異常值也不會對模型本身造成負面影響。例如在決策樹中,異常值本身就可以作為一種分裂節點。

提示:除了拋棄和保留,還有一種思路可對異常值進行處理,例如使用其他統計量、預測量進行替換。但這種方法不推薦使用,原因是這會將其中的關鍵分佈特徵消除,從而改變原始數據集的分佈規律。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

03 數據重複就需要去重嗎

數據集中的重複值包括以下兩種情況:

  • 數據值完全相同的多條數據記錄。這是最常見的數據重複情況。
  • 數據主體相同但匹配到的唯一屬性值不同。這種情況多見於數據倉庫中的變化維度表,同一個事實表的主體會匹配同一個屬性的多個值。

去重是重複值處理的主要方法,主要目的是保留能顯示特徵的唯一數據記錄。但當遇到以下幾種情況時,請慎重(不建議)執行數據去重。

1. 重複的記錄用於分析演變規律

以變化維度表為例。例如在商品類別的維度表中,每個商品對應的同1個類別的值應該是唯一的,例如蘋果iPhone7屬於個人電子消費品,這樣才能將所有商品分配到唯一類別屬性值中。但當所有商品類別的值重構或升級時(大多數情況下隨著公司的發展都會這麼做),原有的商品可能被分配了類別中的不同值。如下表所示展示了這種變化。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

此時,我們在數據中使用Full join做跨重構時間點的類別匹配時,會發現蘋果iPhone7會同時匹配到個人電子消費品和手機數碼2條記錄。對於這種情況,需要根據具體業務需求處理。

  • 如果跟業務溝通,兩條數據需要做整合,那麼需要確定一個整合字段用來涵蓋2條記錄。其實就是將2條數據再次映射到一個類別主體中。
  • 如果跟業務溝通,需要同時保存兩條數據,那麼此時不能做任何處理。後續的具體處理根據建模需求而定。

相關知識點:變化維度表

變化維度表是數據倉庫中的概念。維度表類似於匹配表,用來存儲靜態的維度、屬性等數據,而這些數據一般都不會改變。但是變與不變是一個相對的概念,隨著企業的不斷髮展,很多時候維度也會隨著發生變化。因此在某個時間內的維度是不變的,而從整體來看維度也是變化的。

對於維度的變化,有3種方式進行處理:

直接覆蓋原有值。這種情況下每個唯一ID就只對應一個屬性值,這樣做雖然簡單粗暴也容易實現,但是無法保留歷史信息。

添加新的維度行。此時同一個ID會得到兩條匹配記錄。

增加新的屬性列。此時不會新增數據行記錄,只是在原有的記錄中新增一列用於標記不同時期的值。

具體到企業內使用哪種方式,通常由數據庫管理員根據實際情況來決定。

注意:真正的變化維度表或維度表不會以中文做主鍵,通常都會使用數字或字符串類作為唯一關聯ID,本節的示例僅做說明之用。

2. 重複的記錄用於樣本不均衡處理

在開展分類數據建模工作時,樣本不均衡是影響分類模型效果的關鍵因素之一。解決分類方法的一種方法是對少數樣本類別做簡單過採樣,通過隨機過採樣,採取簡單複製樣本的策略來增加少數類樣本。

經過這種處理方式後,也會在數據記錄中產生相同記錄的多條數據。此時,我們不能對其中的重複值執行去重操作。

3. 重複的記錄用於檢測業務規則問題

對於以分析應用為主的數據集而言,存在重複記錄不會直接影響實際運營,畢竟數據集主要是用來做分析的。

但對於事務型的數據而言,重複數據可能意味著重大運營規則問題,尤其當這些重複值出現在與企業經營中與金錢相關的業務場景時,例如:重複的訂單、重複的充值、重複的預約項、重複的出庫申請等。

這些重複的數據記錄通常是由於數據採集、存儲、驗證和審核機制的不完善等問題導致的,會直接反映到前臺生產和運營系統。以重複訂單為例:

  • 假如前臺的提交訂單功能不做唯一性約束,那麼在一次訂單中重複點擊提交訂單按鈕,就會觸發多次重複提交訂單的申請記錄,如果該操作審批通過後,會聯動帶動運營後端的商品分揀、出庫、送貨,如果用戶接收重複商品則會導致重大損失;
  • 如果用戶退貨則會增加反向訂單,並影響物流、配送和倉儲相關的各個運營環節,導致運營資源無端消耗、商品損耗增加、倉儲物流成本增加等問題。

因此,這些問題必須在前期數據採集和存儲時就通過一定機制解決和避免。如果確實產生了此類問題,那麼數據工作者或運營工作者可以基於這些重複值來發現規則漏洞,並配合相關部門,最大限度地降低由此而帶來的運營風險。

關於作者:宋天龍,大數據技術專家,觸脈諮詢合夥人兼副總裁,前Webtrekk中國區技術和諮詢負責人(Webtrekk,德國的在線數據分析服務提供商)。擅長數據挖掘、建模、分析與運營,精通端到端數據價值場景設計、業務需求轉換、數據結構梳理、數據建模與學習以及數據工程交付。

本文摘編自《Python數據分析與數據化運營》(第2版),經出版方授權發佈。

​一文看懂數據清洗:缺失值、異常值和重複值的處理

延伸閱讀《Python數據分析與數據化運營》(第2版)

推薦語:這是一本將數據分析技術與數據使用場景深度結合的著作,從實戰角度講解了如何利用Python進行數據分析和數據化運營。本書與同類書大的不同在於,並不只有純粹的關於數據分析技術和工具的講解,而且還與數據使用場景深度結合,在業務上真正可指導落地。

"

相關推薦

推薦中...