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)