1 学习目标
- 学习在金融风控领域常用的机器学习模型
- 学习机器学习模型的建模过程与调参流程
2 如何建模
一,了解通用的几个模型:
逻辑回归模型、决策树模型、集成GBDT模型(随机森林、XGBOOST、LightGBM、CatBOOST)
逻辑回归
-
优点
a. 训练速度较快,分类的时候,计算量仅仅只和特征的数目相关;
b. 简单易理解,模型的可解释性非常好,从特征的权重可以看到不同的特征对最后结果的影响;
c. 适合二分类问题,不需要缩放输入特征;
d. 内存资源占用小,只需要存储各个维度的特征值; -
缺点
a. 逻辑回归需要预先处理缺失值和异常值【可参考task3特征工程】; b. 不能用Logistic回归去解决非线性问题,因为Logistic的决策面是线性的;
c. 对多重共线性数据较为敏感,且很难处理数据不平衡的问题;
d. 准确率并不是很高,因为形式非常简单,很难去拟合数据的真实分布;
决策树模型
-
优点
a. 简单直观,生成的决策树可以可视化展示
b. 数据不需要预处理,不需要归一化,不需要处理缺失数据 c. 既可以处理离散值,也可以处理连续值 -
缺点
a. 决策树算法非常容易过拟合,导致泛化能力不强(可进行适当的剪枝)
b. 采用的是贪心算法,容易得到局部最优解
集合模型
通过组合多个学习器来完成学习任务,通过集成方法,可以将多个弱学习器组合成一个强分类器,因此集成学习
的泛化能力一般比单一分类器要好。
集成方法主要包括Bagging和Boosting,Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,
形成一个更加强大的分类。两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最
终得到不一样的效果。常见的基于Baggin思想的集成模型有:随机森林、基于Boosting思想的集成模型有:
Adaboost、GBDT、XgBoost、LightGBM等。
二,如何调用这些模型
1, 逻辑回归模型;
初步看针对多特征进行分类,理论上应该可以得到一个比较好的结果,但容易过拟合待验证
参考:https://blog.csdn.net/han_xiaoyang/article/details/49123419
2,集合模型
LGBM:
参数值有待分析
params = { 'boosting_type': 'gbdt', 'objective': 'binary', 'metric': 'auc', 'min_child_weight': 5, 'num_leaves': 2 ** 5, 'lambda_l2': 10, 'feature_fraction': 0.8, 'bagging_fraction': 0.8, 'bagging_freq': 4, 'learning_rate': 0.1, 'seed': 2020, 'nthread': 28, 'n_jobs':24, 'silent': True, 'verbose': -1, }
model = clf.train(params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix], verbose_eval=200,early_stopping_rounds=200)
XGBOOST模型:
params = {'booster': 'gbtree', 'objective': 'binary:logistic', 'eval_metric': 'auc', 'gamma': 1, 'min_child_weight': 1.5, 'max_depth': 5, 'lambda': 10, 'subsample': 0.7, 'colsample_bytree': 0.7, 'colsample_bylevel': 0.7, 'eta': 0.04, 'tree_method': 'exact', 16171819202122232425262728293031323334353637383940414243444546474849505152535455565758'seed': 2020, 'nthread': 36, "silent": True, }
watchlist = [(train_matrix, 'train'),(valid_matrix, 'eval')] model = clf.train(params, train_matrix, num_boost_round=50000, evals=watchlist, verbose_eval=200, early_stopping_rounds=200)
CATBOOST模型参数:
params = {'learning_rate': 0.05, 'depth': 5, 'l2_leaf_reg': 10, 'bootstrap_type': 'Bernoulli', 'od_type': 'Iter', 'od_wait': 50, 'random_seed': 11, 'allow_writing_files': False}
model = clf(iterations=20000, **params) model.fit(trn_x, trn_y, eval_set=(val_x, val_y), cat_features=[], use_best_model=True, verbose=500)
3 模型怎么对比优劣
ROC曲线越接近左上角,该分类器的性能越好,其泛化性能就越好。而且一般来说,如果ROC是光滑的,
那么基本可以判断没有太大的overfitting
各种模型的ROC曲线下面积做比较,如果面积大(即AUC大)则模型更优
使用sklearn调用ROC计算即可:
roc_auc_score(val_y, val_pred)
4 模型调参
贪心调参:
网格搜索调参:不适合大量数据
贝叶斯调参
a. 集成模型内置的cv函数可以较快的进行单一参数的调节,一般可以用来优先确定树模型的迭代次数
b. 数据量较大的时候(例如本次项目的数据),网格搜索调参会特别特别慢,不建议尝试
c. 集成模型中原生库和sklearn下的库部分参数不一致,需要注意,具体可以参考xgb和lgb的官方API