Trong phần này thực hiện tính toán PD forward looking theo 3 kịch bản (base, upturn, downturn).
Các bước bao gồm:
\[ logit = log(\frac{p}{1-p})\]
\[ \hat{logit}(p) = log(\frac{p}{1-p})= \alpha + \beta_1*MEF_1 + \beta_2*MEF_2 + ... + \beta_m*MEF_m \]
\[ SE = \sqrt{\frac{SSE}{n-k}}\]
\[ logit_{upturn} = logit_{base} - SE\] \[ logit_{downturn} = logit_{base} + SE\]
\[ p_{upturn} = \frac{1}{1+e^{logit_{upturn}}}\] \[ p_{downturn} = \frac{1}{1+e^{logit_{downturn}}}\]
head(mef_data)
## # A tibble: 6 x 6
## time combank_foreign_~ cur_acct_bal_wma~ lending_rate_di~ d
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2013-06-30 00:00:00 10.7 2.37 -1.6 0
## 2 2013-09-30 00:00:00 10.7 2.38 -1.5 0
## 3 2013-12-31 00:00:00 10.8 2.24 -1.47 0
## 4 2014-03-31 00:00:00 11.0 0.491 -2.35 0
## 5 2014-06-30 00:00:00 11.1 0.0031 -1.37 0
## 6 2014-09-30 00:00:00 11.1 -0.287 -1.27 0
## # ... with 1 more variable: actual_pd <dbl>
tail(mef_data)
## # A tibble: 6 x 6
## time combank_foreign_~ cur_acct_bal_wma~ lending_rate_di~ d
## <dttm> <dbl> <dbl> <dbl> <dbl>
## 1 2023-09-30 00:00:00 24.0 3.08 -0.1 1
## 2 2023-12-31 00:00:00 24.2 3.22 -0.1 1
## 3 2024-03-31 00:00:00 24.4 3.63 0.2 1
## 4 2024-06-30 00:00:00 24.6 3.94 0.2 1
## 5 2024-09-30 00:00:00 24.9 4.14 0.2 1
## 6 2024-12-31 00:00:00 25.1 4.25 0.2 1
## # ... with 1 more variable: actual_pd <dbl>
Trong dữ liệu đã có sẵn các biến theo nhu cầu bao gồm: actual_pd, và các biến độc lập. Dữ liệu pd sau ngày 31/12/2018 chưa có sẽ được predict từ mô hình. Các bước tiếp theo chỉ cần thực hiện tính toán
#' @title Converse pd and logit
#' @param logit, pd scalar or vector
#' @example fnc_logit_to_pd(fnc_pd_to_logit(-5.9))
fnc_logit_to_pd <- function(logit){
to_pd <- 1/(1+exp(-logit))
return(to_pd)
}
fnc_pd_to_logit <- function(p){
to_logit <- log(p/(1-p))
return(to_logit)
}
dt <- mef_data %>%
# create logit_base
mutate(logit_base = fnc_pd_to_logit(actual_pd)) %>%
select(-time, -actual_pd)
m <- glm(logit_base~.,data = dt)
m
##
## Call: glm(formula = logit_base ~ ., data = dt)
##
## Coefficients:
## (Intercept) combank_foreign_liab_sma
## -5.7758 0.5524
## cur_acct_bal_wma_lead4 lending_rate_diff_yo_y_lead4
## 0.2669 0.7019
## d
## -0.8732
##
## Degrees of Freedom: 22 Total (i.e. Null); 18 Residual
## (24 observations deleted due to missingness)
## Null Deviance: 17.58
## Residual Deviance: 3.548 AIC: 34.28
se <- m$deviance
se
## [1] 3.547727
out <- mef_data %>%
mutate(pred_logit = predict(m, newdata = mef_data)) %>%
mutate(logit_upturn = pred_logit - se,
logit_downturn = pred_logit + se) %>%
mutate(pd_base = fnc_logit_to_pd(pred_logit),
pd_upturn = fnc_logit_to_pd(logit_upturn),
pd_downturn = fnc_logit_to_pd(logit_downturn))
res <- out %>%
select(time, pd_base, pd_upturn, pd_downturn)
res %>%
knitr::kable()
| time | pd_base | pd_upturn | pd_downturn |
|---|---|---|---|
| 2013-06-30 | 0.4156942 | 0.0200711 | 0.9611063 |
| 2013-09-30 | 0.4266553 | 0.0209748 | 0.9627527 |
| 2013-12-31 | 0.4440169 | 0.0224754 | 0.9652045 |
| 2014-03-31 | 0.2283355 | 0.0084470 | 0.9113308 |
| 2014-06-30 | 0.3565677 | 0.0157039 | 0.9506137 |
| 2014-09-30 | 0.3575732 | 0.0157717 | 0.9508189 |
| 2014-12-31 | 0.3309899 | 0.0140437 | 0.9450085 |
| 2015-03-31 | 0.4643924 | 0.0243541 | 0.9678621 |
| 2015-06-30 | 0.4774772 | 0.0256337 | 0.9694562 |
| 2015-09-30 | 0.5669555 | 0.0363236 | 0.9784831 |
| 2015-12-31 | 0.4910564 | 0.0270274 | 0.9710258 |
| 2016-03-31 | 0.3687396 | 0.0165390 | 0.9530283 |
| 2016-06-30 | 0.3006138 | 0.0122234 | 0.9372240 |
| 2016-09-30 | 0.3761971 | 0.0170661 | 0.9544361 |
| 2016-12-31 | 0.5228977 | 0.0305883 | 0.9744038 |
| 2017-03-31 | 0.4573544 | 0.0236901 | 0.9669693 |
| 2017-06-30 | 0.4937912 | 0.0273166 | 0.9713321 |
| 2017-09-30 | 0.5952843 | 0.0406260 | 0.9808023 |
| 2017-12-31 | 0.5596208 | 0.0352942 | 0.9778463 |
| 2018-03-31 | 0.7549408 | 0.0814665 | 0.9907411 |
| 2018-06-30 | 0.6968481 | 0.0620711 | 0.9876303 |
| 2018-09-30 | 0.8377509 | 0.1294152 | 0.9944551 |
| 2018-12-31 | 0.9007558 | 0.2071689 | 0.9968380 |
| 2019-03-31 | 0.8748386 | 0.1675221 | 0.9958980 |
| 2019-06-30 | 0.8712523 | 0.1630578 | 0.9957636 |
| 2019-09-30 | 0.8975897 | 0.2014911 | 0.9967260 |
| 2019-12-31 | 0.9016322 | 0.2087902 | 0.9968689 |
| 2020-03-31 | 0.8737379 | 0.1661300 | 0.9958568 |
| 2020-06-30 | 0.9347065 | 0.2918561 | 0.9979929 |
| 2020-09-30 | 0.9174640 | 0.2424401 | 0.9974167 |
| 2020-12-31 | 0.9625110 | 0.4250129 | 0.9988799 |
| 2021-03-31 | 0.9862549 | 0.6738180 | 0.9995989 |
| 2021-06-30 | 0.9937015 | 0.8195633 | 0.9998175 |
| 2021-09-30 | 0.9972651 | 0.9130285 | 0.9999211 |
| 2021-12-31 | 0.9976488 | 0.9243338 | 0.9999322 |
| 2022-03-31 | 0.9986756 | 0.9559655 | 0.9999618 |
| 2022-06-30 | 0.9989159 | 0.9636722 | 0.9999688 |
| 2022-09-30 | 0.9990914 | 0.9693791 | 0.9999738 |
| 2022-12-31 | 0.9992203 | 0.9736134 | 0.9999775 |
| 2023-03-31 | 0.9990725 | 0.9687604 | 0.9999733 |
| 2023-06-30 | 0.9992479 | 0.9745242 | 0.9999783 |
| 2023-09-30 | 0.9993670 | 0.9784726 | 0.9999818 |
| 2023-12-31 | 0.9994469 | 0.9811399 | 0.9999841 |
| 2024-03-31 | 0.9996454 | 0.9878289 | 0.9999898 |
| 2024-06-30 | 0.9997116 | 0.9900791 | 0.9999917 |
| 2024-09-30 | 0.9997589 | 0.9916931 | 0.9999931 |
| 2024-12-31 | 0.9997928 | 0.9928538 | 0.9999940 |