BigQuant平台学习第二篇:如何开发AI策略(上)

机器学习
标签: #<Tag:0x00007fc072329738>

(华尔街的猫) #1

机器学习是实现人工智能的一种方式,被评价为人工智能领域中最能够体现智能的一个分支,机器学习与人工智能、深度学习的关系可以参考下图:

鉴于机器学习在各领域中已经开始绽放光芒,它必然也能给金融市场带来一些不一样的尝试。借助BigQuant平台,可以将包括机器学习在内的AI算法应用到量化投资领域,开发出能够获取超额收益的策略。这一过程实现只要几行代码,快速帮助用户进行试验,开发AI策略。我们先看机器学习的研究思路(以监督学习为例):

机器学习可以这样简单理解:借助于计算机,对数据(训练集)进行学习后,形成模式识别(模型),进而实现对未来数据(测试集)的预测。根据训练集是否拥有标注信息,机器学习任务可以分为无监督学习和监督学习两类,分类和回归是前者的代表,而聚类则是后者的代表。我们可以构建一个使用机器学习算法的简单选股策略。该策略原理简单,即用T-1天股票的股票的因子值,预测10个交易日后股票的表现(是不是想到了回归算法,因变量是10日收益率,自变量是特征因子数据)。策略示意图如下:


训练集由滚动的时间窗口确定

开发AI策略就像在实验室做实验,只是现在的实验室就是BigQuant平台,在这个实验室里,已经准备好了数据,同时也具有AI大脑和回测引擎,只要有研究员,就可以快速开发AI 策略。代码如下:

class conf:
    # 定义一个conf类,存储需要使用的变量
    start_date='2014-01-01'  # 日期,作为训练集的起始日期
    end_date='2017-02-17'  # 日期,作为测试集的结束日期
    instruments = D.instruments(start_date, end_date)  # 股票池
    # 数据标注规则
    label_expr = ['(return - benchmark_return) * 100', 
                 'where(label > {0}, {0},  where(label < -{0}, -{0}, label))  
                  + {0}'.format(20)]
    # 10日收益率
    hold_days = 10
    # 以沪深300为基准的相对收益
    benchmark = '000300.SHA'
    # 股票特征因子
    features = ['high_10-low_10','volume_10','amount_10',
                 'turn_10','market_cap_0']


# 标注数据
m1 = M.fast_auto_labeler.v4(instruments=conf.instruments,
         start_date=conf.start_date, end_date=conf.end_date,
         label_expr=conf.label_expr,
         hold_days=conf.hold_days,
         benchmark='000300.SHA',
         sell_at='open', buy_at='open')
# 抽取特征因子
m2 = M.general_feature_extractor.v4(instruments=conf.instruments,
         start_date=conf.start_date, end_date=conf.end_date, 
         features=conf.features)
# 将特征因子进行处理
m3 = M.transform.v1(data=m2.data, 
         transforms=T.get_stock_ranker_default_transforms(),
         drop_null=True, astype='int32', 
         except_columns=['date', 'instrument'])
# 特征因子数据和标注数据合并
m4 = M.join.v1(data1=m1.data, data2=m3.data,
         on=['date', 'instrument'], sort=True)
# 确定训练集
m5_training = M.filter.v1(data=m4.data, expr='date < "2016-01-02"')
# 确定验证数据
m5_training_test = M.filter.v1(data=m4.data, 
                   expr='"2014-01-01" <= date < "2016-01-01"')
# 确定测试数据(样本外)
m5_evaluation = M.filter.v1(data=m4.data, expr='"2016-01-01" <= date')
# 模型的训练
m6 = M.stock_ranker_train.v1(
         training_ds=m5_training.data, test_ds=m5_training_test.data,
         features=conf.features,
         number_of_leaves=30, minimum_docs_per_leaf=1000, 
         number_of_trees=20, learning_rate=0.1)
# 模型的预测
m7 = M.stock_ranker_predict.v1(model_id=m6.model_id, 
         data=m5_evaluation.data)

数据标注规则,将10日后收益率大于20%的股票标注为40分,将收益率小于-20%的标注为0分,如果某只股票收益率为m%(-20<m<20),那么该股票标注得分为m+20分。

我们看一下这几个特征因子对10日后收益率解释的贡献程度。

m6.feature_gains.read_hdf()

可以看出,市值和振幅(最高价-最低价)这两个特征对10日收益率解释力度比较强,这两个特征本身是有逻辑含义的。

因为我们使用训练好了的模型对样本外数据进行预测,我们看一下预测结果。

m7.predictions.read_hdf().head(12)

可以看出,我们可以使用模型预测股票得分情况和排序,于是就可以指导我们买卖股票啦。

本文我们主要介绍了机器学习,然后介绍了如何使用BigQuant平台选出股票的一个实验。在做实验的过程中,关键是对股票特征因子的一个选择,这属于特征工程的范畴。BigQuant平台目前拥有1600个以上的特征因子,这些因子可以组合成天量的复合特征因子,因此如果实验人员具有行业经验,能够发掘有逻辑含义的特征因子,那么他们开发出优异策略的速度会比较快,开发的策略具有更强的泛化能力。

我们今天学会了如何使用机器学习算法预测买入哪些股票,但是我们并不知道买入的股票是不是能够带来超额收益,于是敬请期待下一篇文章,我们会结合BigQuant回测引擎验证模型推荐买入的股票是否具有超额收益。


AI算法如何回测到最近一天?
(路飞) #6

以后交易员是不是要失业了啊


BigQuant平台学习第三篇:如何开发AI策略(下)
(flytomato) #7

楼主你好,我没太理解这个模型,feature是某一天单日的特征映射10日后label(收益评分)?那样本外的loss和准确度呢?不需要计算是吧?然后直接用跑出来的模型做回测?不知道这样理解对吗?


(路飞) #8

StockRanker这个模型没有看loss和准确度这些指标,而是看的ndcg,这是搜索引擎算法常用的一个指标。


(derweeyang) #9

太好了,已知在找支持深度学习框架的平台。希望Big Quant越来越好。


(xinyan) #10

本人对数据这块还有些不解,训练集、验证数据、测试数据(样本外),比如说我有一个股票池,想通过AI发现这个池子的特征共性,但是这里面的数据量不多也就几十条,把它作为训练集显然是不合适的;想问下正确的流程应该怎么样?


(华尔街的猫) #11

量化投资本质上是数据分析的工作,因此对数据必须有一些感觉。机器学习很重要的一个工作就是特征选择,只有选择关键的核心的特征才能做出更好的预测。比如你先发现这个股票池子的特征共性,你可以先人为的根据你的行业经验、投资知识进行人为归纳,提取出关键的特征。