Nelson-Siegel fitting curve for PD Lifetime model

Fitting the ‘humped’ curve using Nelson-Siegel

Sasiwut Chaiyadecha
4 min readJul 27, 2022
Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

เขียนเกี่ยวกับการ Fitting curve ด้วย Statistic distribution ต่าง ๆ ไปเยอะพอสมควรแล้ว Blog ตอนนี้ขอเขียนอีก 1 วิธีการในการคำนวณค่า Lifetime PD ในช่วงเวลาที่ไกลออกไป โดยหลักการทั้งหมดยังคงคล้ายเดิมกับการ Fitting curve ปกติ ซึ่งสามารถย้อนอ่านเนื้อหาในตอนก่อนหน้านี้ เพื่อเพิ่มความเข้าใจได้ตาม Links ที่ให้ไว้ด้านล่าง

Lifetime curve

ทำไมต้องพูดถึง Lifetime curve ในเมื่อตอนก่อนหน้านี้ ได้ให้รายละเอียดไว้ค่อนข้างเยอะแล้วแล้ว เหตุผลคือการที่จะใช้ Nelson-Siegel model เพื่อมา Estimate lifetime PD ต่อไปต้องอาศัย Assumption ที่ค่อนข้าง Strong คือ Curve นั้นต้องเป็น Humped curve

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

Humped curve คือลักษณะกราฟที่ขึ้น Peak ที่สุดในช่วงปีแรก ๆ และค่อย ๆ ลดลงในช่วงปีหลัง แต่ Lifetime PD ที่ให้กราฟในลักษณะนี้มีเฉพาะในกลุ่มที่เป็น Low-Medium risk เท่านั้น กลุ่มที่เป็น High risk กราฟไม่ได้มีลักษณะเช่นนี้ สิ่งนี้คือเหตุผลที่ว่าการใช้ Nelson-Siegel model จึงตั้งอยู่บน Strong assumption

เนื้อหาของ Blog ตอนนี้เป็นการแสดงวิธีการ Fitting lifetime PD ด้วย Nelson-Siegel model ทั้งแบบหา Optimisation เอง รวมไปถึงแบบการใช้ Library แต่ก่อนอื่นต้องมี Lifetime PD Curve เพื่อเป็นตัวอย่างให้เห็นภาพที่ชัดเจนก่อน

ใช้ Lifetime จากกลุ่มที่เป็น Low-Medium risk (Aging = 1 หรือ 1–30 DPD) เพื่อให้ Curve ที่ออกมามีลักษณะ Humped ที่สุด

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

เนื่องจากข้อมูลเก็บอยู่ในลักษณะ Cumulative PD ดังนั้นผลต่างระหว่าง Period ทำให้ได้ค่าของ Marginal PD และควรได้กราฟที่มีลักษณะ Humped

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

กราฟ Marginal PD ให้ลักษณะที่ใกล้เคียง Humped curve ขั้นตอนต่อไปเป็นการใช้ Nelson-Siegel model สำหรับ Curve fitting

Nelson-Siegel by hand

อย่างที่รู้กันดีกว่า Nelson-Siegel model มีไว้ใช้สำหรับการ Fitting bond yield curve แต่สำหรับวัตถุประสงค์สำหรับ Lifetime PD Model นี้มีไว้เพื่อ Extrapolate เส้น Lifetime ให้ยาวออกไปเท่านั้น ดังนั้นจึงไม่มีส่วนใดที่เกี่ยวข้องกับ Bond yield เลย

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

แต่สิ่งที่จำเป็นต้องรู้คือสูตรของ Nelson-Siegel model ไว้เขียน Function สำหรับการ Optimisation process โดย Parameters ที่เกี่ยวข้องในสมการนี้มีทั้งหมด 4 ตัวที่เป็นค่าคงที่ทั้งหมด ได้แก่

  • β0 สามารถ Interpreted ได้ว่าคือค่าเฉลี่ย Long-run ของ Marginal PD
  • β1 คือ Short-term หรือจุดที่กราฟขึ้นสู่จุด Peak
  • β2 คือ Medium-term หรือจุดที่ค่อย ๆ Decay เข้าสู่ 0
  • τ คือตัวแปรที่กำหนด Decay function ว่าช้าหรือเร็ว

ตัวแปรที่ต้องผ่านเข้าไปในสมการ Nelson-Siegel คือ Time โดยเป็น Range ของตัวเลขตั้งแต่ 1 ไปจนถึง n คือจุดสุดท้ายของช่วงเวลาในข้อมูล เช่นหากข้อมูลมีระยะเวลาทั้งหมด 10 ปี Time คือ Array([1, 2, 3, …, 10]) เป็นต้น

