automl:比人工量化策略准确度高十个点

automl:比人工量化策略准确度高10%

automl是目前ai人工智能,神经网络最前沿,也是最热门的课题。
不久前,mxnet团队推出的auto-gluon,曾经爆出系统自动生产的神经网络模型和参数,比人工模式高六个点(6%),引起行业普遍关注。
六个点(6%),看起来不多,不过对于大部分商业体系而言,采用的都是50:50的稳定模型。
包括彩票博弈,赌场,股票和各种金融产品市场。
如果能够比竞争对手高1%,通过杠杆和规模,都可能产生海量的经济利益。
虽然目前因为算力问题,全自动的AI量化还早,不过,结合AI人工智能,神经网络,辅助量化策略设计,已经具备很大的商业应用价值。
《零起点Python量化三部曲》:《零起点1-Python大数据与量化交易》,《零起点2-Python机器学习与量化交易》,《零起点3-TensorFlow与量化交易》
其中有两部就是关于AI人工智能和神经网络的,书稿创作时(2018),当时各种模型,效果最好的是ltsm,不过准确度也就是50%左右,和随机概率差不多。
在书中,我就说过,对于金融量化行业而言,最好的ai架构是keras,简单,方便非it专业的金融人员,快速将策略程序化,通过btr等量化软件,快速进行backtest回测分析。
这几年,TensorFlow,pyTorch,mxnet三大AI架构,其中有个重点就是系统的简化,方便大众集成。TF甚至直接收购了keras,作为tf的有个二级模块。
这其中,automl的崛起,让金融量化人员,能够更加方便的利用最先进的AI人工智能科技,辅助金融量化策略设计。
目前automl的架构很多,主流的有:TPOT,autokeras,auto-pytorch

请大家关注TOP极宽量化公众号,大量原创Python量化技术资料和课件、案例源码。
目前推广期间,关注公众号,即可免费浏览。

其中autokeras的最简单,想经典的铁达尼生存案例,就三行代码:

clf = ak.ImageClassifier()
clf.fit(x_train, y_train)
results = clf.predict(x_test)

下面,是今天笔者对automl几个主流架构的测试数据,有:TPOT,autokeras,auto-pytorch。
采用的数据是A股上海指数历年的日线数据,1994-01-03 到2020-04-01,约6800条日线数据。
特征数据:标准的ohlc数据+vol成交量,五个指标
label标签数据:updown=close[n+1]-close[n],涨跌标志,1,为上涨,0为下跌(含等值)。

先看看TPOT测试数据:
eneration 100 – Current Pareto front scores:
#1, 0.5503495832269859 BernoulliNB
#2, 0.5499353189224329 XGBClassifier
#3,-2 0.5476355957530818 KNeighborsClassifier
#4,-1 0.5355228914295936 XGBClassifierXGB
time: 5685.94 s
TPOT是基于sklearn传统机器学习算法的,不支持GPU加速,采用多核模式,i7cpu,耗时5689秒,差不多1个半小时。
不过TPOT的测试结果是最好的,准确度:0.55,相当于55%的准确度。
比随机模式,和一般神经网络模型50%的准确度,效果提升了10%。
目前,已经有部分金融机构,开始采用TPOT,辅助实盘策略设计。

下面,再看看autokeras的测试数据:

Epoch 8/10,,3ms/step – loss: 276.5201 – accuracy: 0.5059 – val_loss: 63.2376 – val_accuracy: 0.4796
Epoch 9/10,3ms/step – loss: 198.0278 – accuracy: 0.5073 – val_loss: 162.1042 – val_accuracy: 0.4796
Epoch 10/10, 3ms/step – loss: 259.0536 – accuracy: 0.5042 – val_loss: 262.6631 – val_accuracy: 0.47960s 
time: 35.64 s, 11:14:20 ,t0, 11:13:45

autokeras虽然最简单,不过效果最差,50%准确度,和随机差不多。
很多接触automl项目的,第一就是采用autoks,因为简单。
然后,因为测试效果太差,纷纷放弃automl。

