WYY's Blog

JUST DO IT


  • Home

  • About

  • Tags

  • Categories

  • Archives

逐步判别法

Posted on 2019-04-08 | In Regression Methods

​ 逐步判别法,也叫逐步回归过程(stepwise regression procedure),是一种建立回归模型的方法。从候选变量集合中添加或移除(以逐步的方式)进入模型,直到没有理由在模型中添加或移除任何变量。

详细步骤

首先

​ 设置逐步模型决定接受一个候选变量的显著性水平(significance level),称作Alpha-to-Enter显著性水平,记作𝜶E。设置从逐步模型中移除一个候选变量的显著性水平,称作Alpha-to-Remove显著性水平,记作𝜶R。

​ 许多软件包都将𝜶E和𝜶R设置为0.15,而不是一般的0.05。使得候选变量不至于太难进入模型或者很容易地从模型中被剔除。

步骤一

  1. 拟合每一个单预测因子模型,即在x1上回归y,在x2上回归y,…,在xp-1上回归y。
  2. 在那些t检验P值小于𝜶E=0.15的预测因子中,选择t检验P值最小的预测因子作为逐步模型中的第一个预测因子。
  3. 如果没有任何预测因子的t检验的P值低于𝜶E=0.15,则结束。

步骤二

  1. 假设x1具有最小的t检验的P值,且低于𝜶E=0.15,因此认为它是第一步产生的”最佳”单一预测因子。
  2. 拟合每个包含预测因子x1的双预测因子模型,即在x1和x2上回归y,在x1和x3上回归y,…,在x1和xp-1上回归y。
  3. 在这些t检验的P值低于𝜶E=0.15的预测因子中,选择t检验的P值最小的预测因子作为第二个预测因子加入模型。
  4. 如果没有预测因子t检验的P值低于𝜶E=0.15,则结束。模型仅有第一步中获得的一个预测因子。
  5. 否则,假设x2被认为是第二个”最佳”预测因子,因此将其加入模型。
  6. 现在,由于x1是模型中的预测因子,回退观察逐步模型中加入预测因子x2是否在某种程度上影响了预测因子x1的显著性。检查𝜷1=0时,t检验的P值。如果P值变得不显著,即P值大于𝜶R=0.15,将x1从逐步模型中移除。

步骤三

  1. 假设x1和x2入选了双预测因子模型,且未被剔除。
  2. 拟合每个包含预测因子x1和x2的三预测因子模型,即在x1,x2和x3上回归y,在x1,x2和x4上回归y,…,在x1,x2和xp-1上回归y。
  3. 在这些t检验的P值低于𝜶E=0.15的预测因子中,选择t检验的P值最小的预测因子作为第三个预测因子加入模型。
  4. 如果没有预测因子t检验的P值低于𝜶E=0.15,则结束。模型仅有前两步中获得的两个预测因子。
  5. 否则,假设x3被认为是第三个”最佳”预测因子,因此将其加入模型。
  6. 现在,由于x1和x2是模型中的预测因子,回退观察逐步模型中加入预测因子x3是否在某种程度上影响了预测因子x1和x2的显著性。检查𝜷1=0或𝜷2=0时,t检验的P值。如果P值变得不显著,即P值大于𝜶R=0.15,将x1或x2从逐步模型中移除。

示例

Stepwise Regression

注意

  • 不保证最终模型在任何特定意义上是最佳的。(非最佳)
  • 该程序产生一个最终模型,但一般还有几个同样好的模型。(非唯一)
  • 逐步回归不考虑研究人员对预测因子的知识经验。也许将这些重要的预测因子加入模型是有必要的。
  • 不应该对变量入模的顺序进行过度解读。
  • 不应该得出这样的结论:所有预测y的重要的预测因子变量都被识别出,所有不重要的预测因子都被消除。这是两种在逐步回归过程中容易犯的错误。
  • 由于逐步回归过程中包含了很多𝜷k=0的t检验,因此有很大的概率,我们选中了一些不重要的预测因或删除了一些重要的预测因子。

关系网络

Posted on 2019-03-26 | In Data Analysis

关联关系

关系说明

关系类型 关系 关系说明
id id_id 种子与关联ID相同
cellphone cellphone_cellphone 种子与关联手机号相同
cellphone cellphone_homephone 种子手机号=关联家庭电话
cellphone cellphone_empphone 种子手机号=关联公司电话
cellphone cellphone_c1phone 种子手机号=关联联系人1 电话
cellphone cellphone_c2phone 种子手机号=关联联系人2 电话
cellphone homephone_cellphone 种子家庭电话=关联手机号
cellphone empphone_cellphone 种子公司电话=关联手机号
cellphone c1phone_cellphone 种子联系人1 电话=关联手机号
cellphone c2phone_cellphone 种子联系人2 电话=关联手机号
contact c1phone_c1phone 种子联系人1 电话=关联联系人1 电话
contact c1phone_c2phone 种子联系人1 电话=关联联系人2 电话
contact c2phone_c1phone 种子联系人2 电话=关联联系人1 电话
contact c1phone_c2phone 种子联系人2 电话=关联联系人2电话
home/emp homephone_homephone 种子家庭电话=关联家庭电话
home/emp homephone_empphone 种子家庭电话=关联公司电话
home/emp homephone_c1phone 种子家庭电话=关联联系人1 电话
home/emp homephone_c2phone 种子家庭电话=关联联系人2 电话
home/emp empphone_empphone 种子公司电话=关联公司电话
home/emp empphone_homephone 种子公司电话=关联家庭电话
home/emp empphone_c1phone 种子公司电话=关联联系人1 电话
home/emp empphone_c2phone 种子公司电话=关联联系人2电话
home/emp c1phone_homephone 种子联系人1 电话=关联家庭电话
home/emp c1phone_empphone 种子联系人1 电话=关联公司电话
home/emp c2phone_homephone 种子联系人2 电话=关联家庭电话
home/emp c2phone_empphone 种子联系人2 电话=关联公司电话

