前言:
之前在做信贷逾期的项目,使用了xgboost模型,详细内容在之前的文章中。
现在在做电信诈骗的项目,本项目需要提供的用户数据信息判断是否诈骗信息,和信贷逾期的项目相似,本质上是一个二分类的问题,只是数据的处理方式有些区别。分别使用xgboost模型,lightgbm模型进行预测。实验效显示,lightgbm模型的效果优于xgboost模型,在此记录lightgbm模型。
心得体会:
在参数是正常范围内的前提下,模型调参,不会显著模型的预测的结果。个人认为,解决方案大致有两个:1.更换模型,或许当前使用的模型并不是最合适数据集的模型,多换一换其他类型的模型,如随机森林等。2.选取更好数据特征进行训练,选取好的数据特征可以显著提高预测结果。
总而言之,好数据加好模型才会得到最好的预测结果。
1.数据清洗
根据数据特点,对表格进行数据清洗,比如去除空值,去除重复值,或者缺失值用中位数进行补充等。
需要注意的是,需要将数据归一化处理。在归一化处理之后,预测结果会提高,效果更好。
2.划分数据X,Y
本次为监督学习,X为数据特征,即feature,Y为target, 即是否诈骗的结果。诈骗为1,否则为0。
3.划分训练集和测试集
#需要导入包 from sklearn.model_selection import train_test_split #划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(feature, target,
test_size=0.2)
4使用lightgbm模型进行预测
import lightgbm as lgb lgb_train = lgb.Dataset(X_train, y_train) lgb_eval =
lgb.Dataset(X_test, y_test, reference = lgb_train) #lightgbm模型参数设置,根据自己的需求调一调
params = { 'task':'train', 'boosting_type':'gbdt', 'objective':'binary',
'metric':{'12','auc','binary_logloss'}, 'num_leaves':40, 'learning_rate':0.05,
'feature_fraction':0.9, 'bagging_fraction':0.8, 'bagging_freq':5, 'verbose':0,
'is_unbalance':True } #训练参数设置 gbm =
lgb.train(params,lgb_train,num_boost_round=1000,valid_sets=lgb_eval,early_stopping_rounds=100)
5模型预测
第4步得到训练好的模型,现在可以输入格式相同的X,即feature,就可以使用模型预测了。以X_test为例。
lgb_pre = gbm.predict(X_test) #括号中需要输入与训练时相同的数据格式
6结果评估
比较预测的结果和真实的结果,评估模型的好坏。
from sklearn.metrics import roc_auc_score auc_score = roc_auc_score(y_test,
lgb_pre)
7模型保存与加载
将训练好的模型进行保存,在需要使用的地方直接加载模型,不需要重新训练
#模型保存 gbm.save_model('model.txt') #模型加载 import lightgbm as lgb gbm =
lgb.Booster(model_file = 'model.txt')
今日推荐