Files
LifetimePD/docs/methodology.md
Variet Agent d1ddf06e5d feat(model): KAP YTM PD floor integration, expanded 226-var search, ADF fix (AIC->BIC), Model#2 with 6-test diagnostics
- Replace hardcoded DEFAULT_PD_FLOORS with build_complete_pd_floor_table() (KAP bond YTM)
- Fix ADF test: autolag='AIC' -> 'BIC' for small sample (N=26) robustness
- Expand variable search: 40 -> 226 vars (log/diff/return/lag2), 1.9M combos
- Select Model #2: HOUSING_PRICE + CREDIT_SPREAD_LAG1 + CURRENT_ACCOUNT_R
- Add 6-test diagnostics table to AR1 sheet (ADF/LB/DW/BP/ARCH/Shapiro)
- Add Korean variable names for transformed variables
- Generate report v7 with full diagnostics
2026-03-12 00:06:23 +09:00

603 lines
25 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 AR(1) + Macro 신용사이클 모형
#### 2.5.1 모형의 목적
Zt는 전이행렬에서 역산한 "신용사이클 인덱스"로, 그 자체로는 **미래를 예측할 수 없습니다.**
IFRS 9 Lifetime PD는 **미래 경기 전망(forward-looking)**을 반영해야 하므로,
관측된 Zt를 **거시경제변수와 연결**하여 미래 Zt 경로를 생성해야 합니다.
이를 위해 **AR(1) + Macro 모형**을 사용합니다. 이 모형은:
1. 신용사이클의 **관성**(φ·Z(t-1))과 **거시경제 충격**(β·X(t))을 동시에 포착
2. **미래 경로 생성**에서 거시변수가 **직접적으로** 기여
3. **Mean-reversion**이 φ에 의해 자동으로 결정 (하드코딩 불필요)
#### 2.5.2 모형 정의
**수학적 구조:**
```
Z(t) = c + φ·Z(t-1) + β₁·X₁(t) + β₂·X₂(t) + β₃·X₃(t) + ε(t)
```
여기서:
- **Z(t)**: 연도 t의 신용사이클 인덱스 (Belkin convention: Z>0 = 호황)
- **Z(t-1)**: 전년도 신용사이클 → **자기회귀(AR) 항**
- **c**: 절편 (장기 균형 수준 조정)
- **φ**: 자기회귀 계수 — **사이클의 관성(persistence)**
- 0 < φ < 1: 정상(stationary) 과정, 자연 감쇠
- φ가 1에 가까울수록 사이클이 오래 지속
- **반감기** = ln(2) / |ln(φ)| 년
- **β₁~β₃**: 거시변수 계수 — 경기 충격의 크기와 방향
- **ε(t) ~ N(0, σ²_ε)**: 잔차 (모형이 설명하지 못하는 변동)
**장기 균형**:
거시 충격이 없고(X=X̄) 충분한 시간이 지나면:
```
Z∞ = (c + β·X̄) / (1 - φ) ≈ 0 (TTC 수준)
```
#### 2.5.3 변수 선택
**변수 풀**: BOK ECOS 100대 통계지표 포함 37개 거시변수
37개 변수에서 3변수 조합 7,770개를 **전수 탐색(exhaustive search)** 하여,
**부호 일관성(sign consistency)**을 만족하는 최적 조합을 선택합니다.
**선택된 3변수:**
| 변수 | 코드 | 계수 부호 | 경제적 근거 |
|------|------|:---------:|------------|
| 원/달러 환율 | USDKRW | | 원화 약세 → 외국인 자본유출, 수입원가 상승 → 기업 부담↑ → Zt↓ |
| 소매판매액지수 | RETAIL_SALES | + | 내수 소비 활성화 → 기업 매출·수익성↑ → Zt↑ |
| 국내총투자율 | INVEST_RATE | + | 투자 확대 → 경기 확장 → 부도 감소 → Zt↑ |
**변수 설계 원칙:**
- 3변수는 각각 **외부충격(환율)**, **내수(소비)**, **투자(자본형성)**를 대표
- **과적합 방지**: 관측치 수 / (변수 수 + AR항) ≈ 25 / 4 = 6.25
- **다중공선성 회피**: 환율·소비·투자는 서로 다른 경기 차원을 포착
#### 2.5.4 왜 AR(1) + Macro 인가?
**기존 OLS 대비 개선:**
| 항목 | OLS 모형 (기존) | AR(1)+Macro (개선) |
|------|---------------|-------------------|
| 미래 Zt 생성 | Zt 분포 통계(μ±kσ) | **φ·Z(t-1) + β·충격** |
| 거시변수 역할 | 사후 해석만 | **시나리오 충격 직접 투영** |
| Mean-reversion | 하드코딩 (λ=0.3) | **φ에서 자동 결정** |
| 사이클 관성 | 무시 | **φ로 포착 (불황 지속성)** |
| IFRS 9 호환 | 약함 | **명시적 forward-looking** |
**이론적 근거:**
- Moody's Analytics: Z-score → macro regression → scenario forecast
- Zanders Group: Vasicek Z → macro regression → PiT 전이행렬
- EBA/ECB: Forward-looking macro overlay on Z-index
- 한국 FSS: 복수 시나리오 + 거시경제 전망 반영 의무
---
### 2.6 시나리오 경로 생성 메커니즘
IFRS 9 (B5.5.42-44)는 **복수의 거시경제 시나리오를 확률 가중**하여
ECL을 산출할 것을 요구합니다. 본 모형에서 시나리오 차이는
**거시변수의 충격(shock) 크기와 방향**에 의해 결정됩니다.
#### 2.6.1 시나리오 정의
각 시나리오는 기준시점(t₀) 대비 **거시변수의 이탈(σ 배수)**로 정의합니다:
| 시나리오 | USDKRW 충격 | RETAIL 충격 | INVEST 충격 | 가중치 |
|---------|:----------:|:----------:|:----------:|:-----:|
| 호황 (Upside) | 1.0σ | +1.0σ | +1.0σ | 20% |
| 중립 (Base) | 0 | 0 | 0 | 50% |
| 불황 (Downside) | +1.5σ | 1.5σ | 1.5σ | 30% |
**σ는 각 변수의 과거 표본 표준편차**입니다.
- σ(USDKRW) ≈ 120원 → Downside 충격 = +180원 (1,380 → 1,560원)
- σ(RETAIL) ≈ 8pt → Downside 충격 = 12pt (107 → 95)
- σ(INVEST) ≈ 1.5%p → Downside 충격 = 2.25%p (30% → 27.75%)
**불황에 더 큰 충격(1.5σ > 1.0σ)을 적용하는 이유:**
1. 신용 손실 함수의 비선형성 — 불황의 PD 증가폭이 호황의 감소폭보다 큼
2. ECB/Fed 감독 관행 — 보수적 추정(conservative estimation) 원칙
3. IFRS 9 B5.5.42: 편향 없는 확률 가중은 테일 리스크를 반영해야 함
#### 2.6.2 Zt 경로 생성 알고리즘
```
입력: Z(t₀) = Zt의 마지막 관측값
c, φ, β₁, β₂, β₃ = 적합된 AR(1) 파라미터
ΔX = (ΔX₁, ΔX₂, ΔX₃) = 시나리오별 거시 충격
σ_X = 각 변수의 표본 표준편차
```
**Step 1: 시나리오별 t=1 진입**
```
X_shock(i) = ΔX(i) × σ_X(i)
Z(t₀+1) = c + φ·Z(t₀) + Σᵢ βᵢ·X_shock(i)
```
거시변수의 **충격 수준**이 Zt의 초기 분기를 결정합니다.
- Base: X_shock = 0 → Z(t₀+1)은 순수한 AR(1) 감쇠
- Downside: X_shock 반영 → Z(t₀+1)이 음()의 방향으로 이동
- Upside: X_shock 반영 → Z(t₀+1)이 양(+)의 방향으로 이동
**Step 2: t=2 이후 — 자기회귀 전파 (AR propagation)**
```
Z(t₀+k) = c + φ·Z(t₀+k-1) (k ≥ 2)
```
t=2부터는 **거시 충격 없이**, φ에 의한 **자연 감쇠**만 적용됩니다.
- φ = 0.7이면: 반감기 ≈ 2.0년 → 충격이 약 4년 만에 10% 이하로 감쇠
- φ = 0.5이면: 반감기 ≈ 1.0년 → 충격이 약 3년 만에 소멸
**Step 3: 장기 수렴 (TTC)**
```
lim_{k→∞} Z(t₀+k) = c / (1 φ) ≈ 0
```
충분한 시간이 지나면 모든 시나리오가 **TTC(Z=0)로 자연 수렴**합니다.
이는 경기 사이클이 장기적으로 평균 회귀한다는 가정과 일치합니다.
**핵심: 이 과정에서 거시변수의 미래 값을 예측(forecast)하지 않습니다.**
거시변수는 t=1에서의 **시나리오 진입 충격**만을 정의하며,
t=2 이후는 φ에 의한 내생적(endogenous) 감쇠가 Zt 경로를 결정합니다.
#### 2.6.3 시각화
```
Z(t)
│ ╭── Upside (β·[1σ,+1σ,+1σ] 충격)
│──╱──────── Base (충격 없음, φ 감쇠만)
│ │╲
│ │ ╲
│ │ ╲──── Downside (β·[+1.5σ,1.5σ,1.5σ] 충격)
│ │ ╲
─┼──┼────╲───────────────────→ t
0 t₀ t₀+1 t₀+2 ... t₀+10 ... t₀+50
│←── 충격 ──→│←── φ 감쇠 ──────────→│← TTC (Z≈0) →│
```
---
### 2.7 분기별 업데이트 (Quarterly Refresh)
#### 2.7.1 연간 Full Calibration vs 분기 Light Update
| | 연간 (Full) | 분기 (Light) |
|--|-----------|------------|
| **시점** | 연초 (직전년도 데이터 확정 후) | Q2, Q3, Q4 |
| **전이행렬** | 3사 PDF → TTC 재산출 | 변경 없음 |
| **Zt** | 전 기간 WLS 재추정 | 변경 없음 |
| **AR(1) 파라미터** | c, φ, β 재적합 | **변경 없음** (연초 확정값 사용) |
| **거시변수** | 연간 관측값 | **최신 분기/월간 관측값** |
| **Z 경로** | 전체 재생성 | **Z(t₀) 시작점만 갱신** |
| **Lifetime PD** | 전체 재산출 | **갱신된 Z경로로 재산출** |
#### 2.7.2 분기 업데이트 절차
```
[Step 1] ECOS에서 최신 거시 관측값 수집:
USDKRW(Q_current), RETAIL_SALES(Q_current), INVEST_RATE(Q_current)
[Step 2] 현재 Z 수준 재계산 (연초 파라미터 사용):
Z_current = c + φ·Z_prev + β₁·USDKRW_Q + β₂·RETAIL_Q + β₃·INVEST_Q
[Step 3] Z_current를 새로운 시작점으로 50년 Z-path 재생성
[Step 4] Vasicek 조건부 TM → 행렬곱 → Lifetime PD 재산출
[Step 5] ECL = Σ EAD(t) × PD(t) × LGD(t) × DF(t) 재산출
```
이 방식의 장점:
- **거시변수가 Lifetime PD에 실시간으로 기여** — IFRS 9 forward-looking 충족
- **모형 재추정 불필요** — 파라미터 안정성 유지
- **감사 추적 가능** — 어떤 거시 관측값이 PD 변동을 야기했는지 추적
---
### 2.8 IFRS 9 준수 매핑
| IFRS 9 요구사항 | 조항 | 본 모형 대응 |
|---------------|------|-----------|
| Forward-looking 정보 반영 | B5.5.4 | AR(1) macro 충격 → Zt → PiT PD |
| 복수 시나리오 확률 가중 | B5.5.42 | 3 시나리오 × 확률 (20/50/30%) |
| 편향 없는 확률가중 추정 | B5.5.43 | Up/Base/Down 양방향 반영 |
| 과도한 비용·노력 없이 이용 가능 | B5.5.51 | ECOS 공개 데이터 (API) 사용 |
| PiT PD 사용 | 5.5.17 | Vasicek Z-조건부 전이행렬 |
| Lifetime ECL (Stage 2) | 5.5.3 | 50년 누적/한계 PD term structure |
| 정기적 갱신 | B5.5.52 | 분기별 Quarterly Refresh |
**IFRS 9 (2024년 5월 개정, 2026년 1월 발효) 참고:**
최신 개정은 금융자산 분류/측정, ESG 연계, 전자결제 제거에 관한 것이며,
ECL/PD 모형 방법론 자체에는 변경이 없습니다.
(IFRS 17은 보험계약 회계 기준으로, 본 프로젝트(대출/채권 신용위험)와 적용 범위가 다릅니다.)
---
### 2.9 50년 수렴 메커니즘
**왜 수렴이 필요한가?**
AR(1) 모형에서 0 < φ < 1이면 Z(t)는 자동으로 장기 균형으로 수렴합니다.
별도의 수렴 메커니즘이 불필요하며, 이것이 AR(1) 모형의 핵심 장점입니다.
**수렴 속도:**
| φ | 반감기 | 충격이 5% 이하로 감쇠 | 50년 시점 잔여 충격 |
|---|--------|-------------------|-----------------|
| 0.3 | 0.6년 | ~2.5년 | ≈ 0% |
| 0.5 | 1.0년 | ~4.3년 | ≈ 0% |
| 0.7 | 1.9년 | ~8.4년 | ≈ 0% |
| 0.9 | 6.6년 | ~28.4년 | ~0.5% |
**학술적 근거:**
- Ornstein-Uhlenbeck 과정의 이산 시간 버전이 AR(1)
- 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에 사용 규약이 명시되어 있습니다.