关系网络

一层关系类型 二层关系类型
id cellphone
id contact
id home/emp
cellphone id
cellphone contact
cellphone home/emp

网络属性

人群属性

  • 年龄(按人去重,根据身份证计算当下年龄):平均年龄;最大年龄;最小年龄;最大年龄差
  • 性别(按人去重,根据身份证计算):男性占比
  • 省份:不同省份数,不同省份数/网络内不同人数
  • 城市:不同城市数,不同数/网络内不同人数
  • 城市等级:不同数量,占比,最大,最小,最大等级差,平均(去重)
  • 区域分布
  • 户籍城市等级
  • 户籍区域分布
  • 手机前两位 14、17数量,占比
  • 手机相似:前7位、8位与本申请一致数量,占比;网络内前7位、8位一致数量的最大值,占比
  • 联系人手机前两位 14、17数量,占比
  • 联系人手机相似:前7位、8位与本申请一致数量,占比;网络内前7位、8位一致数量的最大值,占比
  • 单位类型:学校、金融、信息技术、娱乐的占比
  • 申请时间:白天、晚上、夜间申请人数,占比
  • 平均时差:((最大-最小)/节点数)
  • 申请类型:不同数量,占比,最大,最小,最大等级差

多机构属性

  • 总/线上/线下/信用卡/线上信用卡/线下信用卡/线上现金贷/线下现金贷/线上消费贷/线下消费贷/paydayloan
  • 期限等级/利率等级/金额等级
  • 统计申请数、机构数、人数
  • 分母为人数的占比型变量

决策树

Posted on 2019-01-17 | In Data Analysis

决策树

参考1

参考2

参考3

​ 决策树算法:利用自变量构造一颗二叉树,以区分出目标变量。决策树算法的要点如下:

  • 选择分裂属性:选择分叉的方式决定了决策树的算法类型,分为:

    • ID3:采用信息增益来选择树叉
    • C4.5:采用增益率来选择树叉
    • CART:采用Gini系数来选择树叉
  • 剪枝:数据中的噪声和离群点会造成一些分枝反映的是训练数据中的异常。剪枝就是处理这种过拟合问题,有先剪枝和后剪枝两种方法。

    以以下数据为例,介绍三种决策树:

    | 客户ID | 故障原因 | 故障类型 | 修障时长 | 满意度 |
    | —— | ——– | ——– | ——– | —— |
    | 001 | 1 | 5 | 10 | 1 |
    | 002 | 1 | 5 | 12 | 0 |
    | 003 | 1 | 5 | 14 | 1 |
    | 004 | 2 | 5 | 16 | 0 |
    | 005 | 2 | 5 | 18 | 1 |
    | 006 | 2 | 6 | 20 | 0 |
    | 007 | 3 | 6 | 22 | 1 |
    | 008 | 3 | 6 | 24 | 0 |
    | 009 | 3 | 6 | 26 | 1 |
    | 010 | 3 | 6 | 28 | 0 |

​ 目标变量满意度是二分类变量:满意(记为0)和不满意(记为1);自变量是:故障原因(离散型),故障类型(离散型),修障时长(连续型)。

ID3决策树

原理

​ ID3算法选择具有最高信息增益的自变量作为当前的树叉,信息增益=原信息熵-按某自变量划分后信息熵。选取最大的信息增益率作为分裂属性。

​ D为目标变量,m为目标变量的种类;pi为每种目标变量对应的概率。原信息熵的计算公式如下:

$$ Entropy(D) = -\sum_{i=1}^m p_i*\log_2p_i ​$$

​ A表示按自变量A对目标变量D进行划分;V表示按自变量A划分后的子集数;|Dj|/|D|表示子集j中样本所占总体的比例;Entropy(Dj)表示子集j的信息熵。按某自变量A划分后信息熵计算公式如下:

$$ EntropyA(D) = \sum{j=1}^V \frac{|Dj|}{|D|} Entropy(Dj) = - \sum{j=1}^v\frac{|Dj|}{|D|} \sum{i=1}^m p{ji}*\log2p{ji} ​$$

$$ Gain_A = Entropy(D) - Entropy_A(D) ​$$

示例

以上述满意度数据为例,分别计算三个字变量的信息增益,选取其中最大的信息增益作为树叉。第一个树叉选择的计算过程如下:

  • 原信息熵:

$$ Entropy(满意度) = - \frac{5}{10} \log_2\frac{5}{10} - \frac{5}{10} \log_2\frac{5}{10} =1 $$

  • 按故障原因划分:

$$ Entropy_{故障原因}(满意度) = - \frac{3}{10} (\frac{2}{3}\log_2\frac{2}{3}+\frac{1}{3}\log_2\frac{1}{3}) - \frac{3}{10} (\frac{1}{3}\log_2\frac{1}{3}+\frac{2}{3}\log_2\frac{2}{3}) - \frac{4}{10} (\frac{2}{4}\log_2\frac{2}{4}+\frac{2}{4}*\log_2\frac{2}{4}) = 0.95098 $$

信息增益为:1-0.95098=0.04902

  • 按故障类型划分:

$$ Entropy_{故障类型}(满意度) = - \frac{5}{10} (\frac{2}{5}\log_2\frac{2}{5}+\frac{3}{5}\log_2\frac{3}{5}) - \frac{5}{10} (\frac{2}{5}\log_2\frac{2}{5}+\frac{3}{5}\log_2\frac{3}{5}) = 0.97095 $$

信息增益为:1-0.97095=0.02905

