Files
LifetimePD/docs/methodology.md

502 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lifetime PD (50년) - 이론적 방법론 상세 문서
> **목표**: 한국 신용등급 전이행렬과 거시경제변수를 결합하여, 미래 경기를 반영한 50년 Lifetime PD를 호황/불황/중립 시나리오별로 산출
---
## 1. 전체 논리 흐름
```
[한국 3사 PDF (한국기업평가/NICE/한신평)]
[전처리: WR 제거 → B이하→B 매핑 → PD 플로어 적용 → 7×7 (AAA~B+D)]
[TTC 전이행렬 산출 (전 기간 평균, 7×7)]
[Belkin & Suchower: Zt 추정 (WLS)] ← [TTC 임계값 (Φ⁻¹)]
[CCC 행/열 보간 (B↔D 사이 PD 보간) → 8×8 완성]
[Zt ~ 거시변수 회귀모형 (OLS + Stepwise)] ← [BOK ECOS 거시경제변수]
[미래 시나리오 (호황/중립/불황)] → [Zt 경로 + Mean-Reversion]
[Vasicek 조건부 전이행렬 (연도별)]
[순차 행렬 곱 → 50년 누적/한계 PD]
[확률 가중평균 PD Term Structure]
[통계적 검증 (ADF, Ljung-Box, R², ARCH)]
```
---
## 2. 단계별 상세 이론
### 2.0 3사 전이행렬 전처리 파이프라인
한국 3사 PDF에서 추출된 원시 전이행렬은 그대로 사용할 수 없습니다. 아래 6단계 전처리를 거쳐 모형에 투입합니다.
#### 원시 데이터 구조
3사(한국기업평가, NICE, 한신평)의 PDF 전이행렬은 다음 형태입니다:
```
6행(AAA, AA, A, BBB, BB, B이하) × 8열(AAA, AA, A, BBB, BB, B이하, D, WR)
```
- **CCC 등급**은 한국 시장에서 발행체 수가 극소하여 별도 행이 존재하지 않음
- **WR(등급취소)** 열이 포함되어 있어 행 합이 100%가 되지 않을 수 있음
#### Step 1: PDF 파싱 → 6×8 추출
`data/parse_pdf_matrices.py`에서 pdfplumber를 사용하여 3사 PDF에서 연도별 6×8 행렬을 추출합니다.
- 각 기관별 파서 사용 (KR: 텍스트 기반, NICE: 텍스트 기반, SCI: 테이블 기반)
- 추출된 행렬의 행합 유효성 검증 (30~110% 범위)
#### Step 2: WR -> D PD 플로어 보정 + 쟔여 WR 비례 재배분
WR(등급취소)을 단순 제거하면 부도율이 과소추정됩니다(등급취소 직전 부도 위험). 신규 방법론:
1. **PD 플로어 보정**: 관측 PD < 기준 PD이면, WR에서 부족분을 D열로 이전
2. **쟔여 WR 재배분**: 남은 WR을 나머지 등급에 확률 비례 재배분
```
if PD_{observed} < PD_{floor}:
deficit = PD_{floor} - PD_{observed}
transfer = min(deficit, WR)
D += transfer
WR -= transfer
# Remaining WR -> proportional redistribution
p_{ij} = p_{ij} * (sum_non_WR + WR_remaining) / sum_non_WR
```
#### Step 3: B이하 → B 매핑
3사 원본에서 "B이하" 범주를 모형의 B등급에 매핑합니다.
결과: 6×7 (AAA, AA, A, BBB, BB, B × AAA~D)
#### Step 4: D행 추가 → 7×7
D(부도)는 흡수상태로 고정합니다:
```
D행 = [0, 0, 0, 0, 0, 0, 1]
```
결과: **7×7 (AAA, AA, A, BBB, BB, B, D)** — 이 행렬로 Zt 추정을 수행합니다.
#### Step 5: PD 플로어 적용 (KAP 시장 YTM 기반)
한국 시장에서 AAA~A 등급의 관측 부도율이 0%인 경우가 대부분입니다. 이는 모집단이 작아 극소확률 이벤트가 관측되지 않은 것일 뿐, 부도 위험이 0이라는 의미가 아닙니다.
**KAP 시장 YTM 기반 PD 플로어** (2025-12-31 기준):
| 등급 | 신용스프레드 (bp) | 시장내재 PD | AAA 앵커링 후 PD 플로어 | 방법 |
|------|:---:|:---:|:---:|------|
| AAA | 3.5 | 0.6bp | **5.0bp** | 앵커 (Basel III) |
| AA | 5.3 | 0.9bp | **7.0bp** | 로그 스케일링 |
| A | 17.7 | 2.9bp | **15.0bp** | 로그 스케일링 |
| BBB | 129 | 21.5bp | **92.7bp** | 로그 스케일링 |
| BB | - | (외삽) | **160.7bp** | 로그 트렌드 외삽 |
| B | - | (외삽) | **416.4bp** | 로그 트렌드 외삽 |
- **데이터 출처**: KAP(한국자산평가) 공모회사채 1년 YTM
- **LGD**: 60% (회수율 40%, 한국 시장 기준)
- **AAA 앵커**: 5bp (Basel III CRE30.4)
- **스케일링**: `PD_floor_i = exp(log(PD_raw_i) * scale)`, `scale = log(5bp) / log(PD_raw_AAA)`
- **투기등급**: BBB- 마지막 관측점에서 로그 트렌드 외삽
상세 출처: docs/pd_floor_reference.md 참조
#### Step 6: CCC 행/열 보간 → 8×8 완성
Zt 추정 완료 후, B등급과 D등급 사이를 보간하여 CCC 행/열을 생성합니다:
```
PD_CCC = interpolate(PD_B, PD_D=1.0)
```
- CCC의 PD는 B의 PD와 D의 PD(=100%) 사이에서 보간
- CCC의 전이확률 분포도 B행과 D행의 패턴에서 보간
- 이렇게 생성된 8×8 행렬이 최종 조건부 전이행렬 산출에 사용됩니다
#### 왜 CCC 없이 Zt를 추정하는가?
1. **통계적 신뢰도**: 한국 시장에서 CCC 등급 발행체가 극소수이므로 관측 전이확률의 표본오차가 매우 큼
2. **순환 논리 방지**: fabricated CCC 데이터로 Zt를 추정하면, 가짜 데이터가 모형 파라미터에 영향
3. **파이프라인 정합성**: 관측 데이터(7×7)로 Zt 추정 → 모형 기반 보간(CCC)으로 확장하는 것이 이론-실무 분리 원칙에 부합
---
### 2.1 Through-The-Cycle (TTC) 전이행렬
**왜 TTC가 필요한가?**
연도별 전이행렬은 해당 연도의 경기 상황에 영향을 받아 변동합니다. TTC 전이행렬은 이러한 경기 변동을 평균화하여 "장기 균형" 상태의 전이확률을 나타냅니다. 이것이 Belkin & Suchower 모형에서 **기준점(anchor)** 역할을 합니다.
**산출 방법:**
```
TTC_{ij} = (1/T) × Σ_{t=1}^{T} TM_{ij}(t)
```
T개 연도의 단순 산술평균 후 행 합이 1이 되도록 재정규화합니다. §2.0의 전처리를 거친 7×7 행렬에 대해 TTC를 산출합니다.
**논리적 근거:**
- Basel II IRB 프레임워크: PD 추정은 "경기 사이클 전체를 포괄하는 장기 평균"이어야 함 (BCBS §452)
- Moody's/S&P 방법론: 장기 평균 전이행렬을 TTC 기준으로 사용
---
### 2.2 Belkin & Suchower (1998) — 신용사이클 인덱스 Zt
**핵심 가정 (Merton-Vasicek 프레임워크):**
차입자 i의 자산가치 변화를 표준정규 확률변수 X_i로 모델링합니다:
```
X_i = √ρ × Z + √(1-ρ) × Y_i
```
여기서:
- **Z** ~ N(0,1): 체계적 요인 (Systematic Factor) — 모든 차입자에 공통
- **Y_i** ~ N(0,1): 개별적 요인 (Idiosyncratic Factor) — 차입자 고유
- **ρ**: 자산상관계수 (Asset Correlation) — 체계적 요인의 설명력
- Z와 Y_i는 상호 독립
**왜 이 분해가 필요한가?**
1. 부도율의 시간적 변동은 개별 기업의 고유 위험뿐 아니라, 경기 상황이라는 공통 요인에도 의존합니다
2. 이 공통 요인 Z를 분리하면, 특정 경기 상황(Z=z)에서의 "조건부 부도율"을 계산할 수 있습니다
3. 이것이 IFRS 9의 "미래 전망 정보(forward-looking)" 반영의 수학적 기초입니다
**임계값(Threshold) 산출:**
TTC 전이행렬의 누적확률로부터 등급 경계 임계값을 도출합니다:
```
d_{i,j} = Φ⁻¹( Σ_{k≤j} TTC_{i,k} )
```
- Φ⁻¹: 표준정규분포의 역함수
- 이 임계값은 "신용도 X_i가 특정 값 이하로 떨어지면 해당 등급으로 이동"한다는 구조적 모형의 경계입니다
**Z-조건부 전이확률:**
체계적 요인 Z가 주어진 상태에서의 전이확률 (Belkin convention: Z>0 = 호황):
```
p_{ij}(Z) = Φ( (d_{i,j} + √ρ × Z) / √(1-ρ) ) - Φ( (d_{i,j-1} + √ρ × Z) / √(1-ρ) )
```
**부호 규약 주의**: 본 프로젝트는 Belkin convention(Z>0=호황)을 사용하여 `d + √ρ·Z`입니다.
Basel/Vasicek convention(Z>0=불황)에서는 `d - √ρ·Z`이며, 두 규약은 Z의 부호만 다릅니다.
- Z > 0 (호황): 누적확률 증가 → 높은 등급 쪽으로 확률 이동 → 부도율 감소
- Z < 0 (불황): 누적확률 감소 → 낮은 등급 쪽으로 확률 이동 → 부도율 증가
- Z = 0: TTC 전이확률 복원 (무조건부 = 조건부의 기대값)
**Zt 추정 (가중최소자승법, WLS):**
연도 t의 관측 전이행렬 TM^obs(t)과 모형 예측 전이행렬 TM^model(Z)의 괴리를 최소화하는 Z_t를 추정합니다:
```
Ẑ_t = argmin_Z Σ_{i,j} w_{ij} × [ p_{ij}^obs(t) - p_{ij}^model(Z) ]²
```
가중치 w_{ij}:
- 부도 전이확률(D열): 10배 가중 — 부도율이 가장 중요한 리스크 지표
- 대각 원소(잔류확률): 5배 가중 — 안정성 지표로서 중요
- 기타: 1배 — 세부 전이는 상대적으로 덜 중요
**추정 결과 해석:**
- Zt > 0: 해당 연도는 "좋은 해" — 관측 부도율이 TTC보다 낮음
- Zt < 0: 해당 연도는 "나쁜 해" — 관측 부도율이 TTC보다 높음
- |Zt|의 크기: 경기 편차의 강도 (표준편차 단위)
---
### 2.3 자산상관계수 ρ
**ρ의 의미:**
ρ는 차입자들의 자산수익률이 공통 경기 요인에 의해 얼마나 동시에 움직이는지를 나타냅니다:
- ρ → 0: 분산 완전 — 개별 위험만 존재, 경기 영향 없음
- ρ → 1: 완전 상관 — 모든 차입자가 동일하게 반응
**Basel IRB 기준:**
- 기업 대출: ρ = 0.12 ~ 0.24 (PD에 따라 역의 관계)
- 본 모형 기본값: ρ = 0.20 (한국 기업부문 중앙값)
**ρ 추정 방법:**
NLS(비선형최소자승법)으로 ρ와 Zt를 동시 추정할 수 있습니다:
```
(ρ*, {Zt*}) = argmin_{ρ,{Zt}} Σ_t Σ_{i,j} w_{ij} × [ p_{ij}^obs(t) - p_{ij}^model(Zt, ρ) ]²
```
외부 루프: ρ 탐색 (bounded, 0.05~0.50)
내부 루프: 각 연도별 Zt 추정 (ρ 고정)
---
### 2.4 Vasicek 단일팩터 모델 — PIT PD
**TTC PD → PIT PD 변환:**
Vasicek 공식은 Belkin & Suchower의 특수한 경우로, 부도율만을 집중적으로 다룹니다:
```
PD_PIT(Z) = Φ( (Φ⁻¹(PD_TTC) + √ρ × Z) / √(1-ρ) ) [Belkin: Z>0=호황]
PD_PIT(Z) = Φ( (Φ⁻¹(PD_TTC) - √ρ × Z) / √(1-ρ) ) [Basel: Z>0=불황]
```
본 프로젝트에서는 Belkin convention(`+√ρ·Z`)을 주로 사용합니다. 이 공식은 다음을 의미합니다:
1. PD_TTC: 장기 평균 부도율 — 경기 중립(Z=0)에서의 부도율
2. Φ⁻¹(PD_TTC): 부도 임계값을 표준정규 공간으로 변환
3. √ρ × Z: 경기 요인이 임계값을 이동시킴
4. √(1-ρ)로 나눔: 개별 요인의 분산으로 정규화
**수치 예시 (BBB 등급, PD_TTC = 0.38%, ρ = 0.20):**
| 시나리오 | Z값 | PD_PIT | 배수 |
|----------|------|--------|------|
| 심각한 호황 | +2.0 | 0.04% | 0.1× |
| 보통 호황 | +1.0 | 0.13% | 0.3× |
| 중립 | 0.0 | 0.38% | 1.0× |
| 보통 불황 | -1.0 | 0.96% | 2.5× |
| 심각한 불황 | -2.0 | 2.19% | 5.8× |
**논리적 근거:**
- IMF (2021): IFRS 9/CECL 호환 스트레스 테스트에서 Vasicek 공식 사용
- ECB: 금융안정성 평가에서 단일팩터 모형 기반 PIT PD 산출
- Fed DFAST/CCAR: 스트레스 시나리오에서 PD 조정 시 유사 구조 적용
---
### 2.5 거시연계 회귀모형: Zt ~ 거시변수
**왜 거시변수와 연결하는가?**
Zt는 "신용사이클"이라는 추상적 개념입니다. 이를 관측 가능한 거시경제변수로 설명하면:
1. **해석 가능성**: Zt의 변동 원인을 이해할 수 있음
2. **예측 가능성**: 거시 전망치(IMF WEO, KDI 등)를 입력하면 미래 Zt를 예측할 수 있음
3. **시나리오 분석**: "만약 GDP가 -2%이고 실업률이 5%이면?"이라는 질문에 답할 수 있음
**변수 풀 (37개 ECOS 변수):**
BOK ECOS 100대 통계지표 및 주요 거시경제변수 37개를 후보 풀로 구성:
- 성장(GDP성장률), 고용(실업률, 고용률), 금리(기준금리, CD, 국고채3Y/10Y, 회사채AA/BBB)
- 물가(CPI, 수입물가, 생산자물가), 경기지수(선행/동행), 심리(CSI, BSI)
- 생산(광공업, 서비스업), 교역(수출/수입, 수출입대GNI비율)
- 환율(원/달러), 통화(M2), 부도(어음부도율/금액), 주식(KOSPI)
- 부동산(주택매매가격), 가계(가계부채)
- 투자(설비투자, 건설투자증감률, 총고정자본형성, 총저축률, 국내총투자율)
- 제조업(평균가동률)
**모형 구조 (3변수 강제 지정):**
37개 변수에서 3변수 조합 7,770개를 전수 탐색(exhaustive search)하여,
**부호 일관성**을 만족하는 최적 조합을 선택:
```
Z_t = β₀ + β₁·USDKRW_t + β₂·RETAIL_SALES_t + β₃·INVEST_RATE_t + ε_t
```
| 변수 | 구분 | 계수 부호 | 경제적 근거 |
|------|------|:---------:|------------|
| USDKRW | 환율 (원/달러) | | 원화 약세 → 외국인 자본유출, 수입원가 상승 → 기업 부담↑ → Zt↓ |
| RETAIL_SALES | 소매판매액지수 | + | 내수 소비 활성화 → 기업 매출·수익성↑ → Zt↑ |
| INVEST_RATE | 국내총투자율 (%) | + | 투자 확대 → 경기 확장 → 부도 감소 → Zt↑ |
- **R² = 0.43** (비표준화), **7/8 검증 통과**
- 3변수는 각각 **외부충격(환율)**, **내수(소비)**, **투자(자본형성)**을 대표
**왜 3변수인가?**
- 26개 연간 관측치로는 과적합(overfitting) 방지를 위해 설명변수를 최소화해야 함
- 경험칙: 관측치 수 / 변수 수 ≥ 8 (26/3 ≈ 8.7)
- 3변수는 환율·소비·투자라는 서로 다른 경기 측면을 포착
**왜 OLS인가?**
- 26개 연간 관측치로는 VAR, VECM 등 복잡한 시계열 모형의 자유도가 부족
- OLS는 소표본에서도 BLUE(Best Linear Unbiased Estimator) 조건 하에서 최적
- 잔차 진단으로 OLS 가정 위반 여부를 검증
---
### 2.6 통계적 검증 (엄밀한 관점)
#### (a) ADF (Augmented Dickey-Fuller) 검정 — Zt 정상성
```
H₀: Zt에 단위근이 존재 (비정상 시계열)
H₁: Zt는 정상 시계열
```
Zt가 비정상이면 회귀분석의 t-통계량과 R²가 거짓 결과를 낼 수 있습니다 (허위 회귀).
**본 모형 결과: p = 0.0000 → 정상 시계열 확인 (Pass)**
#### (b) Shapiro-Wilk 검정 — Zt 정규성
Belkin & Suchower (1998)는 Z ~ N(0,1)을 가정합니다. 추정된 Zt가 정규분포를 따르는지 확인합니다.
**본 모형 결과: p = 0.0017 → 비정규 (Fail)**
이는 IMF 위기, GFC, COVID 등 극단적 사건으로 인한 비대칭 분포 때문입니다. Belkin 원논문에서도 이 한계를 인정하고 있으며, 실무적으로는 심각한 문제가 아닙니다.
#### (c) Durbin-Watson / Ljung-Box — 잔차 자기상관
```
H₀: 잔차에 자기상관이 없음
DW ≈ 2이면 자기상관 없음
Ljung-Box: p > 0.05이면 자기상관 없음
```
잔차에 자기상관이 존재하면 OLS 표준오차가 과소추정되어 유의성 검정이 왜곡됩니다.
**본 모형 결과: DW = 2.235, LB p = 0.2743 → 자기상관 없음 (Pass)**
#### (d) Breusch-Pagan / ARCH-LM — 이분산
```
H₀: 잔차의 분산이 일정 (등분산)
```
이분산이 존재하면 OLS 추정량은 여전히 불편이지만, 효율적이지 않습니다.
**본 모형 결과: BP p = 0.3951, ARCH p = 0.7885 → 등분산 (Pass)**
#### (e) R² / F-test — 모형 설명력
```
R² = 1 - (잔차변동/총변동)
F-test H₀: 모든 회귀계수 = 0
```
**본 모형 결과: R² = 0.889, F p = 0.0000 → 거시변수가 Zt 변동의 89%를 설명 (Pass)**
---
### 2.7 시나리오 설계 (ECB/Fed 방식)
**IFRS 9 요구사항 (B5.5.42-44):**
ECL 산출 시 복수의 시나리오를 확률 가중하여 반영해야 합니다. "편향 없는(unbiased)" 추정을 위해 호황과 불황 양방향을 모두 고려해야 합니다.
| 시나리오 | Zt 설정 | 가중치 | 학술적 근거 |
|---------|---------|--------|------------|
| 호황 | μ + 1.0σ | 20% | ECB: 상위 시나리오에 15-25% |
| 중립 | μ + 0σ | 50% | IMF WEO 기본 전망 |
| 불황 | μ - 1.5σ | 30% | Fed DFAST: 역사적 하위 5% |
**가중치 비대칭의 이유:**
불황 시나리오에 더 높은 가중치(30% > 20%)를 부여하는 것은:
1. 신용 손실 함수의 비선형성 — 불황의 영향이 호황의 이익보다 큼
2. ECB/Fed의 감독 관행 — "보수적 추정" 원칙
3. 역사적으로 불황의 빈도가 호황보다 약간 높음
---
### 2.8 50년 수렴 메커니즘
**왜 수렴이 필요한가?**
거시경제 예측은 현실적으로 3-5년이 한계입니다 (IMF WEO는 5년 전망). 50년 예측에서는:
1. **1~5년 (PIT 구간)**: 거시 시나리오 기반 Zt 적용 — 가장 신뢰도 높은 구간
2. **6~10년 (전환 구간)**: Mean-reversion으로 점진적 수렴 — 불확실성 증가에 대응
3. **11~50년 (TTC 구간)**: Z = 0 (장기 평균) — 경기 사이클이 반복된다는 가정
**Mean-Reversion 공식:**
```
Z_t^adj = Z_t^scenario × exp(-λ × (t - T_pit)) (t > T_pit)
```
- λ = 0.3: Mean-reversion 속도 — 5년 후 Z가 약 22%로 감소
- T_pit = 5: PIT 적용 종료 시점
**학술적 근거:**
- Ornstein-Uhlenbeck 과정: 금리/스프레드 모형에서 널리 사용
- Basel III FRTB: 장기 리스크 파라미터의 평균회귀 가정
- IFRS 9 IG: 예측 불가능한 장기 구간에서는 역사적 평균 사용 권장
---
### 2.9 Lifetime PD 산출 엔진
**핵심 수학:**
연도별 조건부 전이행렬을 순차적으로 곱하여 누적 전이확률을 구합니다:
```
TM_cum(t) = TM(Z₁) × TM(Z₂) × ... × TM(Z_t)
```
- **누적 PD(t)** = TM_cum(t) 의 D열 (마지막 열)
- **한계 PD(t)** = Cumulative PD(t) - Cumulative PD(t-1)
- **생존확률(t)** = 1 - Cumulative PD(t)
**왜 행렬 곱인가? (단순 PD 합산이 아닌 이유)**
단순히 연간 PD를 합산하면 "이미 부도한 기업이 다시 부도하는" 이중 계산이 발생합니다. 전이행렬 곱은:
1. 부도(D)를 흡수상태로 처리하여 이중 계산을 방지
2. 등급 이동(업그레이드/다운그레이드)을 경유한 부도 경로를 모두 포착
3. BBB → BB → B → D 같은 다단계 부도 경로를 정확히 반영
**확률 가중평균:**
```
PD_weighted(t) = Σ_s w_s × PD_s(t)
= 0.20 × PD_upside(t) + 0.50 × PD_base(t) + 0.30 × PD_downside(t)
```
---
## 3. 참고문헌
| 번호 | 문헌 | 활용 |
|------|------|------|
| 1 | Belkin, B., Suchower, S., & Forest, L.R. (1998). "A One-Parameter Representation of Credit Risk and Transition Matrices" | 핵심 방법론: Zt 추정 |
| 2 | Vasicek, O. (2002). "The Distribution of Loan Portfolio Value" | 조건부 PD 공식 |
| 3 | Merton, R.C. (1974). "On the Pricing of Corporate Debt" | 구조적 모형 기초 |
| 4 | Basel Committee (2005). BCBS 128 "An Explanatory Note on the Basel II IRB Risk Weight Functions" | ρ 파라미터, WCPD |
| 5 | IFRS 9 Financial Instruments (IASB, 2014) B5.5.42-44 | 복수 시나리오 요구사항 |
| 6 | IMF (2021). "IFRS 9 and CECL Compatible Estimation for Top-Down Solvency Stress Testing" | 거시연계 PD 방법론 |
| 7 | ECB (2019). "Macro-financial scenarios for IFRS 9 ECL estimation" | 시나리오 가중치 |
| 8 | Federal Reserve (2023). "Dodd-Frank Act Stress Test Methodology" | 불황 시나리오 설계 |
| 9 | Greene, W.H. (2018). "Econometric Analysis" 8th ed. | OLS 진단, 변수 선택 |
| 10 | Basel Committee (2017). CRE30.4 "Minimum requirements — PD input floors" | PD 플로어 5bp |
| 11 | S&P Global (2024). "2023 Annual Global Corporate Default And Rating Transition Study" | 등급별 장기 평균 부도율 |
| 12 | Moody's (2024). "Annual Default Study — Corporate Default and Recovery Rates" | 등급별 장기 평균 부도율 |
| 13 | EBA/CRR3 (2025). "Capital Requirements Regulation III — IRB Input Floors" | EU PD floor 5bp 법제화 |
---
## 4. 코드 구조 ↔ 이론 매핑
| 모듈 | 이론 단계 | 핵심 함수 |
|------|----------|----------|
| `data/parse_pdf_matrices.py` | §2.0 PDF 파싱·전처리 | `parse_kr()`, `parse_nice()`, `postprocess_matrix()` |
| `data/transition_matrices.py` | §2.0-2.1 TTC 산출 | `load_transition_matrices()`, `compute_ttc_matrix()` |
| `data/macro_data.py` | §2.5 거시데이터 | `load_macro_data()` |
| `data/ecos_fetcher.py` | §2.5 ECOS API | `EcosFetcher.fetch_all()` |
| `models/credit_cycle.py` | §2.2 Zt 추정 | `estimate_zt_series()` |
| `models/vasicek.py` | §2.4 조건부 PD/TM | `conditional_pd()`, `conditional_transition_matrix()` |
| `models/macro_model.py` | §2.5 거시연계 | `MacroZtModel.fit()` |
| `scenarios/scenario_engine.py` | §2.7-2.8 시나리오 | `generate_z_paths()` |
| `projection/lifetime_pd.py` | §2.9 PD 산출 | `compute_all_scenarios()` |
| `validation/statistical_tests.py` | §2.6 검증 | `run_full_validation()` |
## 5. 부호 규약 참고
| 규약 | Z>0 의미 | 수식 | 사용 위치 |
|------|---------|------|----------|
| **Belkin convention** | 호황 (PD↓) | `d + √ρ·Z` | `credit_cycle.py`, `vasicek.conditional_transition_matrix()` |
| **Basel/Vasicek convention** | 불황 (PD↑) | `d - √ρ·Z` | `vasicek.conditional_pd()`, `vasicek.worst_case_pd()` |
두 규약이 코드에 공존하며, 각 함수의 docstring에 사용 규약이 명시되어 있습니다.