如何使用多因素策略建立強大的加密貨幣資產投資組合:資料損耗分析


本系列文章的第一篇為理論基礎篇,第二篇為資料損耗篇。在計算細胞前數據/後以及測試單細胞細胞的功效之前,都需要對相關數據進行處理。特定的資料缺失涉及重複值、異常值/缺失值/極限值、標準化和資料頻率的處理。文章介紹了重複值的查詢方式和刪除、替換的原則,異常值/出口值/極限值的處理方法,以及標準化的三種方法和數據頻率調整,同時也介紹了關於Falcon(https://falcon .lucida.fund /)。

更多內容請見:https://linktr.ee/lucida_and_falcon。

前言

書接上回,我們發布了《用多因子策略建立強大的加密貨幣資產投資組合》系列文章的第一篇– 理論基礎篇,本篇是第二篇– 資料損耗篇。

在計算細胞前數據/後,以及測試單細胞細胞的功效之前,都需要對相關數據進行處理。特定的資料缺失涉及重複值、異常值/缺失值/極限值、標準化和資料頻率的處理。

一、重複值

數據相關定義:

鍵(Key):表示一個實驗的索引。對於一部分有全部token所有日期的數據,鍵是“token_id/contract_address – Date”

值(Value):被鍵索引的物件就稱為「值」。

診斷重複值的首先需要資料理解「應當」消耗子。通常數據的形式有:

時間序列資料(Time Series)。鍵為“時間”。例如單一token5年的價格數據

字符面資料(Cross Section)。按鍵為“個體”。例如2023.11.01當日加密貨幣市場所有代幣的價格數據

面板資料(Panel)。按鍵是「個體-時間」的組合。例如從2019.01.01-2023.11.01四年所有代幣的價格數據。

原則:確定了資料的索引(鍵),就可以知道資料應該在什麼層面沒有重複值。

查詢方式:

pd.DataFrame.duplicated(subset=[key1, key2, …])

查詢重複值的數量:pd.DataFrame.duplicated(subset=[key1, key2, …]).sum()

可執行重複的樣本:df[df.duplicated(subset=[…])].sample()找到樣本後,再用df.loc選出該索引對應的全部重複樣本

pd.merge(df1, df2, on=[key1, key2, …]indicator=True, validate=”1:1″)

在橫向合併的函數中,加入indicator參數,會產生_merge字段,其用途dfm[‘_merge’].value_counts()可以檢查合併後不同來源的樣本數量

加入validate參數,可以檢驗梅毒的資料濃度指數是否如預期般一般(1 to 1、1 to many或many to many,其中最後一種情況其實相當於不需要驗證)。如果與預期不符,合併過程會報錯併中止執行。

二、異常值/出口值/極限值

產生異常值的常見原因:

極端情況。例如代幣價格0.000001$或市值僅50萬美元的代幣,接近觸及一點,就會有需求倍數的報酬率。

數據特性。例如token價格從2020年1月1日開始下載,那麼自然就無法計算出2020年1月1日的報酬率數據,因為沒有昨天的收盤價格。

數據錯誤。資料首次難免會犯錯,例如將12元每個token記錄成1.2元每個token。

針對異常值和出口值處理原則:

刪除。對於無法合理更正或修改的異常值,可以考慮刪除。

替換。通常用於對極值的處理,例如縮尾(Winsorizing)或取對數(不常用)。

對於移位值也可以考慮以合理的方式填充,常見的方式包括平均值(或移動平均)、插值(插值)、填0 df.fillna(0)、前方df.fillna(‘ffill’)/ 稀疏填充df.fillna(‘bfill’)等,要考慮填充所依賴的假設是否合。

機器學習謹慎用稀疏填充,有前瞻偏差的風險

針對極端值的處理方法:

1.百分位法。

透過將順序排列到大排列,將超過最小和最大比例的資料替換為臨界的資料。對於歷史數據較豐富的數據,此方法相對粗略,較不適用,強行刪除固定比例的數據可能造成一定比例的數據損失。

2.3σ / 三倍標準差法

利用μ±3×σ範圍來辨識並取代資料中心化的異常表現值,因此99.73%的資料落入該範圍。此方法適用前提:因子資料必須資料服從常態分佈,即X∼N(μ,σ2)。

其中,μ=Σⁿᵢ₌₁⋅Xi/N,σ²=Σⁿᵢ₌₁=(xi-μ)²/n ,因子值的合理範圍為[μ−3×σ,μ+3×σ]。

將資料範圍內的所有因子組成進行如下調整:

此方法不足,假設領域常用的數據如股票價格、代幣價格常表現為尖峰厚尾分佈,並不符合常態分佈的假設,在該情況下採用3σ方法將有大量數據錯誤地被識別為異常值。

3.絕對值差中差法(Median Absolute Deviation, MAD)

此方法基於中差和絕對偏差,使處理後的數據對極限值或異常值沒敏感。比基於平均值和標準差的方法更合理。

絕對偏差值的中位數MAD=median ( Σⁿᵢ₌₁(Xi – Xmedian) )

因子值的合理範圍是[ Xmedian-n×MAD,Xmedian + n×MAD]對資料範圍內的所有因子做出以下調整:

如何利用多因子策略建立強大的加密貨幣資產投資組合:資料損耗篇

# 處理因子資料極端值情況
class Extreme(object):
def __init__(s, ini_data):
s.ini_data = ini_data

def three_sigma(s,n=3):
mean = s.ini_data.mean()
std = s.ini_data.std()
low = mean – n*std
high = mean + n*std
return np.clip(s.ini_data,low,high)

def mad(s, n=3):
median = s.ini_data.median()
mad_median = abs(s.ini_data – median).median()
high = median + n * mad_median
low = median – n * mad_median
return np.clip(s.ini_data, low, high)

def quantile(s,l = 0.025, h = 0.975):
low = s.ini_data.quantile(l)
high = s.ini_data.quantile(h)
return np.clip(s.ini_data, low, high)

三、標準化

1.Z-score標準化

前提:XN(μ,σ)

由於使用了標準差,因此該方法對於資料中的異常值非常敏感

x’ᵢ=(x−μ)/σ=(X−mean(X))/std(X)

2.最大最小差標準化(Min-Max Scaling)

將因子每個數據轉換為在(0,1)區間的數據,以便比較不同規模或範圍的數據,但它並不會改變數據內部的分佈,也不會使總和等於1。

由於考慮極大極小值,對異常值敏感

統一量綱,有利於比較不同維度的資料。

x’ᵢ=(xᵢ−min(x))/max(x)−min(x)

3.排序百分位(Rank Scaling)

將資料特徵轉換為它們的排名,把這些排名轉換為數字0和1之間的分數,通常是它們在資料中心化的百分數。 *

由於排名不受異常值影響,此方法對異常值不敏感。

不保持數據中各點之間的絕對距離,而是轉換為相對排名。

NormRankᵢ=(Rankₓᵢ−min(Rankₓᵢ))/max(Rankₓ)−min(Rankₓ)=Rankₓᵢ/N

其中,min(Rankₓ)=0, N 為區間內資料點的總個數。

# 標準化因子數據
class Scale(object):
def __init__(s, ini_data,date):
s.ini_data = ini_data
s.date = date

def zscore(s):
mean = s.ini_data.mean()
std = s.ini_data.std()
return s.ini_data.sub(mean).div(std)

def maxmin(s):
min = s.ini_data.min()
max = s.ini_data.max()
return s.ini_data.sub(min).div(max – min)

def normRank(s):
# 對指定欄位進行排名,method=’min’表示相同值會有相同的排名,而不是平均排名
ranks = s.ini_data.rank(method=’min’)
return ranks.div(ranks.max())

四、數據頻率

有時取得的數據並不是我們分析所需的頻率。例如分析的層次為月度,原始資料的頻率為日度,此時就需要用到“下採樣”,即聚合資料為月度。

下採樣

指的是絕對一個集合裡的資料聚合為一行資料考慮,例如日度資料聚合為月度。此時需要每個被聚合的指標的特性,通常的操作有:

第一個值/最後一個值

均值/中配

標準差

上採樣

指的一行數據的數據拆分為多行數據,例如年度數據用在月度分析上。這種情況一般就是簡單重複即可,有時需要將年度資料按比例歸集於各個月份。

Falcon(https://falcon.lucida.fund /)是新一代的Web3投資基礎設施,它基於多因子模型,幫助用戶「選」、「買」、「管」、「賣」加密貨幣資產。 Falcon在2022年6月由Lucida所孵化。

更多內容可至https://linktr.ee/lucida_and_falcon

資訊來源:0x資訊編譯自網際網路。版權歸作者Lucida & Falcon所有,未經許可,不得轉載

Total
0
Shares
Related Posts