Transition matrix for Probability of Default (PD) Model #3
Unbias PD Model, Lifetime term structure for IFRS 9.
หลังจากที่ตอนก่อนหน้านี้ ที่เคยคิดว่าอยากเขียนให้จบ แต่เนื้อหาก็ยาวเกิน จนทำให้ไม่อยากอัดเนื้อหาทั้งหมดลงในตอนเดียว เลยแยกเขียนออกมาเป็นตอนที่ 3 ที่เป็นตอนจบสำหรับ Transition matrix for PD Model แล้ว
เนื้อหาทั้งหมดมีความเกี่ยวเนื่องกัน ดังนั้นอยากไปเริ่มอ่านตั้งแต่ตอนแรก มาจนถึงตอนนี้ เพื่อให้ได้สาระสำคัญทั้งหมด โดย Links ของ 2 ตอนที่ผ่านมาสามารถตามได้จากที่ให้ไว้ด้านล่าง
Based transition matrix
มาถึงขั้นตอนการสร้าง Based model ด้วย Transition matrix แล้ว จริง ๆ ขั้นตอนไม่ได้ซับซ้อนอะไร เป็นเพียงการนับ Observation ด้วยหลักการ Crosstab table หรือ Tabulate table ระหว่าง Aging กับ Aging12 สำหรับการวิธีการ Coding อาจเปลี่ยนไปตามความถนัดกันไป แต่ในที่นี้คิดว่าใช้ Function .groupby()
บน Pandas ก็เพียงพอแล้ว แค่ผ่าน Key ให้ถูกต้องตามที่ต้องการ เช่น [‘Segment’, ‘Aging’, ‘Aging12Adj’]
ตารางที่ออกมาเป็นจำนวน Observation ทั้งหมด ที่เกิดขึ้นจากการ Flag ข้อมูลระหว่างเดือนที่ 1 ถึงเดือนที่ 12 ในรูปแบบของ Long format table
ทำการเปลี่ยนข้อมูลจาก Long format table ให้เป็น Wide format table เพื่อให้ดูเหมือนเป็น Transition matrix มากขึ้น
ทำข้อมูลใน Transition matrix ให้เป็นเปอร์เช็นต์โดยที่ผลรวมของ % ตาม Row ต้องมีค่าไม่เกิน 100% ใช้ .div()
ร่วมกับ .sum()
โดยที่รวมผลลัพธ์แต่ละ Row axis = 1
และหารเลขในทุก Columns ด้วยผลรวมนั้น ๆ axis = 0
Plot ผลลัพธ์โดยการใช้ .heatmap()
ใน Seaborn
ต่อไปเป็นการทำ Adjustment สำหรับ Closed / Write-off ที่ Assign ค่าไว้เป็น -1 โดยต้องการนำ Probability นี้ออกจากการคำนวณ ดังนั้นจึงต้องการกระจายค่ากลับให้กับทุก ๆ Transition rate เพื่อให้ผลรวมของ Row ใน Matrix มีค่าเท่ากับ 100% เหมือนเดิม
สำหรับสูตรการทำ Adjustment สามารถทำได้ด้วยการนำเอา 1 - Closed / Write-off rate ไปหารทุก ๆ ช่องใน Transition matrix
สิ่งที่ได้ออกมาคือ Based matrix ที่สามารถใช้เป็น Unbias model สำหรับ IFRS 9 ได้แล้ว Section ต่อไปเป็นการทำ Lifetime term structure จาก Transition matrix ที่ได้ออกมานี้
Lifetime term structure
หลังจากที่ได้ Base transition matrix มาแล้ว… Matrix multiplication เป็นการทำให้ Transition matrix อันเดียว สร้างเป็น Lifetime term structure ได้ ซึ่งหลักการได้มีการเขียนถึงแล้วในเนื้อหาตอนแรก แต่ก่อนที่จะเขียน Code ด้วย Python ลองอธิบายด้วย Excel เพื่อให้เห็นภาพมากขึ้นกันก่อน
ขอใช้ตัวอย่าง Base transition matrix จาก Segment CU เพื่อเป็นการสาธิตวิธีการทำใน Excel ก่อนอื่นให้เริ่มที่ Base matrix เมื่อต้องการหา Cumulative PD ของปีที่ 2 ให้นำ Base matrix นี้คูณกับตัวของมันเอง
ใน Excel สามารถใช้สูตร MMULT
และให้กด CTRL + SHIFT + ENTER
เพื่อใช้สูตรแบบ Array ตามตัวอย่างด้านบน
เช่นเดียวกันสำหรับการหา Cumulative PD ของปีที่ 3 ให้นำ Cumulative PD ของปีที่ 2 คูณกับ Base matrix ตามตัวอย่างด้านบน เมื่อตาม Process นี้ไปเรื่อย ๆ ก็สามารถสร้าง Cumulative PD หรือ Lifetime term structure ได้ตามจำนวนปีที่ต้องการ ต่อไปเป็นการ Implement logic นี้ให้เป็น Python code
จาก Code ตัวอย่างต้องการ Lifetime สำหรับ 10 ปี เนื่องจากข้อมูลมีทั้งหมด 2 Segments ดังนั้นจึงต้องใช้ Iteration เพื่อคำนวณแยกกัน เริ่มจากสร้างตัวแปร baseMatrix
เพื่อเก็บค่า Base matrix ไว้ด้วย .copy()
จาก Array ที่เลือกมา และตัดเฉพาะ Column สุดท้ายเพื่อเก็บค่า PD ของปีที่ 1 ไว้ในตัวแปร lifetimePD
จากนั้นใส่ Condition ไปว่า ถ้า Iteration แรก หรือ i = 0
ยังไม่ต้อง Process อะไร ให้ pass
ผ่านไป
ใน Iteration ต่อมาให้นำ baseMatrix
คูณกับ Array 5 แถวสุดท้ายในตัวแปร lifetime
เมื่อเป็น Iteration ที่ 2 ค่าของ Array 5 แถวสุดท้ายก็คือค่าของ Base matrix จากนั้นให้ np.vstack()
เก็บค่าทั้ง 2 ค่าคือ Cumulative matrix และ Cumulative PD โดยที่ Cumulative matrix เก็บค่าซ้อนเข้าในตัวแปร lifetime เพื่อเป็น Input สำหรับ Iteration ต่อไป และ Cumulative PD เก็บแยกใส่อีกตัวแปรสำหรับการแสดงผล
เมื่อทุกจนครบ 10 ปี หรือ 10 Iteration แล้ว ขอจัด Table ให้เป็นแบบ Long format เพื่อทำงานกับ Seaborn ได้ง่าย และเพื่อใช้ในการแสดงผลลัพธ์
Plot lifetime term structure แยกออกตาม Risk grades ในที่นี้คือ Aging และแบ่งออกตาม Segment ผลลัพธ์ที่เป็นเหมือนรูปด้านล่าง
Conclusion
เมื่อได้ Model transition matrix แล้ว ก็สามารถนำไปพัฒนาต่อได้อีกมากมาย ซึ่งเนื้อหาที่เคยเขียนไว้แล้วคือ Credit cycle index (CCI) ซึ่งเป็นหนึ่งในวิธีการใช้กันอย่างแพร่หลายสำหรับ IFRS 9 Model ซึ่งเนื้อหาย้อนหลังของทั้ง 2 ตอนสามารถอ่านได้จาก Links ด้านล่าง
ในส่วนที่เป็น Notebook ที่เกี่ยวข้องกับเนื้อหาของตอนนี้ สามารถดูได้ที่ GitHub ด้านล่างเช่นกัน