金融风控训练营TASK04学习笔记

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

学习知识点概要

  • 建模与调参理论知识
  • 建模与调参代码运行

学习内容

1. 模型相关原理介绍

  • 逻辑回归模型

https://blog.csdn.net/han_xiaoyang/article/details/49123419

  • 决策树模型

https://blog.csdn.net/c406495762/article/details/76262487

  • GBDT模型

https://zhuanlan.zhihu.com/p/45145899

  • XGBoost模型

https://blog.csdn.net/wuzhongqiang/article/details/104854890

  • 1.5 LightGBM模型

https://blog.csdn.net/wuzhongqiang/article/details/105350579

  • Catboost模型

https://mp.weixin.qq.com/s/xloTLr5NJBgBspMQtxPoFA

  • 时间序列模型(选学)
  1. RNN:https://zhuanlan.zhihu.com/p/45289691

  2. LSTM:https://zhuanlan.zhihu.com/p/83496936

推荐教材:

《机器学习》
https://book.douban.com/subject/26708119/

《统计学习方法》
https://book.douban.com/subject/10590856/

《面向机器学习的特征工程》
https://book.douban.com/subject/26826639/

《信用评分模型技术与应用》
https://book.douban.com/subject/1488075/

《数据化风控》
https://book.douban.com/subject/30282558/

2. 模型调参

2.1贪心调参

  • 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。
  • 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。
    https://blog.csdn.net/zhangxiaolinxin/article/details/105256588
  • 需要注意的是在树模型中参数调整的顺序,也就是各个参数对模型的影响程度,这里列举一下日常调参过程中常用的参数和调参顺序:
    • ①:max_depth、num_leaves
    • ②:min_data_in_leaf、min_child_weight
    • ③:bagging_fraction、 feature_fraction、bagging_freq
    • ④:reg_lambda、reg_alpha
    • ⑤:min_split_gain
      例:
from sklearn.model_selection import cross_val_score
  
  # 调objective
  best_obj = dict()
  for obj in objective:
      model = LGBMRegressor(objective=obj)
      """预测并计算roc的相关指标"""
      score = cross_val_score(model, X_train, y_train, cv=5, scoring='roc_auc').mean()
      best_obj[obj] = score

2.2 网格搜索调参

机器学习——网格搜索
网格搜索(GridSearch)及参数说明,实例演示

2.3 贝叶斯优化调参

机器学习最强调参方法!高斯过程与贝叶斯优化

3. pickle保存

pickle和训练模型保存、加载

学习问题与解答

1. data_for_model文件

task04的文件读取是直接读取特征工程以后的文件,这样可以省去再一次做特征工程的时间,但是data_for_model的文件并没有给出来,所以我们得按着他的规则来自己生成data_for_model文件,首先来看一下规则:其中数据集中用特征’sample’来区分测试集和训练集。分别是data[‘sample’]=‘train’,data[‘sample’]=‘test’,按着这个规则,我写了一段代码,把task03处理过后的数据写成data_for_model.csv文件,在这之前,在特征选择里的生成x_train和x_test还有地方需要改动以适应task04的数据读取和处理,代码如下:

features = [f for f in data_train.columns if '_outliers' not in f]
x_train = data_train[features]
features.remove('isDefault')
x_test = data_test_a[features]
y_train = data_train['isDefault']

然后只要将task03训练好的x_train和x_test传进data_for_model()就OK了,代码如下:

def data_for_model(train,test):
    train['sample']='train'
    test['sample']='test'
    data=pd.concat([train,test])
    data.to_csv('data_for_model.csv',index=None)
注:记得要把task04数据读取时的dataset去掉,我们默认是没有dataset文件,除非自己新建一个再把改好后的数据放进去。
其次,里面的reduce_mem_usage()函数我在跑过之后,后面训练出来的结果感觉总比不跑要低一点,所以我选择不跑这个函数。

2. 随机森林建模与调参(尝试)

印象中随机森林好像也是属于集成类的模型,遂想来尝试一下该模型的效果

  • 首先导一下可能会使用到的库
import numpy as np
import pandas as pd
from sklearn.model_selection import GridSearchCV,train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_auc_score
import datetime
from tqdm import tqdm
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold
import sklearn.ensemble as ensemble
  • 读取train.csv与testA.csv(数据处理的话跟task03一样就行)
train=pd.read_csv("train.csv")
testA=pd.read_csv("testA.csv")
  • 划分训练与测试集
Xtrain,Xtest,Ytrain,Ytest=train_test_split(x_train,y_train,test_size=0.2, random_state=778)
  • 建模与调参
param_grid = {
    'criterion':['gini'],
    'max_depth':[2,3,5,8,10],    # 深度:这里是森林中每棵决策树的深度
    'n_estimators':[2,5,7,8,10,15,20],  # 决策树个数-随机森林特有参数
    'max_features':[0.1,0.3,0.5,0.7],
     # 每棵决策树使用的变量占比-随机森林特有参数(结合原理)
    'min_samples_split':[3,5,10,15,20]  # 叶子的最小拆分样本量
}
rfc = ensemble.RandomForestClassifier()
rfc_cv = GridSearchCV(estimator=rfc, param_grid=param_grid,
                      scoring='roc_auc', cv=4)
rfc_cv.fit(Xtrain, Ytrain)
  • 对testA进行预测,由于随机森林对于NaN和inf数值无法处理,所以还需要对testA做一点点处理,使得预测可以运行(但是我也不清楚能不能对测试集做处理,并且能的话我的处理也不知道是不是规范,所以纯属尝试)
x_test.fillna(axis=0,method='ffill',inplace=True)
x_test.replace(np.inf,1<<31,inplace=True)
y_submission = rfc_cv.predict_proba(x_test)[:, 1]

然后再用我之前提到的to_csv()函数生成文件即可。之后提交到平台反馈的得分是0.7121,按照task01的说法0.61~0.75都属于还行的分数,但是比起之前的三个集成模型还是差了一点

3.调参遇到的问题

  • 网格调参
    在这里插入图片描述
  • 贝叶斯优化
    在这里插入图片描述
    我也不知道为什么会出现这些Warning,且也没有出来调参结果。

学习思考与总结

  • 调参给我的感受就好像一个比较“轻松”的任务,这里的轻松指的是在了解了调参需要的过程之后,不需要再去烧脑,只要按部就班地进行就好。调参的成本我认为都在时间这里,有时调参会花费的时间可能超出你的想象,比如这个随机森林的调参,用了一个晚上加一个上午的时间,大概有16个小时吧。有时调参不一定让你满意,于是还得再来一次枯燥的等待。。。总之,task04这项任务,更像是一个体力活,要求人们拥有很好的耐性,运行、等待、修改、再运行,如此反复。
  • 从篇幅和原创内容就可以看出来,这次的task我确实有些跟不上了,希望有大佬可以看穿我的伪装(┬┬﹏┬┬)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
代码随想录算法训练是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值