feat(pipeline): wire 7x7 Zt + 8x8 CCC expansion into main.py lifetime PD
This commit is contained in:
14
main.py
14
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}%")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user