xgboost坏账预测(二分类问题)

本文探讨了使用xgboost进行坏账预测的流程,包括数据获取、探索性数据分析、数据清洗、特征工程、模型构建和优化。通过处理不平衡数据集、特征选择和参数调优,提高了模型性能,尤其是在F1分数和召回率上的提升。
摘要由CSDN通过智能技术生成

参考代码来自:Explore and run machine learning code with Kaggle Notebooks | Using data from Two Sigma Connect: Rental Listing Inquirieshttps://www.kaggle.com/code/sudalairajkumar/xgb-starter-in-python/notebook

第一次接触xgboost,在前人的肩膀上开始自己的探索~文中代码是参考代码上略作调整,不一定正确,因为设备原因无法把自己的完整代码拷贝过来,只做一个自己的学习记录(是总结,没什么代码)

1.项目背景

大学生借贷款这个情景下,会有按时还款(好帐)或者拖欠不还(坏账)两种情况。要对贷款人进行判断,预测是否会出现赖账情况。

2.数据获取

已有两份数据,train与predict。数据集train是训练集,predict是测试集,也是最后用来预测评分的数据集。

3.探索性数据分析

这篇参考文档十分有用:

Exploratory analysis of Two Sigma Connect: Rental Listing Inquiries — pydata

value_counts / data.describe() 统计数据。发现部分数据缺失值过大【查看缺失值:df.isnull().sum()】/分布异常。

数据集中有数值型数据与categories类别型数据。 

4.数据清洗

1)客户id中并不包含有效信息,于是删去。有的场景下数据集客户id是包含有效特征的,但这个场景下的id只是编号,并无用处;

2)对数据进行shuffle,消除潜在的连续数值影响。

3)数据缺失处理,fillna 或 sklearn.impute.SimpleImputer方法进行填充。部分特征数值缺失值超过70%,删除这个特征。

4)数值特征不需要处理。进行strip等操作删除数值前后的空格或字符。

5)类别特征转为数值特征,可采用one-hot独热编码或labelencoder方法。xgboost分类并不适用于onehot编码(之后填充),我这里采用labelencoder编码。

5.特征工程

#读取数据为DataFrame格式

train_df = pd.read_csv(train_file)
predict_df = pd.read_csv(predict_file)
print(train_df.shape)
print(predict_df.shape)

数值特征的保留与非数值特征的转换:有额外信息的非数值变量转化为对应的数值。删除稀疏特征:空值/同一值占绝大比例的列。使用中位数填充空值,通常数据分布不对称时,中位数比平均数更能保持排序关系。

#feature_to_use中是在特征处理后将要用到的特征
features_to_use  = ["feature_name", "feature_name", "feature_name", "feature_name"]

建立特征数据和标签数据,进行数据集拆分。在数据集中,客户编号在训练集和测试集中没有重合部分,也不涉及分行编号,意义不大,遂删除之。

xgb不能够处理分类特征,labelencoder编码将特征编码为数值。因为xgb对缺失值不敏感,删除了缺失值处理。注意有的特征虽然看起来是数值,但因为前后包含字符,是string类型,注意辨别处理。

#转换成数值特征
categorical = ["feature1", "feature2", "feature3"]
for f in categorical:
        if train_df[f].dtype=='object':
            #print(f)
            lbl = preprocessing.LabelEncoder()
            lbl.fit(list(train_df[f].values) + list(prdict_df[f].values))
            train_df[f] = lbl.transform(list(train_df[f].values))
            test_df[f] = lbl.trans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值