Lifetime PD Curves with distribution selection

IFRS 9 Marginal lifetime PD and Scipy curve fitting

Sasiwut Chaiyadecha
3 min readJul 20, 2022
IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statisticl distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

เคยเขียนเรื่อง Fitting distribution ในการ Extrapolation curves ใน Lifetime PD Model มาแล้ว ในตอนนั้นเลือกเป็น Gamma distribution โดยไม่ได้พิจารณา Distribution อื่นเลย ทำให้เกิดคำถามขึ้นมาว่า Gamma distribution เหมาะสมมากน้อยแค่ไหน สำหรับใช้เป็นตัวแทนของ Lifetime model

ใน Blog ตอนนี้จึงเป็นเนื้อหาของการเลือก Distribution ให้มีความเหมาะสมกับเส้น Lifetime curves ที่มากที่สุด

Risk curves

ในตอนที่แล้วเป็น Fitting curves ด้วย Cumulative density function จึงทำให้แยกความต่างกันของแต่ละ Risk grade ได้ไม่มากนัก เพราะด้วยเป็นเส้นโอกาสที่จะเสียสะสม ทำให้เกิดเป็น Curve upward trend ตลอดเวลา

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

จากรูปคือ Actual cumulative PD แม้สามารถแยกความเสี่ยงออกจากกันได้ตาม Risk grade (Aging) แต่เมื่อพิจารณาที่ Trend แล้ว พบว่า Curve มี Upward slope ที่ค่อนข้างใกล้เคียงกัน

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

แต่เมื่อพิจารณาบน Basis ที่เป็น Marginal PD หรือส่วนต่างของ Cumulative PD ระหว่าง Period กลับพบว่าใน Upward slope trend ที่ดูเหมือนใกล้เคียงกัน มี Trend ภายในที่แตกต่างกัน เช่นในกลุ่ม Aging 3 คือกลุ่มที่เป็น High risk มี Curve ที่เป็น Downward slope trend ในขณะที่ Aging 0 หรือ Aging 1 คือกลุ่ม Low risk มี Curve ที่เป็นลักษณะ Uptrend ในช่วง Period แรก ๆ แล้วค่อย ๆ เป็น Trend ลงใน Period หลัง เป็นต้น

Distribution

มี Python library ที่ใช้สำหรับการ Fitting distribution ทั้งหมดที่มีใน Scipy distribution ชื่อว่า FITTER แต่ Library นี้ไม่มี Option สำหรับการทำ Adjustment เช่น Distribution multiplication ดังนั้นจึงต้องเขียน Function ขึ้นมาใช้เองสำหรับ Option นี้

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk
ตัวอย่าง weibull distribution

สำหรับ Distribution ต่าง ๆ ที่เลือกใช้ สามารถพิจารณาเบื้องต้นได้จากลักษณะของ Curve ลักษณะที่สนใจ เช่นในกลุ่ม High risk คือ Downward decay trend โดยข้อมูลในส่วนหางมีการเปลี่ยนแปลงน้อย ส่วนลักษณะที่สนใจของกลุ่ม Low risk คือ “เบ้ขวา” หรือ Right-skewed เป็นต้น

  1. Alpha
  2. Gamma
  3. Log-normal
  4. Skew-normal
  5. Weibull

จากการ Visually observed เลือกเป็น 5 Distributions ที่มีรูปร่างใกล้เคียง Shape ของ Lifetime marginal PD ใน Risk level ต่าง ๆ

เมื่อได้ Distribution ที่ต้องการแล้ว ให้เขียนฟังก์ชั่นโดยมี Parameters ที่ต้องการ Estimate ตามที่ Distribution นั้น ๆ ต้องการ ส่วนมากคือค่า Shape และ Scale ฟังก์ชั่นนี้จะถูกเรียกใช้ใน curve_fit() อีกครั้ง เพื่อ Minimize error ให้ต่ำที่สุด

Curves fitting

เขียน Function Fitter() เพื่อใช้ Method curve_fit() ในการ Solve ค่า Parameters ตามที่เขียนไว้ที่แต่ละ Distribution function เนื่องจากมีการ Call function ด้วย Distribution ที่เป็นเงื่อนไข ทำให้แต่ละ Distribution ต้องเรียกใช้ต่าง Function กัน เพื่อให้มีการเรียก curve_fit() เพียงครั้งเดียว สามารถใช้ partial() เพื่อ Assign function นั้น ๆ ไว้ในตัวแปรใดตัวแปรหนึ่ง และเรียกใช้ตัวแปรนั้น ๆ ใน curve_fit() แทน Function object จริง

Apply Fitter() function ด้วย List ของ Distribution ที่เลือกไว้ 5 Curves เพื่อลอง Fitting กับ Actual lifetime marginal PD โดยให้ค่า X คือ Times 1, 2, 3, …, t ตาม Period ของ Actual lifetime marginal PD

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

ผลลัพธ์ที่ได้คือ Fitted curves ตาม Given distribution ที่ Optimized parameters ให้มี Error ต่ำที่สุดแล้วด้วย curve_fit() เมื่อพิจารณาผลลัพธ์ เห็นว่าบาง Distribution สามารถตัดออกจากตัวเลือกได้เลยทันที เช่น Alpha เพราะ Fitting ได้ไม่ดีกับกลุ่มที่เป็น Low-medium risk หรือ Skew-normal ก็ Fitting ได้ไม่ดีกับกลุ่มที่เป็น Low risk เช่นกัน แต่ Distribution อื่นอาจต้องใช้ Metrics บางตัวในการวัดผล

สำหรับการวัดผล Fitted curves ใน Blog ตอนนี้เลือกใช้เป็น SSE (Sum of Square Error) และ R-Square โดย .rank() อันดับที่มี Performance ดีที่สุดจากทุก Risk grade เพื่อเป็นตัวแทน Distribution ของ Lifetime model

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

เมื่อเปรียบเทียบกับ Distribution อื่นแล้ว พบว่า Log-normal มี Performance ดีที่สุดจากทั้งหมด 5 Distributions ที่เลือกขึ้นมา

ขั้นตอนสุดท้ายคือการ Function ใช้ lognormalFitting() ที่เขียนไว้ก่อนหน้านี้ เพื่อ Optimized parameters พร้อมทั้ง Fitting กับ Actual lifetime marginal PD เป็นผลลัพธ์สุดท้าย

IFRS 9 มาตรฐานบัญชีใหม่ 9 TFRS 9 PD Model Marginal lifetime PD cumulative PD Scipy curve_fit() curve fitting statistic distribution Extrapolation curves alpha gamma log-normal skew-normal weibull upward trend downward decay trend low risk credit risk

Conclusion

จาก Blog ก่อนหน้าที่เลือก Gamma distribution เป็นตัวแทนในการ Extrapolate lifetime PD Curves เมื่อลองพิจารณาบน Basis marginal PD ผลลัพธ์ที่ออกมาเป็น Log-normal distribution แทน แต่หากดูจากผลลัพธ์ความแม่นยำจากการ SSE และ R-Square แล้ว Gamma distribution ยังถือว่าให้ผลลัพธ์ที่ดีได้เช่นกัน

Blog ตอนนี้จึงเหมือนเป็น Supporting analysis เพื่อใช้เป็น Backup ที่ควรต้องมีใน IFRS 9 Model

สำหรับ Colab notebook ของเนื้อหา Blog ตอนนี้สามารถดูได้ที่ Link ด้านบน

--

--