lightGBM实例——特征筛选和评分卡模型构建

这篇具有很好参考价值的文章主要介绍了lightGBM实例——特征筛选和评分卡模型构建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据还是采用这个例子里的数据,具体背景也同上。
添模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选
lightGBM模型介绍请看这个链接:集成学习——Boosting算法:Adaboost、GBDT、XGBOOST和lightGBM的简要原理和区别
具体代码如下:
导入模块

# 导入模块
import pandas as pd
import numpy as np
import lightgbm as  lgb
from sklearn.metrics import roc_auc_score, roc_curve, classification_report
from sklearn import metrics
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import seaborn as sns
import math

读取数据

df = pd.read_csv('Bcard.txt')
print(df.info())
df.head()

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
划分训练集和测试集

# 划分测试集和验证集
train = df[df.obs_mth!='2018-11-30'].reset_index().sort_values('obs_mth', ascending=False)
val = df[df.obs_mth == '2018-11-30'].reset_index()
train.head()

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
将训练集的数据进行分组

# 按照时间先后顺序分为5组
train['rank'] = [i for i in range(train.shape[0])]
train['rank'] = pd.cut(train['rank'], bins=5, labels=[i for i in range(5)])
train['rank'].value_counts()

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
获取特征

ft_lst = train.columns
ft_lst=ft_lst.drop(['index','rank','bad_ind','obs_mth','uid'])
ft_lst

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
定义模型函数

# 先定义lgb模型函数
def lgb_test(train_X,train_y,test_X,test_y):
    from multiprocessing import cpu_count
    lgb_clf = lgb.LGBMClassifier(learning_rate=0.05,n_estimators=100)
    lgb_clf.fit(train_X, train_y, eval_set=[(train_X, train_y), (test_X, test_y)], eval_metric='auc', early_stopping_rounds=100)
    lgb.plot_metric(lgb_clf,metric='auc')
#     print(lgb_clf.n_features_)
    return lgb_clf, lgb_clf.best_score_['valid_1']['auc']

进行特征交叉筛选

# 使用lightgbm进行特征交叉筛选



feature_lst = []
ks_train_lst = []
ks_test_lst = []

# 按照组别对其进行特征筛选
for rk in set(train['rank']):
    test_df = train[train['rank']==rk]
    train_df = train[train['rank']!=rk]
    
    train_X = train_df[ft_lst]
    train_y = train_df.bad_ind
    
    test_X = test_df[ft_lst]
    test_y = test_df.bad_ind
    
    model,auc = lgb_test(train_X,train_y,test_X,test_y)
    
    feature = pd.DataFrame({
        'name':model.booster_.feature_name(),
        'importance':model.feature_importances_
    }).set_index('name')
    feature_lst.append(feature)
    pred_y_train = model.predict_proba(train_X)[:,1]
    pred_y_test = model.predict_proba(test_X)[:,1]
    
    train_fpr, train_tpr,_ = roc_curve(train_y, pred_y_train)
    test_fpr, test_tpr, _ =roc_curve(test_y, pred_y_test)
    
    train_ks = abs(train_fpr-train_tpr).max()
    test_ks = abs(test_fpr-test_tpr).max()
    
    train_auc = metrics.auc(train_fpr, train_tpr)
    test_auc = metrics.auc(test_fpr, test_tpr)
    
    ks_train_lst.append(train_ks)
    ks_test_lst.append(test_ks)

计算ks

print('train_ks', np.mean(ks_train_lst))
print('test_ks', np.mean(ks_test_lst))

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
进行特征筛选

# 将5组特征值组合取平均值,并取大于20的特征
feature_importance = pd.concat(feature_lst, axis=1).mean(axis=1)
lst = feature_importance[feature_importance>20].index.to_list()
lst

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
使用模型构建评分卡

# 使用lightgbm构建评分卡
X= train[lst]
y = train.bad_ind

evl_X = val[lst]
evl_y = val.bad_ind

# 训练集的分类评估
model, auc = lgb_test(X,y, evl_X, evl_y)
y_pred = model.predict_proba(X)[:,1]
train_fpr, train_tpr,_ = roc_curve(y, y_pred)
train_ks = abs(train_fpr-train_tpr).max()
train_auc = metrics.auc(train_fpr, train_tpr)
print('train_ks',train_ks)

# 测试集的分类评估
y_pred = model.predict_proba(evl_X)[:,1]
test_fpr,test_tpr,_ = roc_curve(evl_y, y_pred)
test_ks = abs(test_fpr-test_tpr).max()
test_auc = metrics.auc(test_fpr, test_tpr)
print('test_ks',test_ks)

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
绘制roc曲线

# 绘制roc曲线
plt.figure(figsize=(16,10))
plt.plot(train_fpr, train_tpr,color='blue', label='train lgb auc=%0.3f'%train_auc)
plt.plot(test_fpr,test_tpr,color='orange', label='test lgb auc=%0.3f'%test_auc)
plt.plot([0,1],[0,1],'--', color='black')
plt.xlabel('false positive rate')
plt.ylabel('true positive rate')
plt.xlim(0,1)
plt.ylim(0,1)
plt.title('ROC Curve')
plt.legend(loc=1)
plt.show()

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
跟评分卡公式对其进行评分并划分等级

# 由于lightgbm没有回归系数,所以我们采用原始的评分卡公式
def score(p):
    score = 550+50*math.log2((1-p)/p)
    return score

val['p'] = model.predict_proba(evl_X)[:,1]
val['score'] = val.apply(lambda x:score(x.p), axis=1)
print(classification_report(evl_y,model.predict(evl_X), target_names=['good','bad']))

# 根据评分进行分级
def level(score):
    level = ''
    if score <= 600: 
        level = "D" 
    elif score <= 640 and score > 600 : 
        level = "C" 
    elif score <= 680 and score > 640: 
        level = "B" 
    elif score > 680 : 
        level = "A" 
    return level

