diff --git a/main.py b/main.py index a4ff673..795b4c1 100644 --- a/main.py +++ b/main.py @@ -36,8 +36,9 @@ from tabulate import tabulate # 프로젝트 모듈 from data.transition_matrices import ( load_transition_matrices, compute_ttc_matrix, - get_default_rates, display_matrix, RATING_GRADES + get_default_rates, display_matrix, RATING_GRADES, RATING_GRADES_8 ) +from data.ccc_interpolator import expand_to_8x8 from data.macro_data import load_macro_data, _fallback_macro_data, compute_derived_features from models.credit_cycle import estimate_zt_series, estimate_rho_and_zt from models.vasicek import conditional_pd, worst_case_pd @@ -227,7 +228,12 @@ def main(): print(" [5/7] 50년 Lifetime PD 산출") print("=" * 70) - pd_engine = LifetimePDEngine(ttc_matrix, rho) + # 7x7 TTC -> 8x8 TTC (CCC interpolation) + ttc_8x8 = expand_to_8x8(ttc_matrix) + print(f"\n 7x7 TTC -> 8x8 TTC (CCC interpolated)") + print(display_matrix(ttc_8x8, "TTC 8x8 (CCC interpolated)")) + + pd_engine = LifetimePDEngine(ttc_8x8, rho, rating_grades=RATING_GRADES_8) pd_results = pd_engine.compute_all_scenarios(z_paths, weights, horizon) # 누적 PD 테이블 @@ -244,8 +250,8 @@ def main(): # Vasicek Worst-Case 비교 print("\n === Basel II Worst-Case PD (99.9% VaR) ===") - ttc_pds = ttc_matrix[:-1, -1] - for i, grade in enumerate(RATING_GRADES[:-1]): + ttc_pds = ttc_8x8[:-1, -1] + for i, grade in enumerate(RATING_GRADES_8[:-1]): wc = worst_case_pd(ttc_pds[i], rho) print(f" {grade}: TTC={ttc_pds[i]*100:.3f}% → WC={wc*100:.3f}%")