头图

教程总体简介:Excel的使用 全渠道业务概述 1. Excel的使用(预计4小时) 2. 全渠道业务分析(预计4小时) 第01章 Pandas基础 第02章 DataFrame基本操作 第03章 数据分析入门 第04章 选取数据子集 第05章 布尔索引 第06章 分组聚合、过滤、转换 第09章 时间序列分析 第10章 用Matplotlib、Pandas、Seaborn进行可视化

完整笔记资料代码:https://gitee.com/yinuo112/Backend/tree/master/Python/嘿马pyt...

感兴趣的小伙伴可以自取哦~


全套教程部分目录:


部分文件图片:

  • 风控业务

    • 数据采集

      • 自己获取
      • 从运营商获取
      • 从大数据公司获取
      • 人民银行征信报告
      • 从里爬数据
    • 反欺诈

      • 大部分的公司都使用的是反欺诈规则
    • 风控模型

      • A 申请评分卡
      • B 行为评分卡
      • C 催收评分卡
    • 催收

特征工程

  • 特征衍生和特征选择是工作中比较耗时的部分
  • 特征选择

    • 移除低方差特征 (如果特征方差比较小,说明这个特征维度上,每个样本区分度不高)
    • from sklearn.feature_selection import VarianceThreshold

      • 传入方差的阈值,低于这个阈值的特征会被移除掉
    • 根据特征的相关性,选择和目标值相关性比较强的特征

      • 目标是连续值 皮尔逊
      • 目标是离散 chi卡方检验
  • 递归特征消除 RFE

    • 原理,用算法模型反复迭代,利用训练的数据去预测,选择可以返回特征权重的算法(随机森林,逻辑回归)
    • 反复迭代 每一次去除一个特征,去除一个用剩下的特征再次训练
    • 可以用一个模型来进行特征选择,用另一个模型来做最终过的预测

      from sklearn.feature_selection import RFE
      from sklearn.ensemble import RandomForestClassifier
      from sklearn.datasets import load_iris
      #建立一个决策树模型
      rf = RandomForestClassifier()
      #加载鸢尾花的数据
      iris=load_iris()
      X,y=iris.data,iris.target
      #创建RFE 递归消除特征 对象  传入要进行RFE使用到的模型, n_features_to_select 最终要剩下几个特征
      rfe = RFE(estimator=rf, n_features_to_select=2)
      X_rfe = rfe.fit_transform(X,y)
      X_rfe.shape
  • Embeded

    • 利用l1正则做特征选择
    • xgboost lightgbm 可以输出feature_importance
    from sklearn.feature_selection import SelectFromModel
    from sklearn.svm import LinearSVC
    #  penalty = 'l1'  利用l1正则训练模型
    lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X,y)
    #把模型 交给SelectFromModel 把l1之后系数为0的特征去掉
    model = SelectFromModel(lsvc, prefit=True)
    X_embed = model.transform(X)
    X_embed.shape
  • 一 定义问题

    • 基本统计分析

      • 工具选择
    • 建模分析(选择算法)

      • 监督/无监督
      • 监督

        • 分类
        • 回归
  • 算法确定下来之后

    • 数据预处理
    • 特征衍生
    • 特征选择
  • 风控建模的时候需要注意

    • 信用评分分段之后,正常的效果,评分和预期的概率应该是单调的

      • 按照评分进行分组
      • 评分越高的组,坏人的概率应该更低
    • 如果评分和预计的概率不是单调的,模型时有问题的
    • 模型人群分布的稳定性

      • 在业务没有变化的前提下,间隔一段时间,在同一分段的人群总数占全体用户的比例,应该不会有大的波动
  • 跨时间验证

    • 上线之前 需要用最近时间的数据对模型进行评估
    • 训练模型的时候 最近两个月~6个月的数据 是不会用来训练模型
  • 正常的信贷业务 坏账率 合理比例 低于5%
  • B卡 贷后管理 用户注册数据 从三方购买的,如果半年之内 没有新的操作

    • 从不同渠道买来的评分数据 有效期半年
    • 用户第一次来的时候 个人用户的数据不全,需要从其它合作方购买 同盾

特征衍生

  • 利用数值量的统计值做特征衍生

    • 如果一个用户(id)在数据集中有多条记录,可以根据这个id做分组,获取当前id对应的所有记录,对这些记录求

      • 平均值
      • 标准差(方差)
      • 求和
      • 求最大/最小
      • 极差
      • 计算条目数量

