愛伊米

總結 | 資料清理中存在的問題及對策

導讀:

資料清理是資料預處理非常關鍵的一步。為了清理資料,我們必須要知道可能存在的問題,才能針對相應的問題設計相應的方法。

總結 | 資料清理中存在的問題及對策

現實世界中的資料量越來越大,也越來越容易受到噪聲、缺失值和不一致資料等的影響。資料庫太大,如若有不同的來源,那麼髒資料問題一定會存在,這是不可避免的。為了使資料中的各種問題對我們的建模影響最小化,需要對資料進行預處理。

在實際操作中,

資料預處理通常分為兩大步,一是資料清洗,二是資料的基本分析

。這兩步並不一定是按先後順序進行的,通常也會相互影響。比如,有的錯誤資料(不可能出現的極值),必須透過基本的統計分析才能發現。

有一種說法,資料的預處理會佔據絕大部分的工作量,有的甚至會達到所有工作量的80%,建模和演算法真正的工作量其實只有20%。這個結論在網際網路或者傳統IT領域,特別是面對大量的非結構化資料時,確實是事實。

所以第一步,也是非常關鍵的一步,就是

資料清理

。為了清理資料,我們必須要知道可能存在的問題,才能針對相應的問題設計相應的方法。

原始資料可能存在如下三種問題。

資料缺失:

資料缺失的問題在高頻資料裡面特別常見。而且由於很多投資者是自己實時下載的資料,因此即使之後發現也很難彌補。

噪聲或者離群點:

由於系統或者人為的失誤,導致資料出現明顯的錯誤,比如某支股票的價格本應在12元左右,結果突然出現了100元的價格資料。

資料不一致:

很多投資者,為了確保資料正確性,會使用多個數據源進行交叉驗證,這時往往會出現資料不一致的問題。即使是同一個資料來源,有時候也會出現資料不一致的問題。比如期貨行情資料,Wind、文華、MC的資料都有可能出現不一致的問題,資料頻率越高,不一致的可能性就越大。

01

缺失值

針對缺失值,實際操作中,需要兩套程式:一套程式是

檢查缺失值

,一套程式是

填補缺失值

。一般流程是,先檢查缺失值,研究缺失值,選擇填補方法,進行填補,然後再次檢查。這樣迭代迴圈,直到將資料缺失控制在可接受範圍內。

缺失值,也有多種型別,一種是“正常缺失”,比如股票在某一天停牌,那麼這一天的交易資料就是沒有的。一種是“非正常缺失”,比如明明有交易,但就是沒有交易資料。

舉個例子,在下載5分鐘資料的時候,發現20160104的資料都有缺失,但Wind上的資料又顯示當天的交易情況為“交易”。實際情況是當天發生了“熔斷”,因為是新的機制,所以Wind還沒來得及準備一個欄位用於表示當天的交易狀態。這種情況就屬於資料的“正常缺失”,只是交易狀態與資料不一致而已。Wind的交易狀態欄位如下圖所示。

總結 | 資料清理中存在的問題及對策

在檢查缺失值時,這兩種缺失需要分辨清楚,因為不同的缺失值,處理方法也不一樣。檢查好缺失值之後,就需要進行處理了。先處理“非正常缺失”,一般流程具體如下。

1)

檢查提取資料是否出錯。

有時候,資料來源本身是完整的,然而自己在提取資料的時候出現了問題。比如,筆者在使用市場上某家的金融高頻資料的時候,下載5分鐘資料計算高頻波動率,發現存在很多缺失的資料。經該公司後臺查詢後發現,他們的資料庫其實是有這個資料的,這說明是在下載資料的過程中出現了問題。

2)

從其他資料來源提取。

有的資料來源本身就缺失了資料,對於這種情況可以再尋找另外一個數據源進行補充。

演算法填充。

有的時候,我們沒有辦法使用多資料來源進行補充,而且有的資料本身就有空缺,無法補充。這個時候,可以退而求其次,使用演算法填充。

常用演算法有向前填充和向後填充兩種。所謂向前填充是指使用之前最近的一個數據對空值進行填充。向後填充是指使用之後最近的一個數據對空值進行填充。

Pandas提供了一個函式用於資料填充。示例程式碼如下:

向前填充的示例程式碼如下:

除了向前填充,該函式也支援向後填充,不過,要使用特定的值進行填充。

有的資料發生了缺失,無法使用簡單的向前填充或向後填充來處理。比如,使用Wind下載a股復權資料,會發現交易狀態trade_status在1999年之前都是空值,雖然實際上是有交易的,但如果直接按照trade_status=‘交易’這個條件來篩選,將會把1999年之前的所有資料都去掉。這個時候就需要根據邏輯設計一個演算法來進行填充,比如將成交量volume>0的都填充為“交易”。

02

噪聲或者離群點

噪聲或離群點的問題一般有兩種情況,

一種是資料錯誤導致的

,比如本來應該是10。0的資料,錯誤顯示為10000;

另一種則是其本身是真實資料

,但就是離群點,比如金融危機中的收益率或者波動率,可能就非常極端,成為離群點。

一般的處理步驟具體如下。

1)透過一定的演算法識別出離群點。一般是使用該資料標準差的多少倍來判斷。比如正太分佈中,正負標準差3倍以上的機率是99。7%,可以將其認定為可疑離群點。

2)人工判斷離群點是屬於錯誤資料導致的,還是正常的離群點。

3)對離群點進行處理。一般來說,錯誤的離群點需要更正或者刪除。正常的離群點則需要另外建模進行分析。

03

資料不一致

為了確保資料的準確性,有時候需要使用多種資料來源進行交叉驗證。比如,在研究港股的時候,對比了Wind和Bloomberg的後復權資料之後,發現兩者存在很大的差別,這就是資料不一致的問題,但我們並不能確定哪一個才是正確的,於是又加入了同花順和CSMAR的資料進行對比,發現後者與Wind的資料是一致的。所以可以確認是Bloomberg的問題,因而採用Wind的資料。

當然,在實際工作中,資料清理的問題要遠遠多於這裡介紹的幾種,需要系統性地、仔細地去處理。

- END -

「在看」嗎?