​ 对于连续型变量,将其排序后,依次取相邻两值的中间值作为划分点后同离散型的方式进行计算。分别算得按各重点划分的信息增益,取信息增益最大的作为此连续变量的分叉。

  • 按修障时间划分:

$$ Entropy_{11}(满意度) = - \frac{1}{10} (\frac{1}{1}\log_2\frac{1}{1}) - \frac{9}{10} (\frac{4}{9}\log_2\frac{4}{9}+\frac{5}{9}*\log_2\frac{5}{9}) = 0.89197 $$

$$Entropy_{13}(满意度) = - \frac{2}{10} (\frac{1}{2}\log_2\frac{1}{2}+\frac{1}{2}\log_2\frac{1}{2}) - \frac{8}{10} (\frac{4}{8}\log_2\frac{4}{8}+\frac{4}{8}\log_2\frac{4}{8}) = 1 $$

$$ Entropy_{15}(满意度) = - \frac{3}{10} (\frac{2}{3}\log_2\frac{2}{3}+\frac{1}{3}\log_2\frac{1}{3}) - \frac{7}{10} (\frac{4}{7}\log_2\frac{4}{7}+\frac{3}{7}\log_2\frac{3}{7}) =0.85262 $$

$$ Entropy_{17}(满意度) = - \frac{4}{10} (\frac{2}{4}\log_2\frac{2}{4}+\frac{2}{4}\log_2\frac{2}{4}) - \frac{6}{10} (\frac{3}{6}\log_2\frac{3}{6}+\frac{3}{6}\log_2\frac{3}{6}) =1 ​$$

$$ Entropy_{19}(满意度) = - \frac{5}{10} (\frac{2}{5}\log_2\frac{2}{5}+\frac{3}{5}\log_2\frac{3}{5}) - \frac{5}{10} (\frac{2}{5}\log_2\frac{2}{5}+\frac{3}{5}\log_2\frac{3}{5}) =0.97095 $$

选取最大的信息增益后,信息增益为:1-0.85262=0.14738

综上,第一层分叉选择修障时间(15为分界点)。

缺点

​ 倾向于选择具有大量值的属性。极端情况以客户ID为例,以此变量划分会得到每个划分中只有一个样本,即每个划分都是纯的,信息增益值为1。但是这种划分毫无意义。

C4.5决策树

原理

​ C4.5算法选择具有最高信息增益率的自变量作为当前的树叉。信息增益率 = 信息增益/划分的信息熵

​ 划分的信息熵计算公式如下:

$$ SplitEntropyA(D) = - \sum{j=1}^V(\frac{|D_j|}{|D|}*\log_2\frac{|D_j|}{|D|}) $$

$$ GainRate_A(D) = \frac{Gain(A)}{SplitEntropy_A} $$

示例

​ 以上述满意度数据为例,分别计算三个字变量的信息增益率,选取其中最大的信息增益率作为树叉。第一个树叉选择的计算过程如下:

  • 按故障原因划分:

$$ SplitEntropy_{故障原因}(满意度) = - \frac{3}{10}\log_2\frac{3}{10} - \frac{3}{10}\log_2\frac{3}{10} - \frac{4}{10}*\log_2\frac{4}{10} = 1.57095 $$

$$ GainRate_{故障原因} = \frac{0.04902}{1.57095} = 0.03120 $$

  • 按故障类型划分:

$$ SplitEntropy_{故障原因}(满意度) = - \frac{5}{10}\log_2\frac{5}{10} - \frac{5}{10}\log_2\frac{5}{10} = 1 $$

$$ GainRate_{故障类型} = \frac{0.02905}{1} = 0.02905 $$

  • 按修障时间分类:

$$ SplitEntropy_{11}(满意度) = - \frac{1}{10}\log_2\frac{1}{10} - \frac{9}{10}\log_2\frac{9}{10} = 0.46900 $$

$$ GainRate_{修障时间11} = \frac{1-0.89197}{0.46900} = 0.23034 $$

$$ SplitEntropy_{13}(满意度) = - \frac{2}{10}\log_2\frac{2}{10} - \frac{8}{10}\log_2\frac{8}{10} = 0.72193 ​$$

$$ GainRate_{修障时间13} = \frac{1-1}{0.72893} = 0 $$

$$ SplitEntropy_{15}(满意度) = - \frac{3}{10}\log_2\frac{3}{10} - \frac{7}{10}\log_2\frac{7}{10} = 0.88129 $$

$$ GainRate_{修障时间15} = \frac{1-0.85262}{0..88129} = 0.16723 $$

$$ SplitEntropy_{17}(满意度) = - \frac{4}{10}\log_2\frac{4}{10} - \frac{6}{10}\log_2\frac{6}{10} = 0.97095 $$

$$ GainRate_{修障时间17} = \frac{1-1}{0.97095} = 0 $$

$$ SplitEntropy_{19}(满意度) = - \frac{5}{10}\log_2\frac{5}{10} - \frac{5}{10}\log_2\frac{5}{10} = 1 $$

$$ GainRate_{修障时间19} = \frac{1-0.97095}{1} = 0.97095 $$

选取最大的信息增益率后,信息增益率为:0.23034

综上,第一层分叉选择修障时间(11为分界点)。

CART决策树

原理

​ CART决策树选择基尼系数最小的属性作为树的分叉。CART决策树是一颗二叉树,因此每一个变量划分为两类。当此变量有多种方式划分两类时,计算所有划分的基尼系数,选取值最小的划分方式。为先计算不纯度,再计算基尼系数,公式如下:

$$ Gini(D) = 1- \sum_{i=1}^mp_i^2 $$

$$ GiniIndexA(D) = \sum{j=1}^V\frac{|D_j|}{|D|}*Gini(D_j) $$

