简介
实验基于 Kaggle 竞赛数据,使用 lightgbm 预测银行客户在未来是否会进行交易,比赛地址(已结束):交易预测

原始数据文件较大,故实验选用了 train.csv 中的 5 万条样本作为模型训练集(train.csv.gzip),1 万条样本作为模型测试集(test.csv.gzip);数据集保存在个人资源处;

LightGBM 是使用基于树的学习算法的梯度提升框架。 它的设计是分布式且高效的,具有以下优点:
- 训练速度更快,效率更高。
- 内存使用率较低。
- 更高的准确率。
- 支持并行和GPU学习。
- 能够处理大规模数据。
LightGBM 模型的训练和预测方法和 sklearn 类似,若想了解关于 LightGBM 更多的使用方法,可以阅读: LightGBM 文档
LightGBM可以看成是XGBoost的改进版本
安装方式:
# 安装xgboost
pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装lightgbm
pip install lightgbm -i https://pypi.tuna.tsinghua.edu.cn/simple
基于 lightgbm 的 Kaggle 交易预测
baseline
读取训练数据:
import pandas as pd
# 读取 gzip 压缩包形式的训练数据
train_df = pd.read_csv('train.csv.gzip',compression='gzip')
# 获取训练集的特征矩阵(训练集第二列到最后一列)
X_train = train_df.iloc[:,1:].values
# 获取训练集的标记数组(训练集第一列)
y_train = train_df.iloc[:,0].values
读取测试数据:
# 读取 gzip 压缩包形式的测试数据
test_df = pd.read_csv('test.csv.gzip',compression='gzip')
# 获取测试集的特征矩阵(测试集第二列到最后一列)
X_test = test_df.iloc[:,1:].values
# 获取测试集的标记数组(测试集第一列)
y_test = test_df.iloc[:,0].values
实例化模型:
import lightgbm as lgb
# 实例化 LightGBM 模型,不传参则使用默认值
model = lgb.LGBMClassifier()
模型训练与预测:
# 模型训练
model = model.fit(X_train,y_train)
# 模型预测(y=1的概率值)
y_pred = model.predict_proba(X_test)[:,1]
模型评估:
from sklearn.metrics import roc_auc_score
# 计算模型在测试集上的 AUC
auc = roc_auc_score(y_test,y_pred)
# 输出 AUC
auc
输出AUC结果为:0.8546866656125154
优化
考虑模型的参数:
lgb.LGBMClassifier(boosting_type='gbdt',
num_leaves=31,
max_depth=-1,
learning_rate=0.1,
n_estimators=100,
...)
一般来说,调参的关键参数为:
1.For Faster Speed(考虑速度)
- Use bagging by setting
bagging_fractionandbagging_freq - Use feature sub-sampling by setting
feature_fraction - Use small
max_bin - Use
save_binaryto speed up data loading in future learning - Use parallel learning, refer to Parallel Learning Guide
2.For Better Accuracy(考虑准确率)
- Use large
max_bin(may be slower) - Use small
learning_ratewith largenum_iterations - Use large
num_leaves(may cause over-fitting) - Use bigger training data
- Try
dart
3.Deal with Over-fitting(考虑泛化能力)
- Use small
max_bin - Use small
num_leaves - Use
min_data_in_leafandmin_sum_hessian_in_leaf - Use bagging by set
bagging_fractionandbagging_freq - Use feature sub-sampling by set
feature_fraction - Use bigger training data
- Try
lambda_l1,lambda_l2andmin_gain_to_splitfor regularization - Try
max_depthto avoid growing deep tree - Try
extra_trees - Try increasing
path_smooth
常用参数的解释:
- learning_rate:学习率;
- max_depth:树模型深度;
- num_leaves:叶子节点数,树模型复杂度;
- max_bin:叶子结点数+非叶子节点数;
- min_data_in_leaf:一个叶子上数据的最小数量,可以用来处理过拟合;
- feature_fraction:每次迭代中随机选择特征的比例
调优后为:
# 实例化模型
model=lgb.LGBMClassifier(learning_rate=0.06,
n_estimators=200,
num_leaves=20,
max_depth=15)
# 模型训练
model = model.fit(X_train,y_train)
# 模型预测(y=1的概率值)
y_pred = model.predict_proba(X_test)[:,1]
# 计算模型在测试集上的 AUC
auc = roc_auc_score(y_test,y_pred)
# 输出 AUC
auc
结果为:0.8614455584190766,相比默认情况,AUC得到提升
本文介绍了如何在Kaggle竞赛中使用LightGBM进行交易预测,首先展示了基本的baseline模型搭建过程,包括数据加载、模型训练与评估。然后,通过调整关键参数如学习率、树的数量、叶子节点数和最大深度等,实现了模型的优化,最终提高了AUC分数。
1865

被折叠的 条评论
为什么被折叠?



