深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble
更新:根據(jù)大家評(píng)論區(qū)和私信的反饋,我們把文章重新更新了一版在 arxiv 上。這次更新主要修改了方法部分的敘述和其他一些typos。歡迎大家圍觀~
相信關(guān)注我專欄的也有很多對(duì)于金融感興趣的同學(xué),這里給大家?guī)?lái)一個(gè)我們將要發(fā)表在 ICDM-20(CCF-B)上的一篇關(guān)于金融預(yù)測(cè)模型的文章。本文介紹了一種新的預(yù)測(cè)模型 DoubleEnsemble,該模型在我們實(shí)際的應(yīng)用(不僅僅是金融方面)中有較好的效果。
原文傳送門
DoubleEnsemble: A New Ensemble Method Based on Sample Reweighting and Feature Selection for Financial Data Analysis. Chuhang Zhang, Yuanqi Li, Xi Chen, Yifei Jin, Pingzhong Tang, Jian Li. The IEEE International Conference on Data Mining (ICDM 2020).
特色
金融上的問(wèn)題具有高噪聲、可預(yù)測(cè)性較弱等特點(diǎn),因此很多目前在圖像、自然語(yǔ)言等方面效果較好的方法在金融數(shù)據(jù)的分析和預(yù)測(cè)上都很難取得令人滿意的效果。我們從機(jī)器學(xué)習(xí)的角度,提出使用集成模型方法(ensemble)解決這樣的問(wèn)題。在機(jī)器學(xué)習(xí)領(lǐng)域,集成模型的方法具有對(duì)于噪聲穩(wěn)定、不易于過(guò)擬合、相對(duì)于基模型有更強(qiáng)的模型容量等特點(diǎn)。我們的模型是基于金融中的多因子模型,該模型比較貼近機(jī)器學(xué)習(xí)里面的有監(jiān)督學(xué)習(xí)(即,抽取大量的特征和標(biāo)簽,然后擬合訓(xùn)練數(shù)據(jù)集);現(xiàn)在業(yè)界很多公司都自己做了大量的因子,其中包含很有效的因子,當(dāng)然也包含大量無(wú)效的因子。
我們?yōu)樯督o模型起名叫做 DoubleEnsemble 呢?把輸入數(shù)據(jù) X 看做一個(gè)矩陣,其每一行代表一個(gè)樣本,每一列代表一個(gè)特征。以往的一些集成模型方法有在這兩個(gè)維度上來(lái)采樣或者加權(quán)來(lái)構(gòu)建每個(gè)子模型:比如 bagging 類方法會(huì)在構(gòu)建子模型的時(shí)候隨機(jī)采樣若干“行”;而 GBDT 類模型在構(gòu)建子模型的時(shí)候會(huì)隨機(jī)采樣若干“列”(比如 XGBoost 里面的 colsample_byxxx)。我們的集成模型在構(gòu)建每個(gè)子模型的時(shí)候不僅給不同的“行”分配不同的權(quán)重,并且也隨機(jī)篩選出不同的“列”;并且,我們的篩選/加權(quán)是基于各個(gè)特征/樣本在訓(xùn)練中的表現(xiàn)來(lái)進(jìn)行的,這種方式能夠更有效地保留重要的特征/減小噪聲樣本的權(quán)重。
我們文章中的實(shí)驗(yàn)包含了在股票市場(chǎng)上的一個(gè)日/周頻預(yù)測(cè)問(wèn)題和在數(shù)字貨幣市場(chǎng)上的一個(gè)高頻預(yù)測(cè)問(wèn)題。根據(jù)我們的回測(cè)結(jié)果,我們的模型在股票市場(chǎng)中年化和夏普分別能達(dá)到 51.37% 和 4.941;在數(shù)字貨幣市場(chǎng)中未來(lái) 20s 方向預(yù)測(cè)在平均約 30s 出一個(gè)信號(hào)的情況下,準(zhǔn)確性能達(dá)到 62.87%。值得一提的是,我們的股票回測(cè)系統(tǒng)是經(jīng)過(guò)實(shí)盤實(shí)戰(zhàn)檢驗(yàn)的,在日頻交易下能夠很好地貼近實(shí)盤結(jié)果。
內(nèi)容
一、金融預(yù)測(cè)中面臨的問(wèn)題
- 問(wèn)題本身難預(yù)測(cè):金融里面有一個(gè)很著名的有效市場(chǎng)假說(shuō),講的就是市場(chǎng)上的價(jià)格已經(jīng)綜合反映了各方面的信息,不可能找到一個(gè)投資策略持續(xù)地比市場(chǎng)平均水平表現(xiàn)得好。可以對(duì)比一下機(jī)器學(xué)習(xí)的其他領(lǐng)域,比如圖像和自然語(yǔ)言領(lǐng)域,人類(已經(jīng)有非常高的智能了)很快就能得到準(zhǔn)確的結(jié)果;但在金融領(lǐng)域,市場(chǎng)上很多有經(jīng)驗(yàn)的交易員仍然也較難對(duì)于金融市場(chǎng)有準(zhǔn)確的預(yù)測(cè)。這暗示著金融里面的預(yù)測(cè),本身就是比目前機(jī)器學(xué)習(xí)所面臨問(wèn)題更困難的問(wèn)題。不過(guò)我們相信,市場(chǎng)上仍然存在著系統(tǒng)性不有效定價(jià),即仍然存在著預(yù)測(cè)和盈利的空間。
- 高噪聲、高波動(dòng):可以從兩個(gè)角度來(lái)看到噪聲問(wèn)題:一方面,市場(chǎng)的參與者魚龍混雜,大家都有不一樣的背景,因此可能做出各種各樣的行為來(lái)影響市場(chǎng);另外一方面,我們傳遞給模型的信息并十分全面,有一些隱含的能夠影響價(jià)格的信息我們并沒(méi)有囊括進(jìn)來(lái),因此在模型看來(lái),這些隱變量所帶來(lái)的影響也是不可預(yù)測(cè)的噪聲。對(duì)于后一個(gè)方面,也應(yīng)該盡量努力去把更多的因素囊括進(jìn)入模型中來(lái);在多因子模型中,這是“造因子”的工作,不在本文的討論范圍內(nèi)。
- 大量可能無(wú)效的因子:多因子模型中的因子,就等價(jià)于有監(jiān)督學(xué)習(xí)模型中的特征。雖然本文不討論如何造出有效的因子,但是目前在工業(yè)界中,各個(gè)公司都有大量的因子,這都是研究員們常年累月積累下來(lái)的。因子的數(shù)量一般少則成百、多則上千。這些因子中會(huì)有大量的無(wú)效因子,盡管因子被加入因子庫(kù)的時(shí)候都有證據(jù)表明他們可能是有效的;這也意味在在市場(chǎng)環(huán)境發(fā)生變化的時(shí)候,它們可能又重新起到相應(yīng)的效果,因此我們也不太好直接把它們刪去。
二、模型
集成模型
首先,我們的目標(biāo)是訓(xùn)練一個(gè)等權(quán)的集成模型
第 k 個(gè)子模型的訓(xùn)練都會(huì)基于輸入數(shù)據(jù)
,標(biāo)簽 ,權(quán)重 和相應(yīng)篩選出來(lái)的特征 。子模型可以為深度學(xué)習(xí)模型(這里用的 MLP),也可以是決策樹模型(這里用的 GBDT/XGBoost)。每個(gè)子模型的樣本權(quán)重和特征會(huì)基于數(shù)據(jù)在前面子模型中的訓(xùn)練情況,我們用訓(xùn)練中的 loss curve 和總體 loss 來(lái)表征其訓(xùn)練情況,其中 表示在加上第 k 個(gè)子模型后,集成模型在第 i 個(gè)樣本上的損失函數(shù)值; 表示在第 k 個(gè)子模型訓(xùn)練過(guò)程中,第 i 個(gè)樣本的 loss curve (即,訓(xùn)練了 T 輪)。我們的模型大致框架如下圖所示:對(duì)于第一個(gè)子模型,我們用相等權(quán)重的樣本和所有的特征;對(duì)于后續(xù)的子模型,我們會(huì)基于前一個(gè)子模型的訓(xùn)練來(lái)分配新的樣本權(quán)重(sample reweighting,SR)和篩選特征(feature selection,FS)。
Sample Reweighting
樣本重賦權(quán)的方法這里用 pythonic 的偽代碼寫出來(lái),更具體的數(shù)學(xué)定義可以參考原文。
def SR(C, L, k, alpha1=1, alpha2=1, B=10, gamma=0.9, EPS=0.1):# coefficients: alpha1, alpha2# #bins: B# self-paced factor: gamma# pandas style rank, with axis=0, ascending=True, pct=True# C.shape = (N, T)C = rank(C) # L.shape = (N, 1)L = rank(L) # h.shape = (N, 1)h = alpha1 * (-L) + alpha2 * rank(mean(C[-int(T/10):, :], axis=1) / mean(C[:int(T/10), :], axis=1))h = rank(h)# h_bin_values.shape = (B, ); h_bin_indices.shape = (N, )h_bin_values, h_bin_indices = bin(h)w = empty(shape=(N, ))for i in range(N):w[i] = 1 / ( gamma ** k * h_bin_values[h_bin_indices[i]] + EPS)return w那么為什么要這樣做呢?
大致思想是想通過(guò)對(duì)于樣本重新賦權(quán),盡可能減小噪聲樣本的權(quán)重,并且增大比較困難樣本的權(quán)重。噪聲樣本指的是標(biāo)簽比較隨機(jī)的樣本;困難的樣本指的是特別貼近決策面的樣本,如果決策面沒(méi)有擬合地特別好,這些樣本就可能被分到錯(cuò)誤的類別里面,因而容易產(chǎn)生較大的損失。降低噪聲樣本權(quán)重能夠幫助提高模型穩(wěn)定性;增大困難樣本權(quán)重能夠幫助模型去學(xué)習(xí)更”深層次“的規(guī)律,從而提高整體預(yù)測(cè)正確率。但是這兩者又很難被分開(因?yàn)橐话愣籍a(chǎn)生較大的 loss);我們觀察到這兩類樣本的訓(xùn)練 loss curve 有著不一樣的特征,因此設(shè)計(jì)了這樣的算法把它們區(qū)分開。它們的訓(xùn)練特征可以通過(guò)下面這個(gè)例子看到。
Feature Selection
篩選特征的方法用 pythonic 偽代碼可以如下寫出,具體的準(zhǔn)確數(shù)學(xué)表達(dá)形式請(qǐng)大家參考原文。
def FS(Mbar, X, y, D=5, r=[0.8, 0.7, 0.6, 0.5, 0.4]):# previous ensemble model: Mbar# training data: (X, y)# #bins: D# sample ratio for each bin: ry_pred = Mbar(X)# L.shape = (N, )L = loss(y_pred, y)g = empty(shape=(F, ))for f in range(F):# shuffle the value of the f-th column in XXf = shuffle(X, column=f)y_pred = Mbar(Xf)Lf = loss(y_pred, y)g[f] = mean(Lf - L) / std(Lf - L)# g_bin_values.shape = (D, ); g_bin_indices.shape = (F, )g_bin_values, g_bin_indices = bin(g)features = []for d in range(D):# see also docs for numpy argwhere and choiceindices = argwhere(g_bin_indices == d)nums = len(indices)features.append(choice(indices, int(nums * r[d])))return features那么為什么要這樣做呢?
這里的目標(biāo)是以更高的概率篩選出來(lái)對(duì)于模型準(zhǔn)確率貢獻(xiàn)較高的特征。這個(gè)目標(biāo)要求我們不能只是對(duì)于每個(gè)特征來(lái)單獨(dú)衡量其有效性,而是要衡量特征對(duì)于集成模型整體的有效性;整體有效性的衡量最直接的形式是“剔除”,然而對(duì)于已經(jīng)訓(xùn)練好的模型來(lái)說(shuō),沒(méi)有辦法直接把某個(gè)特征去掉(比如,深度學(xué)習(xí)模型訓(xùn)練好之后就只能接收固定維度的數(shù)據(jù)輸入了,如果輸入維度減小,壓根沒(méi)辦法輸入模型)。考慮到這個(gè)問(wèn)題,一個(gè)簡(jiǎn)單的解決方法是對(duì)于要“剔除”的特征各個(gè)全部置零,但是這種操作使得模型很大程度上直接崩潰(因?yàn)橛?xùn)練的時(shí)候可能壓根沒(méi)見過(guò)這個(gè)維度上為零的數(shù)據(jù),這種分布的不匹配可能使得模型直接失效)。我們這里采用了一個(gè)比較巧妙的辦法:把要“剔除”的這個(gè)特征的各個(gè)維度隨機(jī)打亂,這樣既保留了相應(yīng)的分布,但是又“隱藏”了這個(gè)特征所能提供的信息量。這樣算出來(lái)的 g 反映了相應(yīng)特征對(duì)于模型貢獻(xiàn)的顯著性,接下來(lái)我們根據(jù)其顯著性來(lái)篩選因子,即顯著性高的因子盡可能多地采樣。
同時(shí),我們觀察到,在 SR 過(guò)程中,我們計(jì)算了 h;在 FS 過(guò)程中,我們計(jì)算了 g。接下來(lái),我們都對(duì)其進(jìn)行了離散化到不同的 bin 后再處理;實(shí)驗(yàn)中我們發(fā)現(xiàn)這種方法能夠有效減小 outlier 和 noise 的不良影響。畢竟,在金融應(yīng)用中,我們寫模型的時(shí)候頭腦中得時(shí)時(shí)刻刻都需要想到:要 robust 要 robust = =。
三、實(shí)驗(yàn)
數(shù)字貨幣預(yù)測(cè)
- 交易所:OKEx
- 交易特征:24 小時(shí)不間斷
- 標(biāo)的:ETC/BTC, ETH/BTC, GAS/BTC and LTC/BTC
- 數(shù)據(jù)頻率:每 0.3 秒一個(gè)市場(chǎng)快照
- 訓(xùn)練數(shù)據(jù)集:10 天(約 3M 個(gè)樣本點(diǎn))
- 測(cè)試數(shù)據(jù)集:訓(xùn)練數(shù)據(jù)其后的 5 天
- 特征:常見的公開因子(比如 OFI、RSI 等)
- 衡量指標(biāo):ACC(precision when top 1% retrieved), AUC, F1, PCT (backtest result: average profit in one trading day)
- 手續(xù)費(fèi)和滑點(diǎn):千分之二(數(shù)字貨幣交易所手續(xù)費(fèi)通常比股票市場(chǎng)更低)
股票預(yù)測(cè)
- 股票池:A 股市場(chǎng)
- 交易頻率:日頻和周頻
- 交易策略:每天做多前 20 支(日頻)或者 10 支(周頻)股票;這里為了貼近中國(guó)市場(chǎng)行情,沒(méi)有做空策略
- 持倉(cāng)股票數(shù):大多是時(shí)刻持倉(cāng) 20 支(日頻)或者 50 支(周頻)
- 持倉(cāng)方式:等權(quán)
- 因子池:兩組不同的私有因子池,分別適用于日頻和周頻,因子數(shù)量分別為 182 和 254;因子包括價(jià)量因子和基本面因子
- 回測(cè)形式:滾動(dòng)訓(xùn)練,即每周使用最近 500 個(gè)交易日(兩年)的數(shù)據(jù)重新訓(xùn)練模型
- 衡量指標(biāo):年化收益、夏普比率、最大回撤、信息比率
- 手續(xù)費(fèi)和滑點(diǎn):千分之三
在實(shí)際應(yīng)用中,在除了金融以外的其他領(lǐng)域我們也在使用這個(gè)模型,并且也取得了不錯(cuò)的效果。
總結(jié)
以上是生活随笔為你收集整理的深度学习训练中噪声减小吗_【机器学习 155】DoubleEnsemble的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 邀请参加活动的邀请函_圣诞节点灯仪式活动
- 下一篇: add-apt-repository:找