探索多維數據極端值處理方法

背景介紹

我們知道,在各種數據分析方法中,除了部分方法本身對數據值不敏感外,離羣值、極端值對於分析結果都是具有影響的。這種影響尤其體現在需要對數據具體的值進行運算的方法中,比如迴歸類型的問題。極端值出現頻率過高,極端值過於極端,都有可能造成分析結果的嚴重偏誤,在探索數據之間關係和規律的過程中,這種極端值造成了很大困擾。

而金融數據分析中,無論是金融理論在實踐分析中的應用,比如嘗試使用CAPM,Fama-Franch因子模型對現實經濟標的進行分析,還是在量化決策過程中應用模型進行擇時或品種選擇,都離不開對原始數據的處理和運算。對於數據在這些領域的應用,模型能否給出精準結果至關重要,前者決定着學術觀點是否能被現實情況有力支撐,後者則直接決定了投資行爲是否能最大化的產生效益。雖然保證模型結果的精確性是一個多步驟的複雜過程,但一定離不開對原始數據的維護。在這個前提下,對待極端值的態度和處理方法也就成了需要不斷探索的問題。

對於極端數據,在量化領域有一些常用的方法。比如3-Mad方法,3-Sigmod方法,這些方法在剔除離羣的數據方面是簡單而有效的,受到了廣泛的認可。用滬深300股票的市值數據爲例,滬深300的原始市值分佈如下:

探索多維數據極端值處理方法

圖1:滬深300成分股票市值分佈

我們可以看到,滬深300成分股市值分佈十分極端,存在部分市值規模過於龐大的股票,如果用這樣的數據進行運算,得出的結果會收到極端值非常嚴重的影響,我們使用3-Mad方法進行剔除(如下圖)。

探索多維數據極端值處理方法

圖2:3-Mad方法剔除離羣值

無論是從縱座標的值域還是分佈圖像上都可以看出,3-Mad方法剔除後,篩選出的股票市值波動都被壓縮到了一定的範疇內,並且對比原始分佈,幾乎完全剔除了特別極端的離羣點。

我們再看一看以標準差爲參照基準的3-Sigmod方法對離羣點的剔除效果。

探索多維數據極端值處理方法

圖3:3-Sigmod方法剔除離羣值

對比原始分佈的圖例值域,可以看出極端離羣的市值點被3-Sigmod方法過濾掉了,而對比3-Mad方法,3-Sigmod方法在剔除條件上更寬鬆一點,兩者各有優劣,3-Mad方法嚴格地保證了數據在一定範圍內波動,而3-Sigmod方法則保留了更多的數據值,可以根據不同的需求對方法進行選擇。

通過上文的介紹,我們已經看出,在剔除離羣點上,已經有很多行之有效的方法可供選擇。但是,事實上我們仍然面對一個問題,那就是,上文介紹的所有方法,都是對於單一序列的處理,如果我們現在面對的是有兩個以上維度的高維數據,我們該如何考慮離羣點的處理方法。

可能有人會說,高維數據也是由不同截面下的一維序列構成的,對於每個不同的維度應用一下上面的方法就可以了。但事實上並不能這麼做,這樣做的,光是顯然易見的弊端就有兩個:第一,會造成更大規模的信息損失,因爲逐一進行剔除,不同的緯度之間剔除的部分是取並集的,最極端會出現提出所有數據的情況;第二,這樣的方法在高維度上沒有考慮到不同維度之間聯合分佈。

方法介紹

基於上述問題,我們思考了對高維數據剔除極端值的一種新方法,並且對極端值的處理重新做了設計。

首先我們知道高維數據是形如這樣的向量組:

探索多維數據極端值處理方法

 

這些向量組雖然無法直接可視化描述,但是對於他們聯合分佈的關係我們可以使用替代的方法去描述標誌。在這裏我選擇了距離作爲這個替代變量,距離計算公式表示如下。

探索多維數據極端值處理方法

 

爲了能夠描述數據點之間的分佈,我們需要找到一個目標數據點,使得所有其他數據點到這個目標數據點距離最小化,然後用其他數據點到目標數據點之間的距離來近似地描述所有數據在高維上的分佈情況,數學表示如下:

探索多維數據極端值處理方法

 

我把找到的這個目標向量稱爲核向量。還是以滬深300股票爲例子,我們使用的數據維度爲市值,ROE和市盈率(pe ratio),我們觀察一下通過尋找核向量而計算得出的數據分佈情況。

探索多維數據極端值處理方法

圖4:核向量方法數據分佈描述

這時候我們發現了一個問題,我們看一看數據點各個維度單一序列的分佈情況。

探索多維數據極端值處理方法

 

探索多維數據極端值處理方法

 

探索多維數據極端值處理方法

圖5:3種不同維度單一序列分佈情況

