天池龙珠金融风控训练营Task04学习笔记
- 前言
- 学习知识点概要
- 学习内容
-
- 数据集的划分
- 逻辑回归(Logistic Regression,LR)模型
- 决策树模型
- 集成模型
- 模型对比与性能评估
- 学习问题与解答
- 学习思考与总结
前言
前面的学习也只是完成认识数据、处理数据、分类数据的步骤,接下来的模型构建就是机器学习的中心内容。Task03已经帮我们进行建立了特征工程,我们接下来就是利用特征工程帮助各个参数来进行接下来的训练,从而完成一整套机器学习处理金融风控的流程。
本章的学习难度十分大,为了能够理解机器学习的各种模型,我也按照训练营的指示自行去阅读相关的链接,并且尝试能够理解机器学习的各种模型和代码。目前我对这些模型都有个大概的了解,由于要想能够完全理解还是比较困难,我只大概总结一下我的想法和思路,针对我自行细看的模型给出我自己的理解和总结。
金融风控学习地址:https://tianchi.aliyun.com/specials/activity/promotion/aicampfr
学习知识点概要
- 数据集的划分
- 逻辑回归(Logistic)模型:
- 决策树模型
- 集成模型
- 基于bagging思想的集成模型
- 随机森林模型
- 基于boosting思想的集成模型
- XGBoost模型
- LightGBM模型
- CatBoost模型
- 模型对比与性能评估:
- 回归模型/树模型/集成模型;
- 模型评估方法;
- 模型评价结果;
- 模型调参:
- 贪心调参方法;
- 网格调参方法;
- 贝叶斯调参方法;
学习内容
数据集的划分
- 对于整个数据集,我们要把它分为训练集和测试集。训练集是用来训练我们的机器来进行未来的预测,测试集是用已经训练好的机器来测试它的预测准确度,由此来评判我们的模型构建是否成功。
- 划分的方法为:
- 留出法
- 交叉验证法
- 自助法(有放回,使用数据少的情况)
机器学习模型分为线性和非线性两种
- 典型的线性分类器有感知机,LDA,逻辑斯特回归,SVM(线性核)
- 典型的非线性分类器有朴素贝叶斯,kNN,决策树,SVM(非线性核)
逻辑回归(Logistic Regression,LR)模型
- 对数据集实现二分类的问题
- 逻辑回归的表达式可以由下图进行确立,其中把z换成θTx,函数g称为Logistic函数
- Sigmoid函数的图像如图:
- 当z>0时,Sigmoid函数大于0.5;当z<0时,Sigmoid函数小于0.5。所以,我们可以将拟合曲线的函数值带入Sigmoid函数,观察ϕ(z)与0.5的大小确定其类标号。
- Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数。
决策树模型
决策树模型我在博弈论的选修课上学过一点点。大概就是决策者(这里指机器)每在一个分支上,仅对目前的情况进行判断,寻找最优的选择。提到决策树就不得不说说贪心算法。
- 贪心算法:求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。
- 基本步骤:
- 步骤1:从某个初始解出发;
- 步骤2:采用迭代的过程,当可以向目标前进一步时,就根据局部最优策略,得到一部分解,缩小问题规模;
- 步骤3:将所有解综合起来。
- 贪心算法优缺点:
- 优点:简单,高效,省去了为了找最优解可能需要穷举操作,通常作为其它算法的辅助算法来使用;
- 缺点:不从总体上考虑其它可能情况,每次选取局部最优解,不再进行回溯处理,所以很少情况下得到最优解。
- 一个经典的例子就是:需要找给顾客41分钱,现在的货币只有 25 分、20分、10 分、5 分和 1 分四种硬币;基于硬币最少原则,该怎么办?按照贪心算法的三个步骤:
- 1.41分,局部最优化原则,先找给顾客25分;
- 2.此时,41-25=16分,还需要找给顾客10分,然后5分,然后1分;
- 3.最终,找给顾客一个25分,一个10分,一个5分,一个1分,共四枚硬币。
- 但是,如果给他2个20分,加一个1分,是不是
- 三枚硬币就可以了呢?
决策树在开头已经分析,本质上是一种贪心算法。但对于整体的数据集而言,决策树按照所有的特征属性进行划分操作,对所有划分操作的结果集的“纯度”进行比较,选择“纯度”越高的特征属性作为当前需 要分割的数据集进行分割操作,持续迭代,直到得到最终结果。因此决策树能够较好地解决单纯使用贪心算法只对局部分析的局限。
建立决策树的主要是以下三种算法
• ID3 离散
• C4.5 离散或连续
• CART(Classification And Regression Tree) 离散或连续
集成模型
集成模型不太会,我只单单懂得随机森林模型的概念型的东西。
-
随机森林模型
从字面上的意思上理解,就是随机选择几棵数组成一个随机生成的森林。那么我们上面分析了决策树的算法,随机森林形象来讲就是随机抽取几棵决策树来作为集成模型。每棵决策数都有其相应的分类器(classifier),随机森林就是集成所有的分类器组成一个总分类器。随机森林具有样本随机和特征随机的特点,因此其预测的准确率是所有算法当中最高的。
-
随机森林大致过程如下:
1)从样本集中有放回随机采样选出n个样本;
2)从所有特征中随机选择k个特征,对选出的样本利用这些特征建立决策树(一般是CART,也可是别的或混合);
3)重复以上两步m次,即生成m棵决策树,形成随机森林;
4)对于新数据,经过每棵树决策,最后投票确认分到哪一类。
原文链接:https://blog.csdn.net/y0367/article/details/51501780
模型对比与性能评估
回到我们的金融风控主题,在task01中我们选用AUC、KS、f1-score作为我们的模型评判标准。AUC(Area Under ROC Curve)是ROC与X,Y轴所围得曲线的面积。ROC曲线重新回顾一下:
TPR是True Positive Ratio, 真正率
FPR是False Positive Ratio, 假正率
- 对于ROC曲线中的四个点:
点(0,1):即FPR=0, TPR=1,意味着FN=0且FP=0,将所有的样本都正确分类;
点(1,0):即FPR=1,TPR=0,最差分类器,避开了所有正确答案;
点(0,0):即FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类;
点(1,1):分类器把每个实例都预测为正类
学完task04就把task01留下的疑问给解决了。
OK,后续就是建模的流程
- 分离数据集
# 数据集划分
X_train_split, X_val, y_train_split, y_val = train_test_split(X_train, y_train, test_size=0.2)
train_matrix = lgb.Dataset(X_train_split, label=y_train_split)
valid_matrix = lgb.Dataset(X_val, label=y_val)
- 如果我们选用Lightgbm进行建模:(不得不提python的库真的良心,连分类器都不用写了)
"""使用训练集数据进行模型训练"""
from sklearn.model_selection import train_test_split
import lightgbm as lgb
model = lgb.train(params, train_set=train_matrix, valid_sets=valid_matrix, num_boost_round=20000, verbose_eval=1000, early_stopping_rounds=200)
- 利用已经训练好的机器,对测试集进行测试:
"""预测并计算roc的相关指标"""
val_pre_lgb = model.predict(X_val, num_iteration=model.best_iteration)
fpr, tpr, threshold = metrics.roc_curve(y_val, val_pre_lgb)
roc_auc = metrics.auc(fpr, tpr)
print('未调参前lightgbm单模型在验证集上的AUC:{}'.format(roc_auc))
-
模型调参
分为三类:
- 贪心调参:像贪心算法一样,基于局部最优化调参,但可能忽略全局最优化
- 网格搜索:sklearn 提供GridSearchCV用于进行网格搜索,只需要把模型的参数输进去,就能给出最优化的结果和参数。具体流程不会。。。。
- 贝叶斯调参:给定优化的目标函数(可以是广义的函数),通过不断地添加样本点来更新目标函数的后验分布(高斯过程,直到后验分布基本贴合于真实分布)。简单的说,就是考虑了上一次参数的信息,从而更好的调整当前的参数。
具体怎么弄不太会,只基于训练营做了个简单的小归纳。。。
最后把模型保存到本地就好了。。。但上述的过程自己也是蒙蒙的。。
"""保存模型到本地"""
# 保存模型
import pickle
pickle.dump(final_model_lgb, open('dataset/model_lgb_best.pkl', 'wb'))
学习问题与解答
1.Logistics Regression分为线性和非线性还是没整明白(训练营说:不能用Logistic回归去解决非线性问题,因为Logistic的决策面是线性的;)
2.模型较为复杂,短时间内理解起来压力很大。
学习思考与总结
终于把4个tasks给过了一遍。难度感觉是几何倍的上升啊。我觉得task04的模型给出的太多,3天掌握起来难度真的有点大(虽然实际上自己学起来并没有3天,但还是有一天半的时间在认真学习各种模型)。但整个流程走下来,我对金融风控的了解增加了不少,我也第一次知道机器学习能够应用的领域是如此的广泛。
在这个task的学习中,我基本掌握了logistics、knn、决策树的算法,其他算法我只是稍微看了一下(其实就是看不懂)。但庆幸的是,网上的学习资源非常丰富,在期间我寻找到许多十分有用的学习资源,极大地帮助我对算法的理解。
总而言之,我作为一名机器学习的小白,在这4个tasks中确实学到了很多东西,也认识到自己目前的水平还是太差,后续的比赛我会尽我自己最大的努力,尽力能够拿到好(can)成(yu)绩(jiang)T.T。