示例

  • 按故障类型划分,划分的方式有:{1, 2}与{3},{1, 3}与{2},{2, 3}与{1}

    • {1,2}与{3}

    $$ GiniIndex = \frac{6}{10}(1-(\frac{3}{6})^2 - (\frac{3}{6})^2) + \frac{4}{10}(1-(\frac{3}{6})^2-(\frac{3}{6})^2) = 0.5 $$

    • {1,3与}{2}

    $$ GiniIndex = \frac{7}{10}(1-(\frac{4}{7})^2 - (\frac{3}{7})^2) + \frac{3}{10}(1-(\frac{1}{3})^2-(\frac{2}{3})^2) = 0.47619 $$

    • {2,3}与{1}

    $$ GiniIndex = \frac{7}{10}(1-(\frac{3}{7})^2 - (\frac{4}{7})^2) + \frac{3}{10}(1-(\frac{2}{3})^2-(\frac{1}{3})^2) = 0.47619 $$

  • 按故障原因划分

    $$ GiniIndex = \frac{5}{10} (1-(\frac{3}{5})^2-(\frac{2}{5})^2) + \frac{5}{10} (1-(\frac{2}{5})^2-(\frac{3}{5})^2) = 0.48 ​$$

  • G按修障时间划分

$$ GiniIndex_{11} = \frac{1}{10}(1-(\frac{1}{1})^2-(\frac{0}{1})^2) + \frac{9}{10}(1-(\frac{5}{9})^2-(\frac{4}{9})^2) = 0.44444 $$

$$ GiniIndex_{13} = \frac{2}{10}(1-(\frac{1}{2})^2-(\frac{1}{2})^2) + \frac{8}{10}(1-(\frac{4}{8})^2-(\frac{4}{8})^2) = 0.5 $$

$$ GiniIndex_{15} = \frac{3}{10}(1-(\frac{1}{3})^2-(\frac{2}{3})^2) + \frac{7}{10}(1-(\frac{4}{7})^2-(\frac{3}{7})^2) = 0.47619 ​$$

$$ GiniIndex_{17} = \frac{4}{10}(1-(\frac{2}{4})^2-(\frac{2}{4})^2) + \frac{6}{10}(1-(\frac{3}{6})^2-(\frac{3}{6})^2) = 0.5 ​$$

$$ GiniIndex_{19} = \frac{5}{10}(1-(\frac{3}{5})^2-(\frac{2}{5})^2) + \frac{5}{10}(1-(\frac{2}{5})^2-(\frac{3}{5})^2) = 0.48 ​$$

综上,第一层分叉选择修障时间(11为分界点)。

剪枝

  • 前剪枝:通过提前停止树的构造,如通过在给定的节点不再分裂或划分训练元组的子集,而对树剪枝,一旦停止,则该节点成为叶子结点。在构造树是,可以使用统计显著性、信息增益等度量来评估分裂的优劣,如果划分一个节点的元组低于预定义阈值的分裂,则给定子集的进一步划分将停止。较高的阈值可能导致过分简化的树,较低的阈值可能导致过分复杂的树。
  • 后剪枝:由完全生长的树剪去子树,通过删除节点的分支,并用叶子结点替换它而剪掉给定节点的子树,叶子结点用被替换的子树中最频繁的类标记。

代价复杂性剪枝

计算表面误差率增益值α

$$ \alpha = \frac{R{(t)} - R(T{t})}{|N_{T_t}| - 1}​$$

|N Tt| 是子树中包含的叶子节点个数

R(t)是如果被剪枝节点t的误差代价,R(t) = r(t)*p(t)

r(t)是节点t的误差率

p(t)是节点t上数据占所有数据的比例

R(Tt)是子树Tt的误差代价,如果该节点不被剪枝,它等于子树Tt上所有叶子节点的误差代价之和

评分卡建模

Posted on 2018-12-18 | In Data Analysis

样本抽取和权重设置

样本抽样

​ 好、坏各抽5000,不确定不参与建模(使特征区分更明显)。5000是业界建模的经验和惯例,当样本数不足5000或在5000左右时,全部参与建模。

采用分层随机抽样的方法。在数据量很大的情况下不抽样而使用全量数据进行建模会导致:程序缓慢、overfit。

权重修正

​ 好的权重 = (好 + 不确定) / 好。使得建模样本中的好在样本数量上可以代表全部样本的好和不确定。

样本划分

​ 一般将样本以7:3划分为训练集和验证集。训练集中至少应有500个样本,才能建立较为稳定的模型。如果模型在训练集和验证集中的表现基本一致,则说明模型比较稳健。如果建模抽样中的坏样本数量不足(总共才500个左右),则全部参与训练,使用BootStrap方法进行重复抽样得到验证样本,并在验证样本集上使用BootStrap验证法评估模型表现。

Bootstrap, Bagging, Boosting

变量预筛选

​ 通过变量预筛选,可以降低变量个数,集中精力于质量较好的变量。

  • 业务角度:需要和机构业务人员及数据人员沟通讨论,对于质量较差的变量,不宜进入模型。
  • 数据角度:通过数据描述性统计分析,计算变量缺失率。当模型有足够的变量可供挑选时,对缺失率高于95%对变量直接不予考虑。当变量不足时,缺失率高达99%对变量也可以加入候选清单,虽然缺失率这么高的变量一般最后不会入模。
  • 其他角度:例如金额类变量、功能型变量通常不入模,但是金额之间的比值是可以考虑的。

变量取值分箱

细分箱与粗分箱

​ 在模型开发过程中,需要对变量进行分箱,对于候选模型变量,变量取值分箱的步骤如下:

  1. 细分箱(fine bining):对连续变量平均细分成足够多的分箱,获取变量细分箱的WOE报告。
  2. 粗分箱(coarse bining):依据细分箱的WOE报告,结合业务上对变量的理解和分箱合并规则(WOE损失最小),对分箱进行手工合并,获取候选变量的粗分箱WOE报告。

