本文档描述申请评分卡开发中贷款滚动率分析阶段的流程,本阶段的结果用来确定好坏定义


1. 数据导入与数据处理

# 载入所需包 
library(data.table)
library(pipeR)
library(ggplot2)
library(lubridate)
library(scales)
# 读入数据
data <- fread("mob.HP.txt", drop = 1)

数据概览:

head(data) 
     月末日期             合同号 放款金额 期限             部门
1: 2010-09-30 HT0010003010000176     4999   12 产品与渠道拓展部
2: 2010-10-31 HT0010003010000176     4999   12 产品与渠道拓展部
3: 2010-11-30 HT0010003010000176     4999   12 产品与渠道拓展部
4: 2010-12-31 HT0010003010000176     4999   12 产品与渠道拓展部
5: 2011-01-31 HT0010003010000176     4999   12 产品与渠道拓展部
6: 2011-02-28 HT0010003010000176     4999   12 产品与渠道拓展部
             渠道     用途     还款方式 支付方式   放款日期 月末余额
1: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16  2998.52
2: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16  2584.50
3: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16  2166.94
4: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16  1743.93
5: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16  1316.98
6: 大中电器马甸店 贬值耐用 等额本息还款 受托支付 2010-04-16   885.26
   核销日期 月末逾期天数
1:                     0
2:                     0
3:                     0
4:                     0
5:                     0
6:                     0
data[, ":="(放日期 = ymd(放日期),
            月末日期 = ymd(月末日期))]

data[, ":="(放年 = year(放日期),
            放月 = month(放日期),
            表现年 = year(月末日期),
            表现月 = month(月末日期)
            )]

data[, ":="(mob = (表现年 - 放款年) * 12 + 表现月 - 放款月)]
data201403 <- data[表现年 == 2014 & 表现月 == 3, ]14年3月数据
data201404 <- data[表现年 == 2014 & 表现月 == 4, ]14年4月数据

setkey(data201403, 合同号)
setkey(data201404, 合同号)

2. 计算滚动率

# 计算2014年3月-2014年4月滚动率
data201403_201404 <- data201404[data201403[, list(合同号, 月末期天数)]] %>>%
                      (~ setnames(., c("i.月末逾期天数", "月末逾期天数"), c("del_day_201403","del_day_201404")))
data201403_201404[, ":="(del_term_201403 = cut(del_day_201403, breaks = c(-Inf, 0, 30, 60, 90, 120, 150, 180, Inf), 
                                                               labels = paste("M", c(0:6,"6+"), sep = "")),
                         del_term_201404 = cut(del_day_201404, breaks = c(-Inf, 0, 30, 60, 90, 120, 150, 180, Inf), 
                                                               labels = paste("M", c(0:6,"6+"), sep = ""))
                         )]          
crosstable <- addmargins(table(data201403_201404[, del_term_201403], data201403_201404[, del_term_201404]))
print(crosstable)
     
          M0     M1     M2     M3     M4     M5     M6    M6+    Sum
  M0  121255   4725      0      0      0      0      0      0 125980
  M1    1350    985   3145      0      0      0      0      0   5480
  M2     341    134     58   1596      0      0      0      0   2129
  M3     136     50     21     29   1593      0      0      0   1829
  M4      54     28      8     25      9   1478      0      0   1602
  M5      33      4      1      4      6      7    775      0    830
  M6      15      2      0      1      1      1      4    371    395
  M6+     27      8      0      0      3      2      2   1628   1670
  Sum 123211   5936   3233   1655   1612   1488    781   1999 139915
rollrate <- vector(length = 7)
names(rollrate) <- c("M0-M1","M1-M2","M2-M3","M3-M4","M4-M5","M5-M6","M6-M6+")
rollrate["M0-M1"] <-  percent(crosstable["M0","M1"] /  crosstable["M0","Sum"])
rollrate["M1-M2"] <-  percent(crosstable["M1","M2"] /  crosstable["M1","Sum"])
rollrate["M2-M3"] <-  percent(crosstable["M2","M3"] /  crosstable["M2","Sum"])
rollrate["M3-M4"] <-  percent(crosstable["M3","M4"] /  crosstable["M3","Sum"])
rollrate["M4-M5"] <-  percent(crosstable["M4","M5"] /  crosstable["M4","Sum"])
rollrate["M5-M6"] <-  percent(crosstable["M5","M6"] /  crosstable["M5","Sum"])
rollrate["M6-M6+"] <- percent(crosstable["M6","M6+"] / crosstable["M6","Sum"])
print(rollrate)
  M0-M1   M1-M2   M2-M3   M3-M4   M4-M5   M5-M6  M6-M6+ 
"3.75%" "57.4%"   "75%" "87.1%" "92.3%" "93.4%" "93.9%"