大芬地鐵站附近做網(wǎng)站百度收錄規(guī)則
Optiver股票大賽Top2開源!
↑↑↑關(guān)注后"星標(biāo)"kaggle競賽寶典?
作者:杰少
Optiver第二名方案解讀
簡介
Optiver競賽已經(jīng)于今天結(jié)束了,競賽也出現(xiàn)了極端情況,中間斷崖式的情況,在Kaggle過往的競賽中,一般出現(xiàn)這種情況的情況有三種:
-
過擬合排行榜數(shù)據(jù),例如一些回歸問題中,極值的測試;
-
匿名數(shù)據(jù)中存在某些特定的關(guān)系,常見于數(shù)據(jù)被特殊處理的問題中,逆向特征工程;
-
特殊指標(biāo)的問題,一些后處理技巧等;
而本次比賽,也不例外,從賽后和前五的選手交流以及目前第二名選手的開源的來看,幾乎全部都涉及到了時間信息的逆向特征工程。本篇文章,我們就一起解讀一下該次競賽。
開源的代碼可以在后臺回復(fù):Optiver獲取,當(dāng)然也可以去kaggle code處尋找。
方案解讀
01
時間逆向特征
逆向的思路是:在本次競賽中,因?yàn)楦傎悢?shù)據(jù)是經(jīng)過匿名化的,但是我們可以使用tick size來恢復(fù)在匿名之前的真實(shí)價格;
-
tick size:是報價中最小的價格增量。https://en.wikipedia.org/wiki/Tick_size
使用計算得到的price,展開成下面的矩陣:
其中為time_id的個數(shù),S是股票的個數(shù),然后每個值是某個股票在某個時間點(diǎn)的price,剩下的就是基于該矩陣還原time_id的真實(shí)順序,該處直接使用了TSNE將其壓縮到qin
03
特征工程
3.1 特征構(gòu)建
如果我們能以非常高的精度得到我們的數(shù)據(jù)產(chǎn)出順序,那么未來階段的RV很明顯就是非常重要的特征,這邊,使用許都距離metric來尋找最近的N個時間并計算RV的平均值等特征。
target_feature?=?'book.log_return1.realized_volatility'
n_max?=?40#?make?neighbors
pivot?=?df.pivot('time_id',?'stock_id',?'price')
pivot?=?pivot.fillna(pivot.mean())
pivot?=?pd.DataFrame(minmax_scale(pivot))nn?=?NearestNeighbors(n_neighbors=n_max,?p=1)
nn.fit(pivot)
neighbors?=?nn.kneighbors(pivot)#?aggregatedef?make_nn_feature(df,?neighbors,?f_col,?n=5,?agg=np.mean,?postfix=''):pivot_aggs?=?pd.DataFrame(agg(neighbors[1:n,:,:],?axis=0),?columns=feature_pivot.columns,?index=feature_pivot.index)dst?=?pivot_aggs.unstack().reset_index()dst.columns?=?['stock_id',?'time_id',?f'{f_col}_cluster{n}{postfix}_{agg.__name__}']return?dstfeature_pivot?=?df.pivot('time_id',?'stock_id',?target_feature)
feature_pivot?=?feature_pivot.fillna(feature_pivot.mean())neighbor_features?=?np.zeros((n_max,?*feature_pivot.shape))for?i?in?range(n):neighbor_features[i,?:,?:]?+=?feature_pivot.values[neighbors[:,?i],?:]for?n?in?[2,?3,?5,?10,?20,?40]:dst?=?make_nn_feature(df,?neighbors,?feature_pivot,?n)df?=?pd.merge(df,?dst,?on=['stock_id',?'time_id'],?how='left')
3.2 特征處理
基于時間序列的對抗驗(yàn)證,我們發(fā)現(xiàn)非常多的特征隨著時間的變化影響很大,例如order_count和total_volume這些,所以我們將其轉(zhuǎn)化為在某個時間點(diǎn)的rank進(jìn)行處理,與此同時,使用np.log1p對大的skew大的值進(jìn)行處理。
04
建模
模型處和開源的是類似的,1DCNN+MLP+LGB,其實(shí)我們發(fā)現(xiàn)TabNet在本次競賽中效果也非常不錯,不過考慮到時間原因,沒有再使用。
這些模型影響應(yīng)該不是非常大,應(yīng)該也不是核心。
參考文獻(xiàn)
-
public 2nd place solution
-
Public 2nd Place Solution - Nearest Neighbors