Tip:此部分为零基础入门金融风控的 Task5 模型融合部分,欢迎大家后续多多交流。

赛题:零基础入门数据挖掘 - 零基础入门金融风控之贷款违约预测

项目地址:https://github.com/datawhalechina/team-learning-data-mining/tree/master/FinancialRiskControl

比赛地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction

5.1 学习目标
将之前建模调参的结果进行模型融合。 尝试多种融合方案,提交融合结果并打卡。(模型融合一般用于A榜比赛的尾声和B榜比赛的全程)

5.2 内容介绍
模型融合是比赛后期上分的重要手段,特别是多人组队学习的比赛中,将不同队友的模型进行融合,可能会收获意想不到的效果哦,往往模型相差越大且模型表现都不错的前提下,模型融合后结果会有大幅提升,以下是模型融合的方式。

平均:
简单平均法
加权平均法
投票:
简单投票法
加权投票法
综合:
排序融合
log融合
stacking:
构建多层模型,并利用预测结果再拟合预测。
blending:
选取部分数据预测训练得到预测结果作为新特征,带入剩下的数据中预测。
boosting/bagging(在Task4中已经提及,就不再赘述)
5.3 stacking\blending详解
stacking 将若干基学习器获得的预测结果,将预测结果作为新的训练集来训练一个学习器。如下图 假设有五个基学习器,将数据带入五基学习器中得到预测结果,再带入模型六中进行训练预测。但是由于直接由五个基学习器获得结果直接带入模型六中,容易导致过拟合。所以在使用五个及模型进行预测的时候,可以考虑使用K折验证,防止过拟合。
stacking.png

blending 与stacking不同,blending是将预测的值作为新的特征和原特征合并,构成新的特征值,用于预测。为了防止过拟合,将数据分为两部分d1、d2,使用d1的数据作为训练集,d2数据作为测试集。预测得到的数据作为新特征使用d2的数据作为训练集结合新特征,预测测试集结果。
blending.png

Blending与stacking的不同
stacking
stacking中由于两层使用的数据不同,所以可以避免信息泄露的问题。
在组队竞赛的过程中,不需要给队友分享自己的随机种子。
Blending
由于blending对将数据划分为两个部分,在最后预测时有部分数据信息将被忽略。
同时在使用第二层数据时可能会因为第二层数据较少产生过拟合现象。
参考资料:还是没有理解透彻吗?可以查看参考资料进一步了解哦! https://blog.csdn.net/wuzhongqiang/article/details/105012739

5.4 代码示例
5.4.1 平均:
简单加权平均,结果直接融合 求多个预测结果的平均值。pre1-pren分别是n组模型预测出来的结果,将其进行加权融
1
pre = (pre1 + pre2 + pre3 +…+pren )/n
加权平均法 一般根据之前预测模型的准确率,进行加权融合,将准确性高的模型赋予更高的权重。
1
pre = 0.3pre1 + 0.3pre2 + 0.4pre3
5.4.2 投票
简单投票
1
from xgboost import XGBClassifier
2
from sklearn.linear_model import LogisticRegression
3
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
4
clf1 = LogisticRegression(random_state=1)
5
clf2 = RandomForestClassifier(random_state=1)
6
clf3 = XGBClassifier(learning_rate=0.1, n_estimators=150, max_depth=4, min_child_weight=2, subsample=0.7,objective=‘binary:logistic’)
7

8
vclf = VotingClassifier(estimators=[(‘lr’, clf1), (‘rf’, clf2), (‘xgb’, clf3)])
9
vclf = vclf .fit(x_train,y_train)
10
print(vclf .predict(x_test))
1

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

8
vclf = VotingClassifier(estimators=[(‘lr’, clf1), (‘rf’, clf2), (‘xgb’, clf3)], voting=‘soft’, weights=[2, 1, 1])
9
vclf = vclf .fit(x_train,y_train)
10
print(vclf .predict(x_test))
5.4.3 Stacking:
1
import warnings
2
warnings.filterwarnings(‘ignore’)
3
import itertools
4
import numpy as np
5
import seaborn as sns
6
import matplotlib.pyplot as plt
7
import matplotlib.gridspec as gridspec
8
from sklearn import datasets
9
from sklearn.linear_model import LogisticRegression
10
from sklearn.neighbors import KNeighborsClassifier
11
from sklearn.naive_bayes import GaussianNB
12
from sklearn.ensemble import RandomForestClassifier
13
from mlxtend.classifier import StackingClassifier
14
from sklearn.model_selection import cross_val_score, train_test_split
15
from mlxtend.plotting import plot_learning_curves
16
from mlxtend.plotting import plot_decision_regions
17

