第二十三课.Kaggle交易预测

本文介绍了如何在Kaggle竞赛中使用LightGBM进行交易预测,首先展示了基本的baseline模型搭建过程,包括数据加载、模型训练与评估。然后,通过调整关键参数如学习率、树的数量、叶子节点数和最大深度等,实现了模型的优化,最终提高了AUC分数。
摘要由CSDN通过智能技术生成

简介

实验基于 Kaggle 竞赛数据,使用 lightgbm 预测银行客户在未来是否会进行交易,比赛地址(已结束):交易预测
fig1
原始数据文件较大,故实验选用了 train.csv 中的 5 万条样本作为模型训练集(train.csv.gzip),1 万条样本作为模型测试集(test.csv.gzip);数据集保存在个人资源处;

fig2

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_fraction and bagging_freq
  • Use feature sub-sampling by setting feature_fraction
  • Use small max_bin
  • Use save_binary to 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_rate with large num_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_leaf and min_sum_hessian_in_leaf
  • Use bagging by set bagging_fraction and bagging_freq
  • Use feature sub-sampling by set feature_fraction
  • Use bigger training data
  • Try lambda_l1, lambda_l2 and min_gain_to_split for regularization
  • Try max_depth to 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得到提升

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值