val['level'] = val.apply(lambda x:level(x.score), axis=1)
val.level.value_counts()

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
验证ks

# 验证ks
fpr,tpr,_ = roc_curve(evl_y, val['score'])
ks = abs(fpr-tpr).max()
print(ks)

0.42314255674351975

# 生成报告
temp = pd.DataFrame()
temp['bad_rate_pred'] = val['p']
temp['real_bad'] = evl_y
temp.sort_values('bad_rate_pred', inplace=True, ascending=False)
temp['num'] = [i for i in range(temp.shape[0])]
temp['num'] = pd.cut(temp.num, bins=20, labels=[i for i in range(20)])

report = pd.DataFrame()
report['bad'] = temp.groupby('num').real_bad.sum()
report['good'] = temp.groupby('num').real_bad.count()-report['bad']
report['bad_cnt'] = report['bad'].cumsum()
report['good_cnt'] = report['good'].cumsum()
good_total = report['good_cnt'].max()
bad_total = report['bad_cnt'].max()
report['bad_pct'] = round(report['bad_cnt']/bad_total,3)
report['good_pct'] = round(report['good_cnt']/good_total,3)
report['bad_rate'] = report.apply(lambda x:round(x.bad/(x.good+x.bad), 3), axis=1)
def cal_ks(x):
    ks = x.bad_pct - x.good_pct
    return round(math.fabs(ks),3)

report['ks'] = report.apply(cal_ks, axis=1)
report

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python
绘制bad_rate和ks折线图

# 绘制bad_rate和KS的折线图
fig = plt.figure(figsize=(16,10))
ax = fig.add_subplot(111)
ax.plot(range(20), report['bad_rate'],'-o',label='bad_rate')
ax2 = ax.twinx()
ax2.plot(range(20), report['ks'],'--o',color='r',label='ks')
ax.grid()
ax.set_xlim(-1,20)
ax.set_ylim(0,0.14)
ax2.set_ylim(0,0.5)
ax.set_ylabel('bad_rate')
ax2.set_ylabel('ks')
ax.set_xlabel('num')
ax.legend(loc=2)
ax2.legend(loc=0)

lightGBM实例——特征筛选和评分卡模型构建,机器学习,项目实战,机器学习,python文章来源地址https://www.toymoban.com/news/detail-611848.html

到了这里,关于lightGBM实例——特征筛选和评分卡模型构建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现竞争性自适应重加权采样法(CARS)进行特征变量选择并构建LightGBM回归模型(LGBMRegressor算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 竞争性自适应重加权采样法(competitive adapative reweighted sampling, CARS)是一种结合蒙特卡洛采样与PLS模型回归系数的特征变量选择方法,模仿达尔

    2024年02月02日
    浏览(32)
  • 机器学习项目实战-能源利用率 Part-3(特征工程与特征筛选)

    博主前期相关的博客可见下: 机器学习项目实战-能源利用率 Part-1(数据清洗) 机器学习项目实战-能源利用率 Part-2(探索性数据分析) 这部分进行的特征工程与特征筛选。 一般情况下我们分两步走:特征工程与特征筛选: 特征工程: 概括性来说就是尽可能的多在数据中提

    2024年02月05日
    浏览(31)
  • CRPS:贝叶斯机器学习模型的评分函数

    连续分级概率评分(Continuous Ranked Probability Score, CRPS)或“连续概率排位分数”是一个函数或统计量,可以将分布预测与真实值进行比较。 机器学习工作流程的一个重要部分是模型评估。这个过程本身可以被认为是常识:将数据分成训练集和测试集,在训练集上训练模型,并

    2023年04月15日
    浏览(26)
  • 【大厂AI课学习笔记】【2.2机器学习开发任务实例】(7)特征构造

    特征分析之后,就是特征构造。 特征构造往往要进行数据的归一化。 在本案例中,我们将所有的数据,将所有特征区间调整为0~1之间。          如上图。 那么,为什么要进行归一化,又如何将数据,调整为0-1的,如何计算呢。 归一化(Normalization) 归一化是一种数据预

    2024年02月21日
    浏览(34)
  • 机器学习技术(五)——特征工程与模型评估

    🚀机器学习技术(四)包含了十二种特征工程的应用方法,主要包括标准化,特征缩放,缩放有离群的值的数据,非线性转换,样本归一化,特征二值化,one-hot编码,缺失值插补以及生成多项式特征等步骤。 🚢通过这些步骤可以显著提高数据的质量。同时,实验包含了基于

    2024年02月16日
    浏览(29)
  • 机器学习技术(四)——特征工程与模型评估

    🚀机器学习技术(四)包含了十二种特征工程的应用方法,主要包括标准化,特征缩放,缩放有离群的值的数据,非线性转换,样本归一化,特征二值化,one-hot编码,缺失值插补以及生成多项式特征等步骤。 🚢通过这些步骤可以显著提高数据的质量。同时,实验包含了基于

    2024年02月13日
    浏览(24)
  • 大数据分析案例-基于LightGBM算法构建银行客户流失预测模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月12日
    浏览(38)
  • 大数据分析案例-基于LightGBM算法构建糖尿病确诊预测模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月11日
    浏览(37)
  • 大数据分析案例-基于LightGBM算法构建乳腺癌分类预测模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月16日
    浏览(39)
  • 【Python机器学习】SVM——线性模型与非线性特征

    SVM(核支持向量机)是一种监督学习模型,是可以推广到更复杂模型的扩展,这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限,因为线和平面的灵活性有限,但是有一种方式可以让线性模型更加灵活,那就是添加更多特征,比如输入特征的交互式或

    2024年01月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包