​ 通过分箱得到所有候选变量的WOE报告,从而获得每个变量取值的最佳分栏、每个栏位对于的证据权重(WOE)和此变量的信息值(IV)。由于后续步骤需要WOE无缺失才能进行,因此变量原始取值有缺失时,必须保证缺失值也有对应的WOE。如果一些分箱中没有好或坏导致无法计算此分箱的WOE,则需对此分箱进行调整或与其他分箱合并,以保证每个分箱都有WOE。

变量分箱的一般原则

  • 各分箱中的样本量不应过少,过少则不具有统计显著性,且不稳定。一般建议不低于全部样本的5%。
  • 为能计算WOE,各分箱中应同时出现好和坏。若不满足,应将此分箱与其他分箱合并以满足。
  • WOE趋势应与业务角度一致,通常为直线型或U型(一般仅年龄)。对于有序型和区间型,如果趋势不单调,则通过合并分箱进行调整。
  • 对于特殊取值,如其他、逾期次数为0等应单列分箱。
  • 分箱数一般为3-6个,数量过少则区分不显著,数量过多则导致不稳定。
  • 其他业务考虑,如再婚、复婚可与已婚合并。

无法遵循一般原则的情况

  • 字符型变量的客观取值无法更改,难以保证至少分箱中含有5%的变量或分为3-6个分箱。有些取值就是很不相同不适合与其它取值合并且比例极少。例如职务,其中一些选项取值的比例非常少,如局级、部级职务在人群中比例远低于5%。如果和其他级别合并则体现不出不同职务之间的差别,变量作用降低。所以在保证WOE值单调、符合业务经验的情况下,可以将这些高级职务依然独立,能让最后的评分更分散一些。
  • 机构希望最好分数更细分一些的时候,在保证WOE值单调的情况下,分箱可以更细一些。

变量分箱的步骤

  1. 细分箱:

    • 数值型变量:按变量取值顺序排列,均匀分成10组。在取值边界尽量考虑业务解释进行取整,因此每组样本数可能略有波动。
    • 字符型变量:对所有的字符值进行分箱,每个值作为一个单独的细分箱。
  2. 对每个细分箱统计好账户和坏账户数,计算每个分箱的WOE值。计算公式如下:

    $$WOE(j) = \ln(\cfrac{f_G(j)}{f_B(j)})$$

    $$f_G(j)$$:$$g_i/G$$ 分箱j中好样本数占总样本中好样本数的比例

    $$f_B(j)$$:$$b_i/B$$ 分箱j中坏样本数占总样本中坏样本数的比例

    ​ 说明:该公式表示第j类中正常与违约的比率与整个样本中正常与违约的比率的比值的对数。因此,该公式主要衡量第j类对正常与违约比率的影响程度。

  3. 粗分箱:将WOE值相近的细分箱且有业务意义的细分箱合并为粗分箱。对于数值型变量,通常将相邻的细分箱合并;对于字符型变量,通常将同类细分箱合并。对于特殊值和缺失值等,一般会保留一个各自单独的粗分箱;结合实际情况,考虑特殊值与缺失值的产生原因与业务含义,分析与其他分箱合并后是否更合理。

  4. 分箱原则:

    1. WOE值是否单调(年龄除外)
    2. 分箱数量一般控制在4-5个以内,太多容易不稳定
    3. 每一个分箱的占比应当平均分配,不宜出现某个变量取值的占比过高或过低
    4. 容易被客户或客户经理操纵的变量(如贷款期限,这种变量虽然可以衡量客户的还款能力,但也容易受客户经理推荐激励的影响),变量足够时不建议入模。

    ​ 变量的分箱是模型开发最关键的步骤之一,粗分箱后的各个分箱的WOE值的增减趋势必须满足合理的业务解释,并能保持比较稳定的分布。粗分箱产生的WOE值将替代原始数据值进入接下来的模型优化步骤。粗分箱结束后将生成二维变量报告,以确保每个使用的变量既可以表现出清晰的分辨力,又符合业务逻辑。未能符合任何选择条件的变量都将被剔除,以有利于其他候选变量的进入。

IV

​ 信息值(Information Value)代表了同整个群体相比,某一特征变量在所有区间中的好和坏之间的比例是否存在差异。在一个互联网信贷金融机构风险管理比较成熟,数据收集比较完善,数据总体质量较为可信的情况下,一个变量的信息值一般在0.05以上,则认为这个变量对因变量有一定的区分能力。如果数据覆盖面与数据质量不够完善,可用的数据信息比较少,则对变量的信息值的阈值会有不同的考虑。

$$IV = \Sigma \lbrace (\cfrac{g_i}{G} - \cfrac{b_i}{B}) \ast \ln(\cfrac{g_i}{G}/\cfrac{b_i}{B}) \rbrace$$

$$g_i$$:变量第i 个分箱栏位中的好样本数

$$G$$:样本中好样本总数

$$b_i$$:变量第i 个分箱栏位中坏样本数

$$B$$:样本中坏样本总数

变量再筛选

WOE值与IV

变量充足、好用的情况下,依据IV和WOE值趋势的一般剔除原则:

  • IV<0.01:原则上IV越大越好,但是不同互联网信贷金融机构数据情况不同,可选的变量也可能不同。所以没有IV值低于多少就不能用的严格标准,否则某些情况下IV过低就无法完成建模。一般而言,IV值不低于0.01。同一家信贷金融机构的不同产品的数据情况和好坏情况也可能不一致,所以不同评分卡模型也可以选择不同的阈值。若可成功入模的变量过少,可不依此条件剔除变量。
  • WOE值趋势与业务理解不一致的变量
  • 集中度过高,如某一取值分箱的占比超过98%

逐步判别(Stepdisc)