18

19

以python自带的鸢尾花数据集为例

20
iris = datasets.load_iris()
21
X, y = iris.data[:, 1:3], iris.target
22

23

24
clf1 = KNeighborsClassifier(n_neighbors=1)
25
clf2 = RandomForestClassifier(random_state=1)
26
clf3 = GaussianNB()
27
lr = LogisticRegression()
28
sclf = StackingClassifier(classifiers=[clf1, clf2, clf3],
29
meta_classifier=lr)
30

31

32
label = [‘KNN’, ‘Random Forest’, ‘Naive Bayes’, ‘Stacking Classifier’]
33
clf_list = [clf1, clf2, clf3, sclf]
34

35
fig = plt.figure(figsize=(10,8))
36
gs = gridspec.GridSpec(2, 2)
37
grid = itertools.product([0,1],repeat=2)
38

39

40
clf_cv_mean = []
41
clf_cv_std = []
42
for clf, label, grd in zip(clf_list, label, grid):
43

44
scores = cross_val_score(clf, X, y, cv=5, scoring=‘accuracy’)
45
print(“Accuracy: %.2f (+/- %.2f) [%s]” %(scores.mean(), scores.std(), label))
46
clf_cv_mean.append(scores.mean())
47
clf_cv_std.append(scores.std())
48

49
clf.fit(X, y)
50
ax = plt.subplot(gs[grd[0], grd[1]])
51
fig = plot_decision_regions(X=X, y=y, clf=clf)
52
plt.title(label)
53

54

55
plt.show()
Accuracy: 0.91 (+/- 0.07) [KNN]

Accuracy: 0.94 (+/- 0.04) [Random Forest]

Accuracy: 0.91 (+/- 0.04) [Naive Bayes]

Accuracy: 0.94 (+/- 0.04) [Stacking Classifier]

5.4.2 blending
1

以python自带的鸢尾花数据集为例

2
data_0 = iris.data
3
data = data_0[:100,:]
4

5

6
target_0 = iris.target
7
target = target_0[:100]
8

9
#模型融合中基学习器
10
clfs = [LogisticRegression(),
11
RandomForestClassifier(),
12
ExtraTreesClassifier(),
13
GradientBoostingClassifier()]
14

15
#切分一部分数据作为测试集
16
X, X_predict, y, y_predict = train_test_split(data, target, test_size=0.3, random_state=914)
17

18

19
#切分训练数据集为d1,d2两部分
20
X_d1, X_d2, y_d1, y_d2 = train_test_split(X, y, test_size=0.5, random_state=914)
21
dataset_d1 = np.zeros((X_d2.shape[0], len(clfs)))
22
dataset_d2 = np.zeros((X_predict.shape[0], len(clfs)))
23

24
for j, clf in enumerate(clfs):
25
#依次训练各个单模型
26
clf.fit(X_d1, y_d1)
27
y_submission = clf.predict_proba(X_d2)[:, 1]
28
dataset_d1[:, j] = y_submission
29
#对于测试集,直接用这k个模型的预测值作为新的特征。
30
dataset_d2[:, j] = clf.predict_proba(X_predict)[:, 1]
31
print(“val auc Score: %f” % roc_auc_score(y_predict, dataset_d2[:, j]))
32

33

34
#融合使用的模型
35
clf = GradientBoostingClassifier()
36
clf.fit(dataset_d1, y_d2)
37
y_submission = clf.predict_proba(dataset_d2)[:, 1]
38
print(“Val auc Score of Blending: %f” % (roc_auc_score(y_predict, y_submission)))
39

5.5 经验总结
简单平均和加权平均是常用的两种比赛中模型融合的方式。其优点是快速、简单。
stacking在众多比赛中大杀四方,但是跑过代码的小伙伴想必能感受到速度之慢,同时stacking多层提升幅度并不能抵消其带来的时间和内存消耗,所以实际环境中应用还是有一定的难度,同时在有答辩环节的比赛中,主办方也会一定程度上考虑模型的复杂程度,所以说并不是模型融合的层数越多越好的。
当然在比赛中将加权平均、stacking、blending等混用也是一种策略,可能会收获意想不到的效果哦!

