การแก้ไข PD Curves ที่มี Observation จำกัดด้วย Reference curves
ถ้าข้อมูลจริงมีจำกัด แต่อยากสร้าง PD Curves ต้องทำยังไง?
คิดเอาไว้ว่าตอน PD Calibration ควรเป็นตอนจบของการสร้าง PD Curves จาก Survival analysis แล้ว แต่ก็ยังมีเรื่องที่ต้องให้เขียนต่ออีก เพราะนึกขึ้นได้เกี่ยวกับเรื่อง Data limitation ที่มักเกิดขึ้นได้บ่อยสำหรับการทำ Survival analysis
เนื้อหาของ Blog ตอนนี้เป็นหนึ่งในวิธีการที่ใช้แก้ปัญหา ในกรณีที่เกิด Data limitation ขึ้นระหว่างการพัฒนา Survival analyisis
Limitation
Limitation ที่ว่าเกิดจากการแบ่งจุด Observation ด้วยเหตุผลต่าง ๆ จนบางครั้งทำให้ Curves ที่สร้างขึ้นมาไม่สามารถ Observe ด้วยเวลาที่นานพอได้ เช่น สมมติให้ข้อมูลมีตั้งแต่ปี 2010 ถึงปี 2019 แต่กำลังมองว่าข้อมูลที่เกิดขึ้นหลังจากปี 2017 มี Risk pattern ที่เปลี่ยนไป ดังนั้นข้อมูลหลังจากปี 2017 จึงไม่ควรนำไปรวมกับข้อมูลก่อนปี 2017
จากตัวอย่างนี้แล้ว ทำให้ข้อมูลแบ่งออกเป็น 2 ช่วงคือก่อนปี 2017 (Pre-2017) ซึ่งไม่ได้เป็นปัญหาอะไร เพราะยังสามารถ Observe ตั้งแต่ปี 2010 ได้จนถึงปี 2019 ส่วนข้อมูลหลังจากปี 2017 (Post-2017) ที่มีปัญหาเพราะว่าเหลือระยะเวลาในการสร้าง Curves เพียงแค่ 2 ปีเท่านั้นคือ
- 2 ปีสำหรับ Observation year ที่ 2017
- 1 ปีสำหรับ Observation year ที่ 2018
สำหรับข้อมูลปี 2019 ไม่ได้นำมาเป็นจุด Observation เพราะมี Time period ไม่ครบ ซึ่งรายละเอียดในการสร้างและอ่านตารางลักษณะนี้ สามารถอ่านย้อนได้จากตอนที่เคยเขียนไว้แล้วที่นี่ ทั้งหมดนี้คือตัวอย่างของ Data limitation ที่เจอได้บ่อย
Solution
สำหรับแนวทางการแก้ไขปัญหา ขอเขียนสรุปรวมไว้ตรงนี้ ก่อนที่นำวิธีการทั้งหมดไปเขียนเป็น Coding อีกรอบ เริ่มจากแบ่ง Population ตามที่อธิบายไว้ด้านบน
จากนั้นให้พิจารณา Risk grades ว่ามีการแบ่งย่อยลงไปอีกหรือไม่ เพราะเนื่องจาก Observation year ที่ค่อนข้างสั้น อาจทำให้จำนวน Sample ตาม Risk grades มีน้อยลงไปอีก ซึ่งอาจทำให้ค่า PD Curves เกิดความ Sensitive ได้ง่าย ดังนั้นในขั้นแรกนี้ จึงอยากแนะนำให้รวม Pool กันในแต่ละปีก่อน
เมื่อรวม Pool กันแล้ว ได้ข้อมูลออกมาเป็น PD Curves ทั้งหมด 2 เส้น ตามแต่ละปีคือ 2017 และ 2018 จากนั้นให้ทำการต่อเส้นของปี 2018 จากเดิมที่มีความยาวเพียง 1 ปีหรือ 12 เดือน ให้มีความยาวเท่ากันเส้นที่ยาวที่สุด หรือคือ 2 ปี (24 เดือน) ตาม Risk pattern ที่เคยเกิดขึ้น ซึ่งการต่อเส้นสามารถทำได้ด้วยวิธี Chain Ladder ที่เคยเขียนไว้แล้วใน Blog ตอนนี้
เมื่อได้เส้นที่ยาวเท่ากันแล้ว ให้ทำการ Weighted average หาค่าเฉลี่ยออกมาเป็น Curve 1 เส้น เพื่อทำการ Extrapolation ต่อไป
หาเส้นที่สามารถใช้เป็น Reference curves ได้ โดยทางเลือกในการพิจารณาอาจเป็นค่า PD ที่ใกล้เคียงกัน หรือลักษณะ Curves ที่เหมือนกัน หรือมี Internal data ที่สามารถ Leverage ได้ด้วย Risk characteristics ก็สามารถนำมาเป็น Reference ได้เช่นกัน จากนั้นใช้วิธีการ Central Tendency ในการ “ต่อหาง” จากข้อมูลที่เคยมีเพียง 2 ปี ให้กลายเป็นความยาวตาม Reference curves
ขั้นตอนสุดท้ายเป็นการทำ PD Segmentation ให้กลับมาเป็นเหมือนเดิม คือการกระจายเส้น Average ที่ Extrapolate เรียบร้อยแล้ว กลับให้เท่ากับ PD Segmentation เดิมที่มีทั้งหมด 4 Risk grades ซึ่งสามารถใช้วิธี Central Tendency ได้เช่นเดิม
ที่อธิบายมาทั้งหมดเป็นการเพียง 1 วิธีจากหลาย ๆ วิธีที่ใช้สำหรับการต่อเส้นในกรณี Limited data ได้ Section ต่อไปเป็นการรวมเอาสิ่งที่อธิบายมาทั้งหมด ไปเขียนเป็น Python ซึ่งแทบจะทุกอย่างเคยเขียนไว้หมดแล้ว มันอาจเป็นเพียงการเรียงลำดับใหม่เท่านั้นเอง
Code
ข้อมูลที่ใช้เป็นข้อมูลชุดเดิมที่ไม่เคยมีปัญหาอะไร แต่ถูกเอามาทำให้มีปัญหา ข้อมูลที่ว่าคือข้อมูลชุดเดียวกันกับที่ใช้ Develop survival analysis ขึ้นมาตั้งแต่แรก สามารถย้อนกลับไปอ่านได้จากตอนนี้ นำข้อมูลมา “ตัด” เป็นช่วงก่อนและหลังปี 2017 เพื่อที่ต้องการใช้งานเฉพาะหลังปี 2017 เท่านั้น
เริ่มจากการ Plot ข้อมูลให้ดูว่าข้อมูลที่ตัดออกมา มีสิ่งที่ต้องแก้ไขอะไรบ้าง เช่น จำนวนปีที่ยังขาดที่ Observation year ที่ 2018 เป็นต้น
Plot PD Curves แบ่งตาม Risk grades ซึ่งในที่นี้คือ Aging และแบ่งออกตาม Observation year เพื่อให้เห็นว่าที่ปี 2018 มีความยาวของเส้น สั้นกว่าปี 2017 อยู่ทั้งหมด 12 เดือน ดังนั้นจึงต้องมีการต่อเส้น
จริง ๆ แล้วดูจากข้อมูลจำนวน Sample ในการสร้าง Curves ไม่ได้มีปัญหาเรื่องข้อมูลน้อย เพราะการแบ่ง PD Segmentation ไม่ได้แบ่งเยอะจนเกินความจำเป็น แต่เพื่อแสดงให้เห็นว่าในกรณีที่มีข้อมูลน้อย การ “รวมเส้น” ก็ถือเป็นการทางเลือกที่ดี เพื่อให้เกิดความ Stable มากขึ้นใน Model
การรวมเส้นที่ว่าเป็นการรวม Risk grades จากเดิมที่มีทั้งหมด 4 Aging (0, 1, 2, 3) ให้เหลือเป็นเส้นเดียวด้วย Weighted average แต่ทั้งนี้ยังต้องระวังเรื่อง Unequal weights sample หมายความว่าข้อมูลปี 2017 และ 2018 ยังไม่สามารถ Weight กันได้ตรง ๆ เพราะจำนวน Observation ยังไม่เท่ากันอยู่ ดังนั้นให้เริ่มรวมที่ Risk grades level และแบ่งออกเป็นตามปี
Plot แสดงให้เห็นว่า PD Curves ของแต่ละปี ยังคงมีความยาวไม่เท่ากันอยู่ เพื่อป้องกันปัญหาการเกิด Unequal weights sample
การต่อเส้นยังคงใช้วิธีการเดิมคือ Chain Ladder ซึ่งใน Blog ตอนนี้ขอไม่ลงรายละเอียด เพราะเนื้อหาเรื่อง Chain Ladder พร้อมวิธีการ Implement ใน Python เคยเขียนไว้แล้วที่นี่
เมื่อต่อเส้นด้วย Chain Ladder แล้ว จะได้เป็นทั้งสองที่มีความยาวเท่ากัน และสามารถหา Weighted average ได้โดยที่ไม่เกิดปัญหา Unequal weights sample แล้ว
ผลลัพธ์ที่ได้มาถึงตรงนี้คือ PD Curves ของช่วงปีหลัง 2017 ทั้งหมด 1 เส้นตามละแต่ Segment ต่อไปเป็นการหา Reference curves เพื่อมาต่อให้เส้นปีหลัง 2017 มีความยาวมากขึ้น ซึ่งสามารถใช้ได้ตั้งแต่ Curves ที่มี Risk characteristics ที่คล้ายกัน ไปจนถึง Curves ที่มีค่า PD ใกล้ ๆ กัน หรือ Curves ที่มี Slope ไปในทิศทางเดียวกัน ใน Blog ตอนนี้ขอใช้เป็น Reference curves จาก Moody’s rating B3 และ B2 ตามลำดับ
อาจไม่ได้เหมือนกันซะทีเดียว แต่ค่า PD ในช่วงที่มีข้อมูลคือ 2 ปีแรก ยังพอมีค่าใกล้กันอยู่บ้าง ดังนั้นจึงใช้ 2 เส้นนี้ เพื่อทำให้ความยาวจาก 24 เดือนเป็นทั้งหมด 72 เดือน
วิธีการที่ใช้ต่อเส้นมีมากมาย แต่ Blog ตอนนี้ยังใช้เป็นวิธีเดิมที่เคยเขียนไว้แล้วคือ Central Tendency (CT) โดยที่หลักการยังเหมือนเดิม แต่เปลี่ยน Target จากเดิมที่เคยเป็น 12-Month PD ให้เป็นค่าของ Reference curves ณ เดือนสุดท้ายข้อมูลจริงที่มี หมายความว่าถ้าข้อมูลจริงมีทั้งหมด 24 เดือน ให้ใช้จุดที่ 24 ของ Reference curves เป็น Target นอกนั้นยังคงหลักการเดิม
จากเดิม PD Curves ที่เคยสั้นอยู่ที่ 24 เดือน จะมีความยาวเป็น 72 เดือน ตามความยาวของ Reference curves ขอทำการ Plot compare กับ Reference curves เดิม เพื่อให้เห็นความแตกต่าง
เห็นได้ว่าหลักการต่อเส้นเป็นการใช้รูปแบบหรือ Pattern ของเส้น Reference เท่ากัน และใช้ข้อมูลจริงให้มากที่สุด เพื่อเลียนแบบค่า PD ในช่วงเวลาที่ไกลออกไป
ขั้นตอนสุดท้ายเป็นการ Re-calibrate เพื่อให้เส้น Average ที่มีกระจายกลับไปในแต่ละ Risk grades เหมือนเดิม ซึ่งในตอนแรกช่วงปีหลัง 2017 มีทั้งหมด 4 Risk grades ตามแต่ละ Aging วิธีการยังคงเหมือนเดิมคือการใช้ CT กระจายค่า PD กลับลงไป
สุดท้ายผลลัพธ์ที่ออกมาคือ PD Curves ช่วงหลังปี 2017 แต่เดิมที่เคยมี Constain เรื่องความสั้นของข้อมูล ตอนนี้ได้เป็นเส้นที่มีความยาวมากขึ้นแล้ว หรือถ้าแต่เดิมที่อาจมี Issue เรื่องจำนวน Sample ที่มีน้อยเกินไป จนอาจเกิดความไม่ Stable ก็ทำออกมาให้ Stable แล้ว และยัง Remain risk grades level ให้ครบเหมือนเดิมได้
Conclusion
ตอนนี้เหมือนไม่ค่อยได้อธิบาย Code เท่าไหร่ นั่นเป็นเพราะว่า Code ทั้งหมดเคยเขียนไว้หมดแล้วใน Blog ตอนก่อน ๆ ตอนนี้เป็นเหมือนการเรียงลำดับใหม่ เพื่อช่วยให้ผ่าน Limitation เรื่องของ Data ไปได้ และทำให้ Model มีความสมเหตุสมผลมากที่สุด ก่อนไปถึง Step ถัดไป ซึ่งเนื้อหาทั้งหมดของ Blog ตอนนี้ก็จบลงที่ตรงนี้ด้วยเช่นกัน
สำหรับ Colab notebook สามารถติดตามได้ที่ Link ด้านบน