数据处理-》特征衍生-》特征选择

  • 模型融合思路

    • 训练两个模型

      • MSE 在误差比较大的情况下 损失比MAE的惩罚更严重

        • 误差平方求平均
      • MAE

        • 误差绝对值求平均
      • 误差比较大的时候 更多的用MSE的结果放到最终的模型中
      • 误差比较小的时候 用MAE
  • 特征衍生

    • 如果是多个分类特征 类别的值都是0,1 通过相乘做特征交叉
    • 特征相除 需要注意避免除0的异常 分母+1

      • df_data['话费稳定'] = df_data['用户账单当月总费用(元)'] / (df_data['用户当月账户余额(元)'] + 1)
        df_data['相比稳定'] = df_data['用户账单当月总费用(元)'] / (df_data['用户近6个月平均消费值(元)'] + 1)
    
    ### 目标
  • 风控业务

    • 数据采集

      • 买合作方的数据

        • 芝麻分 需要用户授权
        • 同盾 同盾分
      • 人行征信数据
      • 自己应用内部数据
    • 反欺诈

      • 用规则
    • 规则引擎
    • 评分卡模型 逻辑回归

      • A 贷前
      • B 贷中
      • C 催收
    • 催收
  • 特征工程

    • 特征衍生

      • 如果一个用户(id)在数据集中有多条记录,可以根据这个id做分组,获取当前id对应的所有记录,对这些记录求

        • 平均值
        • 标准差(方差)
        • 求和
        • 求最大/最小
        • 极差
        • 计算条目数量
    • 特征选择

      • 相关性 卡方检验 筛选特征
      • wrapper RFE 递归特征消除

        • 一次去掉一个
      • embeded 带到模型里 利用模型的特点做特征选择

        • LR l1
        • xgboost/lightGBM 训练出模型之后 可以输出feature_importance
    • 验证模型效果的时候

      • 跨时间验证 最近几个月的数据 作为跨时间验证集
      • 模型稳定性 根据坏人比例 给用户分若干群, 隔了一段时间 比例应该没有太大变化
      • 信用分和坏人概率 要有严格单调性 分数越高的组,坏人的概率越低
  • 移动人群画像赛

    • 特征工程

      • 离群点处理

        • 将大于99.9%分位数的数据直接赋值对应99.9%分位数的值
        • 将小于0.1%分位数的数据直接赋值0.1%分位数对应的值
      • 数据分布处理

        • log变换 改变数据分布情况
      • 特征衍生思路

          # 特征交叉 两个维度交叉 这里用的是乘法  都是 0,1这样的分类值
            df_data['是否_商场_电影']=df_data['是否去过高档商场']*df_data['当月是否看电影'] 
            df_data['是否_商场_旅游']=df_data['是否去过高档商场']*df_data['当月是否景点游览']
            df_data['是否_商场_体育馆']=df_data['是否去过高档商场']*df_data['当月是否体育场馆消费']
            df_data['是否_电影_体育馆']=df_data['当月是否看电影']*df_data['当月是否体育场馆消费']
            df_data['是否_电影_旅游']=df_data['当月是否看电影']*df_data['当月是否景点游览']
            df_data['是否_旅游_体育馆']=df_data['当月是否景点游览']*df_data['当月是否体育场馆消费']
            
             # 特征交叉 三个维度交叉
            df_data['是否_商场_旅游_体育馆']=df_data['是否去过高档商场']*df_data['当月是否景点游览']*df_data['当月是否体育场馆消费']
            df_data['是否_商场_电影_体育馆']=df_data['是否去过高档商场']*df_data['当月是否看电影']*df_data['当月是否体育场馆消费']
            df_data['是否_商场_电影_旅游']=df_data['是否去过高档商场']*df_data['当月是否看电影']*df_data['当月是否景点游览']
            df_data['是否_体育馆_电影_旅游']=df_data['当月是否体育场馆消费']*df_data['当月是否看电影']*df_data['当月是否景点游览']
            
            #特征交叉 四个维度交叉
            df_data['是否_商场_体育馆_电影_旅游']=df_data['是否去过高档商场']*df_data['当月是否体育场馆消费']*df_data['当月是否看电影']*df_data['当月是否景点游览']
      • 通过挖掘业务产生新的特征

        • 缴费金额是否为整数
        • 根据用户评级情况提取出在网时长是否高于12个月作为特征
    • 模型融合 stacking

      • 训练两个模型 ,一个用mse 作为损失函数,一个用MAE作为损失函数
    #提交数据
    submit = pd.DataFrame()
    #找到要提交数据的用户编码
    submit['id'] =df_data[df_data['信用分'].isnull()]['用户编码']
    
    #两个模型预测出来的结果
    submit['score1'] = y_pred_all_l1  #MAE
    submit['score2'] = y_pred_all_l2  #MSE   预测的误差比较大的时候 MSE的惩罚会跟大一些
    
    #针对score1去排序
    submit = submit.sort_values('score1')
    #添加序号
    submit['rank'] = np.arange(submit.shape[0])
    
    #前100个
    min_rank = 100
    #后100个
    max_rank = 50000 - min_rank
    
    # l1
    l1_ext_rate = 1
    l2_ext_rate = 1 - l1_ext_rate
    
    #取出前后各100个
    il_ext = (submit['rank'] <= min_rank) | (submit['rank'] >= max_rank)
    
    #取出 剩下的49800
    l1_not_ext_rate = 0.5
    l2_not_ext_rate = 1 - l1_not_ext_rate
    il_not_ext = (submit['rank'] > min_rank) & (submit['rank'] < max_rank)
    
    submit['score'] = 0
    submit.loc[il_ext, 'score'] = (submit[il_ext]['score1'] * l1_ext_rate + submit[il_ext]['score2'] * l2_ext_rate + 1 + 0.25)
    submit.loc[il_not_ext, 'score'] = submit[il_not_ext]['score1'] * l1_not_ext_rate + submit[il_not_ext]['score2'] * l2_not_ext_rate + 0.25
    """ 输出文件 """