入门金融风控-Task5-模型融合相关推荐

  1. 金融风控实战——模型融合

    过采样方法使用条件 (1)负样本可以代表样本空间 (2)数据是足够干净的(样本.特征没有噪声) 过拟合 (1)增多数据 (2)特征筛选 (3)调参 (4)模型融合 模型融合 投票器模型融合 from ...

  2. Datawhale零基础入门数据挖掘-Task5模型融合

    Datawhale零基础入门数据挖掘-Task5模型融合 五.模型融合 5.1 模型融合目标 5.2 内容介绍 5.3 Stacking相关理论介绍 5.4 代码示例 5.4.1 回归\分类概率-融合 ...

  3. 【算法竞赛学习】二手车交易价格预测-Task5模型融合

    二手车交易价格预测-Task5 模型融合 五.模型融合 Tip:此部分为零基础入门数据挖掘的 Task5 模型融合 部分,带你来了解各种模型结果的融合方式,在比赛的攻坚时刻冲刺Top,欢迎大家后续多多 ...

  4. 零基础入门金融风控-贷款违约预测-Task05——模型融合

    有幸参加了阿里云举办的零基础入门金融风控-贷款违约预测训练营.收获颇多. 每天记录一些自己之前的知识盲点,需经常温习. 第五次的学习任务,是模型融合. 一.模型融合常用方法 模型融合有常用的如下六种方 ...

  5. 关于零基础入门金融风控挑战赛的笔记系列

    Task1 赛题理解 赛题背景 金融行业里面,对风险控制非常严格,如果风控把握不好,那么会导致坏产等一系列恶性循环.因此,风控便成为了金融公司业务管理中重要的一环.这次,结合天池的优势,进行<零 ...

  6. 零基础入门金融风控-贷款违约预测-机器学习-数据分析

    零基础入门金融风控-贷款违约预测 一.赛题数据 赛题以预测用户贷款是否违约为任务,数据集报名后可见并可下载,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变 ...

  7. 入门金融风控【贷款违约预测】

    入门金融风控[贷款违约预测] 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题.通过这道赛题来引导大家了解金融 ...

  8. 零基础入门金融风控之贷款违约预测挑战赛——简单实现

    零基础入门金融风控之贷款违约预测挑战赛 赛题理解 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题.通过这道赛 ...

  9. 笔记之零基础入门金融风控-贷款违约预测

    零基础入门金融风控-贷款违约预测 赛题描述 赛题概况 数据概况 合理的创建标题,有助于目录的生成 预测指标 赛题流程 评分卡 笔记记录转载 赛题描述 赛题以金融风控中的个人信贷为背景,要求选手根据贷款 ...

最新文章

  1. WMI技术介绍和应用——执行方法
  2. Phalcon 訪问控制列表 ACL(Access Control Lists ACL)
  3. Python中递增和递减运算符的行为
  4. linux 启动rabbitmq 报错:
  5. House Building HDU - 5538
  6. createjs中shape的属性regX和regY
  7. web前端之html从入门到精通
  8. Linux驱动开发面试题整合
  9. python爬虫之爬取拉勾网
  10. Twitter在15岁终于迎来蜕变
  11. 四大名著丨折射中国人性的四面镜子
  12. angular学习-数据绑定
  13. vivo Y76s参数配置
  14. 句法分析(PCFG,Transition-based parsing)
  15. AD各种布线方法总结
  16. MPLAB X IDE调试代码
  17. 随机森林(RandomForest,RF)网格搜索法调参
  18. 大学期间能考的计算机证书,大学期间可以考哪些证书?过来人告诉你这3大类最有用!...
  19. nginx(一)介绍安装
  20. EasyRecovery15数据恢复软件相关使用教程

热门文章

  1. 从LOL金克斯的不解释连招学习装饰者模式
  2. 3ds max导出fbx模型出现破裂
  3. 西南交通大学计算机学院转专业吗,西南交通大学可以转专业吗,西南交通大学新生转专业政策...
  4. stm32f4下载异常问题处理
  5. IDEA神器使用技巧和快捷键总结之跳转(一)
  6. JSP+ssm计算机毕业设计律师事务所管理系统703n5【源码、数据库、LW、部署】
  7. 嵌入式工程师需要具备的能力
  8. 判断三条边是否构成三角形?
  9. 靠手机软件免流是真的吗?什么原理?
  10. OrCAD中常用元件在库中存放的位置(最近更新2012-7-30)