ubiquant九坤量化金牌方案解读

语言: CN / TW / HK

九坤投资ubiquant是目前国内成立最早、投资管理经验最为丰富的多策略量化私募基金管理人之一。公司投研和技术团队核心成员90%+毕业于清华、北大、上海交大、复旦、斯坦福等国内外知名院校,且在华尔街知名对冲基金、全球头部科技公司、国内知名互联网企业拥有多年工作经验。

2022年1月,九坤联合kaggle举办A股股票预测大赛,目的是预测股票未来短期的收益。比赛官网地址: Ubiquant Market Prediction | Kaggle

1)背景介绍

无论你的投资策略如何,金融市场都会出现波动。尽管存在这种差异,但专业投资者仍试图估计其整体回报。风险和回报因投资类型和其他影响稳定性和波动性的因素而异。为了尝试预测回报,金融市场交易有许多基于计算机的算法和模型。然而,有了新的技术和方法,数据科学可以提高定量研究人员预测投资回报的能力。

2)数据特点

这场比赛的数据是基于A股真实的交易数据,不过所有数据都做了匿名处理。数据干净无缺失,结构清晰且简单,尽大可能的方便选手进行建模。

  • 时间列表

time_id代表时间,0代表第0天,其它类似。时间虽是匿名的,不过时间0-1219代表2014-2018年。

  • 股票列表

investment_id代表股票ID;比赛数据的股票数量随着时间推移,股票数量是增多的,其原因是A股市场不断增加新股。红框数据的股票比较少,是因为九坤官方提出了部分不想要的股票数据。

虽说investment_id是匿名的,但还是有办法破解的。利用A股真实交易数据,计算A股股票收益和九坤给出数据的target的相关性,每次匹配选出最相关的映射,剔除后再重新匹配,循环遍历即可。 Ubiquant Market Prediction | Kaggle

  • 因子特征

九坤比赛给出了300个匿名的特征,这些特征我尝试去破解,把alpha101因子库和自己的因子库和它的特征去匹配,但是结果很沮丧,一个都没匹配出来。这些特征是匿名的,也是九坤对其研究成果的一个保护。

  • target

target也是匿名的,是对短期收益数据的变换,具体变换规则无从知晓。

3)解决方案

这场比赛目前仅有少数队伍公布了解决方案,详细解读下供大家参考。

  • 第一名方案

原始链接: Ubiquant Market Prediction | Kaggle

特征:原始的300匿名因子+100个按照time_id group的mean因子

features = [f'f_{i}' for i in range(300)]
corr = train_df[features[:] + ['target']].corr()['target'].reset_index()
corr['target'] = abs(corr['target'])
corr.sort_values('target', ascending = False, inplace = True)
best_corr = corr.iloc[3:103, 0].to_list()
time_id_mean_features = []
for col in tqdm(best_corr):
   mapper = train_df.groupby(['time_id'])[col].mean().to_dict()
   train_df[f'time_id_{col}'] = train_df['time_id'].map(mapper)
   train_df[f'time_id_{col}'] = train_df[f'time_id_{col}'].astype(np.float16)
   time_id_mean_features.append(f'time_id_{col}')
features += time_id_mean_features

采样:使用训练样本的前2400000行

验证:kfold和groupkfold

模型:lightgbm和tabnet

  • 第三名方案

原始链接: Ubiquant Market Prediction | Kaggle

特征:300原始特征

模型:6层transformer,自定义的pearson loss函数,10epoches

数据:特征维度上用0随机替代;序列维度上随机遮掩特征

  • 第五名方案

原始链接: Ubiquant Market Prediction | Kaggle

数据:使用timeid>599的样本训练,去除127个target异常的数值

特征:300原始特征

模型:4层mlp

验证:purged cv, 20fold,gap为10

  • 第七名方案

原始链接: Ubiquant Market Prediction | Kaggle

特征:300原始特征+600维作者基于经验做的特征工程,这里作者表示不可泄露

模型:lightgbm

  • 我们的方案

这场比赛我打了两个月,花费了不少精力,最后和richard, lafoss大神组队。最终排名86/2893,不太理想。总体感觉量化比赛比一般表格赛的难度要大,平稳性明显差很多,更加考验参赛者的建模能力。

数据:train+supplement

特征:原始300维特征

验证:cpcv和timeseries split方法

模型:transformer、NN模型融合;lgb因为LB效果太差,放弃过早,没有深入研究。

整理不易,供老师们参考,欢迎一键三连~