百天计划之第30天,关于“AI量化投资,财富自由与个人成长”。
30天是第一个小里程碑,不知不觉日更30天,而且扎实在进步。
那天有朋友问我,为何为自己搞一个量化框架,使用别人的东西,总觉得有各种限制。
这种感觉我之前也有用,而且试图把qlib给拆了,就使用它的部分。
仔细想来,之前其实是我们没有沉下心来去了解它,其实qlib毕竟经过这么多高手,这么长时间的努力,我们自己造轮子很难超越——而且也没有必要。
如果对一个东西没有深度理解,自然会感觉诸多限制,打好基础,正所谓——磨刀不误砍柴功。
01 集成树模型之lightGBM
这是微软开源的“轻量级梯度提升树”。
项目在https://github.com/microsoft/LightGBM开源。
文档地址:https://lightgbm.readthedocs.io/en/v3.3.2/
最新版本3.3.2。
python安装比较简单:
pip install lightgbm
它的介绍里强调它:
训练速度快,低内存使用,更高的精度。
平行与分布式训练,支持GPU,能处理大规模数据。
lightGBM支持csv格式,numpy/pandas的ndarray,dataframe格式,还有lightGBM自有格式。其实支持csv和datafram已经满足我们大部分场景的使用。
官方给出了如下的数据集,并以xgboost作为benchmark:
Kaggle上的比赛有一半以上的冠军方案都是基于GBDT,LightGBM提出的主要原因就是为了解决GBDT在海量数据遇到的问题,让GBDT可以更好更快地用于工业实践。
02 实战一下
sklearn内置了一些数据集,最简单的当数iris。
from sklearn import datasets from sklearn.model_selection import train_test_split iris = datasets.load_iris() X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)
iris是一个dict, 有data和label两个numpy的ndarray。
使用train_test_split可以把 iris.data按7:3比例分成两份。
qlib提供的gbdt的版本使用的是LGB原生接口(LGB也提供了兼容sklearn的格式)。
# 转换为Dataset数据格式 train_data = lgb.Dataset(X_train, label=y_train) validation_data = lgb.Dataset(X_test, label=y_test) # 参数 params = { 'learning_rate': 0.1, 'lambda_l1': 0.1, 'lambda_l2': 0.2, 'max_depth': 4, 'objective': 'multiclass', # 目标函数 'num_class': 3, } # 模型训练 gbm = lgb.train(params, train_data, valid_sets=[validation_data]) # 模型存储 joblib.dump(gbm, 'iris_model.pkl') # 模型加载 gbm = joblib.load('iris_model.pkl') # 模型预测 y_pred = gbm.predict(X_test,) y_pred = [list(x).index(max(x)) for x in y_pred] print(y_pred) # 模型评估 print(accuracy_score(y_test, y_pred))
树模型同sklearn类似,使用都比较简单。
这里有几个重要问题:
怎么评价现在模型好还是不好?
如何优化?——包括数据预处理,特征工程,超参数。
03 kaggle信用卡忠诚度分析
还是得用打比赛的思路来学习,我们看一个真实的案例——kaggle信用卡忠诚度分析。
比赛地址如下:
Elo Merchant Category Recommendation | Kaggle
数据的背景信息:
Elo是巴西最大的支付品牌,它用大量的用户信用卡信息,并与商家达成很多合作。通过机器学习算法,为用户推荐个性化的商品,以期达到商家,用户利益最大化。
登录kaggle后,下载数据,解压后得到8个文件:
train.csv, test.csv分别是训练集和测试集。
数据比较简单,card_id就是信用卡号,用三个特征,首次激活的日期。
test的数据格式是一样的。
historical_transactions是信用卡近三个月的交易清单。
merchants是所有商家的附加信息。
最终PK就是使用对test.csv里的信用卡号打出忠诚度的分数。
非常真实的业务表格数据!
这与过去直接load一个iris data,fit一下的感受不一样了吧。
04 数据探索
训练集没有空值。
测试集有一个首次激活月份数据为空。
明天继续。
小结:
1、集成树模型由于良好的性能,精度,可解释性,为kaggle比赛首选,也是AI量化交易的首选。
2、集成树的基础使用非常简洁。
3、难在特征工程,选择,数据处理以及参数调优。
最近文章:
入门机器学习落地AI量化的最佳路径:类kaggle的算法竞赛