当前位置: 首页 > news >正文

基于alphalens对qlib的alpha158做单因子分析

本次百天计划第32篇“AI+量化投资”系列。

这个本次100天小目标,要基于qlib打造一个AI量化投研平台基础

今天的重点是“因子分析”。

因子就是机器学习里的特征。

有人说,回测不重要,因子分析更有意义

回测只能证伪,而不能证实。

什么意思,就是回测结果不行,那实盘肯定不行,因为过往历史数据告诉你,你这个策略结果不好;但回测结果很好,实盘不一定行,为什么呢?

这里本质大家要想清楚,即便你的策略的确不包含“未来函数”,没有错误,但很有可能包括了”隐性“未来函数,比如2016年以来,价值因子明显有收益,像消费行业起飞,若你的策略使用的是价值因子,那超额收益一定不错,但这个一定可以持久的嘛?未必。

因子分析简单说就是看因子与结果之间在统计意义上的相关性,尽管是线性的相关性,但至少有统计学意义的数学基础保证,当然更进一步,我们可以对因子进行非线性的归因分析。

tips1:加载alpha158需要的时间比较长,使用jupyter notebook来测试会大幅度提升效率,尤其是需要频繁试验自己的想法。

tip2: xgboost相比lightGBM,无论是CPU还是内存,还是训练时间,都大得多。机器学习量化相对传统量化,对于机器的要求高很多。

01 因子分析神器 alphalens

alphalens是量化平台鼻祖quantopian的三大开源包之一。

使用pip直接安装即可。

pip install alphalens

def get_clean_factor_and_forward_returns(factor,
                                         prices,
                                         groupby=None,
                                         binning_by_group=False,
                                         quantiles=5,
                                         bins=None,
                                         periods=(1, 5, 10),
                                         filter_zscore=20,
                                         groupby_labels=None,
                                         max_loss=0.35,
                                         zero_aware=False,
                                         cumulative_returns=True)

重点关注两个参数,一个是因子factor,二是价格prices。

alphalens使用简单,难在于数据格式整理,

factor的格式与qlib的比较像,它叫asset,qlib叫instrument。

价格就是每支股票,每天的收盘价:

从alpha158里直接读出来一个因子:KMID

通过修改index.names:

从qlib数据库里读出的数据格式如下:

使用pandas的处理功能,把它变成alphalens的格式:

而后调用就非常简单了:

因子的收益分析:

累计收益分析:

还有好多图就不全贴出来了。

明天结合qlib以及alphalens的代码一并来解读。

小结:

1、当下的模型其实都差不多,核心还是特征工程。

2、对于量化而言,数据预处理都差不多,一则就找更好的数据源,二则找更好的特征。

3、就特征挖掘而言,有两种,一是通过经验,实证,有逻辑的去构建因子,还有一种就是纯粹大数据挖掘。后者更像黑盒,但更符合机器学习的玩法。worldquant的alpha101,一看公式很难想象那是人工设计出来的,应该有机器参与的部分。

4、qlib肯定有不完善的地方,但目前来看,还是值得坚守,自己造一个平台,一开始看似爽,但后面到了大数据,算法阶段,该踩的坑一个不少,都得踩,毕竟微软还是有它的实力在,没有必要从头造轮子。

5、我们今天引入的alphalens就是因子分析很好的补充。

相关文章:

  • C51单片机使用3-数码管显示
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思
  • Swin Transformer网络模型
  • Spring——Spring基础介绍
  • C语言入门(七)while和do-while循环
  • 猿创征文|算法刷题——哈希
  • 基于阿里云 Serverless 快速部署 function 的极致体验
  • docker 如何查看运行中的容器
  • 数学建模十大算法02—插值与拟合(拉格朗日插值、三次样条插值、线性最小二乘法……)
  • 嵌入式Linux入门-异常与中断(流程+寄存器全解析)
  • java计算机毕业设计-体育新闻网站-源码+系统+数据库+lw文档+mybatis+运行部署
  • 基于QT的opencv照片美颜及背景更换
  • [车联网安全自学篇] Android安全之检测APK中异常处理代码是否暴露敏感信息
  • Java基础语法
  • 谷粒商城 renren-fast pom文件报红
  • 时间复杂度分析经典问题——最大子序列和
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Centos6.8 使用rpm安装mysql5.7
  • C学习-枚举(九)
  •  D - 粉碎叛乱F - 其他起义
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Invalidate和postInvalidate的区别
  • Java 23种设计模式 之单例模式 7种实现方式
  • java中的hashCode
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Laravel 实践之路: 数据库迁移与数据填充
  • PHP的类修饰符与访问修饰符
  • Python利用正则抓取网页内容保存到本地
  • Python十分钟制作属于你自己的个性logo
  • SpiderData 2019年2月13日 DApp数据排行榜
  • spring-boot List转Page
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • 读懂package.json -- 依赖管理
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 使用 Docker 部署 Spring Boot项目
  • 使用docker-compose进行多节点部署
  • 异常机制详解
  • AI算硅基生命吗,为什么?
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • # 安徽锐锋科技IDMS系统简介
  • # 达梦数据库知识点
  • #ubuntu# #git# repository git config --global --add safe.directory
  • $L^p$ 调和函数恒为零
  • (C)一些题4
  • (差分)胡桃爱原石
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (七)Knockout 创建自定义绑定
  • (全注解开发)学习Spring-MVC的第三天
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .java 9 找不到符号_java找不到符号
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 5种线程安全集合
  • .Net 8.0 新的变化
  • .NET gRPC 和RESTful简单对比