​ 在完成上述简单的变量筛选后,变量选择过程进入下一步骤:变量降维。从模型中没有变量开始,逐个引入变量,每增加一个变量后都要检查,用逐步判别的方法去除那些无助于模型预测能力的变量。当模型中所有变量符合标准而无其他变量符合进入的标准时,选择程序结束。一般在进行逐步判别程序(StepDisc Procedure)时,设定添加变量的置信水平(SLE)=0.15,去除变量的置信水平(SLS)=0.15。置信水平参数值越小,被选中的变量个数就会越少。

​ 逐步判别程序的目的是从变量池内所有可能的变量中,初步确定最具预测能力的特征变量组合。在这一过程中,对每个可能进入模型的特征变量反复进行测试,以观察其辨别好坏记录的有效性。每次对一个新的变量反复进行测试,结果要么是此变量已无法再有区分的贡献性,要么是成为已选择的模型变量的一部分。该过程是基于对当前的特征变量充当因变量和模型中的其他变量当作随机变量进行协方差分析进行的。一旦不再有新变量进入模型或从模型中去除变量时,选择过程结束。保留下来的头部变量是最可能进入最终模型的候选特征变量。

​ 逐步判别程序所选变量为模型最终变量的起点。通常情况下,会依据行业经验,将部分没有通过逐步判别筛选,但业务含义明显的字段也一并作为最终模型变量选择的起点。

​ 以上所有的原则和步骤,除了WOE值趋势必须和业务理解、行业习惯一致是必须遵守的,其他是一般原则可以突破。在按照以上原则挑选的基础上,如果得到的变量不符合建模条件,有可能会返回变量再挑选这一步骤,再人工挑选一些原本未被选中的变量。例如:在经过前文各种筛选后可选变量很少的情况下,如不足50个变量,可以不进行逐步判别程序,直接跳往下一步逻辑回归进行回归检验;性别是常用的入模变量,即使其IV值小于0.02,但如果满足一切建模要求,并可以让评分更分散,也可以考虑入模。

WOE值转换说明

​ 在逻辑回归建模时,使用的是变量值对应的WOE值,而不是变量的原始取值。不单单是被选中的变量,所有做过分箱的变量都会如此进行处理。以防选中的变量不满足建模条件时,需要人工调用其他最初始未被选中的变量时,需要重新转换WOE值。

​ 例如,性别的原始取值是男、女,在WOE报告中对应的分别是-0.0334和0.1838。完成转换后,男、女的取值就会被-0.0334和0.1838替代。

逻辑回归建模

​ 分为多重共线性检验和逻辑回归两个步骤,并不是所有通过初筛的变量都能通过这两步都校验,其最终结果通过最大似然估计值分析和方差膨胀分析两张参数结果表展现出来。从第一张表可以看到逻辑回归常数项及各入模字段的系数的估计值,从第二张表可以看到方差膨胀系数。

剔除变量的原则如下:

  • 回归系数为正的变量。随着变量的各个分箱的WOE值上升,其坏账率越低,这样才能符合业务逻辑,因此需要保证所有入模变量的回归系数均为负数。
  • P值太高的变量。P值一般不能高于0.10,当可入模变量过少时,可以放宽到0.15
  • 相关性太高造成高VIF(方差膨胀系数)的变量。VIF一般不能大于10,最好不要超过4。对于多个高度相关的变量,保留业务上最有意义、最稳定、最可信的一个。
  • 业务专家认为不适合入模的。如贷款用途,因为分箱可能不稳定,没有特别的规则,最终不考虑入模。
  • 其他情况。考虑到入模变量维度的多样性,或者变量的直观业务意义,有时会将几个过于类似的变量替换掉1-2个,换上类似但是维度和角度不同的变量。

评分标准化说明

​ 逻辑回归模型得到的是概率(违约概率估计),而最终实际实施时使用的是简单直观的评分。所以需要依据评分卡原理,将概率值标准化为分数值,在这个过程中还可以得到评分值表(即每个变量的各种取值得到多少分)。每个坏账率对应一个好坏比($$odds=(1-p)/p$$,p为坏样本所占百分比)。

​ 评分标准化需要三个参数:

  • 基准评分(points0)
  • 基准好坏比(odds0):在基准评分下,人群所对应的好坏比
  • 好坏比加倍分值(PDO,Points to Double the Odds):评分提高多少才能使其所对应的好坏比成为原来的两倍

​ 通过与基准评分作比较,可直观的得到标准化后评分所对应的odds。如校准后评分比基准分高PDO分,则其对应的odds为基准odds的两倍。

​ 评分卡的分值刻度通过将分值表示为比率对数的线性表达式score = A + B\ln(odds)*,其中,A(称为补偿)和B(称为刻度)是常数。。

$$points0 = A + B*ln(odds0)​$$

$$points0 + PDO = A + B * ln(2odds0)​$$

$$B = PDO / ln(2)$$

$$A = points0 - B * ln(odds0)​$$

$$score = A + B * ln(odds) = A + B(w^Tx + b) = (A + Bb) + Bw{11}x{11} + Bw{12}x{12} + … + Bw{mn}x{mn}​$$

  • 好坏比率odds=(1-p) / p​为一个客户正常的估计概率与违约的估计概率的比率

  • ln(odds)为逻辑回归的因变量,即ln(odds)=w^Tx + b

  • points0:基准评分

  • odds0​:基准好坏比

  • PDO:好坏比加翻倍的分值

  • x1… xm:逻辑回归的变量系数

  • wi:最终进入模型的自变量且已经转为WOE值

  • b:逻辑回归的截距

  • Bwixi为变量xi对应的评分

  • (A - Bb):基础分(也可将基础分值平均分配给各个变量)

公式中的加减号有待纠正