เขียนเป็นฟังก์ชั่นตามสมการ Nelson-Siegel โดยที่ฟังก์ชั่นนี้มีไว้เพื่อใช้สำหรับ Optimisation process และหา Fitted values ที่ได้จาก Nelson-Siegel formula

เขียนฟังก์ชั่นสำหรับ Optimisation process โดยให้ Cost function เป็น Sum of Square Error (SSE) และทำการ Minimise error ระหว่าง Lifetime PD ค่าจริงกับค่าที่ได้จากสมการ Nelson-Siegel ด้วย Parameters ทั้งหมด 4 ตัว

Optimization terminated successfully.
Current function value: 0.000004

ค่าที่ Optimised ได้ทั้งหมด 4 ค่าคือ

Beta0: 0.0078
Beta1: 0.9051
Beta2: -0.8812
Tau: 0.3157

ใช้ Parameters ทั้งหมด 4 ตัวนี้ เพื่อ Estimate lifetime PD เพิ่มเติมจากเดิมไปอีก 5 ปี (5 จุดเวลา) ผลลัพธ์ที่ออกได้คือตามกราฟด้านล่าง

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

กราฟที่ออกมามีความใกล้เคียงกับค่าจริงมาก ๆ และสามารถใช้ Pattern เดิมที่เกิดขึ้นเพื่อ Estimate ค่าในปีต่อ ๆ ไปได้เพิ่มเติม

Nelson-Siegel by library

ที่ผ่านมาเป็นการเขียน Optimisation process เอง ซึ่งถือว่าไม่ได้ซับซ้อนมากเท่าไหร่ สามารถทำบน Excel ได้สบาย ๆ แต่ก็มี Library ที่ใช้งานง่ายกว่า(นี้) มีไว้เพื่อ Nelson-Siegel model โดยเฉพาะ Library นี้มีชื่อว่า nelson-siegel-svensson

สามารถอ่านวิธีการใช้งานเพิ่มเติมได้จาก Link ด้านล่าง เพราะจริง ๆ แล้วสามารถประยุกต์ใช้งานได้หลากหลาย

แต่สำหรับเนื้อหาของ Blog ตอนนี้ สิ่งที่เขียนมายาว ๆ ทั้งหมด สามารถสรุปจบได้ด้วย Code chunk เดียวสั้น ๆ ตามที่เขียนไว้ด้านบน เพียงแค่ใส่ Array ของ Time ตามที่ได้อธิบายไว้ด้านบน และ Array ของ Lifetime PD เข้าไปใน calibrate_ns_ols() และ Initial tau ด้วย 1.0 ผลลัพธ์ที่ได้คือ Parameters ทั้ง 4 ตัวตามสมการ Nelson-Siegel

NelsonSiegelCurve(beta0=0.00685198194788415, beta1=-0.21982669498720553, beta2=0.40554757914573364, tau=0.44088944423356746)

ลอง Plot ค่าที่เกิดจากการ Fitting ด้วย Optimisation process และค่าที่ได้จาก Library เห็นได้ว่าแม้ว่า Parameters ที่หาออกมาได้มีความแตกต่างกันในเชิงตัวเลข แต่ผลลัพธ์ที่ได้สอดคล้องกับค่าจริง

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

ลอง Extend period เพิ่มอีก 5 ปี และ Plot เปรียบ Nelson-Siege ระหว่าง 2 Models ก็ยังให้ผลลัพธ์ที่สอดคล้องกันใน Prediction period

Nelson-Siegel fitting curve for PD Lifetime model มาตรฐานบัญชี TFRS 9 แบบจำลอง TFRS 9 แบงค์ชาติ Bank of Thailand BOT forward-looking information lifetime PD Observed Default Rate ODR Rating model unbias PD Model Default rate NPL Ratio Point in Time PD (PiT PD) Through The Cycle (TTC PD) nelson-siegel svensson Optimisation process scipy Humped curve Bond yield curve Decay function long-run average

Conclusion

วิธีการ Fitting ด้วย Nelson-Siegel ถือว่าเป็นวิธีการที่ค่อนข้าง Extreme เพราะต้องอยู่บนสมมติฐานที่ว่า Lifetime PD ต้องมีลักษณะเป็น Humped curve เพื่อให้เกิดการ Fitting ได้ดีที่สุด ความสมมติฐานนั้นอาจไม่จริงเสมอไป โดยเฉพาะอย่างยิ่งในกลุ่ม High risk ที่ Lifetime PD ไม่มีลักษณะเป็น Humped curve อย่างแน่นอน แต่กลับมีลักษณะเป็น Downward slope trend มากกว่า ดังนั้นการใช้ Nelson-Siegel model อาจต้องเตรียม Defend ตัวเองเยอะพอสมควร

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

--

--