R中客户每月还款数据的处理方法
Approach to monthly repayment data by customer's in R
我有一个这样的数据
ReportingMonth AmountPaid AccountId Country InitilBalance CurrentBalance
201501 10 112233 UK 100 90
201502 10 112233 UK 100 80
201503 20 112233 UK 100 60
201501 40 221144 US 200 160
201502 60 221144 US 200 100
201503 100 221144 US 200 0
早些时候我尝试将 AccountId 转换为一个因素,以便模型知道特定 AccountId 的执行情况,但是,这不起作用,R 仅在 0.1+ 百万数据集上抛出内存不足错误。目标是通过特定的 AccountId 预测下个月 (ReportingMonth) 付款。
我想从线性模型开始,如果需要的话再向上移动,这种问题如何进行?
Edit1(将标题更改为更具体):- 我有许多帐户 ID(按月偿还贷款)的历史详细信息,需要预测他们将来偿还贷款的情况。从线性回归开始只是为了深入了解数据,但是,我目前正在寻找如何建模和处理 "loan repayment data"
我不确定您打算使用哪种回归模型 运行,因为这需要一些基本的统计理解、了解您的数据以及您要尝试做什么。此外,试图通过回归预测超出观察范围的事物是非常不准确的。有更好的方法来做到这一点。
尽管如此,这里有一个线性回归示例以及如何预测数据:
(1) 将 AccountId 转换为一个因子,将 Reporting Month 更改为日期和数字日期格式:
library(dplyr)
df <- df %>%
mutate(id = as.factor(AccountId)) %>%
mutate(date = paste0(ReportingMonth, "01") %>% as.Date(., format="%Y%m%d")) %>%
mutate(day = as.numeric(date))
(2) 运行 线性回归模型 AmountPaid ~ day + day:id + id
。
fit <- lm(AmountPaid ~ day*id, data=df)
summary(fit)
Call:
lm(formula = AmountPaid ~ day * id, data = df)
Residuals:
1 2 3 4 5 6
1.661 -3.500 1.839 3.643 -7.677 4.034
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.728e+03 2.884e+03 -0.946 0.4440
day 1.665e-01 1.751e-01 0.951 0.4422
id221144 -1.384e+04 4.078e+03 -3.394 0.0769 .
day:id221144 8.439e-01 2.477e-01 3.407 0.0764 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.31 on 2 degrees of freedom
Multiple R-squared: 0.9828, Adjusted R-squared: 0.9569
F-statistic: 38.01 on 3 and 2 DF, p-value: 0.02574
总结的意思基本是:
AmountPaid for id 112233 = 0.17*day - 2728 &
AmountPaid for id 221144 = (0.17+0.84)*day + (-2728 - 13840)
预测 2015 年每个 ID 每月的支付金额:
newdat <- expand.grid(date=seq.Date(as.Date("2015-01-01"), as.Date("2016-01-01"), by="month"),
id=levels(df$id))
newdat$day <- newdat$date %>% as.numeric
newdat[, c('fit', 'se')] <- predict(fit, newdata=newdat, se=T)[1:2]
绘制拟合图:
ggplot(newdat, aes(date, fit)) + geom_line() + geom_ribbon(aes(ymin=fit-1.96*se, ymax=fit+1.96*se), alpha=.2) +
geom_point(data=df, aes(date, AmountPaid)) +
ylab("AmountPaid") +
scale_x_date(date_break="1 month", date_labels="%Y-%m") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
facet_wrap(~id)
我有一个这样的数据
ReportingMonth AmountPaid AccountId Country InitilBalance CurrentBalance
201501 10 112233 UK 100 90
201502 10 112233 UK 100 80
201503 20 112233 UK 100 60
201501 40 221144 US 200 160
201502 60 221144 US 200 100
201503 100 221144 US 200 0
早些时候我尝试将 AccountId 转换为一个因素,以便模型知道特定 AccountId 的执行情况,但是,这不起作用,R 仅在 0.1+ 百万数据集上抛出内存不足错误。目标是通过特定的 AccountId 预测下个月 (ReportingMonth) 付款。
我想从线性模型开始,如果需要的话再向上移动,这种问题如何进行?
Edit1(将标题更改为更具体):- 我有许多帐户 ID(按月偿还贷款)的历史详细信息,需要预测他们将来偿还贷款的情况。从线性回归开始只是为了深入了解数据,但是,我目前正在寻找如何建模和处理 "loan repayment data"
我不确定您打算使用哪种回归模型 运行,因为这需要一些基本的统计理解、了解您的数据以及您要尝试做什么。此外,试图通过回归预测超出观察范围的事物是非常不准确的。有更好的方法来做到这一点。
尽管如此,这里有一个线性回归示例以及如何预测数据:
(1) 将 AccountId 转换为一个因子,将 Reporting Month 更改为日期和数字日期格式:
library(dplyr)
df <- df %>%
mutate(id = as.factor(AccountId)) %>%
mutate(date = paste0(ReportingMonth, "01") %>% as.Date(., format="%Y%m%d")) %>%
mutate(day = as.numeric(date))
(2) 运行 线性回归模型 AmountPaid ~ day + day:id + id
。
fit <- lm(AmountPaid ~ day*id, data=df)
summary(fit)
Call:
lm(formula = AmountPaid ~ day * id, data = df)
Residuals:
1 2 3 4 5 6
1.661 -3.500 1.839 3.643 -7.677 4.034
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.728e+03 2.884e+03 -0.946 0.4440
day 1.665e-01 1.751e-01 0.951 0.4422
id221144 -1.384e+04 4.078e+03 -3.394 0.0769 .
day:id221144 8.439e-01 2.477e-01 3.407 0.0764 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 7.31 on 2 degrees of freedom
Multiple R-squared: 0.9828, Adjusted R-squared: 0.9569
F-statistic: 38.01 on 3 and 2 DF, p-value: 0.02574
总结的意思基本是:
AmountPaid for id 112233 = 0.17*day - 2728 &
AmountPaid for id 221144 = (0.17+0.84)*day + (-2728 - 13840)
预测 2015 年每个 ID 每月的支付金额:
newdat <- expand.grid(date=seq.Date(as.Date("2015-01-01"), as.Date("2016-01-01"), by="month"),
id=levels(df$id))
newdat$day <- newdat$date %>% as.numeric
newdat[, c('fit', 'se')] <- predict(fit, newdata=newdat, se=T)[1:2]
绘制拟合图:
ggplot(newdat, aes(date, fit)) + geom_line() + geom_ribbon(aes(ymin=fit-1.96*se, ymax=fit+1.96*se), alpha=.2) +
geom_point(data=df, aes(date, AmountPaid)) +
ylab("AmountPaid") +
scale_x_date(date_break="1 month", date_labels="%Y-%m") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
facet_wrap(~id)