变量 行数(分段或降维结果) 分值
基准点 A + Bb
x1 1 Bw11x11
2 Bw12x12
… …
k1 Bw1k1x1k1
x2 1 Bw21x21
2 Bw22x22
… …
k2 Bw2k2x2k2
… … …
xn 1 Bwn1xn1
2 Bwn2xn2
… …
kn Bw2knx2kn

模型表现评估说明

模型表现评估指标

​ 国内一般重点看KS(Kolmogorov-Smirnov)和Gini系数这两个统计值。这两个指标在合理范围内越高,表明模型的区分能力越强。同时,模型还可以通过Divergence(离散度)、AUC(Area under Curve),ROC(Receiver Operating Characteristic)的值和图形进行评估。以上评估值都是越高越好,但是要在合理的范围内。如果过高,可能是因为过拟合或者特殊数据造成的。

​ 由于KS的值,和模型的类型、数据质量、客户群体特征都有很大关系,所以能接受的合理范围也有所不同。其他指标一般无明确划分点。

K-S值 申请(好坏区分能力) 行为(好坏区分能力)
20以下 不建议采用 因为表现期不足,模型验证或上线初期可能会在这个范围。 不建议采用 因为表现期不足,模型验证或上线初期可能会在这个范围。
20-29 较好 在没有人行报告或其他强外部数据的情况下,如果申请数据质量不理想,贷款和信用卡模型都容易落在此区间。 较弱 在还款和逾期历史数据都较弱(先息后本或一次性还款)的情况下,可用变量很少,贷款和信用卡模型都容易落在此区间。
30-49 良好 在没有人行报告或其他强外部数据的情况下,如果申请数据质量很好,贷款和信用卡模型都容易落在此区间。 较好 在还款和逾期历史数据都较弱(逾期账户极少)的情况下,可用变量不强,贷款和信用卡模型都容易落在此区间。
40-55 很强 有人行征信等外部数据切申请数据质量很好,模型一般落在此区间。 良好 大部分贷款和信用卡模型都容易落在此区间。
56-75 非常强 很少见,能力高但疑似过拟合,可能放了过多征信报告中的逾期变量。 很强 很少见,能力高但疑似过拟合,可能放了过多征信报告中的逾期变量。
75以上 极少见 能力高但疑似过拟合。 非常强 很少见,能力高但疑似过拟合。

模型表现评估图表

​ 模型的评分排序表(Score Chart)就是将建模开发样本的评分从低到高排序,显示每个评分上的好坏个数,好坏比例以及坏账率等。详细的排序表不对评分进行组合;综合的排序表对评分进行组合,按照评分从低分区间到高分区间将建模开发样本账户等分为5-10组(每组账户比例大致相等)之后,区间坏账率也是从低分区间到高分区间单调下降,以说明模型等排序性强弱。

模型的验证说明

根据验证样本的时间段不同,模型验证及其样本可以分为以下三类:

  • 开发期预留样本验证(时间内样本验证,Hold-Out Testing)。对Testing样本的验证要求一般是需要其入模变量趋势稳定,模型的极大评估指标稳定。当无法预留此样本时,可以采取Bootstrap法来造出样本进行验证。
  • 时间外样本验证(Out-Of-Time,一般是比开发样本更晚更新的数据)。在表现期不足的情况下,不要求OOT样本上模型的几大评估指标稳定或者更好,而多是检查模型的排序性和稳定性。一般通过评分排序表、入模变量的PSI值和评分排序的PSI值来评估,样本中好坏不确定不需要抽样。如果有足够多表现充足的时间外验证样本,在坏样本比较多的情况下,可以希望其评分后的模型评估指标较好、稳定或更好。
  • 上线后跟踪验证(Go-Online,上线后获取的数据)。一般在模型一期开发阶段没有这些数据,所以不会进行。上线后跟踪新账户一般表现期都不够,一开始不能要求模型的几大评估指标稳定或者更好,而多是检查模型的排序性和稳定性,一般通过入模变量的PSI值和评分排序的PSI值来实现。应用上线后,更看重的是评分保持排序性,积累到表现期足够后可以希望其评分后的模型评估指标较好、稳定或更好。

模型具体的验证方法和指标分为以下几类:

  • 标准验证:KS,Gini系数、ROC、AUC和评分排序性等,需要样本的表现期充足。

  • BootStrap:从建模开发样本中有放回的随机抽样出1000-5000个样本(无需按好坏分层抽)组成一个数据集,计算其模型评分值,依据评分和好坏计算模型评估指标,一般主要看KS。可以如此反复抽10-100次,最后得到一个平均值,和模型开发样本的评估指标进行比较,若接近则验证通过。

  • 稳定性验证:看每个入模变量的PSI、整体评分的PSI、评分的排序性。理想的PSI小于0.1,政策、客户和数据的变化最容易导致PSI变大,其标准见下表:

    | PSI | 结果 |
    | ——– | —————— |
    | <0.1 |="" 正常="" 0.1-0.25="" 需要关注,找出原因="">0.25 | 重大变化,找出原因 |

模型评估参数

K-S值

​ K-S值用来衡量模型区分好坏的能力,即模型的预测能力。K-S的值由多种因素决定,如:数据源和数据信息的可获取度、数据的质量、产品类型、群体的稳定性。该指标衡量的是好和坏的累积分布之间最大的差距。好账户与坏账户分布之间的差异越大,K-S指标越高,模型的区分能力越强。但K-S值不是越高越好,太高容易出现过拟合或是由特殊数据造成。

Gini系数

​ Gini系数用来衡量模型的区分能力,Gini系数越高,表明模型的排序能力越强。

Untitled

Posted on 2018-09-25 | In Database

Data Types

Column Types

Timestamps

Timestamps are interpreted to be timezoneless and stored as an offset from the UNIX epoch.

