前言:
之前在做信贷逾期的项目,使用了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')