1 Nội dung

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:

  • Chuyển đổi PD actual sang logit actual (PD ttc -> logit ttc)

\[ logit = log(\frac{p}{1-p})\]

  • Hồi quy logit actual theo các biến vĩ mô

\[ \hat{logit}(p) = log(\frac{p}{1-p})= \alpha + \beta_1*MEF_1 + \beta_2*MEF_2 + ... + \beta_m*MEF_m \]

  • Tính SE từ mô hình

\[ SE = \sqrt{\frac{SSE}{n-k}}\]

  • Tính logit upturn và logit downturn

\[ logit_{upturn} = logit_{base} - SE\] \[ logit_{downturn} = logit_{base} + SE\]

  • Tính pd upturn và pd downturn

\[ p_{upturn} = \frac{1}{1+e^{logit_{upturn}}}\] \[ p_{downturn} = \frac{1}{1+e^{logit_{downturn}}}\]

2 Thực hành

2.1 Đặc điểm dữ liệu

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

2.2 Một số hàm cần thiết

#' @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)
}

2.3 Tính toán

  • Chuẩn bị dữ liệu
dt <- mef_data %>% 
  # create logit_base
  mutate(logit_base = fnc_pd_to_logit(actual_pd)) %>% 
  select(-time, -actual_pd)
  • Hồi quy