Supported conversions:

  • Integer numeric types: Interpreted as UNIX timestamp in seconds
  • Floating point numeric types: Interpreted as UNIX timestamp in seconds with decimal precision
  • Strings: JDBC compliant java.sql.Timestamp format YYYY-MM-DD HH:MM:SS.fffffffff (9 decimal place precision)

Dates

Date values describe a particular year/month/day, in the form YYYY-­MM-­DD. The range of values supported for the Date type is 0000-­01-­01 to 9999-­12-­31.

  • cast(timestamp as date): The year/month/day of the timestamp is determined, based on the local timezone, and returned as a date value.
  • cast(string as date): If the string is in the form YYYY-MM-DD, then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.

Union Types

The first part in the deserialized union is the tag which lets us know which part of the union is being used. In this example 0 means the first data_type from the definition which is an int and so on.

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>);
SELECT foo FROM union_test;
{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":5,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:9}
{1:10.0}

To create a union you have to provide this tag to the create_union UDF:

1
2
3
4
SELECT create_union(0, key), create_union(if(key<100, 0, 1), 2.0, value), create_union(1, "a", struct(2, "b")) FROM src LIMIT 2;
{0:"238"} {1:"val_238"} {1:{"col1":2,"col2":"b"}}
{0:"86"} {0:2.0} {1:{"col1":2,"col2":"b"}}

Literals

Floating Point Types

Decimal literals provide precise values and greater range for floating point numbers than the DOUBLE type. Decimal types are needed for use cases in which the (very close) approximation of a DOUBLE is insufficient, such as financial applications, equality and inequality checks, and rounding operations.

Date Definition Statements

Create/Drop/Truncate Table

Managed and External Tables

  • Use managed tables when Hive should manage the lifecycle of the table, or when generating temporary tables.

  • External table files can be accessed and managed by processes outside of Hive.

If a managed table or partition is dropped, the data and metadata associated with that table or partition are deleted. If the PURGE option is not specified, the data is moved to a trash folder for a defined duration.

CTSAS

CTAS(create table as select) has these restrictions:

  • The target table cannot be a partitioned table.
  • The target table cannot be an external table.
  • The target table cannot be a list bucketing table.

##Macro and Function

Create/Drop Temporary Macro

1
2
3
4
5
6
7
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
CREATE TEMPORARY MACRO fixed_number() 42;
CREATE TEMPORARY MACRO string_len_plus_two (x string) length(x) + 2;
CREATE TEMPORARY MACRO simple_add (x int, y int) x + y;
DROP TEMPORARY MACRO [IF EXISTS] macro_name;

Temporary Functions

1
2
3
4
5
CREATE TEMPORARY FUNCTION function_name AS class_name;
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

Data Retrieval: Queries

HAVING Clause

The

clause was added to SQL because the ```WHERE``` keyword could not be used with aggregate functions.
1
2
3
4
5
6
```WHERE``` works before return result, ```HAVING``` filter the result returned by query.
```sql
select col1 from t1 group by col1 having sum(col2) > 10;
select col1 from (select col1, sum(col2) as col2sum from t1 group by col1) t2 where t2.col2sum > 10;

LIMIT Clause

1
2
3
4
5
6
7
8
select * from customers limit 5;
--The previous query returns 5 arbitrary customers
select * from customers order by create_date limit 5;
--The previous query returns the first 5 customers to be created
select * from customers order by create_date limit 2,5;
--The previous query returns the 3rd to the 7th customers to be created

REGEX Column Specification

1
2
3
set hive.support.quoted.identifiers=none;
--The following query selects all columns except ds and hr.
SELECT `(ds|hr)?+.+` FROM sales;

GROUP BY

Multiple aggregations can be done at the same time, however, no two aggregations can have different DISTINCT columns.

1
select users.gender, count(distinct users.userid), count(*), sum(distinct users.userid) from users group by users.gender;

When using group by clause, the select statement can only include columns included in the group by clause. Of course, you can have as many aggregation functions in the select statement as well.

1
select a, sum(b) from t1 group by a;

hive.map.aggr controls how we do aggregations. The default is false. If it is set to true, Hive will do the first-level aggregation directly in the map task. This usually provides better efficiency, but may require more memory to run successfully.

1
2
set hive.map.aggr=true;
select count(*) from table2;

Order/Sort/Distribute/Cluster By

There are some limitations in the

by``` clause. In the strict mode (i.e., ``` set hive.mapred.mode=strict```), the order by clause has to be followed by a ```limit``` clause. The reason is that in order to impose total order of all results, there has to be one reducer to sort the final output. If the number of rows in the output is too large, the single reducer could take a very long time to finish.
1
2
3
```sql
order by colName (asc|desc) (nulls first|last) (, (asc|desc) (nulls first|last))

The difference between

by``` and ```sort by``` is that the former guarantees total order in the output while the latter only guarantees ordering of the rows within a reducer. If there are more than one reducer, ```sort by``` may give partially ordered final results. The difference between ```sort by``` alone of a single column and ```cluster by``` is that ```cluster by``` partitions by the field and ```sort by``` if there are multiple reducers partitions randomly in order to distribute data (and load) uniformly across the reducers.
1
2
3
```sql
select key, value from src sort by key asc, value desc;

cluster By is a short-cut for both distribute By and sort By.

Operators and UDFS

  • Relational Operators
  • Arithmetic Operators
  • Logical Operators
  • String Operators
  • Mathematical Functions
  • Collection Functions
  • Type Conversion Functions
  • Date Functions
  • Conditional Functions
  • String Functions
  • Data Masking Functions
123…6

Yuanyi Wu

朝闻道 夕死可矣

29 posts
9 categories
30 tags
GitHub FB Page
© 2019 Yuanyi Wu
Powered by Hexo
|
Theme — NexT.Mist v5.1.2