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 (
|
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}%")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user