构建自己的dataset,并使用xgboost模型进行训练

构建自己的dataset,并使用xgboost模型进行训练,第1张

今天是第17篇,关于“AI智能量化,财富与成长感悟”。

01 成长感悟

路上读摩西奶奶《人生随时可以重来》。

一个农妇,出生贫寒,58岁从零开始学绘画,没有科班培训,没有名师指导,只因自己爱好。坚持40年,80岁开画展,受当时的美国总统接见,享誉全球。

她还激励日本作家渡边淳一成为全球知名作家。

这不是“坚持”,“勇气”这样的词可以简单概括的。

纯粹的热情,甚至不计较利益得失,这就是初心。

董宇辉,高晓松读书,发自内心的想读罢了,只是习惯,并不需要坚持,只是“偶尔”某一天被人家看到,随后“顺便”实现了商业诉求。

AI算法,代码之于我,是热情。

初心是AI, 用AI技术从数据中发现规律,指导决策 ;而量化恰好是AI的用武之地。

缩小预期,梦想不是用来标榜的,而是用来实现的。

做好眼前可达的一件件小事情。

发现你的热情,就是你在做这件事不需要刻意去坚持,时光会流逝得很快,不觉得苦与累。

当然热衷代码,不代表就喜欢写商业代码,按产品经理的意愿去对齐一两个像素,或者需要按照原有团队的惯性去迁就一个过时的技术,就很没有意思。

之于我,代码更意味着创造。

顺应初心的“功利心”。

如果说做任何事都没有功利心,可能也不实现。

李笑来2005年就开始写博客,有意识的去教作文课(他认为这样的课更有需求),然后业余时间写了单词书和写作书,成为畅销书,进而实现人生小财务自由后创业,搞比特币等。

这份功利心,应该是阶段的“产品化”,李笑来的书就是他的产品,摩西奶奶的画就是她的产品。

产品是技能的外化表现,是与外界的有效连接点。

这是一个“超级个体”崛起的时代。

普通人可以享受这个红利。

深耕一专多能,建立你自己的品牌,打造自己的产品(作品)。

02 qlib的封装

类似bigquant的可视化(可视化背后其实是一个个模块化的函数),

从数据准备的角度,一开始我们可以简化并统一默认值:

默认使用A股沪深300指数的成份股,它们是A股市值最大的300支股票,代表了中国经济的基本盘,市值较大,也不太会受到 *** 纵。

另外时间段就是2010年开始,把数据划分成三段:

2010-2014作为数据集,2015-2016作为校验集,2017-2022用来回测。

我们需要的唯一输入变量就是因子集:

参考如下bigquant用的示例:

一个有意思的教训(这里多一个“,”,会把features由list变成tuple:一定要注意)

总体封装之后,我们大部分需要定制的是feature部分,也就是传说中的“特征工程”,这里有太多方法和变数了,其实多数策略在研究的就是因子挖掘,因为机器学习中的重中之重:

from core.exp_mgr import ExpMgr
from core.qlib_mgr import QlibMgr
from core.data_mgr import DataMgr

if __name__ == '__main__':
    mgr = QlibMgr()
    model = DataMgr().init_model()
    print(model)

    features = ['Ref($close, 5)',
                'Ref($close, 10)',
                'Ref($close, 20)',
                ]
    names = ['return_5',   # 5日动量
             'return_10',  # 10日动量
             'return_20']  # 20日动量
    ds = mgr.prepare_dataset(features=features, names=names)
    print(ds.prepare('train'))
    print(ds.prepare('valid'))
    print(ds.prepare('test'))

    ExpMgr().run(model, ds)

模型就比较简单了:

来几个先看看:

线性模型:

def load_linear_model():
    from qlib.contrib.model.linear import LinearModel
    model = LinearModel()
    return model

xgboost:

def load_xgboost():
    from qlib.contrib.model.xgboost import XGBModel
    config = {
        'eval_metric': 'rmse',
        'colsample_bytree': 0.8879,
        'eta': 0.0421,
        'max_depth': 8,
        'n_estimators': 647,
        'subsample': 0.8789,
        'nthread': 20
    }
    model = XGBModel(**config)

return model

用数据集简单看了下结果,回测的效果在因子集一样的情况下,差别不大。

当前有一个原因是现在因子过于简单,所以模型之间能力差距显示不出来。

这属于机器学习的范畴,需要我们进一步展开探讨。

小结: 

下一步深入:

表达式的使用,与因子构建;

多种模型选择使用,模型参数的优化;

回测结果分析与可视化。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/2991426.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-23
下一篇 2022-09-23

发表评论

登录后才能评论

评论列表(0条)

保存