### 风控业务

- 反欺诈通过规则
- 骗子过滤过去之后,通过模型来控制风险
  - ABC卡

### 特征工程

- 数据采集/收集

- 根据问题选择算法

- 根据算法的特点 对数据进行处理

  - 空值 异常 重复

- 根据特征的类型 做进一步处理

  - 数值/连续
- 归一化/标准化
- 分箱/分桶/离散化
  - 分类
- one-hot编码
- 编号

- 特征衍生

  - 如果按照id做聚合 有很多数据,可以计算同一个id的这些数据的统计量(平均,方差,极差....)
  - 特征交叉
  - 根据业务的理解衍生新特征

- 特征选择

  - 过滤
  - 递归
  - 嵌入

- 分类问题 样本是否均衡

- 建模调参

- 模型融合问题

  - RMSE MSE MAE

  

### LR评分卡

- 模型评价
  - KS  0.6   最好是0~1    0.2可以用  0.8左右
- ROC曲线上的点 找到 Y-X 最大的
  - AUC  CTR预估(推荐,计算广告,搜索)
- auc>0.6 就是可以用的  0.8左右
- AUC  最小值 0.5

### KS值的计算

通过roc 计算出fpr,tpr

ks = abs(fpr- tpr).max()

### 模型评价的时候,训练集和验证集 表现(ks值)相差不要超过10%

### lightGBM特征选择(embeded)

- 训练lightgbm模型
- 通过模型的lgb_model.feature_importances_ 可以输出模型重要性的得分,通过这个得分可以确定哪个特征比较重要

### 模型报告

- 根据预测的坏人概率,对验证数据进行排序(降序排列,预测是坏人的概率比较高的排在前面)
- 将排序后的验证数据进行分箱,计算每一箱中实际上有多少个坏人,计算每一箱坏人的概率
- 如果模型比较靠谱的话,每一箱坏人人数应该是单调递减的,预测坏人概率比较高的箱,抓坏人的能力要比预测坏人概率比较低的箱能力要强
- 如果 数据不是单调递减的 模型需要调整



### 评分卡模型过程回顾

- 数据准备 特征筛选
- 创建逻辑回归模型
  - 主要问题集中在模型评估上
  - KS   0.2可以用 0.6以上
  - 跨时间验证 训练集和验证集上 表现的差距(ks值) 不要超过10%
  - 生成评估报告
- 考察模型按照坏人概率单调排序,抓坏人的能力是不是也是单调变化的
- 模型的使用
  - 利用逻辑回归模型的 系数和截距给每一个预测结果
  - xbeta = person_info * ( 3.49460978) + finance_info * ( 11.40051582 ) + credit_info * (2.45541981) + act_info * ( -1.68676079) --0.34484897 
  - score = 650-34* (xbeta)/math.log(2) 系数可以自己调
  - 可以根据信用分 给一个信用评级

### GBDT

- Boosting思想
  - 每一次学习的数据都是上一个模型的误差
  - 由于学习的是误差 所以都是回归树
  - 由于学习的是误差,所以只能串行计算
  - 最终的结果是每一颗树结果的叠加
- 优缺点
  - 优点:
- GBDT每一次的残差计算都增大了分错样本的权重,而分对的权重都趋近于0,因此泛化性能比较好。
- 可以灵活的处理各种类型的数据。

  - 缺点:
- 对异常值比较敏感。
- 由于分类器之间存在依赖关系,所以很难进行并行计算。
- 对于高维稀疏特征不太适合用GBDT
  - GBDT在每一次分割时需要比较大量的特征,特征太多,模型训练很耗费时间。
  - 树的分割往往只考虑了少部分特征,大部分的特征都用不到,所有的高维稀疏的特征会造成大量的特征浪费。

### XGBoost 和GBDT 区别

程序员一诺python
16 声望18 粉丝

python技术发烧友 资料收集狂