我們發現,尋找核向量並計算出來用以描述高維聯合分佈情況地距離數據,和市值數據的分佈情況一致性程度非常高,也就是說,市值數據由於本身數值巨大,完全影響了我們對距離的計算,佔到了巨大的權重,但事實上,在我們的想法以及現實經濟意義中,我們認爲這些財務情況對股票的影響權重雖然不一定等權,但不可能是這樣不平衡的極端情況,鑑於此,我們修改了核向量的尋找方法,在加入了距離懲罰項,以此來平衡不同量綱的數據對距離計算的影響。當然這個距離懲罰項可以有多種計算方法,比如Max-Min,、Z-score等,這裏我們使用最簡單的均值作爲距離懲罰。

我們觀察一下修改方法後的數據情況:

首先把修改方法前所有的原始數據分佈繪製出來看一看

探索多維數據極端值處理方法

圖6:方法修改前各個維度數據分佈情況

可以看到市值在數據上的體量完全覆蓋掉了其他數據的分佈情況。

探索多維數據極端值處理方法

圖7:方法修改前各個維度數據分佈情況

這個時候我們可以看到修改方法後,不同數據的分佈情況都能夠較爲明顯得體現出來。當前計算出來的核向量距離數據分佈如下:

探索多維數據極端值處理方法

圖8:修改方法後核向量距離分佈情況

經過以上計算,我們就可以進行下一步,處理數據了。

處理極端數據的方法,我並沒有直接使用傳統的直接剔除的方法,因爲鑑於目前各種統計方法對數據量的需求,我們更願意保留一些數據信息使得模型更加平滑可靠。在統計學習領域有一種叫做KNN的計算方法,聚寬的量化課堂上有詳細的描述,我之前也寫過如何實現KNN的文章,有需求的讀者可以去閱讀,在這裏不再贅敘。

簡單來說,我們的模型使用的歷史數據都是有標註的,一個特徵向量對應一個特徵值,我們經常通過KNN算法對特徵值進行預測,但是這個方法中我們反向運用KNN,首先我們通過一個準則來確定一個特徵向量是不是離羣點,如果是,則通過尋找和它標籤值最鄰近的K個值特徵向量,然後將這個離羣點的特徵向量值替換爲K個點對應特徵值的平均值。這樣既處理了數據,又部分保留了特徵信息,同時沒有減少數據量。

這時候我們又遇到了一個問題,在迴歸問題中,特徵向量的標籤值是連續的數字,尋找最臨近數據點,但是分類問題中,標籤大多爲離散取值,甚至在二分類問題中我們的標籤全都是bool值,總不能隨機選取幾個bool值進行KNN計算吧?

所以我們給出的權衡方法是,在分類問題中,如果數據點A是離羣點,那麼我們就尋找和數據點A到核向量數據點距離值最接近且不爲離羣點的的K個數據點作爲A的臨近點進行計算。這樣可以比較妥當的解決不同問題中由於數值特性帶來的計算問題。

最後要提及的是,我們的離羣點確認方法是在覈向量距離中確定離羣點,我們認爲距離核向量過於遠的數據爲離羣點,這裏我還是使用了3-Mad的方法,和上文一致,我們可以看下這樣處理後,單一維度的分佈情況。

探索多維數據極端值處理方法

 

探索多維數據極端值處理方法

 

探索多維數據極端值處理方法

圖9:高維處理後3種不同維度單一序列分佈情況

大家可以對比一下上圖完全無處理時候的單一序列分佈圖,可以明顯看出各個特徵維度在極端值和值分佈上都得到了較好的處理。

方法實證

>>> 截面迴歸實證

爲了檢驗數據情況,我們直接使用截面數據進行一次OLS迴歸,看看是否能提升模型的解釋能力。

選取股票池:以滬深300爲例子

選取解釋變量爲:30日後的收益率

選取被解釋變量爲:上文進行處理的市值,ROE和市盈率財務指標

未進行數據處理前的迴歸情況:

探索多維數據極端值處理方法

圖10:無任何處理直接回歸結果

可以看到無論是參數置信程度還是迴歸R^2效果都很差

進行上述處理方法後的迴歸結果:

探索多維數據極端值處理方法

圖11:數據處理後迴歸結果

可以看到無論是參數置信程度還是迴歸R^2效果都得到了顯著提升,從截面角度驗證了處理方法有效。

>>> 策略實證

我們選取一個對數據相對敏感的策略進行測試,通過觀察直接使用原始數據和使用處理後的數據是否能帶來績效提升來判斷處理方法是否有效。

爲了方便起見,我設計了一個SVM分類對未來股票走勢進行預測的簡單策略,使用股票池仍爲滬深300指數成分股票。使用特徵數據爲Fama-Franch三因子模型中的因子值(並非是分組收益率的形式,而是直接使用因子的原始值)。預測目標爲未來30天的股票的漲幅情況。

未處理前績效如下:

探索多維數據極端值處理方法

圖12:無任何處理前策略績效

數據處理後績效情況如下:

探索多維數據極端值處理方法

圖13:數據處理後策略績效

我們看到,雖然績效均不理想,或者可以說非常差勁。但是數據處理後的績效結果,對比直接使用原始數據的策略績效有了一些提升。一個策略的收益程度會受到多方面的影響,可能是模型思路需要改進,選取因子、數據需要調整倉位管理等等。但績效的改變,對我們數據處理方法的有效性提供了一定的參考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章