lightGBM有效因子筛选与qlib自定义handler

持续行动1期 48/100,“AI技术应用于量化投资研究”。

lightGBM所代表的集成树模型,优点特别明显,就是快且质量不低,用于量化非常合适。关键它可以筛选因子。

01 重点因子筛选

get_feature_importance()就可以把因子的打分倒序列出来。

lightGBM有效因子筛选与qlib自定义handler_第1张图片

可以看出96和26两个因子得分最高。

lightGBM有效因子筛选与qlib自定义handler_第2张图片

这两个因子的公式如下:

当天的动量与成交量的动量之间30日的相关性:

Corr($close/Ref($close,1), Log($volume/Ref($volume, 1)+1), 30)

30天价格的标准差与价格之比:

Std($close, 30)/$close

02 自定义handler

alpha158是qlib内置的handler,为了方便,我们直接使用dataloader来加域数据,便于增删因子。

def load_dataset2(features):
    feature_tuple = features
    label_tuple = (["Ref($close, -2)/Ref($close, -1) - 1"], ["LABEL0"])
    qdl = QlibDataLoader(config={
        'feature': feature_tuple,
        'label': label_tuple,
    })

    data_handler_config = {
        "start_time": "2010-01-01",
        "end_time": "2020-08-01",
        "instruments": 'csi300',
    }
    dh = DataHandlerLP(data_loader=qdl, **data_handler_config,
                       )
    ds = DatasetH(dh, segments=segments)
    return ds

使用自己的dataset后出现了比较“诡异”的结果,就是无论如何增减因子,pred_score都是一样的,自然就没有结果。

查明原因如下,需要对label列去除na, 并且CSZScoreNorm正则化。

_DEFAULT_LEARN_PROCESSORS = [
    {"class": "DropnaLabel"},
    {"class": "CSZScoreNorm", "kwargs": {"fields_group": "label"}},
]

03 qlib模型的思考

qlib内置了model zoo,但从实际上看,因子挖掘才是最重要的,而不是model。简单对比了lightGBM和xgboost,没有什么特别。

之前看了kaggle竞赛获奖的一些model,都是针对数据进行了优化,但不是模型层面的,对于表格型的数据,使用GBDT这样的树模型比深度学习无论从效率上,可解释性上都有优势。

这里会引出一个结论,就是我们一直在提的,qlib还重要吗?框架到底有没有引入负担。框架一定会引入负担,就看我们想怎么用了。

从交易的视角qlib不符合,qlib更像机器学习的“科研”项目。

更合适的场景,我可能选定一个股票池,甚至是电子货币,然后对其标注,然后使用模型进行训练,能够指导买卖。另外,完全没必要每天都满仓,现在qlib就是满仓轮动,这个也很奇怪。

核心逻辑——找到更好的数据来源,比如另类数据;找到更好的因子——因子挖掘能力。模型也许会提升一点点,对于大的私募机构有用,对于普通散户,意义有限。

04 “杠铃”模式

塔勒布专门研究随机性,不确定性,他是交易员出身的学者。

他研究不确定性的同时,还赚到大钱,这才是人生赢家——真正的躬身入局。

他给出一个很好的启发:前面的分享我们说ABZ计划,B计划让普通人有机会探索更多的可能性,而“杠铃”模式的启发是,让B计划有实现阶段跃迁的可能性。

理性的我们总在规避风险,这是对的。比如不碰P2P,BTC。但是,如果从杠铃模式的角度,这不是最优的。是规避的风险,但人生也很平庸。把90%的资源用于追求平稳,而用10%去拥抱高收益的事情。如果你的仓位是100万,那么10万本金参与电子货币,也许是可以的。

——梦想还是要有的,万一实现了呢?

lightGBM有效因子筛选与qlib自定义handler_第3张图片

 

你可能感兴趣的:(建立自己的算法交易事业,python)