Credit Cycle Index (CCI) simplified version
Transition matrix with Rho optimisation for credit risk model
เมื่อตอนช่วงไตรมาสแรกของปีได้เขียน Blog เกี่ยวกับ Transition matrix ที่ใช้สำหรับ IFRS 9 หรือ Credit Risk model ไปเยอะพอสมควร และถ้าย้อนกลับไปนานกว่านี้ เคยมี Blog เกี่ยวกับการใช้งาน Transition matrix ในรูปแบบ Credit Cycle Index model (CCI)
Recap สั้น ๆ เกี่ยวกับ CCI เป็นโมเดลการหาค่าตัวแทนของ Economics stage ที่เกิดขึ้นใน Transition matrix ณ ช่วงเวลานั้น ๆ โดยมีค่าที่สนใจ 2 ค่าด้วยกันคือ Rho และ CCI (Z-Index) ในตอนนั้นเขียนเป็นแบบ Full version โดยใช้หลักการ Optimisation ในการ Solve สมการทั้ง 2 ตัวแปร จาก Cost function และ Constraint function ที่กำหนด โดย CCI แบบ Full version สามารถดูได้ที่ Colab notebook ด้านล่าง
In the simplified version
เนื้อหาของ Blog ตอนนี้ยังคงอยู่ในเรื่อง CCI เหมือนเดิม แต่เปลี่ยนให้เป็น Simplified version (อย่างง่าย) เพราะจากเดิมที่ต้อง Solve สมการทั้ง 2 ตัวแปร จะถูกลดให้เหลือเพียง 1 ตัวแปรคือ Rho ส่วน Z-Index เป็นค่า Given ที่คำนวณจากสูตร
สิ่งที่แตกต่างอีกเรื่องคือ Cost function หรือ Error ที่เกิดจาก Optimisation process จากเดิมที่ต้องคำนวณพิจารณาโอกาสรอด (Non-Default) และ Portfolio distribution (Population) เปลี่ยนเป็นใช้ Square Error (SE) เป็น Cost function แทน ดังนั้น Optimisation process จึงลดความซับซ้อนลง
Dataset
ยังคงใช้งาน Dataset เดิมจากตอน CCI เดิมในรูปแบบของ Long format table ที่นับจำนวนลูกหนี้ที่อยู่ในแต่ละเดือน โดยมี Risk grade (Aging) ที่เดือนที่ Observation และ Aging เมื่อผ่านไป 12 เดือนตาม Performance window
Downgrade or Default Probability (DDP)
DDP มีความหมายตรงตามชื่อคือการกลุ่มลูกหนี้ออกเป็น 2 กลุ่มคือ
- ลูกหนี้ที่ย้าย Status ณ เดือนที่ 12 ไป Risk grade ที่แย่กว่าเดิม
- ลูกหนี้ที่ Status ยังเหมือนเดิม หรือเปลี่ยนไปในทางที่ดีขึ้น
โดยกลุ่มลูกหนี้ที่สนใจคือกลุ่มที่ 1. เป็น Assumption ที่ค่อนไปในทาง Conservative หรือคือการสร้างโมเดลที่ให้น้ำหนักไปทาง Worst case scenario มากกว่า
Credit Cycle Index (CCI)
CCI ในโมเดลที่เป็น Simplified ไม่ได้ผ่านขั้นตอนการ Optimisation แต่เกิดขึ้นจากการคำนวณด้วยสูตร โดยใช้การหา Z-Score หรือ Standardisation ของ Inverse cumulative distribution ของ DDP ตามสูตรด้านล่าง
Transition matrix
ต่อมาเป็น Material เดิมที่ต้องใช้งานคือ Transition matrix สิ่งที่จำเป็นต้องใช้จาก Matrix มีทั้งหมด 2 อย่างคือ
- Average transition matrix มีไว้เพื่อหา Upper threshold สำหรับการ Inverse ค่า Rho (ที่กำลังจะหา) และ CCI ให้กลับเป็น Fitted matrix
- Monthly transition matrix มีไว้เพื่อเปรียบผลต่างระหว่าง Fitted matrix ว่ามี Error เกิดขึ้นมากน้อยเท่าไหร่ตาม Cost function ที่กำหนด
เช่นเดียวกันกับ Upper threshold matrix คือ Monthly transition matrix ต้องไม่รวม (ไม่พิจารณา) กลุ่มที่ Defaulted ณ Period นั้น ๆ Monthly array ทั้งหมดคือจำนวนเดือนทั้งหมด 40 เดือน โดยในแต่ละเดือนมี Aging ที่ Observed ทั้งหมด 4 Aging (0–3) และมี Aging 12 เดือนถัดไปทั้งหมด 5 Aging (0–4) ดังนั้น Shape ของ Monthly array คือ (40, 20)
Total monthly transition shape: (40, 20)
First month transition matrix array
array([0.95303526, 0.02340967, 0.00516176, 0.00167212, 0.01672119,
0.62742382, 0.21606648, 0.02908587, 0.01385042, 0.11357341,
0.39224138, 0.13793103, 0.05603448, 0.05603448, 0.35775862,
0.1547619 , 0.07142857, 0. , 0.02380952, 0.75 ])
Conditional transition matrix through optimisation
ในการ Inverse upper threshold matrix ด้วย Rho (ที่ต้องหาด้วย Optimisation process) และ CCI เพื่อหาโอกาสย้าย Stage ของลูกหนี้จาก i ไป j สามารถคำนวณได้จากสูตรด้านบน Fitted matrix ที่เกิดขึ้นมีชื่อเรียกว่า Conditional transition matrix จากนั้นนำไปหา Error โดยเทียบจากค่าจริง มี Cost function คือ Squared Errors (SE) ตามสูตรด้านล่าง
เนื่องจากเป็นการคำนวณบน Transition matrix ทำให้ SE ที่เกิดขึ้นมีขนาด m x n ในแต่ละเดือน เพื่อการ Minimised cost function ให้ได้มากที่สุดในเดือนนั้น ๆ จึงใช้ค่า Maximum ของแต่ละ Risk grade ในแต่ละเดือน จากนั้นหาผลรวมค่าเฉลี่ยของแต่ละ Risk grade เพื่อเป็นตัวแทน Cost function ทั้งหมด
เขียนสิ่งที่อธิบายไปทั้งหมดเป็น Function สำหรับการใช้ minimize()
ในการลด Cost function ให้ได้มากที่สุด โดยการแทนค่า Rho เข้าไปในสมการ Conditional transition matrix โดยค่า Rho ต้องค่ามีระหว่าง 0 ถึง 1 (Bound)
Optimization terminated successfully. (Exit mode 0)
Current function value: 0.015734642183089818
Iterations: 6
Function evaluations: 18
Gradient evaluations: 6
fun: 0.015734642183089818
jac: array([-0.00075412])
message: 'Optimization terminated successfully.'
nfev: 18
nit: 6
njev: 6
status: 0
success: True
x: array([0.18774814])
Fitted matrix
เมื่อสามารถ Optimised ค่า Rho ได้แล้ว สามารถใช้ค่า Rho ที่หาได้ Fitting กลับให้เป็น Transition matrix เพื่อดูว่า Matrix ที่เกิดจาก Rho มีค่าเป็นอย่างไร
สามารถใช้สูตร Conditional transition matrix เดิมจาก Optimisation process แต่ให้แทนค่า Rho ด้วยคำตอบจาก Optimisation process และ CCI ตามเดือนที่ต้องการคำนวณ
เห็นได้ว่าตัวเลขใน Transition matrix มีค่าใกล้เคียงกับค่าจริง ตามสมการที่ได้ผูกไว้ใน Optimisation process สำหรับการใช้งานต่อไปคือ อาจเป็นการนำค่า CCI เพื่อใช้ใน Forward-looking model ต่อ เพื่อสร้าง Predicted conditional transition matrix และคำนวณ Lifetime ต่อไปตามลำดับ
Conclusion
จบแล้วสำหรับเนื้อหาของ CCI Version simplified เมื่ออ่านมาถึงตรงนี้อาจรู้สึกว่า วิธีนี้น่าใช้กว่าแบบ Full version เพราะอธิบายได้ง่ายกว่า แต่จากที่สำรวจใน Market วิธีการอย่างง่ายนี้ เริ่มใช้ลดน้อยลงเรื่อย ๆ แล้ว อาจเพราะ Strong assumption ในการหาค่า Z-Index จากสูตรการคำนวณ ที่ไม่ได้พิจารณาการย้อนกลับ Stage ของลูกหนี้เป็นต้น
สำหรับ Colab notebook ของเนื้อหาทั้งตอนนี้ สามารถติดตามได้ที่ Link ด้านบน