Transition matrix สำหรับ Non-Retail portfolios
Non-Retail portfolio, Transition matrix, Reference matrix, IFRS 9
ยังคงอยู่ในเรื่องของ Transition matrix ที่ใช้ใน Credit risk หรือ IFRS 9 กันอย่างแพร่หลาย สำหรับใครเพิ่งผ่านมาเจอ Blog ตอนนี้ แล้วยังมีความสงสัยว่า Transition matrix คืออะไร อยากให้ลองย้อนกลับไปอ่าน Blog ตอนก่อนหน้านี้ เพื่อความเข้าใจมากขึ้น เพราะมีรายละเอียดเยอะกว่า ตาม Link ที่ให้ไว้ด้านล่าง
Non-Retail portfolios
อาจมีคำถามว่าทำไมต้องเป็นสำหรับกลุ่ม Non-Retail portfolios ก่อนตอบคำถามข้อนี้ ขอพูดเรื่องกว้าง ๆ ของ Product ในธนาคารว่าอะไรบ้างก่อน สำหรับคนทั่วไปที่ไม่ได้ประกอบธุรกิจ หรือเป็นเจ้าของกิจการ อาจคุ้นเคยลักษณะสินเชื่ออยู่ไม่กี่ประเภท เช่น สินเชื่อบ้าน สินเชื่อรถ สินเชื่อส่วนบุคคล แต่ยังมีสินเชื่อที่เป็นกลุ่มของบริษัท ห้างร้าน ที้ประกอบกิจการในรูปแบบของนิติบุคคล สินเชื่อเหล่านี้เรียกเป็นกลุ่มใหญ่ ๆ ว่า Non-Retail
แล้วทำไมต้องใช้วิธีการสร้าง Model สำหรับลูกหนี้ที่เป็นเฉพาะกลุ่มนี้โดยเฉพาะ เรื่องนี้อาจเป็นเพราะลักษณะทั่วไปของ Non-Retail เรื่องแรกคือเรื่องขนาดตัวอย่าง ที่มีจำนวนน้อยเมื่อเทียบกับกลุ่มที่เป็น Retail ทั่วไป เช่น Corporate portfolio เป็นต้น หากต้องการสร้าง Model อย่าง Survival analysis สำหรับกลุ่ม Non-Retail อาจเป็นเรื่องที่ยากและไม่เหมาะสม
หรือแม้แต่กระทั่ง Transition matrix ที่เป็น Memory less model ยังอาจต้องมีวิธีการสร้างที่ต่างออกไปจาก Transition matrix model ทั่วไปที่เคยนำเสนอ ซึ่งเนื้อหาทั้งหมดจะ Cover ใน Blog ตอนนี้
Rating model
Non-Retail portfolios ส่วนมากแล้วมีสิ่งที่เรียกว่า Internal rating model ที่เอาไว้จัดกลุ่มลูกหนี้แยกออกตามความเสี่ยง ใน IFRS 9 ส่วนมากนิยมใช้ Risk tool นี้ เพื่อนำมาต่อยอดเป็น PD Model
จากข้อมูลตัวอย่างเป็น Table ที่ประกอบด้วย Rating
ณ จุดที่ Observation และ Rating12
คือ Rating เมื่อเวลาผ่านไป 12 เดือนว่ามี Rating เป็นเท่าไหร่ ดีขึ้น แย่ลง หรือปิดบัญชีไปแล้ว ทั้งหมดนี้อยู่ใน Level ของ Segment ที่ประกอบไปด้วย Corporate และ SME ซึ่ง Blog ตอนนี้จะ Build transition matrix รวมของทั้ง 2 Segments นี้เป็น 1 Matrix เท่านั้น
สร้างเป็น Pivot table เพื่อหาจำนวน Observation ทั้งหมดสร้างเป็น Count matrix โดยเรียงลำดับตามความเสี่ยง Rating จากเสี่ยงน้อยไปเสี่ยงมาก [‘AAA’, ‘AA’, …, ‘Default’]
เปลี่ยนจาก Count number of observation เป็น % โดยที่ผลรวมของ Row ใน Matrix ต้องมีค่าเท่ากับ 100% และใช้ฟังก์ชั่น plotMatrix()
ที่เขียนไว้ก่อนหน้านี้ Plot ผลลัพธ์
Issue with Non-Retail transition matrix
จาก Transition matrix ด้านบน อาจเจอปัญหาอยู่บ้างหากใช้ข้อมูลนี้สร้างเป็น Model ต่อ เช่นที่ Rating AAA ไปถึง A+ มี Transition rate ที่เป็น 0% อยู่มากพอสมควร รวมไปถึงที่ Rating AAA ไปถึง BBB+ มี Default rate ที่ 0%
เมื่อ Based matrix เช่นนี้อาจทำให้การทำ Matrix multiplication ได้ค่าที่ไม่ดี ดังนั้นจึงมีการปรับ Matrix นี้ก่อนการทำขั้นตอนต่อไป
How to fix Non-Retail transition matrix
วิธีการแก้ไข Transition matrix ที่นิยมสำหรับกลุ่ม Non-Retail คือการ “ยืม” Transition rate ของบาง Rating มาใช้งาน จากข้อมูลเห็นได้ว่า Rating ที่มีข้อมูลเยอะที่สุด และความเสี่ยงต่ำที่สุดคือ BB+ ซึ่งจะใช้ BB+ เป็น Row อ้างอิง
วิธีคือให้เลื่อนทั้ง Row BB+ทแยงไปตาม Diagonal ดังนั้นหมายความว่าที่ Rating12 ของ Row BBB ต้องเป็น 45.25% แทนที่ 39.49% เป็นต้น แต่สำหรับ Closed และ Default แทนที่การเลื่อนแบบแนวทแยง ให้เลื่อนขึ้นเป็นแนวตั้งแทน ดังนั้น Default rate ของ BBB ต้องเป็น 0.66% แทน 0.32% เป็นต้น
แต่การเลื่อนในลักษณะนี้ต้องไม่ลืมว่าผลรวมของ Row แต่ละ Row ต้องมีค่าเป็น 100% ดังนั้นต้องมีการสร้าง Rate สำหรับ Adjustment ขึ้นในกรณีที่เลื่อน Row ไปทับ Rate เดิมที่ไม่ใช่ 0% หรือ Row ที่หายไปไม่ใช่ 0%
เมื่อเข้าใจ Logic วิธีการปรับ Transition matrix แล้ว สามารถ Implement เป็นฟังก์ชั่นขึ้นมาใช้งานได้ โดยหลักการทำงานของฟังก์ชั่น เริ่มจากหา Index ของ Row ที่ต้องการทำ Reference จากนั้นสร้างเป็น 2 Array โดยแยก Closed และ Default เก็บเป็นอีก Array
ใช้ Iteration เพื่อนับว่าจำนวนข้อมูลใน Array แรกหายเท่าไหร่เมื่อมีการเลื่อนไปทาง Diagonal เมื่อได้จำนวนข้อมูลที่หายไปแล้ว ในเติม “0” แทน Array ว่างนั้น ๆ โดยที่เติมก่อนตำแหน่งของ Closed และ Default เพราะทั้งสองค่านี้ต้องเลื่อนขึ้น ไม่ได้เลื่อนทางทแยง ดังนั้นข้อมูลที่หายไปจึงไม่มีผล
จากนั้นใน Stack ข้อมูลโดยคงมิติเดิมไว้ (1 มิติ) และทำการ Adjustment เผื่อกรณีที่ข้อมูลที่หายไปไม่ใช่ 0% เมื่อได้ Array ที่สมบูรณ์แล้ว ให้วาง Array ใหม่แทนที่ Array เดิม
ผลลัพธ์ที่ได้จากการทำ Reference matrix
เห็นได้ว่าข้อมูลที่ Rating AAA ถึง BBB ถูกเติมให้เต็มมากกว่าเดิม รวมทั้ง Default rate ก็มีค่าจากเดิมที่เป็น 0% ขั้นตอนต่อไปเป็นการทำ Rate adjusment
Closed rate adjustment
ขั้นตอนนี้อาจเป็น Optional หมายความว่าอาจทำหรือไม่ก็ได้ขึ้นกับข้อมูล วิธีการทั้งหมดเคยเขียนไว้ใน Blog ตอนก่อนหน้านี้แล้วอย่างละเอียด สามารถย้อนอ่านได้ที่ Link ด้านล้าง
จากรูป Closed rate ด้านบนขอทำการ Smoothing ด้วย Log-linear regression model เพื่อให้ Rate เรียงตัวกันมากกว่านี้
ใช้เป็น Rate ที่เกิดจาก Model (เส้นเหลือง) แทนที่ใน Closed rate เดิมใน Transition matrix
สูตรคือ
New rate = Old rate * (1 - fitted closed rate) / (1 - actual closed rate)
เมื่อได้ Closed rate ที่ Adjusted แล้ว ขั้นตอนต่อไปคือการ Blend หรือการกระจาย Closed rate เข้าไป Transition matrix ของแต่ละ Rating สูตรคือ
New rate = Old rate / (1 - fitted closed rate)
ผลลัพธ์ที่ได้คือ Transition matrix ที่ไม่มี Closed rate แล้ว ขั้นตอนต่อไปเป็นการทำ Default rate adjustment
Default rate adjustment
วิธีการเหมือนกับ Closed rate adjustment ทุกอย่าง ยกเว้นการ Smoothing ที่ไม่ได้นำ Default row เข้าไป Fitting ใน Regression model แต่ขั้นตอนอื่น ๆ สามารถนำมาใช้ได้ทุกอย่าง เริ่มจาก Plot default rate ก่อนการ Smoothing
Fitting ด้วย Log-linear regression ที่ไม่มี Default row
จากนั้นใช้ผลลัพธ์ในเส้นสีเหลือง เพื่อแทนที่ Default rate เดิม
ถึงตรงนี้ถือเป็นการจบขั้นตอนทั้งหมดในการสร้าง Based matrix ขั้นตอนต่อไปเป็นการนำ Based ที่ได้มานี้ทำให้เป็น Lifetime PD ตามมาตรฐาน IFRS 9
Lifetime matrix multiplication
ขั้นตอนการทำ Lifetime PD ด้วย Matrix multiplication สามารถใช้โค้ดจากตอนก่อนหน้านี้ได้ทั้งหมดเลย Blog ตอนนี้ขอสร้าง Lifetime PD 15 ปีเป็นตัวอย่าง เพื่อให้เห็นเส้นที่เกิดจาก Based matrix ที่ผ่านการปรับค่ามาค่อนข้างเยอะพอสมควร
Conclusion
อาจดูเหมือนเนื้อหา Blog ตอนนี้เยอะ และซับซ้อน แต่ในความเป็นจริงแล้วไม่ใช่เลย การทำ Model ด้วย Transition matrix ถือว่าเป็นอะไรที่ตรงไปตรงมาที่สุดแล้ว ที่สำคัญสามารถปรับตัวเลขได้ตามความเหมาะสม ถือเป็นอีกหนึ่งในหลาย ๆ วิธีที่อยากแชร์เป็นไอเดียสำหรับ IFRS 9 PD Model
สำหรับ Colab notebook ประกอบ Blog ตอนนี้ สามารถดูได้ที่ Link ด้านบน