本文档描述申请评分卡开发中贷款滚动率分析阶段的流程,本阶段的结果用来确定好坏定义。
# 载入所需包
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, 合同号)
# 计算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%"