m <- glm(logit_base~.,data = dt)
  • Kết quả hồi quy
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
se <- m$deviance
se
## [1] 3.547727
  • Tính pd upturn, pd downturn
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
LS0tDQp0aXRsZTogIlBEIGZvcndhcmQgbG9va2luZyBtb2RlbCINCmF1dGhvcjogIk5ndXnhu4VuIE5n4buNYyBCw6xuaCINCmRhdGU6ICIyMCBTRVAgMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6ICJkZWZhdWx0Ig0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGRldjogJ3N2ZycNCmVkaXRvcl9vcHRpb25zOiANCiAgY2h1bmtfb3V0cHV0X3R5cGU6IGNvbnNvbGUNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQoNCmBgYA0KDQojIE7hu5lpIGR1bmcNCg0KVHJvbmcgcGjhuqduIG7DoHkgdGjhu7FjIGhp4buHbiB0w61uaCB0b8OhbiBQRCBmb3J3YXJkIGxvb2tpbmcgdGhlbyAzIGvhu4tjaCBi4bqjbiAoYmFzZSwgdXB0dXJuLCBkb3dudHVybikuDQoNCkPDoWMgYsaw4bubYyBiYW8gZ+G7k206DQoNCi0gQ2h1eeG7g24gxJHhu5VpIFBEIGFjdHVhbCBzYW5nIGxvZ2l0IGFjdHVhbCAoUEQgdHRjIC0+IGxvZ2l0IHR0YykNCg0KJCQgbG9naXQgPSBsb2coXGZyYWN7cH17MS1wfSkkJA0KDQotIEjhu5NpIHF1eSBsb2dpdCBhY3R1YWwgdGhlbyBjw6FjIGJp4bq/biB2xKkgbcO0DQoNCiQkIFxoYXR7bG9naXR9KHApID0gbG9nKFxmcmFje3B9ezEtcH0pPSBcYWxwaGEgKyBcYmV0YV8xKk1FRl8xICsgXGJldGFfMipNRUZfMiArIC4uLiArIFxiZXRhX20qTUVGX20gJCQNCg0KLSBUw61uaCBTRSB04burIG3DtCBow6xuaA0KDQokJCBTRSA9IFxzcXJ0e1xmcmFje1NTRX17bi1rfX0kJA0KDQotIFTDrW5oIGxvZ2l0IHVwdHVybiB2w6AgbG9naXQgZG93bnR1cm4NCg0KJCQgbG9naXRfe3VwdHVybn0gPSBsb2dpdF97YmFzZX0gLSBTRSQkDQokJCBsb2dpdF97ZG93bnR1cm59ID0gbG9naXRfe2Jhc2V9ICsgU0UkJA0KDQotIFTDrW5oIHBkIHVwdHVybiB2w6AgcGQgZG93bnR1cm4NCg0KJCQgcF97dXB0dXJufSA9IFxmcmFjezF9ezErZV57bG9naXRfe3VwdHVybn19fSQkDQokJCBwX3tkb3dudHVybn0gPSBcZnJhY3sxfXsxK2Vee2xvZ2l0X3tkb3dudHVybn19fSQkDQoNCiMgVGjhu7FjIGjDoG5oDQoNCmBgYHtyLCBpbmNsdWRlPUZ9DQpwZCA8LSByZWFkX2V4Y2VsKCJEOi9UUEIvSUZSUzkvUEQgbGlmZXRpbWUvVGVtcGxhdGUgUGlUIFBELzEuIExHV19GTC54bHN4Iiwgc2hlZXQgPSAiU0UgKDIpIikgJT4lIA0KICBqYW5pdG9yOjpjbGVhbl9uYW1lcygpICU+JSANCiAgc2VsZWN0KHRpbWUsIGFjdHVhbF9wZCkNCg0KbWVmX2RhdGEgPC0gcmVhZF9leGNlbCgiRDovVFBCL0lGUlM5L1BEIGxpZmV0aW1lL1RlbXBsYXRlIFBpVCBQRC8xLiBMR1dfRkwueGxzeCIsIHNoZWV0ID0gIk1FRiBkYXRhIikNCm1lZl9kYXRhIDwtIG1lZl9kYXRhICU+JSANCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IFZhcmlhYmxlcywgdmFsdWVzX2Zyb20gPSBWYWx1ZSkgJT4lIA0KICBqYW5pdG9yOjpjbGVhbl9uYW1lcygpDQoNCm1lZl9kYXRhIDwtIG1lZl9kYXRhICU+JSANCiAgbGVmdF9qb2luKHBkKSAlPiUgDQogIGZpbHRlcih0aW1lID49IGx1YnJpZGF0ZTo6eW1kKDIwMTMwNjMwKSkNCmBgYA0KDQojIyDEkOG6t2MgxJFp4buDbSBk4buvIGxp4buHdQ0KYGBge3J9DQpoZWFkKG1lZl9kYXRhKQ0KdGFpbChtZWZfZGF0YSkNCmBgYA0KDQpUcm9uZyBk4buvIGxp4buHdSDEkcOjIGPDsyBz4bq1biBjw6FjIGJp4bq/biB0aGVvIG5odSBj4bqndSBiYW8gZ+G7k206IGFjdHVhbF9wZCwgdsOgIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcC4NCkThu68gbGnhu4d1IHBkIHNhdSBuZ8OgeSAzMS8xMi8yMDE4IGNoxrBhIGPDsyBz4bq9IMSRxrDhu6NjIHByZWRpY3QgdOG7qyBtw7QgaMOsbmguDQpDw6FjIGLGsOG7m2MgdGnhur9wIHRoZW8gY2jhu4kgY+G6p24gdGjhu7FjIGhp4buHbiB0w61uaCB0b8Ohbg0KDQojIyBN4buZdCBz4buRIGjDoG0gY+G6p24gdGhp4bq/dA0KDQpgYGB7cn0NCiMnIEB0aXRsZSBDb252ZXJzZSBwZCBhbmQgbG9naXQNCiMnIEBwYXJhbSBsb2dpdCwgcGQgIHNjYWxhciBvciB2ZWN0b3INCiMnIEBleGFtcGxlIGZuY19sb2dpdF90b19wZChmbmNfcGRfdG9fbG9naXQoLTUuOSkpDQpmbmNfbG9naXRfdG9fcGQgPC0gZnVuY3Rpb24obG9naXQpew0KICB0b19wZCA8LSAxLygxK2V4cCgtbG9naXQpKQ0KICByZXR1cm4odG9fcGQpDQp9DQoNCg0KZm5jX3BkX3RvX2xvZ2l0IDwtIGZ1bmN0aW9uKHApew0KICB0b19sb2dpdCA8LSBsb2cocC8oMS1wKSkNCiAgcmV0dXJuKHRvX2xvZ2l0KQ0KfQ0KYGBgDQoNCiMjIFTDrW5oIHRvw6FuDQoNCi0gQ2h14bqpbiBi4buLIGThu68gbGnhu4d1DQpgYGB7cn0NCmR0IDwtIG1lZl9kYXRhICU+JSANCiAgIyBjcmVhdGUgbG9naXRfYmFzZQ0KICBtdXRhdGUobG9naXRfYmFzZSA9IGZuY19wZF90b19sb2dpdChhY3R1YWxfcGQpKSAlPiUgDQogIHNlbGVjdCgtdGltZSwgLWFjdHVhbF9wZCkNCg0KYGBgDQoNCi0gSOG7k2kgcXV5DQpgYGB7cn0NCm0gPC0gZ2xtKGxvZ2l0X2Jhc2V+LixkYXRhID0gZHQpDQoNCmBgYA0KDQotIEvhur90IHF14bqjIGjhu5NpIHF1eQ0KDQpgYGB7cn0NCm0NCmBgYA0KDQotIFNFDQoNCmBgYHtyfQ0Kc2UgPC0gbSRkZXZpYW5jZQ0Kc2UNCmBgYA0KDQotIFTDrW5oIHBkIHVwdHVybiwgcGQgZG93bnR1cm4NCg0KYGBge3J9DQoNCm91dCA8LSBtZWZfZGF0YSAlPiUgDQogIG11dGF0ZShwcmVkX2xvZ2l0ID0gcHJlZGljdChtLCBuZXdkYXRhID0gbWVmX2RhdGEpKSAlPiUgDQogIG11dGF0ZShsb2dpdF91cHR1cm4gPSBwcmVkX2xvZ2l0IC0gc2UsDQogICAgICAgICBsb2dpdF9kb3dudHVybiA9IHByZWRfbG9naXQgKyBzZSkgJT4lIA0KICBtdXRhdGUocGRfYmFzZSA9IGZuY19sb2dpdF90b19wZChwcmVkX2xvZ2l0KSwNCiAgICAgICAgIHBkX3VwdHVybiA9IGZuY19sb2dpdF90b19wZChsb2dpdF91cHR1cm4pLA0KICAgICAgICAgcGRfZG93bnR1cm4gPSBmbmNfbG9naXRfdG9fcGQobG9naXRfZG93bnR1cm4pKQ0KYGBgDQoNCmBgYHtyfQ0KcmVzIDwtIG91dCAlPiUgDQogIHNlbGVjdCh0aW1lLCBwZF9iYXNlLCBwZF91cHR1cm4sIHBkX2Rvd250dXJuKQ0KDQpyZXMgJT4lIA0KICBrbml0cjo6a2FibGUoKQ0KYGBgDQoNCg==