feat(pipeline): wire 7x7 Zt + 8x8 CCC expansion into main.py lifetime PD

This commit is contained in:
Variet Agent
2026-03-11 16:19:58 +09:00
parent a406d98226
commit a4c9a702ad

14
main.py
View File

@@ -36,8 +36,9 @@ from tabulate import tabulate
# 프로젝트 모듈 # 프로젝트 모듈
from data.transition_matrices import ( from data.transition_matrices import (
load_transition_matrices, compute_ttc_matrix, 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 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.credit_cycle import estimate_zt_series, estimate_rho_and_zt
from models.vasicek import conditional_pd, worst_case_pd from models.vasicek import conditional_pd, worst_case_pd
@@ -227,7 +228,12 @@ def main():
print(" [5/7] 50년 Lifetime PD 산출") print(" [5/7] 50년 Lifetime PD 산출")
print("=" * 70) 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_results = pd_engine.compute_all_scenarios(z_paths, weights, horizon)
# 누적 PD 테이블 # 누적 PD 테이블
@@ -244,8 +250,8 @@ def main():
# Vasicek Worst-Case 비교 # Vasicek Worst-Case 비교
print("\n === Basel II Worst-Case PD (99.9% VaR) ===") print("\n === Basel II Worst-Case PD (99.9% VaR) ===")
ttc_pds = ttc_matrix[:-1, -1] ttc_pds = ttc_8x8[:-1, -1]
for i, grade in enumerate(RATING_GRADES[:-1]): for i, grade in enumerate(RATING_GRADES_8[:-1]):
wc = worst_case_pd(ttc_pds[i], rho) wc = worst_case_pd(ttc_pds[i], rho)
print(f" {grade}: TTC={ttc_pds[i]*100:.3f}% → WC={wc*100:.3f}%") print(f" {grade}: TTC={ttc_pds[i]*100:.3f}% → WC={wc*100:.3f}%")