PLUS会员

张伟_作业

由bqz709ry创建,最终由bqz709ry 被浏览 18 用户

以下是机器学习的作业,分别测试了XGBoost模型和线性回归模型,代码如下:

https://bigquant.com/codesharev3/9f8b0f0d-a863-4f0c-ab89-2508ca68d72b


一、XGBoost模型构建主要思路

1.股票池选择

策略获取盈利主要还是从优质微盘股风格中获取,因此在股票底池做如下限制:(1)pe_ttm大于0;(2)市值排名最小的20%;(3)剔除ST股及停牌股;(4)剔除次新股

2.因子选择

XGBoost树模型是非线性模型,所以并不要求因子具备严格的单调性,因子不同分组的差异对树形模型更加有用,以及因子之间有协同作用的因子组对树形模型更加有用。按照这个原则,选取的主要因子包括:

(1)估值因子:市盈率、市净率;

(2)动量和反转因子:1,5,20日动量;

(3)流动性因子:5日平均成交金额,5日量比、10日量比;

(4)波动率因子:20日波动率;

(5)质量因子:净利润(这儿最好中性化)、净利润同比。财务指标中净利润的有效性是最好的;

(6)市值因子和价格因子:价格因子需要做复权的处理。

(7)技术指标,主要选择rsi因子,这个因子也是传统技术指标中比较有效的因子,尤其在树模型中。

因子的处理:因子没有做市值中性化,主要考虑是主观暴漏小市值风格,以获取更高的收益。但为了因子隔日可比,对部分因子做了标准化处理。尤其对标签列ret_5做标准化处理,对预测效果提升明显,这样做背后是消除市场影响。

因子处理还可以提升的地方:质量因子可以做行业中性化、未加入市场因子。

3.超参选择

分为策略参数和模型超参,由于平台训练时间较长,并未在平台上寻找最优参数,采用以下方法:

策略参数主要为训练数据集时间窗口和模型训练窗口:这两个参数在线下做了测试,最优参数为训练集窗口180天,模型训练窗口为10天。

模型参数主要咨询了大模型,大模型建议如下图所示,我完全按照大模型参数做了修改。线下也做了测试,大模型给的建议确实是较优的参数,可以不用修改直接使用。

4.策略绩效

收益率和夏普还不错,但最大回撤仍然大于30%。小市值具备明显的日历效应,其实可以结合微盘指数技术指标和日历效应来应对微盘股的风险。

5.策略的问题和风险

这个策略存在一定的过拟合风险,过程中没有剔除北交所股票,过去一年北交所股票收益较高且具备显著的小市值风格,对策略的收益贡献和影响较大。后面北交所风险较高,对策略可能会有影响。

6.对XGBoost模型的思考

之前对XGBoost的使用主要用长周期训练集(3-5年)训练,这次在老师指导下尝试了短周期(6个月-1年)训练,对两种模型的思考总结如下:

模型 长周期训练模型 短周期训练模型
模型特点 长周期训练出的模型稳定,使用周期长(可1年训练一次) 短期周训练的模型对市场变化的捕捉更快,上限更高
模型绩效 以微盘股为例,收益80% 以微盘股为例,收益100%+
模型优点 不会过拟合,模型稳定,通用性强(微盘股和中证2000模型可通用) 对市场变化捕捉快,收益的上限高;训练成本相对低
模型缺点 无法快速捕捉市场变化,收益上限低;训练时间高,在平台上基本无法完成训练 需要经常训练

注:以上收益在本地对过去5年数据回测统计(剔除北交所,但使用的因子有变化)

整体来看,短周期训练模型更加适合变化较快的微盘股


二、线性回归模型构建思路

线性回归做了偷懒,代码主要由大模型贡献

1.股票池选择

同xgboost模型

2.因子选择

对于线性模型,需要因子有较好的单调性,所以相比xgboost模型,对因子的要求更高。在这个模型中,主要选择单调性较好和多头收益较好的因子。主要包括:'pe_ttm', 'pct_chg20', 'amount', 'net_profit_mrq_yoy', 'total_market_cap’

线性模型要求因子有统一的量纲,这儿对因子统一用c_pct_rank做排名处理。另外一种处理的方法是做标准化,这儿偷懒没做。

因子选择可以优化的地方:因子中性化处理(财务因子还要做行业中性化),挑选一些更加有效的单调性因子。

3.超参选择

线性模型中使用了三个线性模型,从中选取过去拟合最好的模型使用。超参主要使用了大模型的推荐,没有修改。

4.策略绩效

整体绩效情况不如xgboost

5.策略的问题和风险

策略回撤较大,时间长,而且波动大,很难实盘。

这个策略投入的时间有些低,后面有时间可以再调整参数和因子进行优化。


三、对因子和模型的思考

问题1:因子重要还是模型重要

狭义上来说,因子决定了策略的下限,模型决定了策略的上限。好的因子,通过单因子或简单的多因子策略就能够组合出一个收益不错的策略。但通过模型,可以发现因子之间更多的关系,使多因子间的协同效应更好的发挥出来,提升策略的上限。如果非要比较谁重要,那肯定是因子了,没有因子模型怎么跑呢?

广义上来说,模型也是因子,尤其在机器学习和深度学习中,输入简单的量价数据,模型输出的就是因子。因子和模型都是一个东西了,谁重要还重要吗?能赚钱最重要。

问题2:线性回归和XGBoost模型的不同

线性回归是对因子的线性组合,对因子的依赖性更加重要,单个因子的表现,以及因子之间的协同决定了模型的上限。容易理解,易于构建,只要挖掘出好的因子就能够构建好的线性回归模型。

XGBoost模型是一个非线性的模型,因子间的相互作用和协同效果更加重要,训练XGBoost的模型有时候像炼丹一样,配方很重要,这个配方不是最优秀的因子扔进去就能训练出最优先的模型,而是因子间的相互协同效果很重要,有时候加入一个IC不高的因子,但对模型效果会有很大的提升。


四、最后

多个策略绩效组合就不放在一起了,跑完xgboost,平台断线了没法通过代码调用绩效数据,几个小时的训练,没有宽币跑了、

标签

机器学习XGBoost
{link}