下面,我们再看看auto-pytorch。
auto-pytorch不是facebook官方团队的项目,而是automl团队开发的,和autoks一样。
测试数据如下:
auto-pytorch
 {‘optimized_hyperparameter_config’: {‘CreateDataLoader:batch_size’: 362, ‘Imputation:strategy’: ‘mean’,
‘InitializationSelector:initialization_method’: ‘sparse’, ‘InitializationSelector:initializer:initialize_bias’: ‘Yes’,
‘LearningrateSchedulerSelector:lr_scheduler’: ‘plateau’, ‘LossModuleSelector:loss_module’: ‘cross_entropy_weighted’,
‘NetworkSelector:network’: ‘shapedresnet’, ‘NormalizationStrategySelector:normalization_strategy’: ‘standardize’,
‘OptimizerSelector:optimizer’: ‘adam’, ‘PreprocessorSelector:preprocessor’: ‘truncated_svd’,
‘ResamplingStrategySelector:over_sampling_method’: ‘smote’, ‘ResamplingStrategySelector:target_size_strategy’: ‘upsample’,
‘ResamplingStrategySelector:under_sampling_method’: ‘random’, ‘TrainNode:batch_loss_computation_technique’: ‘standard’,
‘InitializationSelector:sparse:sparsity’: 0.9, ‘LearningrateSchedulerSelector:plateau:factor’: 0.4292283054045373,
‘LearningrateSchedulerSelector:plateau:patience’: 10, ‘NetworkSelector:shapedresnet:activation’: ‘tanh’,
‘NetworkSelector:shapedresnet:blocks_per_group’: 2, ‘NetworkSelector:shapedresnet:max_units’: 20,
‘NetworkSelector:shapedresnet:num_groups’: 1, ‘NetworkSelector:shapedresnet:resnet_shape’: ‘diamond’,
‘NetworkSelector:shapedresnet:use_dropout’: False, ‘NetworkSelector:shapedresnet:use_shake_drop’: True,
‘NetworkSelector:shapedresnet:use_shake_shake’: True, ‘OptimizerSelector:adam:learning_rate’: 0.08651646994460156,
‘OptimizerSelector:adam:weight_decay’: 0.06179269405576141, ‘PreprocessorSelector:truncated_svd:target_dim’: 120,
‘ResamplingStrategySelector:smote:k_neighbors’: 3, ‘NetworkSelector:shapedresnet:max_shake_drop_probability’: 0.8380815297413396}
, ‘budget’: 30.0, ‘loss’: -51.15877437325906,
‘info’: {‘loss’: 0.6931583200182233, ‘train_accuracy’: 50.0, ‘lr_scheduler_converged’: 0.0, ‘val_accuracy’: 52.15877437325906}}

@score , 52.63157894736842
time:  97.74 s, 11:17:58 ,t0, 11:16:21
@ ,准确度52.6%,运行时间97.7秒,比autoks的33.6秒慢一点,不过都很快,因为采用了GPU加速(GTX1080单卡),6800条日线数据,1分钟左右。

以上测试需要说明的是,因为是测试案例,比较粗糙,为节约时间,对模型测试深度,参数进行了大幅度精简,只有,默认参数的10%。
我们通过其他automl案例测试,人工采用默认参数,或者更加广泛的参数,测试数据准确度可以提高3-5个点(3-5%)。
但测试时间周期需要增加20-100倍。
同时,测试数据也过于简单,只有up上涨和down下跌,两种模式;实盘分析,应该从90%-110%,每1%进行分档测试,以便计算模型的收益分析。
autoks目前不成熟,可以不考虑。
正常情况,TPOT的模型计算周期需要2-5天,大约一周。
auto-pytorch,建模周期在1-2个小时左右。
个人认为,就目前情况而言,可以结合auto-pytorch和TPOT,两者的分析数据,进行综合判定,有兴趣的网友,可以自己测试。
近期,很多基金的收益率都跌破4%。
5-10个点(5-10%),看起来不多,不过已经是一种很大的竞争优势,关键这个模型是相对稳定的优势数据。
同时,人工能够结合传统成功的实盘策略,在原收益基础上,再叠加5-10%,那就非常可观了。

请大家关注TOP极宽量化公众号,大量原创Python量化技术资料和课件、案例源码。
目前推广期间,关注公众号,即可免费浏览。

ps,最后,附上TPOT生成AI模型程序代码,标准python程序,sklearn机器学习算法,大家可以修改相关参数,直接使用:

import numpy as np
import pandas as pd
from sklearn.decomposition import FastICA, PCA
from sklearn.linear_model import SGDClassifier
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline, make_union
from sklearn.preprocessing import RobustScaler
from tpot.builtins import StackingEstimator

# NOTE: Make sure that the outcome column is labeled ‘target’ in the data file
tpot_data = pd.read_csv(‘PATH/TO/DATA/FILE’, sep=’COLUMN_SEPARATOR’, dtype=np.float64)
features = tpot_data.drop(‘target’, axis=1)
training_features, testing_features, training_target, testing_target = \
train_test_split(features, tpot_data[‘target’], random_state=None)

# Average CV score on the training set was: 0.5503495832269859
exported_pipeline = make_pipeline(
PCA(iterated_power=3, svd_solver=”randomized”),
RobustScaler(),
FastICA(tol=0.55),
StackingEstimator(estimator=SGDClassifier(alpha=0.0, eta0=1.0, fit_intercept=False, l1_ratio=0.0, learning_rate=”invscaling”, loss=”hinge”, penalty=”elasticnet”, power_t=0.5)),
StackingEstimator(estimator=KNeighborsClassifier(n_neighbors=31, p=2, weights=”uniform”)),
BernoulliNB(alpha=1.0, fit_prior=True)
)

exported_pipeline.fit(training_features, training_target)
results = exported_pipeline.predict(testing_features)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注