Transition matrix for Probability of Default (PD) Model #3

Unbias PD Model, Lifetime term structure for IFRS 9.

Sasiwut Chaiyadecha
4 min readFeb 2, 2022

หลังจากที่ตอนก่อนหน้านี้ ที่เคยคิดว่าอยากเขียนให้จบ แต่เนื้อหาก็ยาวเกิน จนทำให้ไม่อยากอัดเนื้อหาทั้งหมดลงในตอนเดียว เลยแยกเขียนออกมาเป็นตอนที่ 3 ที่เป็นตอนจบสำหรับ Transition matrix for PD Model แล้ว

เนื้อหาทั้งหมดมีความเกี่ยวเนื่องกัน ดังนั้นอยากไปเริ่มอ่านตั้งแต่ตอนแรก มาจนถึงตอนนี้ เพื่อให้ได้สาระสำคัญทั้งหมด โดย Links ของ 2 ตอนที่ผ่านมาสามารถตามได้จากที่ให้ไว้ด้านล่าง

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

Based transition matrix

มาถึงขั้นตอนการสร้าง Based model ด้วย Transition matrix แล้ว จริง ๆ ขั้นตอนไม่ได้ซับซ้อนอะไร เป็นเพียงการนับ Observation ด้วยหลักการ Crosstab table หรือ Tabulate table ระหว่าง Aging กับ Aging12 สำหรับการวิธีการ Coding อาจเปลี่ยนไปตามความถนัดกันไป แต่ในที่นี้คิดว่าใช้ Function .groupby() บน Pandas ก็เพียงพอแล้ว แค่ผ่าน Key ให้ถูกต้องตามที่ต้องการ เช่น [‘Segment’, ‘Aging’, ‘Aging12Adj’]

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe
ตัวอย่างการใช้ ,groupby() function สำหรับการนับ observation

ตารางที่ออกมาเป็นจำนวน Observation ทั้งหมด ที่เกิดขึ้นจากการ Flag ข้อมูลระหว่างเดือนที่ 1 ถึงเดือนที่ 12 ในรูปแบบของ Long format table

ทำการเปลี่ยนข้อมูลจาก Long format table ให้เป็น Wide format table เพื่อให้ดูเหมือนเป็น Transition matrix มากขึ้น

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

ทำข้อมูลใน Transition matrix ให้เป็นเปอร์เช็นต์โดยที่ผลรวมของ % ตาม Row ต้องมีค่าไม่เกิน 100% ใช้ .div() ร่วมกับ .sum() โดยที่รวมผลลัพธ์แต่ละ Row axis = 1 และหารเลขในทุก Columns ด้วยผลรวมนั้น ๆ axis = 0

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe
ผลลัพธ์ในรูปแบบเปอร์เซ็นต์ของ transition rate

Plot ผลลัพธ์โดยการใช้ .heatmap() ใน Seaborn

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

ต่อไปเป็นการทำ Adjustment สำหรับ Closed / Write-off ที่ Assign ค่าไว้เป็น -1 โดยต้องการนำ Probability นี้ออกจากการคำนวณ ดังนั้นจึงต้องการกระจายค่ากลับให้กับทุก ๆ Transition rate เพื่อให้ผลรวมของ Row ใน Matrix มีค่าเท่ากับ 100% เหมือนเดิม

สำหรับสูตรการทำ Adjustment สามารถทำได้ด้วยการนำเอา 1 - Closed / Write-off rate ไปหารทุก ๆ ช่องใน Transition matrix

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe
ผลลัพธ์ที่ได้คือ transition rate ที่มีค่าเปลี่ยนไป และสามารถ drop closed/ write-off ออกจากการคำนวณได้
the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

สิ่งที่ได้ออกมาคือ 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 เพื่อให้เห็นภาพมากขึ้นกันก่อน

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

ขอใช้ตัวอย่าง Base transition matrix จาก Segment CU เพื่อเป็นการสาธิตวิธีการทำใน Excel ก่อนอื่นให้เริ่มที่ Base matrix เมื่อต้องการหา Cumulative PD ของปีที่ 2 ให้นำ Base matrix นี้คูณกับตัวของมันเอง

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

ใน Excel สามารถใช้สูตร MMULT และให้กด CTRL + SHIFT + ENTER เพื่อใช้สูตรแบบ Array ตามตัวอย่างด้านบน

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

เช่นเดียวกันสำหรับการหา 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 ผลลัพธ์ที่เป็นเหมือนรูปด้านล่าง

the matrix transition matrix pd model probability of default ifrs9 แบบจำลองความเสี่ยง credit risk มาตรฐานบัญชีใหม่ tfrs9 matrix multiplication python pandas dataframe

Conclusion

เมื่อได้ Model transition matrix แล้ว ก็สามารถนำไปพัฒนาต่อได้อีกมากมาย ซึ่งเนื้อหาที่เคยเขียนไว้แล้วคือ Credit cycle index (CCI) ซึ่งเป็นหนึ่งในวิธีการใช้กันอย่างแพร่หลายสำหรับ IFRS 9 Model ซึ่งเนื้อหาย้อนหลังของทั้ง 2 ตอนสามารถอ่านได้จาก Links ด้านล่าง

ในส่วนที่เป็น Notebook ที่เกี่ยวข้องกับเนื้อหาของตอนนี้ สามารถดูได้ที่ GitHub ด้านล่างเช่นกัน

--

--