分享

集成树模型的应用,kaggle的信用卡忠诚度预测案例(一)

 AI量化实验室 2023-10-12 发布于北京

百天计划之第30天,关于“AI量化投资,财富自由与个人成长”

30天是第一个小里程碑,不知不觉日更30天,而且扎实在进步。

那天有朋友问我,为何为自己搞一个量化框架,使用别人的东西,总觉得有各种限制。

这种感觉我之前也有用,而且试图把qlib给拆了,就使用它的部分。

仔细想来,之前其实是我们没有沉下心来去了解它,其实qlib毕竟经过这么多高手,这么长时间的努力,我们自己造轮子很难超越——而且也没有必要。

如果对一个东西没有深度理解,自然会感觉诸多限制,打好基础,正所谓——磨刀不误砍柴功。

01 集成树模型之lightGBM

这是微软开源的“轻量级梯度提升树”。

项目在https://github.com/microsoft/LightGBM开源。

文档地址:https://lightgbm./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的算法竞赛

“一人企业”核心是需要一个”独一无二“的核心技能,然后把它产品化

人生的B计划:构建“一个人”的商业模式

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多