金融风控训练营-Task05学习笔记

本文介绍了金融风控中常用的模型融合技术,包括平均法、投票法、Stacking和Blending。详细阐述了加权平均、简单投票、Stacking的分层结构以及Blending的Holdout策略,探讨了两者的区别和优缺点。
摘要由CSDN通过智能技术生成


本学习笔记为阿里云天池龙珠计划金融风控训练营的学习内容,学习链接为:https://tianchi.aliyun.com/specials/activity/promotion/aicampfr

一、学习知识点概要

  • 模型融合方式
  • 平均法
  • 投票法
  • Stacking
  • Blending
  • 两者区别

二、学习内容

2.1模型融合方式

  • 平均
    • 简单平均法
    • 加权平均法
  • 投票
    • 简单投票法
    • 加权投票法
  • 综合
    • 排序融合
    • log融合
  • stacking
    • 构建多层模型,并利用预测结果再拟合预测。
  • blending
    • 选取部分数据预测训练得到预测结果作为新特征,带入剩下的数据中预测。
  • boosting/bagging

2.2 平均

2.2.1简单加权平均法

结果直接融合,求多个预测结果的平均值。
pre1-pren分别是n组模型预测出来的结果,将其进行加权融
pre = (pre1 + pre2 + pre3 +…+pren )/n

2.2.2加权平均法

一般根据之前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。
pre = 0.3pre1 + 0.3pre2 + 0.4pre3

2.3 投票

2.3.1简单投票

from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')

vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))

2.3.2加权投票

#在VotingClassifier中加入参数 voting='soft', weights=[2, 1, 1],weights用于调节基模型的权重
from xgboost import XGBClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
clf1 = LogisticRegression(random_state=1)
clf2 = RandomForestClassifier(random_state=1)
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective='binary:logistic')

vclf = VotingClassifier(estimators=[('lr', clf1), ('rf', clf2), ('xgb', clf3)], voting='soft', weights=[2, 1, 1])
vclf = vclf .fit(x_train,y_train)
print(vclf .predict(x_test))

2.4 Stacking

Stacking模型的本质是一种分层的结构,用了大量的基分类器,将其预测的结果作为下一层输入的特征,这样的结构使得它比相互独立训练模型能够获得更多的特征。

stacking 将若干基学习器获得的预测结果,将预测结果作为新的训练集来训练一个学习器。
假设有五个基学习器,将数据带入五基学习器中得到预测结果,再带入模型六中进行训练预测。但是由于直接由五个基学习器获得结果直接带入模型六中,容易导致过拟合。所以在使用五个及模型进行预测的时候,可以考虑使用K折验证,防止过拟合。

在这里插入图片描述
以5折交叉验证为例:

  • 将训练集分成5份(5折交叉验证)。 对于每一个基模型i来说, 我们用其中的四份进行训练
  • 用另一份训练集作为验证集进行预测得到Pi的一部分
  • 再用测试集进行预测得到Ti的一部分,这样当五轮下来之后,验证集的预测值就会拼接成一个完整的Pi
  • 测试集的label值取个平均就会得到一个Ti(看下面的预测示意图)。 这些Pi进行合并就会得到下一层的训练集train2
  • Ti进行合并就得到了下一层的测试集test2。 利用train2训练第二层的模型, 然后再test2上得到预测结果,就是最终的结果。
    在这里插入图片描述
    博主用下面的图表示Stacking的整理过程原理:
    在这里插入图片描述

2.5 Bending

与Stacking的区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集(留出集),例如30%的训练数据(类似于把原始的训练集先分成两部分, 比如70%的数据作为新的训练集, 剩下的30%的数据作为测试集)

2.5.1 单纯的Holdout

一个版本就是单纯的Holdout集,就是直接把训练集分成两部分,70%作为新的训练集, 30%作为测试集,然后用这70%的训练集分别训练第一层的模型,然后在30%的测试集上进行预测, 把预测的结果作为第二层模型的训练集特征,这是训练部分。
预测部分就是把真正的测试集先用第一层的模型预测,把预测结过作为第二层测试集的特征进行第二层的预测。 过程图长下面这个样子:
在这里插入图片描述

2.5.2 Holdout交叉

第二个版本的话依然是有一个Holdout集合,但是引入了交叉验证的思想,每个模型看到的Holdout集合并不一样。即每个模型会看到这个30%的数据会不一样,说白了,就是把Stacking流程中的K-Fold CV 改成 HoldOut CV。第二阶段的stacker模型就基于第一阶段模型对这30%训练数据的预测值进行拟合。

我们在第一层中, 用70%的训练集训练多个模型, 然后去预测那30%的数据得到预测值Pi, 同时也预测test集得到预测值Ti。
这里注意,那30%的数据每个模型并不是一样,也是类似于交叉验证的划分方式,只不过stacking那里是每个模型都会经历K折交叉验证,也就是有多少模型,就会有多少次K折交叉验证,而blending这里是所有模型合起来只经历了一次K折交叉验证
第二层中,直接用30%数据在第一层预测的结果Pi进行合并, 作为新的训练集train2, test集的预测值Ti合并作为新的测试集test2, 然后训练第二层的模型。
Blending的过程训练和预测过程可以使用下图来表示:
在这里插入图片描述

2.6 Blending与Stacking相比

  • 优势

    • Blending比较简单,而Stacking相对比较复杂
    • 能够防止信息泄露:generalizers和stackers使用不同的数据
  • 缺点

    • 只用了整体数据的一部分
    • 最终模型可能对留出集(holdout set)过拟合
    • Stacking多次交叉验证要更加稳健

三、学习问题与解答

imshow() 函数负责对图像进行处理,并显示其格式,但是不能显示。
show() 才能显示出来。

四、学习思考与总结

Stacking 相对Blending慢很多,但是相对会稳健些。模型融合是比赛后期上分的重要手段,特别是多人组队学习的比赛中,将队友的模型进行融合,结果会有大幅提升!

参考:
CSDN博主「Miracle8070」的原创文章《零基础数据挖掘入门系列(六) - 模型的融合技术大总结与结果部署》,原文链接:https://blog.csdn.net/wuzhongqiang/article/details/105012739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值