Compare commits
11 Commits
6aaff48856
...
0762fcc5d8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0762fcc5d8 | ||
|
|
0e1e0e5cf2 | ||
|
|
cc55acc330 | ||
|
|
49c7661888 | ||
|
|
92ce84ad96 | ||
|
|
d61c538308 | ||
|
|
1a4cc873d9 | ||
|
|
93887f49dd | ||
|
|
811d6ee843 | ||
|
|
8af743e6f3 | ||
|
|
ebdc6b805b |
@@ -1,67 +0,0 @@
|
||||
# Agent Guide — AI 에이전트 범용 워크플로우 시스템
|
||||
|
||||
> AI 코딩 에이전트가 더 똑똑하게 동작하도록 설계된 범용 워크플로우 템플릿.
|
||||
> 새 프로젝트에서 `.agents/` 폴더를 통째로 복사하고, `{{PLACEHOLDER}}`를 교체하면 즉시 사용 가능합니다.
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# 1. 이 레포를 클론하거나 .agents/ 폴더를 복사
|
||||
git clone https://git.variet.net/Variet/agent_guide.git
|
||||
cp -r agent_guide/.agents/ your-project/.agents/
|
||||
|
||||
# 2. 프로젝트별 값 2개만 교체
|
||||
# - {{GITEA_REPO}} → services.md, check-gitea.md, wiki_helper.py
|
||||
# - {{VIKUNJA_PROJECT_ID}} → services.md, vikunja_helper.py (PROJECT_ID)
|
||||
# - references/ → 프로젝트별 아키텍처, 기술스택, 컨벤션 채우기
|
||||
|
||||
# 3. docs/devlog/ 디렉토리 생성
|
||||
mkdir -p docs/devlog/entries
|
||||
|
||||
# 4. AI 에이전트에게 "시작" 또는 "/start" 명령
|
||||
```
|
||||
|
||||
## 파일 구조
|
||||
|
||||
```
|
||||
.agents/
|
||||
├── AGENT.md ← 🧠 글로벌 NEVER/ALWAYS 규칙
|
||||
├── GUIDE.md ← 📖 상세 가이드
|
||||
├── references/ ← 📚 프로젝트 지식 베이스
|
||||
│ ├── architecture.md ← 아키텍처 (템플릿)
|
||||
│ ├── tech-stack.md ← 기술 스택 (템플릿)
|
||||
│ ├── conventions.md ← 코딩 컨벤션 (템플릿)
|
||||
│ └── known-issues.md ← 과거 실패 기록 (공통 이슈 포함)
|
||||
└── workflows/ ← ⚙️ 행동 절차
|
||||
├── start.md ← 세션 시작 (룰 로딩 + Git + Vikunja + Wiki)
|
||||
├── end.md ← 세션 종료 (학습 기록 + Vikunja + Git)
|
||||
├── pre-task.md ← 작업 전 필수 체크리스트
|
||||
├── debug.md ← 체계적 디버깅
|
||||
├── services.md ← 서비스 연동 정보 ({{PLACEHOLDER}})
|
||||
├── check-gitea.md ← Gitea 현황 조회
|
||||
├── check-vikunja.md ← Vikunja 태스크 조회
|
||||
└── helpers/
|
||||
├── vikunja_helper.py ← Vikunja API 안전 래퍼
|
||||
└── wiki_helper.py ← Gitea Wiki 래퍼
|
||||
```
|
||||
|
||||
## 교체해야 하는 값 (프로젝트별)
|
||||
|
||||
> Gitea/Vikunja 토큰은 이미 입력되어 있습니다. 프로젝트별로 아래 2개만 교체하면 됩니다.
|
||||
|
||||
| Placeholder | 설명 | 파일 |
|
||||
|-------------|------|------|
|
||||
| `{{GITEA_REPO}}` | Gitea 저장소명 | services.md, check-gitea.md, wiki_helper.py |
|
||||
| `{{VIKUNJA_PROJECT_ID}}` | Vikunja 프로젝트 ID | services.md, vikunja_helper.py (`PROJECT_ID`) |
|
||||
|
||||
## 상세 가이드
|
||||
|
||||
[GUIDE.md](.agents/GUIDE.md) 참조.
|
||||
|
||||
## 연구 기반
|
||||
|
||||
7개 AI 에이전트 플랫폼 (Claude, GPT, Gemini, Cursor, Cline, Roo, Windsurf) 분석 + Reflexion Framework, Context Engineering, Sentinel Check 등 최신 연구 기반.
|
||||
|
||||
## License
|
||||
|
||||
Internal — Variet
|
||||
@@ -47,6 +47,12 @@ description: 모든 작업에 자동 적용되는 에이전트 행동 규칙.
|
||||
4. `.agents/workflows/services.md` (service credentials & protocols)
|
||||
5. `.agents/workflows/` (action procedures)
|
||||
|
||||
## Python Environment
|
||||
|
||||
- **경로**: `C:\ProgramData\miniforge3\envs\quant`
|
||||
- **실행**: `C:\ProgramData\miniforge3\envs\quant\python.exe`
|
||||
- 모든 Python 스크립트 실행 시 위 경로의 python을 사용합니다.
|
||||
|
||||
## PowerShell Notes
|
||||
|
||||
- `curl` → PowerShell에서 `Invoke-WebRequest` 별칭. **반드시 `curl.exe`** 사용
|
||||
@@ -22,6 +22,13 @@
|
||||
- 주석 언어: 한국어 (모듈/함수 docstring은 한국어)
|
||||
- Type hints: 사용 권장 (`def foo(x: float) -> np.ndarray:`)
|
||||
|
||||
## Python 환경
|
||||
|
||||
- **경로**: `C:\ProgramData\miniforge3\envs\quant`
|
||||
- **실행**: `C:\ProgramData\miniforge3\envs\quant\python.exe`
|
||||
- 모든 Python 스크립트 실행 시 위 경로의 python.exe를 사용
|
||||
- PowerShell에서: `& "C:\ProgramData\miniforge3\envs\quant\python.exe" script.py`
|
||||
|
||||
## 커밋 메시지
|
||||
|
||||
```
|
||||
@@ -57,3 +57,15 @@
|
||||
- **원인**: pandas 2.x에서 `fillna(method=)` 인자 deprecated
|
||||
- **해결**: `df.ffill().bfill()` 메서드 체인으로 대체
|
||||
- **주의**: pandas 2.x 이상 사용 시 `fillna(method=)` 전면 금지
|
||||
|
||||
### [2026-03-11] Belkin Zt 부호 규칙 — 전체 파이프라인 부호 반전 버그
|
||||
- **증상**: Zt 1998=+2.12 (IMF 위기인데 양수), 2006=-1.53 (호황인데 음수)
|
||||
- **원인**: Belkin 논문 원본: Z>0=호황(PD↓). 코드에서 임계값이 오름차순(AAA→D)인데 수식에 `(d - √ρ·Z)`로 구현하여 부호 반전. 올바른 수식은 `(d + √ρ·Z)`
|
||||
- **해결**: `credit_cycle.py`, `vasicek.py`, `transition_matrices.py` 3파일 모두 `(d - sqrt_rho * z)` → `(d + sqrt_rho * z)` 수정
|
||||
- **주의**: vasicek.py의 `conditional_pd()`는 Basel convention (Z↑=불황)으로 별도 체계. 조건부 전이행렬은 Belkin convention (Z↑=호황). 두 규약이 코드에 공존하므로 반드시 docstring 확인 후 사용
|
||||
|
||||
### [2026-03-11] ECOS 거시변수 — fallback 커버리지 부족
|
||||
- **증상**: 기존 11개 변수만으로는 Zt 설명력 부족 (R² < 0.6)
|
||||
- **원인**: 한국 경제 특수성(유가의존, 수출주도, 부동산 영향 등) 미반영
|
||||
- **해결**: 31개 변수로 확장 (KOSPI, OIL_PRICE, USDKRW, DISHONOR_RATE, HOUSING_PRICE, BSI_MANUF 등). `data/ecos_fetcher.py` + `data/cache/macro_ecos.csv` 캐싱 구조
|
||||
- **주의**: fallback 데이터는 대략적 수치. 정밀 분석 시 ECOS API 실제 호출 필요 (`--force` 옵션)
|
||||
@@ -15,6 +15,11 @@ ecos:
|
||||
cpi: "901Y009" # 소비자물가지수 / ITEM: 0 (총지수, level→YoY% 변환)
|
||||
composite_leading: "901Y067" # 경기종합지수 / ITEM: I16A (선행, 월별→연평균)
|
||||
|
||||
# 전이행렬 데이터 소스
|
||||
data:
|
||||
transition_source: "real" # "real" (3사 실제) | "builtin" (내장 샘플)
|
||||
transition_dir: null # null이면 기본 data/real/
|
||||
|
||||
# 모형 파라미터
|
||||
model:
|
||||
# 자산상관계수 (Basel IRB 기준 0.12~0.24, 기업 평균 ~0.20)
|
||||
|
||||
27
data/cache/macro_ecos.csv
vendored
Normal file
27
data/cache/macro_ecos.csv
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
YEAR,GDP_GROWTH,UNEMPLOYMENT,BASE_RATE,CD_RATE,CPI_GROWTH,LEADING_INDEX,GOVT_3Y,GOVT_10Y,CORP_AA,CORP_BBB,IPI,EXPORT,IMPORT_AMT,USDKRW,M2,CSI,KOSPI,IMPORT_PRICE,DISHONOR_RATE,HOUSING_PRICE,HOUSEHOLD_DEBT,FACILITY_INVEST,RETAIL_SALES,CURRENT_ACCOUNT,EMPLOYED,EMPLOYMENT_RATE,OIL_PRICE,COINCIDENT,BSI_MANUF,CONSTRUCTION_DONE,SPI
|
||||
2000,8.9,4.4,5.25,7.09,2.3,101.2,8.35,8.55,9.35,11.9,102.5,172268.0,160481.0,1131.0,651.8,101.0,504.0,78.5,0.46,55.2,194.0,62.5,72.0,123.5,2115.0,58.5,26.2,99.8,90.0,56.3,58.0
|
||||
2001,4.5,4.0,4.0,5.34,4.1,99.5,6.7,7.05,8.12,11.27,99.5,150439.0,141098.0,1291.0,736.5,96.5,694.0,73.6,0.28,56.8,225.0,58.5,73.5,80.3,2118.0,59.0,22.8,98.0,82.0,53.8,60.2
|
||||
2002,7.4,3.3,4.25,4.99,2.8,102.3,6.06,6.58,7.02,9.75,108.5,162471.0,152126.0,1251.0,816.3,105.0,628.0,72.1,0.18,65.3,306.0,63.2,76.0,53.9,2217.0,60.0,23.7,101.5,92.0,55.2,63.5
|
||||
2003,2.9,3.6,3.75,4.24,3.5,98.8,4.93,5.45,5.7,8.97,109.8,193817.0,178827.0,1192.0,879.2,96.0,811.0,81.3,0.12,71.5,360.0,60.5,74.0,119.5,2212.0,59.5,26.8,99.2,85.0,58.0,64.8
|
||||
2004,4.9,3.7,3.25,3.77,3.6,100.5,4.11,4.73,4.72,7.53,119.2,253845.0,224463.0,1145.0,935.3,97.0,896.0,90.5,0.08,71.0,394.0,66.5,74.5,284.2,2272.0,59.8,33.5,100.8,88.0,63.5,66.0
|
||||
2005,3.9,3.7,3.75,3.81,2.8,101.8,4.27,4.95,4.68,6.51,126.0,284419.0,261238.0,1024.0,1002.7,100.5,1011.0,99.2,0.06,73.5,440.0,68.0,76.5,149.8,2297.0,60.3,49.3,101.2,92.0,66.0,68.5
|
||||
2006,5.2,3.5,4.5,4.72,2.2,102.5,4.83,5.17,5.25,7.08,136.0,325465.0,309383.0,955.0,1089.9,106.0,1434.0,107.8,0.05,80.2,497.0,73.5,78.5,53.9,2334.0,60.9,61.5,102.8,95.0,69.5,71.2
|
||||
2007,5.5,3.2,5.0,5.36,2.5,103.1,5.23,5.42,5.7,7.44,144.5,371489.0,356846.0,929.0,1181.6,108.5,1897.0,109.3,0.04,83.5,560.0,78.5,80.0,59.5,2371.0,61.3,68.4,103.5,97.0,72.8,74.0
|
||||
2008,2.8,3.2,3.0,5.7,4.7,96.5,5.27,5.57,7.02,10.73,148.2,422007.0,435275.0,1103.0,1263.2,86.0,1124.0,132.5,0.11,84.0,630.0,76.0,79.0,-57.8,2385.0,61.5,94.3,98.5,72.0,74.5,75.5
|
||||
2009,0.8,3.6,2.0,2.63,2.8,98.2,4.04,4.85,5.8,9.24,140.0,363534.0,323085.0,1276.0,1404.4,85.0,1683.0,104.2,0.1,84.8,694.0,60.5,77.5,328.1,2355.0,60.1,61.8,96.5,68.0,68.2,76.0
|
||||
2010,6.8,3.7,2.5,2.8,2.9,103.0,3.72,4.49,4.66,7.98,161.5,466384.0,425212.0,1156.0,1504.3,107.0,2051.0,115.8,0.06,87.0,776.0,80.5,80.5,282.1,2397.0,60.4,78.1,103.0,95.0,72.0,78.5
|
||||
2011,3.7,3.4,3.25,3.55,4.0,101.2,3.62,4.05,4.41,7.75,168.0,555214.0,524413.0,1108.0,1586.5,100.0,1826.0,130.2,0.05,89.5,857.0,82.0,82.0,184.1,2424.0,60.7,106.0,102.5,90.0,73.5,80.0
|
||||
2012,2.4,3.2,2.75,3.13,2.2,100.3,3.13,3.35,3.76,6.56,168.2,547870.0,519584.0,1127.0,1673.5,100.5,1997.0,123.5,0.04,89.0,934.0,79.0,83.5,508.4,2468.0,61.3,109.1,100.5,85.0,72.0,82.5
|
||||
2013,3.2,3.1,2.5,2.72,1.3,100.8,2.79,3.28,3.19,5.87,168.8,559632.0,515586.0,1095.0,1756.2,103.0,2011.0,115.0,0.04,88.8,980.0,77.5,85.0,812.1,2503.0,61.6,105.5,101.0,88.0,71.5,84.0
|
||||
2014,3.2,3.5,2.0,2.36,1.3,101.0,2.56,2.92,2.99,5.22,168.5,572665.0,525515.0,1053.0,1871.0,104.0,1916.0,105.6,0.04,90.2,1050.0,81.0,86.5,843.5,2546.0,62.4,96.7,101.5,90.0,73.8,86.0
|
||||
2015,2.8,3.6,1.5,1.72,0.7,100.5,1.8,2.25,2.18,4.61,168.0,526757.0,436499.0,1131.0,2010.0,103.5,1961.0,79.5,0.03,95.0,1145.0,84.5,88.0,1059.4,2567.0,62.6,51.2,101.0,86.0,77.5,88.5
|
||||
2016,2.9,3.7,1.25,1.48,1.0,99.8,1.44,1.8,1.88,4.6,168.5,495426.0,406193.0,1161.0,2151.1,100.0,2026.0,78.0,0.03,97.5,1250.0,82.0,89.5,992.4,2597.0,63.0,41.3,100.2,85.0,89.5,90.0
|
||||
2017,3.2,3.7,1.5,1.52,1.9,101.5,1.8,2.33,2.28,4.83,174.2,573694.0,478478.0,1131.0,2347.2,105.0,2467.0,90.5,0.02,100.0,1364.0,92.0,92.0,752.6,2620.0,63.2,53.1,101.8,92.0,90.0,92.5
|
||||
2018,2.9,3.8,1.75,1.85,1.5,100.8,2.1,2.56,2.67,5.41,178.0,604860.0,535202.0,1100.0,2508.9,102.0,2041.0,100.0,0.03,102.0,1497.0,94.5,94.0,774.7,2633.0,63.1,69.5,101.5,88.0,85.5,94.5
|
||||
2019,2.2,3.8,1.25,1.63,0.4,99.3,1.5,1.74,1.93,4.52,175.5,542233.0,503343.0,1166.0,2694.0,97.0,2198.0,92.5,0.03,104.5,1573.0,89.0,96.5,597.0,2660.0,63.5,63.4,100.0,82.0,82.0,97.0
|
||||
2020,-0.7,4.0,0.5,0.76,0.5,97.0,0.98,1.52,2.03,5.25,170.0,512498.0,467633.0,1180.0,3070.2,90.0,2873.0,85.0,0.02,110.0,1723.0,100.0,100.0,752.8,2630.0,62.5,42.3,97.5,76.0,79.0,100.0
|
||||
2021,4.3,3.7,1.0,1.09,2.5,102.8,1.43,2.12,2.26,5.64,183.0,644400.0,615093.0,1144.0,3415.8,106.0,2978.0,110.5,0.01,122.0,1853.0,108.5,105.0,883.0,2672.0,63.8,69.3,103.0,96.0,77.5,104.5
|
||||
2022,2.6,2.9,3.25,3.77,5.1,99.2,3.14,3.6,4.25,8.18,186.5,683585.0,731370.0,1292.0,3561.0,95.0,2237.0,140.2,0.02,128.0,1903.0,105.0,107.5,258.3,2726.0,64.5,97.0,100.5,85.0,76.0,108.0
|
||||
2023,1.4,2.7,3.5,3.75,3.6,98.8,3.55,3.78,4.4,8.4,183.0,632744.0,642756.0,1305.0,3680.0,96.5,2655.0,120.0,0.03,118.0,1920.0,102.0,106.0,355.2,2750.0,65.0,82.5,99.2,80.0,72.0,109.5
|
||||
2024,2.2,2.8,3.0,3.3,2.3,99.5,3.2,3.42,3.9,7.5,185.0,660000.0,650000.0,1350.0,3800.0,98.0,2400.0,115.0,0.03,115.0,1950.0,103.5,105.5,380.0,2760.0,65.2,80.0,99.5,82.0,68.0,110.0
|
||||
2025,1.8,3.0,2.75,3.0,1.8,99.8,2.8,3.1,3.5,6.8,184.0,650000.0,640000.0,1380.0,3900.0,99.0,2500.0,110.0,0.03,112.0,1980.0,104.0,106.0,350.0,2770.0,65.5,75.0,100.0,84.0,65.0,111.0
|
||||
|
218
data/ecos_fetcher.py
Normal file
218
data/ecos_fetcher.py
Normal file
@@ -0,0 +1,218 @@
|
||||
"""
|
||||
ECOS 거시경제변수 포괄 수집기 — CSV 캐싱
|
||||
|
||||
목적:
|
||||
- ECOS API에서 30+ 거시경제변수 수집
|
||||
- 수집 결과를 data/cache/macro_ecos.csv에 저장
|
||||
- 이미 캐시가 있으면 API 호출하지 않고 캐시 사용
|
||||
- --force 옵션으로 캐시 갱신 가능
|
||||
|
||||
사용:
|
||||
python data/ecos_fetcher.py # 캐시 있으면 skip
|
||||
python data/ecos_fetcher.py --force # 캐시 무시하고 API 재수집
|
||||
python data/ecos_fetcher.py --no-api # API 없이 fallback만 사용
|
||||
"""
|
||||
|
||||
import sys, io, time, argparse, json
|
||||
import numpy as np, pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
if sys.stdout.encoding != 'utf-8':
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
CACHE_DIR = Path(__file__).parent / "cache"
|
||||
CACHE_FILE = CACHE_DIR / "macro_ecos.csv"
|
||||
|
||||
# ============================================================
|
||||
# ECOS 변수 정의 (stat_code, period, item_code, 변수명, 월→연 집계법)
|
||||
# ============================================================
|
||||
ECOS_VARIABLES = [
|
||||
# --- 성장 ---
|
||||
{"name": "GDP_GROWTH", "stat": "200Y002", "period": "A", "item": "10111", "agg": None, "desc": "GDP 실질성장률 (%)"},
|
||||
|
||||
# --- 고용 ---
|
||||
{"name": "UNEMPLOYMENT", "stat": "901Y027", "period": "M", "item": "I16AA", "agg": "mean", "desc": "실업률 (%)"},
|
||||
|
||||
# --- 금리 ---
|
||||
{"name": "BASE_RATE", "stat": "722Y001", "period": "M", "item": "0101000", "agg": "last", "desc": "한은 기준금리 (%)"},
|
||||
{"name": "CD_RATE", "stat": "817Y002", "period": "M", "item": "010502000", "agg": "mean", "desc": "CD 91일 금리 (%)"},
|
||||
{"name": "GOVT_3Y", "stat": "817Y002", "period": "M", "item": "010200000", "agg": "mean", "desc": "국고채 3년 금리 (%)"},
|
||||
{"name": "GOVT_10Y", "stat": "817Y002", "period": "M", "item": "010210000", "agg": "mean", "desc": "국고채 10년 금리 (%)"},
|
||||
{"name": "CORP_AA", "stat": "817Y002", "period": "M", "item": "010300000", "agg": "mean", "desc": "회사채 AA- 금리 (%)"},
|
||||
{"name": "CORP_BBB", "stat": "817Y002", "period": "M", "item": "010400000", "agg": "mean", "desc": "회사채 BBB- 금리 (%)"},
|
||||
|
||||
# --- 물가 ---
|
||||
{"name": "CPI_GROWTH", "stat": "901Y009", "period": "A", "item": "0", "agg": None, "desc": "소비자물가 상승률 (%)"},
|
||||
{"name": "IMPORT_PRICE", "stat": "404Y014", "period": "M", "item": "AA00", "agg": "mean", "desc": "수입물가지수 (원화기준)"},
|
||||
{"name": "PPI", "stat": "404Y014", "period": "M", "item": "AA00", "agg": "mean", "desc": "생산자물가지수"}, # 별도 확인 필요
|
||||
|
||||
# --- 경기지수 ---
|
||||
{"name": "LEADING_INDEX", "stat": "901Y067", "period": "M", "item": "I16A", "agg": "mean", "desc": "경기선행종합지수"},
|
||||
{"name": "COINCIDENT", "stat": "901Y067", "period": "M", "item": "I16B", "agg": "mean", "desc": "경기동행종합지수"},
|
||||
{"name": "CSI", "stat": "901Y068", "period": "M", "item": "I16A", "agg": "mean", "desc": "소비자심리지수 (CCSI)"},
|
||||
{"name": "BSI_MANUF", "stat": "512Y014", "period": "M", "item": "99BA", "agg": "mean", "desc": "제조업 BSI (전망)"},
|
||||
|
||||
# --- 생산/교역 ---
|
||||
{"name": "IPI", "stat": "901Y033", "period": "M", "item": "I11A", "agg": "mean", "desc": "광공업생산지수"},
|
||||
{"name": "SPI", "stat": "901Y033", "period": "M", "item": "I31A", "agg": "mean", "desc": "서비스업생산지수"},
|
||||
{"name": "EXPORT", "stat": "403Y001", "period": "A", "item": "1", "agg": None, "desc": "수출 (백만달러)"},
|
||||
{"name": "IMPORT_AMT", "stat": "403Y001", "period": "A", "item": "2", "agg": None, "desc": "수입 (백만달러)"},
|
||||
|
||||
# --- 환율/유가 ---
|
||||
{"name": "USDKRW", "stat": "036Y001", "period": "M", "item": "0000001", "agg": "mean", "desc": "원/달러 환율 (종가평균)"},
|
||||
|
||||
# --- 통화/유동성 ---
|
||||
{"name": "M2", "stat": "101Y003", "period": "M", "item": "BBGA00", "agg": "last", "desc": "M2 광의통화 (조원)"},
|
||||
|
||||
# --- 부도/신용 ---
|
||||
{"name": "DISHONOR_RATE", "stat": "104Y016", "period": "M", "item": "010000", "agg": "mean", "desc": "어음부도율 (%)"},
|
||||
{"name": "DISHONOR_AMT", "stat": "104Y016", "period": "M", "item": "020000", "agg": "sum", "desc": "부도금액 (억원)"},
|
||||
|
||||
# --- 주식 ---
|
||||
{"name": "KOSPI", "stat": "802Y001", "period": "M", "item": "0001000", "agg": "mean", "desc": "KOSPI 종합주가지수"},
|
||||
|
||||
# --- 부동산/건설 ---
|
||||
{"name": "HOUSING_PRICE", "stat": "901Y062", "period": "M", "item": "P00", "agg": "mean", "desc": "전국 주택매매가격지수"},
|
||||
{"name": "CONSTRUCTION", "stat": "512Y010", "period": "M", "item": "10AA", "agg": "sum", "desc": "건설수주액 (억원)"},
|
||||
|
||||
# --- 가계 ---
|
||||
{"name": "HOUSEHOLD_DEBT","stat": "151Y001", "period": "Q", "item": "A11", "agg": "last", "desc": "가계부채 (조원)"},
|
||||
]
|
||||
|
||||
|
||||
# ============================================================
|
||||
# Fallback 데이터 (API 없이도 작동) — 31개 변수, 26년
|
||||
# ============================================================
|
||||
# 추가 변수 설명:
|
||||
# FACILITY_INVEST: 설비투자지수 (2020=100)
|
||||
# RETAIL_SALES: 소매판매액지수 (2020=100)
|
||||
# CURRENT_ACCOUNT: 경상수지 (억달러)
|
||||
# EMPLOYED: 취업자수 (만명)
|
||||
# EMPLOYMENT_RATE: 고용률 15-64세 (%)
|
||||
# OIL_PRICE: 두바이유 연평균 ($/배럴) — 한국 수입유 기준
|
||||
# COINCIDENT: 경기동행종합지수
|
||||
# BSI_MANUF: 제조업 BSI 전망
|
||||
# CONSTRUCTION_DONE: 건설기성액 (조원)
|
||||
# SPI: 서비스업생산지수 (2020=100)
|
||||
|
||||
def _build_fallback() -> pd.DataFrame:
|
||||
"""API 없이 작동하는 확장 fallback — 31개 변수"""
|
||||
# fmt: off
|
||||
data = {
|
||||
2000: {"GDP_GROWTH":8.9,"UNEMPLOYMENT":4.4,"BASE_RATE":5.25,"CD_RATE":7.09,"CPI_GROWTH":2.3,"LEADING_INDEX":101.2,"GOVT_3Y":8.35,"GOVT_10Y":8.55,"CORP_AA":9.35,"CORP_BBB":11.90,"IPI":102.5,"EXPORT":172268,"IMPORT_AMT":160481,"USDKRW":1131,"M2":651.8,"CSI":101.0,"KOSPI":504,"IMPORT_PRICE":78.5,"DISHONOR_RATE":0.46,"HOUSING_PRICE":55.2,"HOUSEHOLD_DEBT":194.0,
|
||||
"FACILITY_INVEST":62.5,"RETAIL_SALES":72.0,"CURRENT_ACCOUNT":123.5,"EMPLOYED":2115,"EMPLOYMENT_RATE":58.5,"OIL_PRICE":26.2,"COINCIDENT":99.8,"BSI_MANUF":90,"CONSTRUCTION_DONE":56.3,"SPI":58.0},
|
||||
2001: {"GDP_GROWTH":4.5,"UNEMPLOYMENT":4.0,"BASE_RATE":4.00,"CD_RATE":5.34,"CPI_GROWTH":4.1,"LEADING_INDEX":99.5,"GOVT_3Y":6.70,"GOVT_10Y":7.05,"CORP_AA":8.12,"CORP_BBB":11.27,"IPI":99.5,"EXPORT":150439,"IMPORT_AMT":141098,"USDKRW":1291,"M2":736.5,"CSI":96.5,"KOSPI":694,"IMPORT_PRICE":73.6,"DISHONOR_RATE":0.28,"HOUSING_PRICE":56.8,"HOUSEHOLD_DEBT":225.0,
|
||||
"FACILITY_INVEST":58.5,"RETAIL_SALES":73.5,"CURRENT_ACCOUNT":80.3,"EMPLOYED":2118,"EMPLOYMENT_RATE":59.0,"OIL_PRICE":22.8,"COINCIDENT":98.0,"BSI_MANUF":82,"CONSTRUCTION_DONE":53.8,"SPI":60.2},
|
||||
2002: {"GDP_GROWTH":7.4,"UNEMPLOYMENT":3.3,"BASE_RATE":4.25,"CD_RATE":4.99,"CPI_GROWTH":2.8,"LEADING_INDEX":102.3,"GOVT_3Y":6.06,"GOVT_10Y":6.58,"CORP_AA":7.02,"CORP_BBB":9.75,"IPI":108.5,"EXPORT":162471,"IMPORT_AMT":152126,"USDKRW":1251,"M2":816.3,"CSI":105.0,"KOSPI":628,"IMPORT_PRICE":72.1,"DISHONOR_RATE":0.18,"HOUSING_PRICE":65.3,"HOUSEHOLD_DEBT":306.0,
|
||||
"FACILITY_INVEST":63.2,"RETAIL_SALES":76.0,"CURRENT_ACCOUNT":53.9,"EMPLOYED":2217,"EMPLOYMENT_RATE":60.0,"OIL_PRICE":23.7,"COINCIDENT":101.5,"BSI_MANUF":92,"CONSTRUCTION_DONE":55.2,"SPI":63.5},
|
||||
2003: {"GDP_GROWTH":2.9,"UNEMPLOYMENT":3.6,"BASE_RATE":3.75,"CD_RATE":4.24,"CPI_GROWTH":3.5,"LEADING_INDEX":98.8,"GOVT_3Y":4.93,"GOVT_10Y":5.45,"CORP_AA":5.70,"CORP_BBB":8.97,"IPI":109.8,"EXPORT":193817,"IMPORT_AMT":178827,"USDKRW":1192,"M2":879.2,"CSI":96.0,"KOSPI":811,"IMPORT_PRICE":81.3,"DISHONOR_RATE":0.12,"HOUSING_PRICE":71.5,"HOUSEHOLD_DEBT":360.0,
|
||||
"FACILITY_INVEST":60.5,"RETAIL_SALES":74.0,"CURRENT_ACCOUNT":119.5,"EMPLOYED":2212,"EMPLOYMENT_RATE":59.5,"OIL_PRICE":26.8,"COINCIDENT":99.2,"BSI_MANUF":85,"CONSTRUCTION_DONE":58.0,"SPI":64.8},
|
||||
2004: {"GDP_GROWTH":4.9,"UNEMPLOYMENT":3.7,"BASE_RATE":3.25,"CD_RATE":3.77,"CPI_GROWTH":3.6,"LEADING_INDEX":100.5,"GOVT_3Y":4.11,"GOVT_10Y":4.73,"CORP_AA":4.72,"CORP_BBB":7.53,"IPI":119.2,"EXPORT":253845,"IMPORT_AMT":224463,"USDKRW":1145,"M2":935.3,"CSI":97.0,"KOSPI":896,"IMPORT_PRICE":90.5,"DISHONOR_RATE":0.08,"HOUSING_PRICE":71.0,"HOUSEHOLD_DEBT":394.0,
|
||||
"FACILITY_INVEST":66.5,"RETAIL_SALES":74.5,"CURRENT_ACCOUNT":284.2,"EMPLOYED":2272,"EMPLOYMENT_RATE":59.8,"OIL_PRICE":33.5,"COINCIDENT":100.8,"BSI_MANUF":88,"CONSTRUCTION_DONE":63.5,"SPI":66.0},
|
||||
2005: {"GDP_GROWTH":3.9,"UNEMPLOYMENT":3.7,"BASE_RATE":3.75,"CD_RATE":3.81,"CPI_GROWTH":2.8,"LEADING_INDEX":101.8,"GOVT_3Y":4.27,"GOVT_10Y":4.95,"CORP_AA":4.68,"CORP_BBB":6.51,"IPI":126.0,"EXPORT":284419,"IMPORT_AMT":261238,"USDKRW":1024,"M2":1002.7,"CSI":100.5,"KOSPI":1011,"IMPORT_PRICE":99.2,"DISHONOR_RATE":0.06,"HOUSING_PRICE":73.5,"HOUSEHOLD_DEBT":440.0,
|
||||
"FACILITY_INVEST":68.0,"RETAIL_SALES":76.5,"CURRENT_ACCOUNT":149.8,"EMPLOYED":2297,"EMPLOYMENT_RATE":60.3,"OIL_PRICE":49.3,"COINCIDENT":101.2,"BSI_MANUF":92,"CONSTRUCTION_DONE":66.0,"SPI":68.5},
|
||||
2006: {"GDP_GROWTH":5.2,"UNEMPLOYMENT":3.5,"BASE_RATE":4.50,"CD_RATE":4.72,"CPI_GROWTH":2.2,"LEADING_INDEX":102.5,"GOVT_3Y":4.83,"GOVT_10Y":5.17,"CORP_AA":5.25,"CORP_BBB":7.08,"IPI":136.0,"EXPORT":325465,"IMPORT_AMT":309383,"USDKRW":955,"M2":1089.9,"CSI":106.0,"KOSPI":1434,"IMPORT_PRICE":107.8,"DISHONOR_RATE":0.05,"HOUSING_PRICE":80.2,"HOUSEHOLD_DEBT":497.0,
|
||||
"FACILITY_INVEST":73.5,"RETAIL_SALES":78.5,"CURRENT_ACCOUNT":53.9,"EMPLOYED":2334,"EMPLOYMENT_RATE":60.9,"OIL_PRICE":61.5,"COINCIDENT":102.8,"BSI_MANUF":95,"CONSTRUCTION_DONE":69.5,"SPI":71.2},
|
||||
2007: {"GDP_GROWTH":5.5,"UNEMPLOYMENT":3.2,"BASE_RATE":5.00,"CD_RATE":5.36,"CPI_GROWTH":2.5,"LEADING_INDEX":103.1,"GOVT_3Y":5.23,"GOVT_10Y":5.42,"CORP_AA":5.70,"CORP_BBB":7.44,"IPI":144.5,"EXPORT":371489,"IMPORT_AMT":356846,"USDKRW":929,"M2":1181.6,"CSI":108.5,"KOSPI":1897,"IMPORT_PRICE":109.3,"DISHONOR_RATE":0.04,"HOUSING_PRICE":83.5,"HOUSEHOLD_DEBT":560.0,
|
||||
"FACILITY_INVEST":78.5,"RETAIL_SALES":80.0,"CURRENT_ACCOUNT":59.5,"EMPLOYED":2371,"EMPLOYMENT_RATE":61.3,"OIL_PRICE":68.4,"COINCIDENT":103.5,"BSI_MANUF":97,"CONSTRUCTION_DONE":72.8,"SPI":74.0},
|
||||
2008: {"GDP_GROWTH":2.8,"UNEMPLOYMENT":3.2,"BASE_RATE":3.00,"CD_RATE":5.70,"CPI_GROWTH":4.7,"LEADING_INDEX":96.5,"GOVT_3Y":5.27,"GOVT_10Y":5.57,"CORP_AA":7.02,"CORP_BBB":10.73,"IPI":148.2,"EXPORT":422007,"IMPORT_AMT":435275,"USDKRW":1103,"M2":1263.2,"CSI":86.0,"KOSPI":1124,"IMPORT_PRICE":132.5,"DISHONOR_RATE":0.11,"HOUSING_PRICE":84.0,"HOUSEHOLD_DEBT":630.0,
|
||||
"FACILITY_INVEST":76.0,"RETAIL_SALES":79.0,"CURRENT_ACCOUNT":-57.8,"EMPLOYED":2385,"EMPLOYMENT_RATE":61.5,"OIL_PRICE":94.3,"COINCIDENT":98.5,"BSI_MANUF":72,"CONSTRUCTION_DONE":74.5,"SPI":75.5},
|
||||
2009: {"GDP_GROWTH":0.8,"UNEMPLOYMENT":3.6,"BASE_RATE":2.00,"CD_RATE":2.63,"CPI_GROWTH":2.8,"LEADING_INDEX":98.2,"GOVT_3Y":4.04,"GOVT_10Y":4.85,"CORP_AA":5.80,"CORP_BBB":9.24,"IPI":140.0,"EXPORT":363534,"IMPORT_AMT":323085,"USDKRW":1276,"M2":1404.4,"CSI":85.0,"KOSPI":1683,"IMPORT_PRICE":104.2,"DISHONOR_RATE":0.10,"HOUSING_PRICE":84.8,"HOUSEHOLD_DEBT":694.0,
|
||||
"FACILITY_INVEST":60.5,"RETAIL_SALES":77.5,"CURRENT_ACCOUNT":328.1,"EMPLOYED":2355,"EMPLOYMENT_RATE":60.1,"OIL_PRICE":61.8,"COINCIDENT":96.5,"BSI_MANUF":68,"CONSTRUCTION_DONE":68.2,"SPI":76.0},
|
||||
2010: {"GDP_GROWTH":6.8,"UNEMPLOYMENT":3.7,"BASE_RATE":2.50,"CD_RATE":2.80,"CPI_GROWTH":2.9,"LEADING_INDEX":103.0,"GOVT_3Y":3.72,"GOVT_10Y":4.49,"CORP_AA":4.66,"CORP_BBB":7.98,"IPI":161.5,"EXPORT":466384,"IMPORT_AMT":425212,"USDKRW":1156,"M2":1504.3,"CSI":107.0,"KOSPI":2051,"IMPORT_PRICE":115.8,"DISHONOR_RATE":0.06,"HOUSING_PRICE":87.0,"HOUSEHOLD_DEBT":776.0,
|
||||
"FACILITY_INVEST":80.5,"RETAIL_SALES":80.5,"CURRENT_ACCOUNT":282.1,"EMPLOYED":2397,"EMPLOYMENT_RATE":60.4,"OIL_PRICE":78.1,"COINCIDENT":103.0,"BSI_MANUF":95,"CONSTRUCTION_DONE":72.0,"SPI":78.5},
|
||||
2011: {"GDP_GROWTH":3.7,"UNEMPLOYMENT":3.4,"BASE_RATE":3.25,"CD_RATE":3.55,"CPI_GROWTH":4.0,"LEADING_INDEX":101.2,"GOVT_3Y":3.62,"GOVT_10Y":4.05,"CORP_AA":4.41,"CORP_BBB":7.75,"IPI":168.0,"EXPORT":555214,"IMPORT_AMT":524413,"USDKRW":1108,"M2":1586.5,"CSI":100.0,"KOSPI":1826,"IMPORT_PRICE":130.2,"DISHONOR_RATE":0.05,"HOUSING_PRICE":89.5,"HOUSEHOLD_DEBT":857.0,
|
||||
"FACILITY_INVEST":82.0,"RETAIL_SALES":82.0,"CURRENT_ACCOUNT":184.1,"EMPLOYED":2424,"EMPLOYMENT_RATE":60.7,"OIL_PRICE":106.0,"COINCIDENT":102.5,"BSI_MANUF":90,"CONSTRUCTION_DONE":73.5,"SPI":80.0},
|
||||
2012: {"GDP_GROWTH":2.4,"UNEMPLOYMENT":3.2,"BASE_RATE":2.75,"CD_RATE":3.13,"CPI_GROWTH":2.2,"LEADING_INDEX":100.3,"GOVT_3Y":3.13,"GOVT_10Y":3.35,"CORP_AA":3.76,"CORP_BBB":6.56,"IPI":168.2,"EXPORT":547870,"IMPORT_AMT":519584,"USDKRW":1127,"M2":1673.5,"CSI":100.5,"KOSPI":1997,"IMPORT_PRICE":123.5,"DISHONOR_RATE":0.04,"HOUSING_PRICE":89.0,"HOUSEHOLD_DEBT":934.0,
|
||||
"FACILITY_INVEST":79.0,"RETAIL_SALES":83.5,"CURRENT_ACCOUNT":508.4,"EMPLOYED":2468,"EMPLOYMENT_RATE":61.3,"OIL_PRICE":109.1,"COINCIDENT":100.5,"BSI_MANUF":85,"CONSTRUCTION_DONE":72.0,"SPI":82.5},
|
||||
2013: {"GDP_GROWTH":3.2,"UNEMPLOYMENT":3.1,"BASE_RATE":2.50,"CD_RATE":2.72,"CPI_GROWTH":1.3,"LEADING_INDEX":100.8,"GOVT_3Y":2.79,"GOVT_10Y":3.28,"CORP_AA":3.19,"CORP_BBB":5.87,"IPI":168.8,"EXPORT":559632,"IMPORT_AMT":515586,"USDKRW":1095,"M2":1756.2,"CSI":103.0,"KOSPI":2011,"IMPORT_PRICE":115.0,"DISHONOR_RATE":0.04,"HOUSING_PRICE":88.8,"HOUSEHOLD_DEBT":980.0,
|
||||
"FACILITY_INVEST":77.5,"RETAIL_SALES":85.0,"CURRENT_ACCOUNT":812.1,"EMPLOYED":2503,"EMPLOYMENT_RATE":61.6,"OIL_PRICE":105.5,"COINCIDENT":101.0,"BSI_MANUF":88,"CONSTRUCTION_DONE":71.5,"SPI":84.0},
|
||||
2014: {"GDP_GROWTH":3.2,"UNEMPLOYMENT":3.5,"BASE_RATE":2.00,"CD_RATE":2.36,"CPI_GROWTH":1.3,"LEADING_INDEX":101.0,"GOVT_3Y":2.56,"GOVT_10Y":2.92,"CORP_AA":2.99,"CORP_BBB":5.22,"IPI":168.5,"EXPORT":572665,"IMPORT_AMT":525515,"USDKRW":1053,"M2":1871.0,"CSI":104.0,"KOSPI":1916,"IMPORT_PRICE":105.6,"DISHONOR_RATE":0.04,"HOUSING_PRICE":90.2,"HOUSEHOLD_DEBT":1050.0,
|
||||
"FACILITY_INVEST":81.0,"RETAIL_SALES":86.5,"CURRENT_ACCOUNT":843.5,"EMPLOYED":2546,"EMPLOYMENT_RATE":62.4,"OIL_PRICE":96.7,"COINCIDENT":101.5,"BSI_MANUF":90,"CONSTRUCTION_DONE":73.8,"SPI":86.0},
|
||||
2015: {"GDP_GROWTH":2.8,"UNEMPLOYMENT":3.6,"BASE_RATE":1.50,"CD_RATE":1.72,"CPI_GROWTH":0.7,"LEADING_INDEX":100.5,"GOVT_3Y":1.80,"GOVT_10Y":2.25,"CORP_AA":2.18,"CORP_BBB":4.61,"IPI":168.0,"EXPORT":526757,"IMPORT_AMT":436499,"USDKRW":1131,"M2":2010.0,"CSI":103.5,"KOSPI":1961,"IMPORT_PRICE":79.5,"DISHONOR_RATE":0.03,"HOUSING_PRICE":95.0,"HOUSEHOLD_DEBT":1145.0,
|
||||
"FACILITY_INVEST":84.5,"RETAIL_SALES":88.0,"CURRENT_ACCOUNT":1059.4,"EMPLOYED":2567,"EMPLOYMENT_RATE":62.6,"OIL_PRICE":51.2,"COINCIDENT":101.0,"BSI_MANUF":86,"CONSTRUCTION_DONE":77.5,"SPI":88.5},
|
||||
2016: {"GDP_GROWTH":2.9,"UNEMPLOYMENT":3.7,"BASE_RATE":1.25,"CD_RATE":1.48,"CPI_GROWTH":1.0,"LEADING_INDEX":99.8,"GOVT_3Y":1.44,"GOVT_10Y":1.80,"CORP_AA":1.88,"CORP_BBB":4.60,"IPI":168.5,"EXPORT":495426,"IMPORT_AMT":406193,"USDKRW":1161,"M2":2151.1,"CSI":100.0,"KOSPI":2026,"IMPORT_PRICE":78.0,"DISHONOR_RATE":0.03,"HOUSING_PRICE":97.5,"HOUSEHOLD_DEBT":1250.0,
|
||||
"FACILITY_INVEST":82.0,"RETAIL_SALES":89.5,"CURRENT_ACCOUNT":992.4,"EMPLOYED":2597,"EMPLOYMENT_RATE":63.0,"OIL_PRICE":41.3,"COINCIDENT":100.2,"BSI_MANUF":85,"CONSTRUCTION_DONE":89.5,"SPI":90.0},
|
||||
2017: {"GDP_GROWTH":3.2,"UNEMPLOYMENT":3.7,"BASE_RATE":1.50,"CD_RATE":1.52,"CPI_GROWTH":1.9,"LEADING_INDEX":101.5,"GOVT_3Y":1.80,"GOVT_10Y":2.33,"CORP_AA":2.28,"CORP_BBB":4.83,"IPI":174.2,"EXPORT":573694,"IMPORT_AMT":478478,"USDKRW":1131,"M2":2347.2,"CSI":105.0,"KOSPI":2467,"IMPORT_PRICE":90.5,"DISHONOR_RATE":0.02,"HOUSING_PRICE":100.0,"HOUSEHOLD_DEBT":1364.0,
|
||||
"FACILITY_INVEST":92.0,"RETAIL_SALES":92.0,"CURRENT_ACCOUNT":752.6,"EMPLOYED":2620,"EMPLOYMENT_RATE":63.2,"OIL_PRICE":53.1,"COINCIDENT":101.8,"BSI_MANUF":92,"CONSTRUCTION_DONE":90.0,"SPI":92.5},
|
||||
2018: {"GDP_GROWTH":2.9,"UNEMPLOYMENT":3.8,"BASE_RATE":1.75,"CD_RATE":1.85,"CPI_GROWTH":1.5,"LEADING_INDEX":100.8,"GOVT_3Y":2.10,"GOVT_10Y":2.56,"CORP_AA":2.67,"CORP_BBB":5.41,"IPI":178.0,"EXPORT":604860,"IMPORT_AMT":535202,"USDKRW":1100,"M2":2508.9,"CSI":102.0,"KOSPI":2041,"IMPORT_PRICE":100.0,"DISHONOR_RATE":0.03,"HOUSING_PRICE":102.0,"HOUSEHOLD_DEBT":1497.0,
|
||||
"FACILITY_INVEST":94.5,"RETAIL_SALES":94.0,"CURRENT_ACCOUNT":774.7,"EMPLOYED":2633,"EMPLOYMENT_RATE":63.1,"OIL_PRICE":69.5,"COINCIDENT":101.5,"BSI_MANUF":88,"CONSTRUCTION_DONE":85.5,"SPI":94.5},
|
||||
2019: {"GDP_GROWTH":2.2,"UNEMPLOYMENT":3.8,"BASE_RATE":1.25,"CD_RATE":1.63,"CPI_GROWTH":0.4,"LEADING_INDEX":99.3,"GOVT_3Y":1.50,"GOVT_10Y":1.74,"CORP_AA":1.93,"CORP_BBB":4.52,"IPI":175.5,"EXPORT":542233,"IMPORT_AMT":503343,"USDKRW":1166,"M2":2694.0,"CSI":97.0,"KOSPI":2198,"IMPORT_PRICE":92.5,"DISHONOR_RATE":0.03,"HOUSING_PRICE":104.5,"HOUSEHOLD_DEBT":1573.0,
|
||||
"FACILITY_INVEST":89.0,"RETAIL_SALES":96.5,"CURRENT_ACCOUNT":597.0,"EMPLOYED":2660,"EMPLOYMENT_RATE":63.5,"OIL_PRICE":63.4,"COINCIDENT":100.0,"BSI_MANUF":82,"CONSTRUCTION_DONE":82.0,"SPI":97.0},
|
||||
2020: {"GDP_GROWTH":-0.7,"UNEMPLOYMENT":4.0,"BASE_RATE":0.50,"CD_RATE":0.76,"CPI_GROWTH":0.5,"LEADING_INDEX":97.0,"GOVT_3Y":0.98,"GOVT_10Y":1.52,"CORP_AA":2.03,"CORP_BBB":5.25,"IPI":170.0,"EXPORT":512498,"IMPORT_AMT":467633,"USDKRW":1180,"M2":3070.2,"CSI":90.0,"KOSPI":2873,"IMPORT_PRICE":85.0,"DISHONOR_RATE":0.02,"HOUSING_PRICE":110.0,"HOUSEHOLD_DEBT":1723.0,
|
||||
"FACILITY_INVEST":100.0,"RETAIL_SALES":100.0,"CURRENT_ACCOUNT":752.8,"EMPLOYED":2630,"EMPLOYMENT_RATE":62.5,"OIL_PRICE":42.3,"COINCIDENT":97.5,"BSI_MANUF":76,"CONSTRUCTION_DONE":79.0,"SPI":100.0},
|
||||
2021: {"GDP_GROWTH":4.3,"UNEMPLOYMENT":3.7,"BASE_RATE":1.00,"CD_RATE":1.09,"CPI_GROWTH":2.5,"LEADING_INDEX":102.8,"GOVT_3Y":1.43,"GOVT_10Y":2.12,"CORP_AA":2.26,"CORP_BBB":5.64,"IPI":183.0,"EXPORT":644400,"IMPORT_AMT":615093,"USDKRW":1144,"M2":3415.8,"CSI":106.0,"KOSPI":2978,"IMPORT_PRICE":110.5,"DISHONOR_RATE":0.01,"HOUSING_PRICE":122.0,"HOUSEHOLD_DEBT":1853.0,
|
||||
"FACILITY_INVEST":108.5,"RETAIL_SALES":105.0,"CURRENT_ACCOUNT":883.0,"EMPLOYED":2672,"EMPLOYMENT_RATE":63.8,"OIL_PRICE":69.3,"COINCIDENT":103.0,"BSI_MANUF":96,"CONSTRUCTION_DONE":77.5,"SPI":104.5},
|
||||
2022: {"GDP_GROWTH":2.6,"UNEMPLOYMENT":2.9,"BASE_RATE":3.25,"CD_RATE":3.77,"CPI_GROWTH":5.1,"LEADING_INDEX":99.2,"GOVT_3Y":3.14,"GOVT_10Y":3.60,"CORP_AA":4.25,"CORP_BBB":8.18,"IPI":186.5,"EXPORT":683585,"IMPORT_AMT":731370,"USDKRW":1292,"M2":3561.0,"CSI":95.0,"KOSPI":2237,"IMPORT_PRICE":140.2,"DISHONOR_RATE":0.02,"HOUSING_PRICE":128.0,"HOUSEHOLD_DEBT":1903.0,
|
||||
"FACILITY_INVEST":105.0,"RETAIL_SALES":107.5,"CURRENT_ACCOUNT":258.3,"EMPLOYED":2726,"EMPLOYMENT_RATE":64.5,"OIL_PRICE":97.0,"COINCIDENT":100.5,"BSI_MANUF":85,"CONSTRUCTION_DONE":76.0,"SPI":108.0},
|
||||
2023: {"GDP_GROWTH":1.4,"UNEMPLOYMENT":2.7,"BASE_RATE":3.50,"CD_RATE":3.75,"CPI_GROWTH":3.6,"LEADING_INDEX":98.8,"GOVT_3Y":3.55,"GOVT_10Y":3.78,"CORP_AA":4.40,"CORP_BBB":8.40,"IPI":183.0,"EXPORT":632744,"IMPORT_AMT":642756,"USDKRW":1305,"M2":3680.0,"CSI":96.5,"KOSPI":2655,"IMPORT_PRICE":120.0,"DISHONOR_RATE":0.03,"HOUSING_PRICE":118.0,"HOUSEHOLD_DEBT":1920.0,
|
||||
"FACILITY_INVEST":102.0,"RETAIL_SALES":106.0,"CURRENT_ACCOUNT":355.2,"EMPLOYED":2750,"EMPLOYMENT_RATE":65.0,"OIL_PRICE":82.5,"COINCIDENT":99.2,"BSI_MANUF":80,"CONSTRUCTION_DONE":72.0,"SPI":109.5},
|
||||
2024: {"GDP_GROWTH":2.2,"UNEMPLOYMENT":2.8,"BASE_RATE":3.00,"CD_RATE":3.30,"CPI_GROWTH":2.3,"LEADING_INDEX":99.5,"GOVT_3Y":3.20,"GOVT_10Y":3.42,"CORP_AA":3.90,"CORP_BBB":7.50,"IPI":185.0,"EXPORT":660000,"IMPORT_AMT":650000,"USDKRW":1350,"M2":3800.0,"CSI":98.0,"KOSPI":2400,"IMPORT_PRICE":115.0,"DISHONOR_RATE":0.03,"HOUSING_PRICE":115.0,"HOUSEHOLD_DEBT":1950.0,
|
||||
"FACILITY_INVEST":103.5,"RETAIL_SALES":105.5,"CURRENT_ACCOUNT":380.0,"EMPLOYED":2760,"EMPLOYMENT_RATE":65.2,"OIL_PRICE":80.0,"COINCIDENT":99.5,"BSI_MANUF":82,"CONSTRUCTION_DONE":68.0,"SPI":110.0},
|
||||
2025: {"GDP_GROWTH":1.8,"UNEMPLOYMENT":3.0,"BASE_RATE":2.75,"CD_RATE":3.00,"CPI_GROWTH":1.8,"LEADING_INDEX":99.8,"GOVT_3Y":2.80,"GOVT_10Y":3.10,"CORP_AA":3.50,"CORP_BBB":6.80,"IPI":184.0,"EXPORT":650000,"IMPORT_AMT":640000,"USDKRW":1380,"M2":3900.0,"CSI":99.0,"KOSPI":2500,"IMPORT_PRICE":110.0,"DISHONOR_RATE":0.03,"HOUSING_PRICE":112.0,"HOUSEHOLD_DEBT":1980.0,
|
||||
"FACILITY_INVEST":104.0,"RETAIL_SALES":106.0,"CURRENT_ACCOUNT":350.0,"EMPLOYED":2770,"EMPLOYMENT_RATE":65.5,"OIL_PRICE":75.0,"COINCIDENT":100.0,"BSI_MANUF":84,"CONSTRUCTION_DONE":65.0,"SPI":111.0},
|
||||
}
|
||||
# fmt: on
|
||||
return pd.DataFrame(data).T.rename_axis("YEAR")
|
||||
|
||||
|
||||
def fetch_and_cache(force=False, no_api=False):
|
||||
"""ECOS에서 가져오거나 캐시 반환"""
|
||||
CACHE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
if CACHE_FILE.exists() and not force:
|
||||
print(f" 캐시 로딩: {CACHE_FILE}")
|
||||
df = pd.read_csv(CACHE_FILE, index_col="YEAR")
|
||||
print(f" 변수: {len(df.columns)}개, 연도: {df.index.min()}~{df.index.max()}")
|
||||
return df
|
||||
|
||||
if no_api:
|
||||
print(" API 없이 fallback 사용")
|
||||
df = _build_fallback()
|
||||
df.to_csv(CACHE_FILE)
|
||||
print(f" 캐시 저장: {CACHE_FILE} ({len(df.columns)}개 변수)")
|
||||
return df
|
||||
|
||||
# ECOS API 수집
|
||||
print(" ECOS API에서 데이터 수집 중...")
|
||||
# TODO: API 실제 호출 구현 (config.yaml에서 API key 로딩)
|
||||
# 우선 fallback 사용
|
||||
print(" (API 미구현 — fallback 사용)")
|
||||
df = _build_fallback()
|
||||
df.to_csv(CACHE_FILE)
|
||||
print(f" 캐시 저장: {CACHE_FILE} ({len(df.columns)}개 변수)")
|
||||
return df
|
||||
|
||||
|
||||
def load_macro_data(start_year=2000, end_year=2025) -> pd.DataFrame:
|
||||
"""메인 파이프라인용 거시데이터 로딩"""
|
||||
if CACHE_FILE.exists():
|
||||
df = pd.read_csv(CACHE_FILE, index_col="YEAR")
|
||||
else:
|
||||
df = _build_fallback()
|
||||
CACHE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
df.to_csv(CACHE_FILE)
|
||||
return df.loc[start_year:end_year]
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="ECOS 거시경제변수 수집기")
|
||||
parser.add_argument("--force", action="store_true", help="캐시 무시하고 재수집")
|
||||
parser.add_argument("--no-api", action="store_true", help="API 없이 fallback만 사용")
|
||||
args = parser.parse_args()
|
||||
|
||||
print("=" * 60)
|
||||
print(" ECOS 거시경제변수 수집기")
|
||||
print("=" * 60)
|
||||
|
||||
df = fetch_and_cache(force=args.force, no_api=args.no_api)
|
||||
|
||||
print(f"\n === 변수 목록 ({len(df.columns)}개) ===")
|
||||
for col in df.columns:
|
||||
vals = df[col].dropna()
|
||||
print(f" {col:25s} | {vals.min():>12.2f} ~ {vals.max():>12.2f} | {len(vals)} obs")
|
||||
|
||||
print(f"\n === 최근 5년 ===")
|
||||
print(df.tail())
|
||||
202
data/export_audit.py
Normal file
202
data/export_audit.py
Normal file
@@ -0,0 +1,202 @@
|
||||
"""
|
||||
전이행렬 데이터 전수 감사 엑셀 생성
|
||||
|
||||
단계:
|
||||
1. 3사 원본 CSV (WR 포함 before, WR 제거 after)
|
||||
2. 3사 평균 (AVG)
|
||||
3. TTC (장기 평균)
|
||||
4. Zt 추정 결과 + 부도율(PD) 비교
|
||||
"""
|
||||
|
||||
import sys, io
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from data.transition_matrices import load_transition_matrices, compute_ttc_matrix, RATING_GRADES
|
||||
from models.credit_cycle import estimate_zt_series, compute_thresholds, model_transition_matrix
|
||||
|
||||
DATA_DIR = Path(__file__).parent / "real"
|
||||
GRADES = RATING_GRADES # ['AAA','AA','A','BBB','BB','B','CCC','D']
|
||||
AGENCIES = ["KR", "NICE", "SCI"]
|
||||
|
||||
|
||||
def load_raw_csv(agency, year):
|
||||
"""개별 에이전시 CSV 로딩"""
|
||||
f = DATA_DIR / f"{agency}_{year}.csv"
|
||||
if f.exists():
|
||||
return pd.read_csv(f, index_col=0)
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
output = Path(__file__).parent.parent / "results" / "transition_matrix_audit.xlsx"
|
||||
|
||||
# 연도 범위 확인
|
||||
tm_all = load_transition_matrices("real")
|
||||
years = sorted(tm_all.keys())
|
||||
print(f"연도: {years[0]}~{years[-1]} ({len(years)}개)")
|
||||
|
||||
with pd.ExcelWriter(output, engine="openpyxl") as writer:
|
||||
|
||||
# ============================================================
|
||||
# Sheet 1: 연도별 3사 + AVG 부도율(PD) 비교
|
||||
# ============================================================
|
||||
pd_rows = []
|
||||
for year in years:
|
||||
row = {"Year": year}
|
||||
for agency in AGENCIES:
|
||||
df = load_raw_csv(agency, year)
|
||||
if df is not None and "D" in df.columns:
|
||||
for grade in ["AAA", "AA", "A", "BBB", "BB", "B", "CCC"]:
|
||||
if grade in df.index:
|
||||
row[f"{agency}_{grade}_PD"] = round(df.loc[grade, "D"] * 100, 4)
|
||||
|
||||
# AVG
|
||||
avg_df = load_raw_csv("AVG", year)
|
||||
if avg_df is not None and "D" in avg_df.columns:
|
||||
for grade in ["AAA", "AA", "A", "BBB", "BB", "B", "CCC"]:
|
||||
if grade in avg_df.index:
|
||||
row[f"AVG_{grade}_PD"] = round(avg_df.loc[grade, "D"] * 100, 4)
|
||||
|
||||
pd_rows.append(row)
|
||||
|
||||
pd_df = pd.DataFrame(pd_rows)
|
||||
pd_df.to_excel(writer, sheet_name="PD_comparison", index=False)
|
||||
print(f" Sheet: PD_comparison ({len(pd_df)} rows)")
|
||||
|
||||
# ============================================================
|
||||
# Sheet 2~: 연도별 3사 + AVG 전체 전이행렬
|
||||
# ============================================================
|
||||
# 대표 연도 선택 (전부 넣으면 시트가 너무 많으므로)
|
||||
sample_years = [1998, 2000, 2005, 2008, 2009, 2015, 2020, 2022, 2025]
|
||||
sample_years = [y for y in sample_years if y in years]
|
||||
|
||||
for year in sample_years:
|
||||
rows = []
|
||||
for agency in AGENCIES + ["AVG"]:
|
||||
df = load_raw_csv(agency, year)
|
||||
if df is not None:
|
||||
for grade in df.index:
|
||||
row = {"Agency": agency, "From": grade}
|
||||
for col in df.columns:
|
||||
row[col] = round(df.loc[grade, col] * 100, 4)
|
||||
rows.append(row)
|
||||
# 빈 행 구분
|
||||
rows.append({})
|
||||
|
||||
sheet_df = pd.DataFrame(rows)
|
||||
sheet_name = f"TM_{year}"
|
||||
sheet_df.to_excel(writer, sheet_name=sheet_name, index=False)
|
||||
print(f" Sheet: {sheet_name}")
|
||||
|
||||
# ============================================================
|
||||
# Sheet: TTC (장기평균 전이행렬)
|
||||
# ============================================================
|
||||
ttc = compute_ttc_matrix(tm_all)
|
||||
ttc_df = pd.DataFrame(ttc * 100, index=GRADES, columns=GRADES)
|
||||
ttc_df = ttc_df.round(4)
|
||||
ttc_df.to_excel(writer, sheet_name="TTC_matrix")
|
||||
print(f" Sheet: TTC_matrix")
|
||||
|
||||
# ============================================================
|
||||
# Sheet: Zt 추정 결과 + 부호 검증
|
||||
# ============================================================
|
||||
zt_dict = estimate_zt_series(tm_all, ttc, rho=0.20)
|
||||
thresholds = compute_thresholds(ttc)
|
||||
|
||||
zt_rows = []
|
||||
for year in years:
|
||||
z = zt_dict[year]
|
||||
|
||||
# AVG의 실제 PD
|
||||
avg_df = load_raw_csv("AVG", year)
|
||||
obs_pds = {}
|
||||
if avg_df is not None and "D" in avg_df.columns:
|
||||
for grade in ["BBB", "BB", "B", "CCC"]:
|
||||
if grade in avg_df.index:
|
||||
obs_pds[grade] = avg_df.loc[grade, "D"] * 100
|
||||
|
||||
# 모형 PD (Zt 조건부)
|
||||
model_tm = model_transition_matrix(thresholds, z, rho=0.20)
|
||||
model_pds = {}
|
||||
for gi, grade in enumerate(GRADES[:-1]): # D 제외
|
||||
model_pds[grade] = model_tm[gi, -1] * 100 # D열
|
||||
|
||||
# TTC PD
|
||||
ttc_pds = {}
|
||||
for gi, grade in enumerate(GRADES[:-1]):
|
||||
ttc_pds[grade] = ttc[gi, -1] * 100
|
||||
|
||||
row = {
|
||||
"Year": year,
|
||||
"Zt": round(z, 4),
|
||||
"Zt_sign": "+" if z > 0 else "-",
|
||||
}
|
||||
|
||||
for grade in ["BBB", "BB", "B", "CCC"]:
|
||||
row[f"TTC_PD_{grade}"] = round(ttc_pds.get(grade, 0), 4)
|
||||
row[f"Obs_PD_{grade}"] = round(obs_pds.get(grade, 0), 4)
|
||||
row[f"Model_PD_{grade}"] = round(model_pds.get(grade, 0), 4)
|
||||
|
||||
# Obs vs TTC 비교 — Zt+면 PD가 TTC보다 높아야 하나 낮아야 하나?
|
||||
bbb_obs = obs_pds.get("BBB", 0)
|
||||
bbb_ttc = ttc_pds.get("BBB", 0)
|
||||
if bbb_obs > bbb_ttc:
|
||||
row["Obs_vs_TTC"] = "PD > TTC (부도 많음)"
|
||||
else:
|
||||
row["Obs_vs_TTC"] = "PD < TTC (부도 적음)"
|
||||
|
||||
zt_rows.append(row)
|
||||
|
||||
zt_df = pd.DataFrame(zt_rows)
|
||||
zt_df.to_excel(writer, sheet_name="Zt_analysis", index=False)
|
||||
print(f" Sheet: Zt_analysis ({len(zt_df)} rows)")
|
||||
|
||||
# ============================================================
|
||||
# Sheet: 모든 연도 AVG 전체 전이행렬 (flat)
|
||||
# ============================================================
|
||||
all_tm_rows = []
|
||||
for year in years:
|
||||
avg_df = load_raw_csv("AVG", year)
|
||||
if avg_df is not None:
|
||||
for grade in avg_df.index:
|
||||
row = {"Year": year, "From": grade}
|
||||
for col in avg_df.columns:
|
||||
row[f"To_{col}"] = round(avg_df.loc[grade, col] * 100, 4)
|
||||
all_tm_rows.append(row)
|
||||
|
||||
all_tm_df = pd.DataFrame(all_tm_rows)
|
||||
all_tm_df.to_excel(writer, sheet_name="ALL_AVG_TM", index=False)
|
||||
print(f" Sheet: ALL_AVG_TM ({len(all_tm_df)} rows)")
|
||||
|
||||
# ============================================================
|
||||
# Sheet: parse_pdf_matrices.py 원본 vs 보정 확인
|
||||
# 3사별 특정 연도의 원본(WR포함) 데이터 확인
|
||||
# ============================================================
|
||||
# WR 보정 전 데이터는 CSV에 이미 WR 제거 상태로 저장됨
|
||||
# 대신 parse 스크립트의 로직을 설명하는 시트 추가
|
||||
note_rows = [
|
||||
{"항목": "데이터 출처", "설명": "금감원 공시 PDF (KR신용평가, NICE신용평가, 한국신용평가)"},
|
||||
{"항목": "원본 형식", "설명": "8x9 행렬 (AAA~CCC+D, WR 포함)"},
|
||||
{"항목": "WR 제거 방식", "설명": "WR열 제거 후 나머지 열의 합이 1이 되도록 행 정규화"},
|
||||
{"항목": "수식", "설명": "p_ij_adjusted = p_ij / (1 - WR_i), 단 WR_i = WR열 비율"},
|
||||
{"항목": "3사 평균", "설명": "AVG = (KR + NICE + SCI) / 3, 연도별 단순 평균"},
|
||||
{"항목": "CCC 행", "설명": "B이하에서 extrapolation (B이하의 D비율 × 1.3 적용)"},
|
||||
{"항목": "TTC 행렬", "설명": "모든 연도(1998~2025) AVG 행렬의 단순 평균"},
|
||||
{"항목": "Zt 추정", "설명": "WLS 최소화: min_Z Σ w_ij*(p_obs - p_model(Z))^2"},
|
||||
{"항목": "수식 (model)", "설명": "p_ij(Z) = Φ((d_ij - √ρ·Z)/√(1-ρ)) - Φ((d_{i,j-1} - √ρ·Z)/√(1-ρ))"},
|
||||
{"항목": "Zt 부호 (코드)", "설명": "양수 = PD↑(불황?), 음수 = PD↓(호황?)"},
|
||||
{"항목": "Zt 부호 (논문)", "설명": "양수 = 호황(PD↓), 음수 = 불황(PD↑) — 부호 반전 확인 필요!"},
|
||||
]
|
||||
pd.DataFrame(note_rows).to_excel(writer, sheet_name="NOTES", index=False)
|
||||
print(f" Sheet: NOTES")
|
||||
|
||||
print(f"\n 완료: {output}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
360
data/export_verification.py
Normal file
360
data/export_verification.py
Normal file
@@ -0,0 +1,360 @@
|
||||
"""
|
||||
파이프라인 전단계 검증용 엑셀 생성
|
||||
|
||||
시트 구성:
|
||||
1. RAW_TM — 3사 원본 전이행렬 (WR 포함)
|
||||
2. WR_REMOVAL — WR 제거 과정 (수식 포함)
|
||||
3. AVG_TM — 3사 평균 전이행렬 (연도별)
|
||||
4. TTC_MATRIX — TTC 장기평균 전이행렬
|
||||
5. THRESHOLDS — Φ⁻¹(누적확률) 임계값
|
||||
6. ZT_ESTIMATION— 연도별 Zt 추정 (관측PD vs 모형PD)
|
||||
7. MACRO_DATA — 31개 거시경제변수 원본
|
||||
8. FEATURES — 파생변수 (DIFF/LAG1/PCT)
|
||||
9. REGRESSION — 최적 회귀모형 상세
|
||||
10. FORMULAS — 각 단계 계산수식 요약
|
||||
"""
|
||||
|
||||
import sys, io
|
||||
import numpy as np, pandas as pd
|
||||
from pathlib import Path
|
||||
from scipy.stats import norm
|
||||
|
||||
if sys.stdout.encoding != 'utf-8':
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from data.transition_matrices import (
|
||||
load_transition_matrices, compute_ttc_matrix, RATING_GRADES
|
||||
)
|
||||
from models.credit_cycle import (
|
||||
estimate_zt_series, compute_thresholds, model_transition_prob
|
||||
)
|
||||
from data.ecos_fetcher import load_macro_data
|
||||
|
||||
import statsmodels.api as sm
|
||||
from scipy import stats as sp_stats
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore")
|
||||
|
||||
BASE_DIR = Path(__file__).parent.parent
|
||||
OUT_FILE = BASE_DIR / "results" / "pipeline_verification.xlsx"
|
||||
|
||||
GRADES = list(RATING_GRADES)
|
||||
N = len(GRADES)
|
||||
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print(" 파이프라인 전단계 검증 엑셀 생성")
|
||||
print("=" * 60)
|
||||
|
||||
# ============================================================
|
||||
# 1. 전이행렬 로딩
|
||||
# ============================================================
|
||||
print("\n [1/7] 전이행렬 로딩...")
|
||||
tm_dict = load_transition_matrices("real")
|
||||
ttc = compute_ttc_matrix(tm_dict)
|
||||
years = sorted(tm_dict.keys())
|
||||
print(f" {len(years)}년 ({years[0]}~{years[-1]})")
|
||||
|
||||
# ============================================================
|
||||
# 2. Zt 추정
|
||||
# ============================================================
|
||||
print(" [2/7] Zt 추정...")
|
||||
rho = 0.20
|
||||
zt_dict = estimate_zt_series(tm_dict, ttc, rho=rho)
|
||||
|
||||
# 임계값 계산
|
||||
thresholds = compute_thresholds(ttc)
|
||||
|
||||
# ============================================================
|
||||
# 3. 거시경제변수
|
||||
# ============================================================
|
||||
print(" [3/7] 거시경제변수 로딩...")
|
||||
macro_raw = load_macro_data(2000, 2025)
|
||||
|
||||
# ============================================================
|
||||
# 엑셀 생성
|
||||
# ============================================================
|
||||
print(" [4/7] 엑셀 생성 중...")
|
||||
(BASE_DIR / "results").mkdir(exist_ok=True)
|
||||
|
||||
with pd.ExcelWriter(OUT_FILE, engine="openpyxl") as writer:
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 1: TTC_MATRIX
|
||||
# --------------------------------------------------------
|
||||
ttc_df = pd.DataFrame(ttc, index=GRADES, columns=GRADES)
|
||||
ttc_df.to_excel(writer, sheet_name="TTC_MATRIX")
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 2: THRESHOLDS
|
||||
# --------------------------------------------------------
|
||||
# d_{i,j} = Φ⁻¹(Σ_{k≤j} p̄_{i,k})
|
||||
thresh_df = pd.DataFrame(thresholds, index=GRADES, columns=GRADES)
|
||||
thresh_df.to_excel(writer, sheet_name="THRESHOLDS")
|
||||
|
||||
# 임계값 계산 과정 (누적확률 + Φ⁻¹)
|
||||
cum_prob_rows = []
|
||||
for i in range(N):
|
||||
row = {}
|
||||
cum = 0.0
|
||||
for j in range(N):
|
||||
cum += ttc[i, j]
|
||||
cum_clipped = np.clip(cum, 1e-10, 1.0 - 1e-10)
|
||||
row[f"CumProb_{GRADES[j]}"] = round(cum, 8)
|
||||
row[f"Φ⁻¹_{GRADES[j]}"] = round(norm.ppf(cum_clipped), 6)
|
||||
cum_prob_rows.append(row)
|
||||
cum_df = pd.DataFrame(cum_prob_rows, index=GRADES)
|
||||
cum_df.to_excel(writer, sheet_name="THRESHOLD_DETAIL")
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 3: 연도별 AVG 전이행렬 + PD
|
||||
# --------------------------------------------------------
|
||||
avg_rows = []
|
||||
for yr in years:
|
||||
mat = tm_dict[yr]
|
||||
for i in range(N - 1): # D행 제외
|
||||
row = {"Year": yr, "From": GRADES[i]}
|
||||
for j in range(N):
|
||||
row[f"To_{GRADES[j]}"] = round(mat[i, j], 6)
|
||||
row["PD"] = round(mat[i, -1], 6) # D열
|
||||
avg_rows.append(row)
|
||||
avg_df = pd.DataFrame(avg_rows)
|
||||
avg_df.to_excel(writer, sheet_name="YEARLY_TM", index=False)
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 4: Zt 추정 상세
|
||||
# --------------------------------------------------------
|
||||
zt_rows = []
|
||||
sqrt_rho = np.sqrt(rho)
|
||||
sqrt_1_rho = np.sqrt(1.0 - rho)
|
||||
|
||||
for yr in years:
|
||||
z = zt_dict.get(yr, np.nan)
|
||||
mat = tm_dict[yr]
|
||||
|
||||
row = {"Year": yr, "Zt": round(z, 6)}
|
||||
|
||||
# 각 등급별 관측PD vs 모형PD
|
||||
for i in range(N - 1):
|
||||
obs_pd = mat[i, -1]
|
||||
if not np.isnan(z):
|
||||
# 모형 PD 계산: P(D|Z) = 1 - Φ((d_{CCC} + √ρ·Z)/√(1-ρ))
|
||||
d_lower = thresholds[i, N - 2] # CCC까지의 누적 = d_{i,CCC}
|
||||
model_pd = 1.0 - norm.cdf((d_lower + sqrt_rho * z) / sqrt_1_rho)
|
||||
else:
|
||||
model_pd = np.nan
|
||||
|
||||
row[f"ObsPD_{GRADES[i]}"] = round(obs_pd, 6)
|
||||
row[f"ModelPD_{GRADES[i]}"] = round(model_pd, 6) if not np.isnan(model_pd) else ""
|
||||
row[f"Error_{GRADES[i]}"] = round(obs_pd - model_pd, 6) if not np.isnan(model_pd) else ""
|
||||
|
||||
# 수식 참조값
|
||||
row["√ρ"] = round(sqrt_rho, 6)
|
||||
row["√(1-ρ)"] = round(sqrt_1_rho, 6)
|
||||
row["ρ"] = rho
|
||||
|
||||
zt_rows.append(row)
|
||||
|
||||
zt_df = pd.DataFrame(zt_rows)
|
||||
zt_df.to_excel(writer, sheet_name="ZT_ESTIMATION", index=False)
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 5: Zt 조건부 전이확률 수식 상세 (예시 2년)
|
||||
# --------------------------------------------------------
|
||||
sample_years = [1998, 2006, 2008, 2020, 2025]
|
||||
cond_rows = []
|
||||
for yr in sample_years:
|
||||
if yr not in zt_dict:
|
||||
continue
|
||||
z = zt_dict[yr]
|
||||
for i in range(N - 1):
|
||||
for j in range(N):
|
||||
d_upper = thresholds[i, j]
|
||||
upper_arg = (d_upper + sqrt_rho * z) / sqrt_1_rho
|
||||
upper_val = norm.cdf(upper_arg)
|
||||
|
||||
if j == 0:
|
||||
lower_val = 0.0
|
||||
lower_arg = -np.inf
|
||||
else:
|
||||
d_lower = thresholds[i, j - 1]
|
||||
lower_arg = (d_lower + sqrt_rho * z) / sqrt_1_rho
|
||||
lower_val = norm.cdf(lower_arg)
|
||||
|
||||
prob = max(upper_val - lower_val, 0.0)
|
||||
obs_prob = tm_dict[yr][i, j] if yr in tm_dict else np.nan
|
||||
|
||||
cond_rows.append({
|
||||
"Year": yr, "Zt": round(z, 4),
|
||||
"From": GRADES[i], "To": GRADES[j],
|
||||
"d_upper": round(d_upper, 6),
|
||||
"(d+√ρ·Z)/√(1-ρ)_upper": round(upper_arg, 6),
|
||||
"Φ(upper)": round(upper_val, 8),
|
||||
"(d+√ρ·Z)/√(1-ρ)_lower": round(lower_arg, 6) if not np.isinf(lower_arg) else "-∞",
|
||||
"Φ(lower)": round(lower_val, 8),
|
||||
"P(j|Z)=Φ(upper)-Φ(lower)": round(prob, 8),
|
||||
"Observed": round(obs_prob, 8) if not np.isnan(obs_prob) else "",
|
||||
})
|
||||
|
||||
cond_df = pd.DataFrame(cond_rows)
|
||||
cond_df.to_excel(writer, sheet_name="COND_TM_DETAIL", index=False)
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 6: 거시경제변수 원본
|
||||
# --------------------------------------------------------
|
||||
macro_raw.to_excel(writer, sheet_name="MACRO_RAW")
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 7: 파생변수
|
||||
# --------------------------------------------------------
|
||||
from data.macro_analysis import build_features, EXPECTED_SIGNS
|
||||
features = build_features(macro_raw)
|
||||
features.to_excel(writer, sheet_name="FEATURES")
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 8: 상관분석
|
||||
# --------------------------------------------------------
|
||||
zt_series = pd.Series(zt_dict, name="Zt")
|
||||
zt_2000 = zt_series[(zt_series.index >= 2000) & (zt_series.index <= 2025)]
|
||||
common = sorted(set(zt_2000.index) & set(features.index))
|
||||
|
||||
corr_rows = []
|
||||
for col in sorted(features.columns):
|
||||
s = features.loc[common, col].dropna()
|
||||
valid = s.index.intersection(zt_2000.index)
|
||||
if len(valid) < 12:
|
||||
continue
|
||||
r, p = sp_stats.pearsonr(zt_2000.loc[valid], s.loc[valid])
|
||||
exp = EXPECTED_SIGNS.get(col, 0)
|
||||
sign_ok = "OK" if (exp == 0 or (r > 0 and exp > 0) or (r < 0 and exp < 0)) else "WRONG"
|
||||
exp_str = "+" if exp > 0 else ("-" if exp < 0 else "N/A")
|
||||
corr_rows.append({
|
||||
"Variable": col,
|
||||
"Pearson_r": round(r, 6),
|
||||
"p_value": round(p, 6),
|
||||
"|r|": round(abs(r), 6),
|
||||
"Expected_Sign": exp_str,
|
||||
"Actual_Sign": "+" if r > 0 else "-",
|
||||
"Sign_Check": sign_ok,
|
||||
"N_obs": len(valid),
|
||||
})
|
||||
corr_df = pd.DataFrame(corr_rows).sort_values("|r|", ascending=False)
|
||||
corr_df.to_excel(writer, sheet_name="CORRELATION", index=False)
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 9: 최적 회귀모형 상세
|
||||
# --------------------------------------------------------
|
||||
best_vars = ["CREDIT_SPREAD_LAG1", "USDKRW", "HOUSING_PRICE"]
|
||||
X_df = features.loc[common, best_vars].dropna()
|
||||
valid_idx = X_df.index.intersection(zt_2000.index)
|
||||
y = zt_2000.loc[valid_idx]
|
||||
X_raw = X_df.loc[valid_idx]
|
||||
Xm, Xs = X_raw.mean(), X_raw.std()
|
||||
Xs[Xs < 1e-10] = 1
|
||||
Xn = (X_raw - Xm) / Xs
|
||||
|
||||
model = sm.OLS(y.values, sm.add_constant(Xn.values)).fit()
|
||||
|
||||
# 회귀 데이터
|
||||
reg_data = pd.DataFrame({
|
||||
"Year": valid_idx,
|
||||
"Zt_actual": y.values.round(6),
|
||||
})
|
||||
for i, v in enumerate(best_vars):
|
||||
reg_data[f"{v}_raw"] = X_raw[v].values.round(4)
|
||||
reg_data[f"{v}_std"] = Xn[v].values.round(6)
|
||||
|
||||
reg_data["Zt_predicted"] = model.fittedvalues.round(6)
|
||||
reg_data["Residual"] = model.resid.round(6)
|
||||
reg_data.to_excel(writer, sheet_name="REGRESSION_DATA", index=False)
|
||||
|
||||
# 회귀 계수 시트
|
||||
coef_rows = [
|
||||
{"Parameter": "const", "Coefficient": round(model.params[0], 6),
|
||||
"Std_Error": round(model.bse[0], 6), "t_stat": round(model.tvalues[0], 4),
|
||||
"p_value": round(model.pvalues[0], 6), "Note": "절편 (표준화)"},
|
||||
]
|
||||
for i, v in enumerate(best_vars):
|
||||
coef_rows.append({
|
||||
"Parameter": v,
|
||||
"Coefficient": round(model.params[i + 1], 6),
|
||||
"Std_Error": round(model.bse[i + 1], 6),
|
||||
"t_stat": round(model.tvalues[i + 1], 4),
|
||||
"p_value": round(model.pvalues[i + 1], 6),
|
||||
"Mean": round(Xm[v], 4),
|
||||
"Std": round(Xs[v], 4),
|
||||
"Note": f"Zt = β₀ + β₁·(X₁-μ₁)/σ₁ + β₂·(X₂-μ₂)/σ₂ + β₃·(X₃-μ₃)/σ₃",
|
||||
})
|
||||
|
||||
stats_rows = [
|
||||
{"Statistic": "R²", "Value": round(model.rsquared, 6)},
|
||||
{"Statistic": "Adj. R²", "Value": round(model.rsquared_adj, 6)},
|
||||
{"Statistic": "F-statistic", "Value": round(model.fvalue, 4)},
|
||||
{"Statistic": "F p-value", "Value": f"{model.f_pvalue:.6e}"},
|
||||
{"Statistic": "AIC", "Value": round(model.aic, 2)},
|
||||
{"Statistic": "BIC", "Value": round(model.bic, 2)},
|
||||
{"Statistic": "Durbin-Watson", "Value": round(sm.stats.durbin_watson(model.resid), 4)},
|
||||
{"Statistic": "N_obs", "Value": model.nobs},
|
||||
]
|
||||
|
||||
coef_df = pd.DataFrame(coef_rows)
|
||||
stats_df = pd.DataFrame(stats_rows)
|
||||
|
||||
# 두 테이블을 한 시트에
|
||||
coef_df.to_excel(writer, sheet_name="REGRESSION_MODEL", index=False, startrow=0)
|
||||
stats_df.to_excel(writer, sheet_name="REGRESSION_MODEL", index=False,
|
||||
startrow=len(coef_df) + 3)
|
||||
|
||||
# --------------------------------------------------------
|
||||
# Sheet 10: 수식 요약
|
||||
# --------------------------------------------------------
|
||||
formulas = [
|
||||
{"Step": "1. 단일팩터 모형",
|
||||
"Formula": "X_i = √ρ · Z + √(1-ρ) · Y_i",
|
||||
"Description": "X: 신용도 변화, Z: 체계적 요인 (Z>0=호황), Y: 개별 요인",
|
||||
"Parameters": f"ρ = {rho}"},
|
||||
{"Step": "2. TTC 임계값",
|
||||
"Formula": "d_{i,j} = Φ⁻¹(Σ_{k≤j} p̄_{i,k})",
|
||||
"Description": "TTC 전이확률의 누적합에 표준정규 역함수 적용",
|
||||
"Parameters": "p̄ = TTC 전이행렬 (장기평균)"},
|
||||
{"Step": "3. 조건부 전이확률",
|
||||
"Formula": "P(j|Z) = Φ((d_{i,j} + √ρ·Z) / √(1-ρ)) - Φ((d_{i,j-1} + √ρ·Z) / √(1-ρ))",
|
||||
"Description": "Z 조건하에서 등급 i→j 전이확률. Z>0이면 상향 전이 증가, PD 감소",
|
||||
"Parameters": f"√ρ = {sqrt_rho:.6f}, √(1-ρ) = {sqrt_1_rho:.6f}"},
|
||||
{"Step": "4. Zt WLS 추정",
|
||||
"Formula": "min_Z Σ w_{ij} · (p_obs - p_model(Z))²",
|
||||
"Description": "관측 전이확률을 가장 잘 재현하는 Z를 WLS로 추정",
|
||||
"Parameters": "가중치: 부도열 10배, 대각 5배"},
|
||||
{"Step": "5. 거시 회귀",
|
||||
"Formula": "Zt = β₀ + Σ βₖ · (Xₖ - μₖ) / σₖ + ε",
|
||||
"Description": "표준화된 거시변수로 Zt 예측 (OLS)",
|
||||
"Parameters": f"변수: {', '.join(best_vars)}"},
|
||||
{"Step": "5a. 표준화 복원",
|
||||
"Formula": "Xₖ_std = (Xₖ - μₖ) / σₖ",
|
||||
"Description": "각 변수의 평균(μ)과 표준편차(σ)로 표준화",
|
||||
"Parameters": " / ".join([f"{v}: μ={Xm[v]:.4f}, σ={Xs[v]:.4f}" for v in best_vars])},
|
||||
{"Step": "6. 조건부 PD",
|
||||
"Formula": "PD(Z) = 1 - Φ((d_{CCC} + √ρ·Z) / √(1-ρ))",
|
||||
"Description": "Zt에서 등급별 조건부 부도확률",
|
||||
"Parameters": "d_{CCC}: 각 등급의 CCC 임계값"},
|
||||
{"Step": "7. Lifetime PD",
|
||||
"Formula": "CUM_TM(T) = TM(Z₁) × TM(Z₂) × ... × TM(Zₜ)",
|
||||
"Description": "순차 행렬곱으로 T년 누적 전이행렬 계산. D열 = 누적PD",
|
||||
"Parameters": "시나리오별 Zt 경로 (50년)"},
|
||||
{"Step": "8. ECL",
|
||||
"Formula": "ECL = Σ_t [PD_marginal(t) × LGD × DF(t)]",
|
||||
"Description": "한계PD × LGD × 할인계수 합산 (IFRS 9)",
|
||||
"Parameters": "LGD=45%, DF(t) = 1/(1+r)^t"},
|
||||
]
|
||||
formulas_df = pd.DataFrame(formulas)
|
||||
formulas_df.to_excel(writer, sheet_name="FORMULAS", index=False)
|
||||
|
||||
print(f"\n ✅ 엑셀 생성 완료: {OUT_FILE}")
|
||||
print(f" 10개 시트")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
366
data/macro_analysis.py
Normal file
366
data/macro_analysis.py
Normal file
@@ -0,0 +1,366 @@
|
||||
"""
|
||||
거시변수 재분석 v3 — 31변수 확장 + Zt 부호 수정반영
|
||||
|
||||
규칙:
|
||||
1. 금리 변수: DIFF만 허용 (LEVEL/LOG 등 제외)
|
||||
2. 지수/금액: 원본 + DIFF/PCT/LAG1
|
||||
3. 이미 변화율 변수: 원본 + LAG1만
|
||||
4. 계수 부호 경제적 일관성 체크
|
||||
5. Zt: 2000~2025 (26obs)
|
||||
|
||||
Zt 부호 (Belkin 수정후): **양수 = 호황** (PD 하락), 음수 = 불황
|
||||
|
||||
경제적 부호 기대 (Zt↑ = 호황):
|
||||
GDP_GROWTH: 양(+) — 성장 ↑ → 호황 → Zt ↑
|
||||
UNEMPLOYMENT: 음(-) — 실업 ↑ → 불황 → Zt ↓
|
||||
BASE_RATE_DIFF: 음(-) — 금리인상 → 긴축 → Zt ↓
|
||||
CPI_GROWTH: 음(-) — 물가급등 → 구매력↓ → Zt ↓
|
||||
LEADING_INDEX: 양(+) — 선행 ↑ → 호황 → Zt ↑
|
||||
CREDIT_SPREAD: 음(-) — 스프레드↑ → 위험↑ → Zt ↓
|
||||
EXPORT: 양(+) — 수출 ↑ → 호황 → Zt ↑
|
||||
KOSPI: 양(+) — 주가↑ → 호황 → Zt ↑
|
||||
OIL_PRICE: 음(-) — 유가↑ → 비용↑ → Zt ↓ (수입국)
|
||||
DISHONOR_RATE: 음(-) — 부도율↑ → 불황 → Zt ↓
|
||||
USDKRW: 음(-) — 원화약세 → 불황 → Zt ↓
|
||||
BSI_MANUF: 양(+) — BSI↑ → 경기전망↑ → Zt ↑
|
||||
CSI: 양(+) — 소비심리↑ → 호황 → Zt ↑
|
||||
"""
|
||||
|
||||
import sys, io, itertools
|
||||
import numpy as np, pandas as pd
|
||||
import statsmodels.api as sm
|
||||
from scipy import stats
|
||||
from pathlib import Path
|
||||
|
||||
if sys.stdout.encoding != 'utf-8':
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
|
||||
|
||||
import warnings
|
||||
warnings.filterwarnings("ignore")
|
||||
|
||||
BASE_DIR = Path(__file__).parent.parent
|
||||
|
||||
# Zt 부호: 양수=호황 (Belkin 수정후)
|
||||
# 각 변수가 증가할때 Zt가 어느 방향으로 움직여야 하는지
|
||||
EXPECTED_SIGNS = {
|
||||
# --- 성장/경기 ---
|
||||
"GDP_GROWTH": +1, "GDP_GROWTH_LAG1": +1,
|
||||
"LEADING_INDEX": +1, "LEADING_INDEX_DIFF": +1, "LEADING_INDEX_LAG1": +1,
|
||||
"COINCIDENT": +1, "COINCIDENT_DIFF": +1, "COINCIDENT_LAG1": +1,
|
||||
"BSI_MANUF": +1, "BSI_MANUF_LAG1": +1,
|
||||
|
||||
# --- 고용 ---
|
||||
"UNEMPLOYMENT": -1, "UNEMPLOYMENT_LAG1": -1, "UNEMPLOYMENT_DIFF": -1,
|
||||
"EMPLOYED": +1, "EMPLOYED_DIFF": +1, "EMPLOYED_PCT": +1, "EMPLOYED_LAG1": +1,
|
||||
"EMPLOYMENT_RATE": +1, "EMPLOYMENT_RATE_DIFF": +1, "EMPLOYMENT_RATE_LAG1": +1,
|
||||
|
||||
# --- 금리 차분 ---
|
||||
"BASE_RATE_DIFF": -1, "CD_RATE_DIFF": -1,
|
||||
"GOVT_3Y_DIFF": -1, "GOVT_10Y_DIFF": -1,
|
||||
"CORP_AA_DIFF": -1, "CORP_BBB_DIFF": -1,
|
||||
# 금리 래그 (레벨): 부호 방향 불확실 → 제약 없음
|
||||
"BASE_RATE_LAG1": 0, "CD_RATE_LAG1": 0,
|
||||
"GOVT_3Y_LAG1": 0, "GOVT_10Y_LAG1": 0,
|
||||
"CORP_AA_LAG1": 0, "CORP_BBB_LAG1": 0,
|
||||
|
||||
# --- 물가 ---
|
||||
"CPI_GROWTH": -1, "CPI_GROWTH_LAG1": -1,
|
||||
"IMPORT_PRICE": 0, "IMPORT_PRICE_DIFF": -1, "IMPORT_PRICE_PCT": -1,
|
||||
"IMPORT_PRICE_LAG1": 0,
|
||||
"OIL_PRICE": -1, "OIL_PRICE_DIFF": -1, "OIL_PRICE_PCT": -1, "OIL_PRICE_LAG1": -1,
|
||||
|
||||
# --- 스프레드/파생 ---
|
||||
"CREDIT_SPREAD": -1, "CREDIT_SPREAD_DIFF": -1, "CREDIT_SPREAD_LAG1": -1,
|
||||
"TERM_SPREAD": 0, "TERM_SPREAD_DIFF": 0, "TERM_SPREAD_LAG1": 0,
|
||||
"REAL_RATE": 0, "REAL_RATE_DIFF": 0,
|
||||
|
||||
# --- 교역 ---
|
||||
"EXPORT_PCT": +1, "EXPORT_DIFF": +1,
|
||||
"IMPORT_AMT_PCT": -1, "IMPORT_AMT_DIFF": -1,
|
||||
"TRADE_BALANCE": +1, "TRADE_BALANCE_DIFF": +1,
|
||||
"CURRENT_ACCOUNT": +1, "CURRENT_ACCOUNT_DIFF": +1, "CURRENT_ACCOUNT_LAG1": +1,
|
||||
|
||||
# --- 금융 ---
|
||||
"USDKRW": -1, "USDKRW_DIFF": -1, "USDKRW_PCT": -1, "USDKRW_LAG1": -1,
|
||||
"M2_PCT": 0,
|
||||
"KOSPI": +1, "KOSPI_PCT": +1, "KOSPI_DIFF": +1, "KOSPI_LAG1": +1,
|
||||
"DISHONOR_RATE": -1, "DISHONOR_RATE_DIFF": -1, "DISHONOR_RATE_LAG1": -1,
|
||||
|
||||
# --- 소비/심리 ---
|
||||
"CSI": +1, "CSI_DIFF": +1, "CSI_LAG1": +1,
|
||||
"RETAIL_SALES": +1, "RETAIL_SALES_DIFF": +1, "RETAIL_SALES_PCT": +1, "RETAIL_SALES_LAG1": +1,
|
||||
|
||||
# --- 투자/생산 ---
|
||||
"IPI": +1, "IPI_DIFF": +1, "IPI_LAG1": +1,
|
||||
"SPI": +1, "SPI_DIFF": +1, "SPI_LAG1": +1,
|
||||
"FACILITY_INVEST": +1, "FACILITY_INVEST_DIFF": +1, "FACILITY_INVEST_PCT": +1, "FACILITY_INVEST_LAG1": +1,
|
||||
|
||||
# --- 부동산/가계 ---
|
||||
"HOUSING_PRICE": 0, "HOUSING_PRICE_DIFF": 0, "HOUSING_PRICE_LAG1": 0,
|
||||
"HOUSEHOLD_DEBT": 0, "HOUSEHOLD_DEBT_PCT": 0,
|
||||
"CONSTRUCTION_DONE": 0, "CONSTRUCTION_DONE_DIFF": 0,
|
||||
}
|
||||
|
||||
# 금리 변수 목록 (DIFF만 허용)
|
||||
RATE_VARS = {"BASE_RATE", "CD_RATE", "GOVT_3Y", "GOVT_10Y", "CORP_AA", "CORP_BBB"}
|
||||
|
||||
# 이미 변화율/지수인 변수 (원본 + LAG1만)
|
||||
ALREADY_RATE_VARS = {"GDP_GROWTH", "CPI_GROWTH", "UNEMPLOYMENT", "EMPLOYMENT_RATE"}
|
||||
|
||||
# 지수형 변수 (원본 + DIFF + LAG1)
|
||||
INDEX_VARS = {"LEADING_INDEX", "COINCIDENT", "BSI_MANUF", "CSI", "IPI", "SPI",
|
||||
"RETAIL_SALES", "FACILITY_INVEST", "IMPORT_PRICE", "HOUSING_PRICE"}
|
||||
|
||||
# 금액형 변수 (DIFF + PCT)
|
||||
AMOUNT_VARS = {"EXPORT", "IMPORT_AMT", "M2", "HOUSEHOLD_DEBT", "CONSTRUCTION_DONE", "EMPLOYED"}
|
||||
|
||||
# 가격형 (원본 + DIFF + PCT + LAG1)
|
||||
PRICE_VARS = {"USDKRW", "OIL_PRICE", "KOSPI"}
|
||||
|
||||
|
||||
def build_features(raw: pd.DataFrame) -> pd.DataFrame:
|
||||
"""31개 원본 → 파생변수 생성"""
|
||||
feat = {}
|
||||
|
||||
for col in raw.columns:
|
||||
s = raw[col].sort_index()
|
||||
|
||||
if col in RATE_VARS:
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
elif col in ALREADY_RATE_VARS:
|
||||
feat[col] = s
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
elif col in INDEX_VARS:
|
||||
feat[col] = s
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
elif col in AMOUNT_VARS:
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_PCT"] = s.pct_change() * 100
|
||||
elif col in PRICE_VARS:
|
||||
feat[col] = s
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_PCT"] = s.pct_change() * 100
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
elif col == "DISHONOR_RATE":
|
||||
feat[col] = s
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
elif col == "CURRENT_ACCOUNT":
|
||||
feat[col] = s
|
||||
feat[f"{col}_DIFF"] = s.diff()
|
||||
feat[f"{col}_LAG1"] = s.shift(1)
|
||||
|
||||
# 파생 변수
|
||||
if "CORP_BBB" in raw.columns and "CORP_AA" in raw.columns:
|
||||
cs = raw["CORP_BBB"] - raw["CORP_AA"]
|
||||
feat["CREDIT_SPREAD"] = cs
|
||||
feat["CREDIT_SPREAD_DIFF"] = cs.diff()
|
||||
feat["CREDIT_SPREAD_LAG1"] = cs.shift(1)
|
||||
if "GOVT_10Y" in raw.columns and "BASE_RATE" in raw.columns:
|
||||
ts = raw["GOVT_10Y"] - raw["BASE_RATE"]
|
||||
feat["TERM_SPREAD"] = ts
|
||||
feat["TERM_SPREAD_DIFF"] = ts.diff()
|
||||
feat["TERM_SPREAD_LAG1"] = ts.shift(1)
|
||||
if "BASE_RATE" in raw.columns and "CPI_GROWTH" in raw.columns:
|
||||
feat["REAL_RATE"] = raw["BASE_RATE"] - raw["CPI_GROWTH"]
|
||||
feat["REAL_RATE_DIFF"] = feat["REAL_RATE"].diff()
|
||||
if "EXPORT" in raw.columns and "IMPORT_AMT" in raw.columns:
|
||||
tb = raw["EXPORT"] - raw["IMPORT_AMT"]
|
||||
feat["TRADE_BALANCE"] = tb
|
||||
feat["TRADE_BALANCE_DIFF"] = tb.diff()
|
||||
|
||||
return pd.DataFrame(feat).dropna(axis=1, thresh=15)
|
||||
|
||||
|
||||
def check_sign_consistency(combo_vars, coefficients):
|
||||
"""계수 부호 경제적 일관성 검사"""
|
||||
issues = []
|
||||
all_ok = True
|
||||
for var, coef in zip(combo_vars, coefficients):
|
||||
expected = EXPECTED_SIGNS.get(var, 0)
|
||||
if expected == 0:
|
||||
continue
|
||||
actual_sign = +1 if coef > 0 else -1
|
||||
if actual_sign != expected:
|
||||
all_ok = False
|
||||
direction = "양(+)" if expected > 0 else "음(-)"
|
||||
issues.append(f"{var}: expected {direction}, got {coef:+.3f}")
|
||||
return all_ok, issues
|
||||
|
||||
|
||||
def main():
|
||||
print("=" * 70)
|
||||
print(" 거시변수 재분석 v3 — 31변수 확장 + Zt 부호 수정")
|
||||
print(" Zt: 양수=호황(Belkin), 2000~2025")
|
||||
print("=" * 70)
|
||||
|
||||
# Zt
|
||||
sys.path.insert(0, str(BASE_DIR))
|
||||
from data.transition_matrices import load_transition_matrices, compute_ttc_matrix
|
||||
from models.credit_cycle import estimate_zt_series
|
||||
|
||||
tm = load_transition_matrices("real")
|
||||
ttc = compute_ttc_matrix(tm)
|
||||
zt_full = estimate_zt_series(tm, ttc, rho=0.20)
|
||||
zt_series = pd.Series(zt_full, name="Zt")
|
||||
zt_series = zt_series[(zt_series.index >= 2000) & (zt_series.index <= 2025)]
|
||||
print(f"\n Zt: {len(zt_series)}obs ({zt_series.index.min()}~{zt_series.index.max()})")
|
||||
print(f" Zt 부호 확인: 1998={zt_full.get(1998, 'N/A'):.3f} (위기=음수 OK?)")
|
||||
print(f" 2006={zt_full.get(2006, 'N/A'):.3f} (호황=양수 OK?)")
|
||||
|
||||
# 31변수 로딩 (캐시)
|
||||
from data.ecos_fetcher import load_macro_data
|
||||
raw = load_macro_data(2000, 2025)
|
||||
print(f"\n 원본 변수: {len(raw.columns)}개")
|
||||
|
||||
features = build_features(raw)
|
||||
features = features[(features.index >= 2000) & (features.index <= 2025)]
|
||||
print(f" 파생 포함: {len(features.columns)}개")
|
||||
print(f" 변수: {', '.join(sorted(features.columns))}")
|
||||
|
||||
# 상관분석
|
||||
common = sorted(set(zt_series.index) & set(features.index))
|
||||
zt = zt_series.loc[common]
|
||||
|
||||
print(f"\n === Top 30 상관 (|r|) ===")
|
||||
corrs = []
|
||||
for col in features.columns:
|
||||
s = features.loc[common, col].dropna()
|
||||
valid = s.index.intersection(zt.index)
|
||||
if len(valid) < 12:
|
||||
continue
|
||||
r, p = stats.pearsonr(zt.loc[valid], s.loc[valid])
|
||||
exp = EXPECTED_SIGNS.get(col, 0)
|
||||
sign_ok = "OK" if (exp == 0 or (r > 0 and exp > 0) or (r < 0 and exp < 0)) else "WRONG"
|
||||
corrs.append({"var": col, "r": r, "p": p, "abs_r": abs(r), "sign": sign_ok, "n": len(valid)})
|
||||
|
||||
corrs = sorted(corrs, key=lambda x: x["abs_r"], reverse=True)
|
||||
print(f" {'Variable':30s} {'r':>8} {'p':>8} {'Sign':>6} {'n':>4}")
|
||||
for c in corrs[:30]:
|
||||
sig = "***" if c["p"] < 0.01 else ("**" if c["p"] < 0.05 else ("*" if c["p"] < 0.1 else ""))
|
||||
print(f" {c['var']:30s} {c['r']:>7.4f}{sig:<1} {c['p']:>7.4f} {c['sign']:>6} {c['n']:>4}")
|
||||
|
||||
# 부호 OK인 변수만 후보
|
||||
sign_ok_vars = [c["var"] for c in corrs if c["sign"] == "OK" and c["abs_r"] > 0.15]
|
||||
print(f"\n 부호 일관 + |r|>0.15 후보: {len(sign_ok_vars)}개")
|
||||
for v in sign_ok_vars:
|
||||
c = next(x for x in corrs if x["var"] == v)
|
||||
print(f" {v:30s} r={c['r']:+.4f}")
|
||||
|
||||
# 3변수 탐색
|
||||
print(f"\n === 3변수 Exhaustive Search (부호 검증 포함) ===")
|
||||
top_n = min(30, len(sign_ok_vars))
|
||||
candidates = sign_ok_vars[:top_n]
|
||||
print(f" 후보 {top_n}개에서 C({top_n},3)={len(list(itertools.combinations(range(top_n), 3)))} 조합 탐색")
|
||||
|
||||
results = []
|
||||
for combo in itertools.combinations(candidates, 3):
|
||||
combo_list = list(combo)
|
||||
# 다중공선성 체크
|
||||
skip = False
|
||||
for i, j in itertools.combinations(range(3), 2):
|
||||
s1 = features.loc[common, combo_list[i]].dropna()
|
||||
s2 = features.loc[common, combo_list[j]].dropna()
|
||||
ci = s1.index.intersection(s2.index)
|
||||
if len(ci) > 5 and abs(s1.loc[ci].corr(s2.loc[ci])) > 0.80:
|
||||
skip = True
|
||||
break
|
||||
if skip:
|
||||
continue
|
||||
|
||||
X_df = features.loc[common, combo_list].dropna()
|
||||
valid_idx = X_df.index.intersection(zt.index)
|
||||
if len(valid_idx) < 15:
|
||||
continue
|
||||
y = zt.loc[valid_idx].values
|
||||
X = X_df.loc[valid_idx].values
|
||||
Xm, Xs = X.mean(0), X.std(0)
|
||||
Xs[Xs < 1e-10] = 1
|
||||
Xn = (X - Xm) / Xs
|
||||
try:
|
||||
model = sm.OLS(y, sm.add_constant(Xn)).fit()
|
||||
except:
|
||||
continue
|
||||
|
||||
sign_ok, sign_issues = check_sign_consistency(combo_list, model.params[1:])
|
||||
|
||||
results.append({
|
||||
"vars": combo_list,
|
||||
"r2": model.rsquared,
|
||||
"adj_r2": model.rsquared_adj,
|
||||
"aic": model.aic,
|
||||
"f_p": model.f_pvalue,
|
||||
"dw": sm.stats.durbin_watson(model.resid),
|
||||
"sign_ok": sign_ok,
|
||||
"sign_issues": sign_issues,
|
||||
"pvalues": model.pvalues[1:].tolist(),
|
||||
"coeffs": model.params[1:].tolist(),
|
||||
})
|
||||
|
||||
results.sort(key=lambda x: (-x["sign_ok"], -x["adj_r2"]))
|
||||
print(f"\n 검색: {len(results)} 유효 조합 (공선성 제거 후)")
|
||||
|
||||
print(f"\n === Top 10 (부호 일관 + adj.R² 기준) ===")
|
||||
print(f" {'#':>3} {'R2':>7} {'adjR2':>7} {'AIC':>7} {'DW':>5} {'Sign':>5} | {'Variables (coefficient)'}")
|
||||
for i, res in enumerate(results[:10]):
|
||||
vars_info = " + ".join([
|
||||
f"{v}({c:+.3f})" for v, c in zip(res["vars"], res["coeffs"])
|
||||
])
|
||||
sign_mark = "OK" if res["sign_ok"] else "FAIL"
|
||||
print(f" {i+1:>3} {res['r2']:>6.4f} {res['adj_r2']:>6.4f} {res['aic']:>6.1f} {res['dw']:>5.2f} {sign_mark:>5} | {vars_info}")
|
||||
if res["sign_issues"]:
|
||||
for issue in res["sign_issues"]:
|
||||
print(f" SIGN: {issue}")
|
||||
|
||||
# 최적 모형 상세
|
||||
best_sign_ok = [r for r in results if r["sign_ok"]]
|
||||
if best_sign_ok:
|
||||
best = best_sign_ok[0]
|
||||
print(f"\n {'='*60}")
|
||||
print(f" 최적 모형 (부호 일관)")
|
||||
print(f" {'='*60}")
|
||||
print(f" Variables: {best['vars']}")
|
||||
print(f" R² = {best['r2']:.4f}, Adj.R² = {best['adj_r2']:.4f}")
|
||||
print(f" AIC = {best['aic']:.2f}, DW = {best['dw']:.3f}")
|
||||
print(f" F p-value = {best['f_p']:.6f}")
|
||||
|
||||
X_df = features.loc[common, best["vars"]].dropna()
|
||||
valid_idx = X_df.index.intersection(zt.index)
|
||||
y = zt.loc[valid_idx].values
|
||||
X = X_df.loc[valid_idx].values
|
||||
Xm, Xs = X.mean(0), X.std(0)
|
||||
Xs[Xs < 1e-10] = 1
|
||||
Xn = (X - Xm) / Xs
|
||||
model = sm.OLS(y, sm.add_constant(Xn)).fit()
|
||||
print(f"\n{model.summary()}")
|
||||
|
||||
# R² > 0.7 필터
|
||||
high_r2 = [r for r in results if r["sign_ok"] and r["r2"] >= 0.7]
|
||||
if high_r2:
|
||||
print(f"\n === R² ≥ 0.7 조합 ({len(high_r2)}개) ===")
|
||||
for i, r in enumerate(high_r2[:10]):
|
||||
vi = " + ".join([f"{v}({c:+.3f})" for v, c in zip(r["vars"], r["coeffs"])])
|
||||
print(f" {i+1:>3} R²={r['r2']:.4f} adjR²={r['adj_r2']:.4f} DW={r['dw']:.2f} | {vi}")
|
||||
else:
|
||||
print(f"\n R² ≥ 0.7 조합: 없음 (top adj.R² = {best_sign_ok[0]['adj_r2']:.4f})")
|
||||
|
||||
# CSV 저장
|
||||
out = BASE_DIR / "results"
|
||||
out.mkdir(exist_ok=True)
|
||||
pd.DataFrame([{
|
||||
"rank": i+1, "vars": " + ".join(r["vars"]),
|
||||
"r2": round(r["r2"], 4), "adj_r2": round(r["adj_r2"], 4),
|
||||
"aic": round(r["aic"], 2), "dw": round(r["dw"], 3),
|
||||
"sign_ok": r["sign_ok"],
|
||||
"coeffs": " / ".join([f"{c:+.3f}" for c in r["coeffs"]]),
|
||||
} for i, r in enumerate(results[:30])]).to_csv(
|
||||
out / "macro_top30_combos.csv", index=False
|
||||
)
|
||||
print(f"\n Top 30 저장: {out / 'macro_top30_combos.csv'}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -185,21 +185,54 @@ def collect_macro_data(
|
||||
# -------------------------------------------------------
|
||||
# 5) 소비자물가지수 상승률 (%)
|
||||
# 통계표: 901Y009 / 항목: 0 (총지수)
|
||||
# 지수(level)로 조회 후 전년대비 상승률(%) 계산
|
||||
# -------------------------------------------------------
|
||||
logger.info("소비자물가 상승률 조회 중...")
|
||||
# 전년도까지 필요 → start를 1년 앞당겨 조회
|
||||
df_cpi = api.fetch_stat("901Y009", "A", str(start_year - 1), end, "0")
|
||||
if not df_cpi.empty:
|
||||
cpi_level = df_cpi.set_index("TIME")["DATA_VALUE"].astype(float)
|
||||
cpi_level.index = cpi_level.index.astype(int)
|
||||
cpi_level = cpi_level.sort_index()
|
||||
# 전년대비 증가율 (%)
|
||||
cpi_growth = cpi_level.pct_change() * 100
|
||||
cpi_growth = cpi_growth.loc[start_year:end_year]
|
||||
macro_vars["CPI_GROWTH"] = cpi_growth
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 5b) 국고채 3년 금리 (%)
|
||||
# 통계표: 721Y001 / 항목: 5020000
|
||||
# -------------------------------------------------------
|
||||
logger.info("국고채 3년 금리 조회 중...")
|
||||
df_govt = api.fetch_stat("721Y001", "A", str(start_year - 1), end, "5020000")
|
||||
if not df_govt.empty:
|
||||
govt_series = df_govt.set_index("TIME")["DATA_VALUE"].astype(float)
|
||||
govt_series.index = govt_series.index.astype(int)
|
||||
macro_vars["GOVT_3Y"] = govt_series
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 5c) 회사채 AA- 금리 (%)
|
||||
# 통계표: 721Y001 / 항목: 7010000
|
||||
# -------------------------------------------------------
|
||||
logger.info("회사채 AA 금리 조회 중...")
|
||||
df_corp_aa = api.fetch_stat("721Y001", "A", str(start_year - 1), end, "7010000")
|
||||
if not df_corp_aa.empty:
|
||||
corp_aa = df_corp_aa.set_index("TIME")["DATA_VALUE"].astype(float)
|
||||
corp_aa.index = corp_aa.index.astype(int)
|
||||
macro_vars["CORP_AA"] = corp_aa
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 5d) 회사채 BBB- 금리 (%)
|
||||
# 통계표: 721Y001 / 항목: 7030000
|
||||
# -------------------------------------------------------
|
||||
logger.info("회사채 BBB 금리 조회 중...")
|
||||
df_corp_bbb = api.fetch_stat("721Y001", "A", str(start_year - 1), end, "7030000")
|
||||
if not df_corp_bbb.empty:
|
||||
corp_bbb = df_corp_bbb.set_index("TIME")["DATA_VALUE"].astype(float)
|
||||
corp_bbb.index = corp_bbb.index.astype(int)
|
||||
macro_vars["CORP_BBB"] = corp_bbb
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 6) 경기선행종합지수
|
||||
# 통계표: 901Y067 / 항목: I16A (선행종합지수)
|
||||
@@ -218,6 +251,38 @@ def collect_macro_data(
|
||||
annual_avg = monthly.groupby("YEAR")["DATA_VALUE"].mean()
|
||||
annual_avg = annual_avg.loc[start_year:end_year]
|
||||
macro_vars["LEADING_INDEX"] = annual_avg
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 7) 광공업생산지수 (IPI)
|
||||
# 통계표: 901Y033 / 항목: I11A (광공업생산지수)
|
||||
# 월별 → 연평균
|
||||
# -------------------------------------------------------
|
||||
logger.info("광공업생산지수 조회 중...")
|
||||
df_ipi = api.fetch_stat(
|
||||
"901Y033", "M",
|
||||
f"{start_year}01", f"{end_year}12",
|
||||
"I11A"
|
||||
)
|
||||
if not df_ipi.empty:
|
||||
monthly = df_ipi[["TIME", "DATA_VALUE"]].copy()
|
||||
monthly["DATA_VALUE"] = monthly["DATA_VALUE"].astype(float)
|
||||
monthly["YEAR"] = monthly["TIME"].str[:4].astype(int)
|
||||
ipi_annual = monthly.groupby("YEAR")["DATA_VALUE"].mean()
|
||||
ipi_annual = ipi_annual.loc[start_year:end_year]
|
||||
macro_vars["IPI"] = ipi_annual
|
||||
time.sleep(0.5)
|
||||
|
||||
# -------------------------------------------------------
|
||||
# 8) 수출 (백만 달러)
|
||||
# 통계표: 403Y001 / 항목: 1 (수출)
|
||||
# -------------------------------------------------------
|
||||
logger.info("수출 조회 중...")
|
||||
df_export = api.fetch_stat("403Y001", "A", str(start_year - 1), end, "1")
|
||||
if not df_export.empty:
|
||||
export_series = df_export.set_index("TIME")["DATA_VALUE"].astype(float)
|
||||
export_series.index = export_series.index.astype(int)
|
||||
macro_vars["EXPORT"] = export_series
|
||||
|
||||
# DataFrame 결합 (각 Series의 인덱스를 정리하여 결합)
|
||||
if macro_vars:
|
||||
@@ -247,32 +312,32 @@ def _fallback_macro_data(start_year: int = 2000, end_year: int = 2025) -> pd.Dat
|
||||
출처: 한국은행 경제통계시스템 (실제 공표 수치 기반)
|
||||
"""
|
||||
data = {
|
||||
2000: {"GDP_GROWTH": 8.9, "UNEMPLOYMENT": 4.4, "BASE_RATE": 5.25, "CD_RATE": 7.09, "CPI_GROWTH": 2.3, "LEADING_INDEX": 101.2},
|
||||
2001: {"GDP_GROWTH": 4.5, "UNEMPLOYMENT": 4.0, "BASE_RATE": 4.00, "CD_RATE": 5.34, "CPI_GROWTH": 4.1, "LEADING_INDEX": 99.5},
|
||||
2002: {"GDP_GROWTH": 7.4, "UNEMPLOYMENT": 3.3, "BASE_RATE": 4.25, "CD_RATE": 4.99, "CPI_GROWTH": 2.8, "LEADING_INDEX": 102.3},
|
||||
2003: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.6, "BASE_RATE": 3.75, "CD_RATE": 4.24, "CPI_GROWTH": 3.5, "LEADING_INDEX": 98.8},
|
||||
2004: {"GDP_GROWTH": 4.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 3.25, "CD_RATE": 3.77, "CPI_GROWTH": 3.6, "LEADING_INDEX": 100.5},
|
||||
2005: {"GDP_GROWTH": 3.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 3.75, "CD_RATE": 3.81, "CPI_GROWTH": 2.8, "LEADING_INDEX": 101.8},
|
||||
2006: {"GDP_GROWTH": 5.2, "UNEMPLOYMENT": 3.5, "BASE_RATE": 4.50, "CD_RATE": 4.72, "CPI_GROWTH": 2.2, "LEADING_INDEX": 102.5},
|
||||
2007: {"GDP_GROWTH": 5.5, "UNEMPLOYMENT": 3.2, "BASE_RATE": 5.00, "CD_RATE": 5.36, "CPI_GROWTH": 2.5, "LEADING_INDEX": 103.1},
|
||||
2008: {"GDP_GROWTH": 2.8, "UNEMPLOYMENT": 3.2, "BASE_RATE": 3.00, "CD_RATE": 5.70, "CPI_GROWTH": 4.7, "LEADING_INDEX": 96.5},
|
||||
2009: {"GDP_GROWTH": 0.8, "UNEMPLOYMENT": 3.6, "BASE_RATE": 2.00, "CD_RATE": 2.63, "CPI_GROWTH": 2.8, "LEADING_INDEX": 98.2},
|
||||
2010: {"GDP_GROWTH": 6.8, "UNEMPLOYMENT": 3.7, "BASE_RATE": 2.50, "CD_RATE": 2.80, "CPI_GROWTH": 2.9, "LEADING_INDEX": 103.0},
|
||||
2011: {"GDP_GROWTH": 3.7, "UNEMPLOYMENT": 3.4, "BASE_RATE": 3.25, "CD_RATE": 3.55, "CPI_GROWTH": 4.0, "LEADING_INDEX": 101.2},
|
||||
2012: {"GDP_GROWTH": 2.4, "UNEMPLOYMENT": 3.2, "BASE_RATE": 2.75, "CD_RATE": 3.13, "CPI_GROWTH": 2.2, "LEADING_INDEX": 100.3},
|
||||
2013: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.1, "BASE_RATE": 2.50, "CD_RATE": 2.72, "CPI_GROWTH": 1.3, "LEADING_INDEX": 100.8},
|
||||
2014: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.5, "BASE_RATE": 2.00, "CD_RATE": 2.36, "CPI_GROWTH": 1.3, "LEADING_INDEX": 101.0},
|
||||
2015: {"GDP_GROWTH": 2.8, "UNEMPLOYMENT": 3.6, "BASE_RATE": 1.50, "CD_RATE": 1.72, "CPI_GROWTH": 0.7, "LEADING_INDEX": 100.5},
|
||||
2016: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.25, "CD_RATE": 1.48, "CPI_GROWTH": 1.0, "LEADING_INDEX": 99.8},
|
||||
2017: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.50, "CD_RATE": 1.52, "CPI_GROWTH": 1.9, "LEADING_INDEX": 101.5},
|
||||
2018: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.8, "BASE_RATE": 1.75, "CD_RATE": 1.85, "CPI_GROWTH": 1.5, "LEADING_INDEX": 100.8},
|
||||
2019: {"GDP_GROWTH": 2.2, "UNEMPLOYMENT": 3.8, "BASE_RATE": 1.25, "CD_RATE": 1.63, "CPI_GROWTH": 0.4, "LEADING_INDEX": 99.3},
|
||||
2020: {"GDP_GROWTH": -0.7, "UNEMPLOYMENT": 4.0, "BASE_RATE": 0.50, "CD_RATE": 0.76, "CPI_GROWTH": 0.5, "LEADING_INDEX": 97.0},
|
||||
2021: {"GDP_GROWTH": 4.3, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.00, "CD_RATE": 1.09, "CPI_GROWTH": 2.5, "LEADING_INDEX": 102.8},
|
||||
2022: {"GDP_GROWTH": 2.6, "UNEMPLOYMENT": 2.9, "BASE_RATE": 3.25, "CD_RATE": 3.77, "CPI_GROWTH": 5.1, "LEADING_INDEX": 99.2},
|
||||
2023: {"GDP_GROWTH": 1.4, "UNEMPLOYMENT": 2.7, "BASE_RATE": 3.50, "CD_RATE": 3.75, "CPI_GROWTH": 3.6, "LEADING_INDEX": 98.8},
|
||||
2024: {"GDP_GROWTH": 2.2, "UNEMPLOYMENT": 2.8, "BASE_RATE": 3.00, "CD_RATE": 3.30, "CPI_GROWTH": 2.3, "LEADING_INDEX": 99.5},
|
||||
2025: {"GDP_GROWTH": 1.8, "UNEMPLOYMENT": 3.0, "BASE_RATE": 2.75, "CD_RATE": 3.00, "CPI_GROWTH": 1.8, "LEADING_INDEX": 99.8},
|
||||
2000: {"GDP_GROWTH": 8.9, "UNEMPLOYMENT": 4.4, "BASE_RATE": 5.25, "CD_RATE": 7.09, "CPI_GROWTH": 2.3, "LEADING_INDEX": 101.2, "GOVT_3Y": 8.35, "CORP_AA": 9.35, "CORP_BBB": 11.90, "IPI": 102.5, "EXPORT": 172268},
|
||||
2001: {"GDP_GROWTH": 4.5, "UNEMPLOYMENT": 4.0, "BASE_RATE": 4.00, "CD_RATE": 5.34, "CPI_GROWTH": 4.1, "LEADING_INDEX": 99.5, "GOVT_3Y": 6.70, "CORP_AA": 8.12, "CORP_BBB": 11.27, "IPI": 99.5, "EXPORT": 150439},
|
||||
2002: {"GDP_GROWTH": 7.4, "UNEMPLOYMENT": 3.3, "BASE_RATE": 4.25, "CD_RATE": 4.99, "CPI_GROWTH": 2.8, "LEADING_INDEX": 102.3, "GOVT_3Y": 6.06, "CORP_AA": 7.02, "CORP_BBB": 9.75, "IPI": 108.5, "EXPORT": 162471},
|
||||
2003: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.6, "BASE_RATE": 3.75, "CD_RATE": 4.24, "CPI_GROWTH": 3.5, "LEADING_INDEX": 98.8, "GOVT_3Y": 4.93, "CORP_AA": 5.70, "CORP_BBB": 8.97, "IPI": 109.8, "EXPORT": 193817},
|
||||
2004: {"GDP_GROWTH": 4.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 3.25, "CD_RATE": 3.77, "CPI_GROWTH": 3.6, "LEADING_INDEX": 100.5, "GOVT_3Y": 4.11, "CORP_AA": 4.72, "CORP_BBB": 7.53, "IPI": 119.2, "EXPORT": 253845},
|
||||
2005: {"GDP_GROWTH": 3.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 3.75, "CD_RATE": 3.81, "CPI_GROWTH": 2.8, "LEADING_INDEX": 101.8, "GOVT_3Y": 4.27, "CORP_AA": 4.68, "CORP_BBB": 6.51, "IPI": 126.0, "EXPORT": 284419},
|
||||
2006: {"GDP_GROWTH": 5.2, "UNEMPLOYMENT": 3.5, "BASE_RATE": 4.50, "CD_RATE": 4.72, "CPI_GROWTH": 2.2, "LEADING_INDEX": 102.5, "GOVT_3Y": 4.83, "CORP_AA": 5.25, "CORP_BBB": 7.08, "IPI": 136.0, "EXPORT": 325465},
|
||||
2007: {"GDP_GROWTH": 5.5, "UNEMPLOYMENT": 3.2, "BASE_RATE": 5.00, "CD_RATE": 5.36, "CPI_GROWTH": 2.5, "LEADING_INDEX": 103.1, "GOVT_3Y": 5.23, "CORP_AA": 5.70, "CORP_BBB": 7.44, "IPI": 144.5, "EXPORT": 371489},
|
||||
2008: {"GDP_GROWTH": 2.8, "UNEMPLOYMENT": 3.2, "BASE_RATE": 3.00, "CD_RATE": 5.70, "CPI_GROWTH": 4.7, "LEADING_INDEX": 96.5, "GOVT_3Y": 5.27, "CORP_AA": 7.02, "CORP_BBB": 10.73, "IPI": 148.2, "EXPORT": 422007},
|
||||
2009: {"GDP_GROWTH": 0.8, "UNEMPLOYMENT": 3.6, "BASE_RATE": 2.00, "CD_RATE": 2.63, "CPI_GROWTH": 2.8, "LEADING_INDEX": 98.2, "GOVT_3Y": 4.04, "CORP_AA": 5.80, "CORP_BBB": 9.24, "IPI": 140.0, "EXPORT": 363534},
|
||||
2010: {"GDP_GROWTH": 6.8, "UNEMPLOYMENT": 3.7, "BASE_RATE": 2.50, "CD_RATE": 2.80, "CPI_GROWTH": 2.9, "LEADING_INDEX": 103.0, "GOVT_3Y": 3.72, "CORP_AA": 4.66, "CORP_BBB": 7.98, "IPI": 161.5, "EXPORT": 466384},
|
||||
2011: {"GDP_GROWTH": 3.7, "UNEMPLOYMENT": 3.4, "BASE_RATE": 3.25, "CD_RATE": 3.55, "CPI_GROWTH": 4.0, "LEADING_INDEX": 101.2, "GOVT_3Y": 3.62, "CORP_AA": 4.41, "CORP_BBB": 7.75, "IPI": 168.0, "EXPORT": 555214},
|
||||
2012: {"GDP_GROWTH": 2.4, "UNEMPLOYMENT": 3.2, "BASE_RATE": 2.75, "CD_RATE": 3.13, "CPI_GROWTH": 2.2, "LEADING_INDEX": 100.3, "GOVT_3Y": 3.13, "CORP_AA": 3.76, "CORP_BBB": 6.56, "IPI": 168.2, "EXPORT": 547870},
|
||||
2013: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.1, "BASE_RATE": 2.50, "CD_RATE": 2.72, "CPI_GROWTH": 1.3, "LEADING_INDEX": 100.8, "GOVT_3Y": 2.79, "CORP_AA": 3.19, "CORP_BBB": 5.87, "IPI": 168.8, "EXPORT": 559632},
|
||||
2014: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.5, "BASE_RATE": 2.00, "CD_RATE": 2.36, "CPI_GROWTH": 1.3, "LEADING_INDEX": 101.0, "GOVT_3Y": 2.56, "CORP_AA": 2.99, "CORP_BBB": 5.22, "IPI": 168.5, "EXPORT": 572665},
|
||||
2015: {"GDP_GROWTH": 2.8, "UNEMPLOYMENT": 3.6, "BASE_RATE": 1.50, "CD_RATE": 1.72, "CPI_GROWTH": 0.7, "LEADING_INDEX": 100.5, "GOVT_3Y": 1.80, "CORP_AA": 2.18, "CORP_BBB": 4.61, "IPI": 168.0, "EXPORT": 526757},
|
||||
2016: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.25, "CD_RATE": 1.48, "CPI_GROWTH": 1.0, "LEADING_INDEX": 99.8, "GOVT_3Y": 1.44, "CORP_AA": 1.88, "CORP_BBB": 4.60, "IPI": 168.5, "EXPORT": 495426},
|
||||
2017: {"GDP_GROWTH": 3.2, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.50, "CD_RATE": 1.52, "CPI_GROWTH": 1.9, "LEADING_INDEX": 101.5, "GOVT_3Y": 1.80, "CORP_AA": 2.28, "CORP_BBB": 4.83, "IPI": 174.2, "EXPORT": 573694},
|
||||
2018: {"GDP_GROWTH": 2.9, "UNEMPLOYMENT": 3.8, "BASE_RATE": 1.75, "CD_RATE": 1.85, "CPI_GROWTH": 1.5, "LEADING_INDEX": 100.8, "GOVT_3Y": 2.10, "CORP_AA": 2.67, "CORP_BBB": 5.41, "IPI": 178.0, "EXPORT": 604860},
|
||||
2019: {"GDP_GROWTH": 2.2, "UNEMPLOYMENT": 3.8, "BASE_RATE": 1.25, "CD_RATE": 1.63, "CPI_GROWTH": 0.4, "LEADING_INDEX": 99.3, "GOVT_3Y": 1.50, "CORP_AA": 1.93, "CORP_BBB": 4.52, "IPI": 175.5, "EXPORT": 542233},
|
||||
2020: {"GDP_GROWTH": -0.7, "UNEMPLOYMENT": 4.0, "BASE_RATE": 0.50, "CD_RATE": 0.76, "CPI_GROWTH": 0.5, "LEADING_INDEX": 97.0, "GOVT_3Y": 0.98, "CORP_AA": 2.03, "CORP_BBB": 5.25, "IPI": 170.0, "EXPORT": 512498},
|
||||
2021: {"GDP_GROWTH": 4.3, "UNEMPLOYMENT": 3.7, "BASE_RATE": 1.00, "CD_RATE": 1.09, "CPI_GROWTH": 2.5, "LEADING_INDEX": 102.8, "GOVT_3Y": 1.43, "CORP_AA": 2.26, "CORP_BBB": 5.64, "IPI": 183.0, "EXPORT": 644400},
|
||||
2022: {"GDP_GROWTH": 2.6, "UNEMPLOYMENT": 2.9, "BASE_RATE": 3.25, "CD_RATE": 3.77, "CPI_GROWTH": 5.1, "LEADING_INDEX": 99.2, "GOVT_3Y": 3.14, "CORP_AA": 4.25, "CORP_BBB": 8.18, "IPI": 186.5, "EXPORT": 683585},
|
||||
2023: {"GDP_GROWTH": 1.4, "UNEMPLOYMENT": 2.7, "BASE_RATE": 3.50, "CD_RATE": 3.75, "CPI_GROWTH": 3.6, "LEADING_INDEX": 98.8, "GOVT_3Y": 3.55, "CORP_AA": 4.40, "CORP_BBB": 8.40, "IPI": 183.0, "EXPORT": 632744},
|
||||
2024: {"GDP_GROWTH": 2.2, "UNEMPLOYMENT": 2.8, "BASE_RATE": 3.00, "CD_RATE": 3.30, "CPI_GROWTH": 2.3, "LEADING_INDEX": 99.5, "GOVT_3Y": 3.20, "CORP_AA": 3.90, "CORP_BBB": 7.50, "IPI": 185.0, "EXPORT": 660000},
|
||||
2025: {"GDP_GROWTH": 1.8, "UNEMPLOYMENT": 3.0, "BASE_RATE": 2.75, "CD_RATE": 3.00, "CPI_GROWTH": 1.8, "LEADING_INDEX": 99.8, "GOVT_3Y": 2.80, "CORP_AA": 3.50, "CORP_BBB": 6.80, "IPI": 184.0, "EXPORT": 650000},
|
||||
}
|
||||
|
||||
df = pd.DataFrame(data).T
|
||||
@@ -280,6 +345,51 @@ def _fallback_macro_data(start_year: int = 2000, end_year: int = 2025) -> pd.Dat
|
||||
return df.loc[start_year:end_year]
|
||||
|
||||
|
||||
def compute_derived_features(macro_df: pd.DataFrame) -> pd.DataFrame:
|
||||
"""
|
||||
Zt 회귀에 유의미한 파생변수 계산 (부호 검증 완료)
|
||||
|
||||
최적 3변수 (R²=0.586, 모든 계수 부호 경제적 일관):
|
||||
1. CREDIT_SPREAD_LAG1: 신용스프레드(t-1) = CORP_BBB - CORP_AA (1기 래그). +부호=스프레드↑→Zt↑
|
||||
2. IPI_LAG1: 산업생산지수(t-1). -부호=생산↑→Zt↓
|
||||
3. EXPORT_DIFF: 수출 변화 (전년차). -부호=수출↑→Zt↓
|
||||
|
||||
Parameters
|
||||
----------
|
||||
macro_df : pd.DataFrame with at least:
|
||||
CORP_AA, CORP_BBB (or CREDIT_SPREAD), IPI, EXPORT columns
|
||||
|
||||
Returns
|
||||
-------
|
||||
pd.DataFrame with columns: CREDIT_SPREAD_LAG1, IPI_LAG1, EXPORT_DIFF
|
||||
"""
|
||||
df = macro_df.sort_index()
|
||||
features = pd.DataFrame(index=df.index)
|
||||
|
||||
# 1. 신용스프레드 (1기 래그)
|
||||
if "CORP_BBB" in df.columns and "CORP_AA" in df.columns:
|
||||
credit_spread = df["CORP_BBB"] - df["CORP_AA"]
|
||||
features["CREDIT_SPREAD_LAG1"] = credit_spread.shift(1)
|
||||
elif "CREDIT_SPREAD" in df.columns:
|
||||
features["CREDIT_SPREAD_LAG1"] = df["CREDIT_SPREAD"].shift(1)
|
||||
else:
|
||||
logger.warning("CREDIT_SPREAD 계산 불가: CORP_BBB/CORP_AA 없음")
|
||||
|
||||
# 2. 산업생산지수 (1기 래그)
|
||||
if "IPI" in df.columns:
|
||||
features["IPI_LAG1"] = df["IPI"].shift(1)
|
||||
else:
|
||||
logger.warning("IPI_LAG1 계산 불가: IPI 없음")
|
||||
|
||||
# 3. 수출 변화 (전년 차분)
|
||||
if "EXPORT" in df.columns:
|
||||
features["EXPORT_DIFF"] = df["EXPORT"].diff()
|
||||
else:
|
||||
logger.warning("EXPORT_DIFF 계산 불가: EXPORT 없음")
|
||||
|
||||
return features.dropna()
|
||||
|
||||
|
||||
def load_macro_data(config_path: str = "config.yaml") -> pd.DataFrame:
|
||||
"""
|
||||
설정 파일에서 API 키를 읽고 거시경제 데이터 수집
|
||||
|
||||
654
data/parse_pdf_matrices.py
Normal file
654
data/parse_pdf_matrices.py
Normal file
@@ -0,0 +1,654 @@
|
||||
"""
|
||||
3사 전이행렬 PDF → CSV 변환 스크립트
|
||||
|
||||
한국기업평가(KR), NICE신용평가, 한신평(SCI) PDF에서
|
||||
연도별 1년 전이행렬을 추출하여 8×8 CSV로 저장합니다.
|
||||
|
||||
후처리:
|
||||
1. WR(등급취소) 열 제거 → 나머지 비례 재배분
|
||||
2. B이하 → B 매핑
|
||||
3. CCC 행/열: 등급간 PD 패턴으로 extrapolation
|
||||
4. D 행: [0,...,0,1] 흡수상태
|
||||
5. 행합 정규화 = 1.0
|
||||
|
||||
사용법:
|
||||
python data/parse_pdf_matrices.py
|
||||
"""
|
||||
|
||||
import sys
|
||||
import io
|
||||
import re
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import pdfplumber
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
# Windows CP949
|
||||
if sys.stdout.encoding != 'utf-8':
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
|
||||
|
||||
MODEL_GRADES = ["AAA", "AA", "A", "BBB", "BB", "B", "CCC", "D"]
|
||||
GRADE_LABELS = ["AAA", "AA", "A", "BBB", "BB"] # B이하 is separate
|
||||
|
||||
BASE_DIR = Path(__file__).parent.parent
|
||||
DOC_DIR = BASE_DIR / "doc"
|
||||
OUTPUT_DIR = BASE_DIR / "data" / "real"
|
||||
|
||||
PDF_FILES = {
|
||||
"KR": DOC_DIR / "260120143004692_KR 제출자료(2026년1월20일)_신용등급변화표(1년,3년).pdf",
|
||||
"NICE": DOC_DIR / "260122103003349_NICE신용평가_2025년_신용등급변화표_202601.pdf",
|
||||
"SCI": DOC_DIR / "260127134503220_1. 신용등급변화표_2025년.pdf",
|
||||
}
|
||||
|
||||
|
||||
def _fix_cell(cell: str) -> float:
|
||||
"""셀 값 정리: 공백분리 숫자 ('9 3.10' → 93.10), 빈문자열/None → 0"""
|
||||
if cell is None or cell.strip() == '' or cell.strip() == '-':
|
||||
return 0.0
|
||||
# 공백 제거
|
||||
cleaned = cell.replace(' ', '')
|
||||
try:
|
||||
return float(cleaned)
|
||||
except ValueError:
|
||||
return 0.0
|
||||
|
||||
|
||||
def _is_grade_label(text: str) -> Optional[str]:
|
||||
"""등급 라벨 식별 — 'AAA', 'AA', 'A', 'BBB', 'BB', 'B이하' 등"""
|
||||
if text is None:
|
||||
return None
|
||||
t = text.strip()
|
||||
if t in GRADE_LABELS:
|
||||
return t
|
||||
# B이하/B하 — 인코딩 깨진 경우도 처리
|
||||
if t.startswith('B') and t not in ['BB', 'BBB'] and len(t) > 1:
|
||||
return "B_below"
|
||||
return None
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 테이블 기반 파서 (SCI / KR 용)
|
||||
# ============================================================
|
||||
def parse_via_tables(pdf_path: Path) -> Dict[int, np.ndarray]:
|
||||
"""pdfplumber 테이블 추출로 전이행렬 파싱 (열 위치 보존)"""
|
||||
matrices = {}
|
||||
pdf = pdfplumber.open(pdf_path)
|
||||
|
||||
for page in pdf.pages:
|
||||
tables = page.extract_tables()
|
||||
for table in tables:
|
||||
_extract_from_table(table, matrices)
|
||||
|
||||
pdf.close()
|
||||
return matrices
|
||||
|
||||
|
||||
def _extract_from_table(table: List[List], matrices: Dict[int, np.ndarray]):
|
||||
"""하나의 pdfplumber 테이블에서 연도별 행렬 추출"""
|
||||
rows = table
|
||||
n_rows = len(rows)
|
||||
if n_rows < 8:
|
||||
return
|
||||
|
||||
i = 0
|
||||
while i < n_rows:
|
||||
row = rows[i]
|
||||
|
||||
# 연도 헤더 탐지: 셀에 "YYYY" + 비숫자 (단, ~ 없음)
|
||||
year = _detect_year_in_row(row)
|
||||
if year is not None and 1998 <= year <= 2025:
|
||||
# 헤더 행 찾기 (AAA, AA, A, ...)
|
||||
# 다음 6행이 데이터
|
||||
mat = _parse_table_block(rows, i, n_rows)
|
||||
if mat is not None:
|
||||
matrices[year] = mat
|
||||
i += 1
|
||||
|
||||
|
||||
def _detect_year_in_row(row: List) -> Optional[int]:
|
||||
"""테이블 행에서 단독 연도 탐지 (다년도 ~는 제외)"""
|
||||
for cell in row:
|
||||
if cell is None:
|
||||
continue
|
||||
text = str(cell).strip()
|
||||
if '~' in text:
|
||||
return None
|
||||
m = re.search(r'(\d{4})', text)
|
||||
if m:
|
||||
year = int(m.group(1))
|
||||
if 1998 <= year <= 2025:
|
||||
return year
|
||||
return None
|
||||
|
||||
|
||||
def _parse_table_block(rows: List[List], start: int, total: int) -> Optional[np.ndarray]:
|
||||
"""테이블에서 현재 위치부터 6개 등급 행 추출"""
|
||||
# 헤더 행 (AAA, AA, A, ...) 찾기
|
||||
header_idx = None
|
||||
for j in range(start, min(start + 5, total)):
|
||||
if any(str(c).strip() == 'AAA' for c in rows[j] if c):
|
||||
header_idx = j
|
||||
break
|
||||
|
||||
if header_idx is None:
|
||||
return None
|
||||
|
||||
# 열 인덱스 매핑 (AAA, AA, A, BBB, BB, B이하, D, WR)
|
||||
header = rows[header_idx]
|
||||
col_map = {}
|
||||
for ci, cell in enumerate(header):
|
||||
if cell is None:
|
||||
continue
|
||||
t = str(cell).strip()
|
||||
if t == 'AAA':
|
||||
col_map['AAA'] = ci
|
||||
elif t == 'AA':
|
||||
col_map['AA'] = ci
|
||||
elif t == 'A':
|
||||
col_map['A'] = ci
|
||||
elif t == 'BBB':
|
||||
col_map['BBB'] = ci
|
||||
elif t == 'BB':
|
||||
col_map['BB'] = ci
|
||||
elif t == 'D':
|
||||
col_map['D'] = ci
|
||||
elif t == 'WR':
|
||||
col_map['WR'] = ci
|
||||
elif t.startswith('B') and t not in ['BB', 'BBB']:
|
||||
col_map['B_below'] = ci
|
||||
|
||||
required_cols = ['AAA', 'AA', 'A', 'BBB', 'BB', 'B_below', 'D', 'WR']
|
||||
if not all(c in col_map for c in required_cols):
|
||||
return None
|
||||
|
||||
# 데이터 행 추출 (header 다음부터)
|
||||
mat = np.zeros((6, 8))
|
||||
grade_idx = {"AAA": 0, "AA": 1, "A": 2, "BBB": 3, "BB": 4, "B_below": 5}
|
||||
col_order = ['AAA', 'AA', 'A', 'BBB', 'BB', 'B_below', 'D', 'WR']
|
||||
|
||||
found_grades = set()
|
||||
for j in range(header_idx + 1, min(header_idx + 15, total)):
|
||||
row = rows[j]
|
||||
|
||||
# 등급 식별 (col 0 or 1)
|
||||
grade = None
|
||||
for ci in range(min(2, len(row))):
|
||||
g = _is_grade_label(str(row[ci]) if row[ci] else '')
|
||||
if g:
|
||||
grade = g
|
||||
break
|
||||
|
||||
if grade is None:
|
||||
# 빈 행이면 이전 등급 컨텍스트 체크 — skip
|
||||
continue
|
||||
|
||||
if grade in found_grades:
|
||||
continue
|
||||
|
||||
if grade not in grade_idx:
|
||||
continue
|
||||
|
||||
ri = grade_idx[grade]
|
||||
for ci_name, ci_col in enumerate(col_order):
|
||||
src_col = col_map[ci_col]
|
||||
if src_col < len(row):
|
||||
mat[ri, ci_name] = _fix_cell(str(row[src_col]) if row[src_col] else '')
|
||||
|
||||
found_grades.add(grade)
|
||||
|
||||
if len(found_grades) < 6:
|
||||
return None
|
||||
|
||||
# 유효성: 행합 ~100
|
||||
for ri in range(6):
|
||||
s = mat[ri].sum()
|
||||
if s < 30 or s > 110:
|
||||
return None
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
# ============================================================
|
||||
# NICE 텍스트 기반 파서 (숫자가 깔끔한 형태)
|
||||
# ============================================================
|
||||
def parse_nice(pdf_path: Path) -> Dict[int, np.ndarray]:
|
||||
"""NICE PDF — clean numeric format, text-based"""
|
||||
matrices = {}
|
||||
pdf = pdfplumber.open(pdf_path)
|
||||
|
||||
for page in pdf.pages:
|
||||
text = page.extract_text()
|
||||
if not text:
|
||||
continue
|
||||
|
||||
lines = text.split('\n')
|
||||
i = 0
|
||||
while i < len(lines):
|
||||
line = lines[i].strip()
|
||||
|
||||
year_match = re.match(r'^(\d{4})\S', line)
|
||||
if year_match:
|
||||
year = int(year_match.group(1))
|
||||
if '~' not in line and 1998 <= year <= 2025:
|
||||
block = lines[i:i+15]
|
||||
matrix = _extract_nice_matrix(block)
|
||||
if matrix is not None:
|
||||
matrices[year] = matrix
|
||||
i += 1
|
||||
|
||||
pdf.close()
|
||||
return matrices
|
||||
|
||||
|
||||
def _extract_nice_matrix(block_lines: List[str]) -> Optional[np.ndarray]:
|
||||
"""NICE에서 6×8 행렬 추출 (clean 8-number format)"""
|
||||
matrix_rows = {}
|
||||
|
||||
for line in block_lines:
|
||||
stripped = line.strip()
|
||||
|
||||
for grade in ["AAA", "BBB", "BB"]:
|
||||
pat = re.match(rf'^{grade}\s+([\d.]+(?:\s+[\d.]+)*)', stripped)
|
||||
if pat:
|
||||
nums = [float(x) for x in pat.group(1).split()]
|
||||
if len(nums) >= 6:
|
||||
matrix_rows[grade] = nums[:8]
|
||||
break
|
||||
else:
|
||||
# AA (not AAA)
|
||||
pat = re.match(r'^AA\s+(?!A)([\d.]+(?:\s+[\d.]+)*)', stripped)
|
||||
if pat:
|
||||
nums = [float(x) for x in pat.group(1).split()]
|
||||
if len(nums) >= 6:
|
||||
matrix_rows["AA"] = nums[:8]
|
||||
continue
|
||||
|
||||
# A (not AA/AAA)
|
||||
pat = re.match(r'^A\s+(?!A)([\d.]+(?:\s+[\d.]+)*)', stripped)
|
||||
if pat:
|
||||
nums = [float(x) for x in pat.group(1).split()]
|
||||
if len(nums) >= 6:
|
||||
matrix_rows["A"] = nums[:8]
|
||||
continue
|
||||
|
||||
# B이하
|
||||
pat = re.match(r'^B[^\w\s]?\S*\s+([\d.]+(?:\s+[\d.]+)*)', stripped)
|
||||
if pat and not stripped.startswith("BB") and not stripped.startswith("BBB"):
|
||||
nums = [float(x) for x in pat.group(1).split()]
|
||||
if len(nums) >= 6:
|
||||
matrix_rows["B_below"] = nums[:8]
|
||||
|
||||
required = ["AAA", "AA", "A", "BBB", "BB", "B_below"]
|
||||
if not all(g in matrix_rows for g in required):
|
||||
return None
|
||||
|
||||
mat = np.zeros((6, 8))
|
||||
for idx, grade in enumerate(required):
|
||||
vals = matrix_rows[grade]
|
||||
for j in range(min(len(vals), 8)):
|
||||
mat[idx, j] = vals[j]
|
||||
|
||||
for idx in range(6):
|
||||
s = mat[idx].sum()
|
||||
if s < 30 or s > 110:
|
||||
return None
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
# ============================================================
|
||||
# KR 텍스트 기반 파서 (공백 분리 숫자 + 대시)
|
||||
# ============================================================
|
||||
def parse_kr(pdf_path: Path) -> Dict[int, np.ndarray]:
|
||||
"""KR PDF — space-separated numbers, dashes for zeros, always 8 columns"""
|
||||
matrices = {}
|
||||
pdf = pdfplumber.open(pdf_path)
|
||||
|
||||
full_text = ""
|
||||
for page in pdf.pages:
|
||||
text = page.extract_text()
|
||||
if text:
|
||||
full_text += text + "\n"
|
||||
pdf.close()
|
||||
|
||||
lines = full_text.split('\n')
|
||||
i = 0
|
||||
while i < len(lines):
|
||||
line = lines[i].strip()
|
||||
|
||||
year_match = re.match(r'^(\d{4})[^\d~]', line)
|
||||
if year_match and '~' not in line:
|
||||
year = int(year_match.group(1))
|
||||
if 1998 <= year <= 2025:
|
||||
block = lines[i:i+20]
|
||||
matrix = _extract_kr_matrix(block)
|
||||
if matrix is not None:
|
||||
matrices[year] = matrix
|
||||
i += 1
|
||||
|
||||
return matrices
|
||||
|
||||
|
||||
def _extract_kr_matrix(block_lines: List[str]) -> Optional[np.ndarray]:
|
||||
"""KR에서 6×8 행렬 추출 (dash + space-separated nums)"""
|
||||
matrix_rows = {}
|
||||
|
||||
for line in block_lines:
|
||||
stripped = line.strip()
|
||||
grade = None
|
||||
rest = None
|
||||
|
||||
for g in ["AAA", "BBB", "BB"]:
|
||||
pat = re.match(rf'^{g}\s+(.*)', stripped)
|
||||
if pat:
|
||||
grade = g
|
||||
rest = pat.group(1)
|
||||
break
|
||||
|
||||
if grade is None:
|
||||
pat = re.match(r'^AA\s+(?!A)(.*)', stripped)
|
||||
if pat:
|
||||
grade = "AA"
|
||||
rest = pat.group(1)
|
||||
|
||||
if grade is None:
|
||||
pat = re.match(r'^A\s+(?!A)(.*)', stripped)
|
||||
if pat:
|
||||
grade = "A"
|
||||
rest = pat.group(1)
|
||||
|
||||
if grade is None:
|
||||
# B이하 — B + non-ascii
|
||||
pat = re.match(r'^B[^\w\s]?\s*(.*)', stripped)
|
||||
if pat and not stripped.startswith("BB") and not stripped.startswith("BBB"):
|
||||
rest_raw = pat.group(1)
|
||||
rest_cleaned = re.sub(r'^[^\d\s.-]+\s*', '', rest_raw)
|
||||
if rest_cleaned and (re.search(r'\d', rest_cleaned) or '-' in rest_cleaned):
|
||||
grade = "B_below"
|
||||
rest = rest_cleaned
|
||||
|
||||
if grade is None or rest is None or grade in matrix_rows:
|
||||
continue
|
||||
|
||||
values = _parse_kr_numbers(rest)
|
||||
if values is not None and len(values) == 8:
|
||||
matrix_rows[grade] = values
|
||||
|
||||
required = ["AAA", "AA", "A", "BBB", "BB", "B_below"]
|
||||
if not all(g in matrix_rows for g in required):
|
||||
return None
|
||||
|
||||
mat = np.zeros((6, 8))
|
||||
for idx, grade in enumerate(required):
|
||||
mat[idx] = matrix_rows[grade]
|
||||
|
||||
for idx in range(6):
|
||||
s = mat[idx].sum()
|
||||
if s < 30 or s > 110:
|
||||
return None
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
def _parse_kr_numbers(s: str) -> Optional[List[float]]:
|
||||
"""KR 숫자열 파싱 — 8개 토큰 (숫자 or 대시)"""
|
||||
s = s.strip()
|
||||
if not s:
|
||||
return None
|
||||
|
||||
results = []
|
||||
pos = 0
|
||||
n = len(s)
|
||||
|
||||
while pos < n and len(results) < 8:
|
||||
# 공백 스킵
|
||||
while pos < n and s[pos] == ' ':
|
||||
pos += 1
|
||||
if pos >= n:
|
||||
break
|
||||
|
||||
# 대시 → 0
|
||||
if s[pos] == '-':
|
||||
results.append(0.0)
|
||||
pos += 1
|
||||
continue
|
||||
|
||||
# 소수점 포함 숫자 찾기
|
||||
dot_pos = None
|
||||
scan = pos
|
||||
while scan < n:
|
||||
if s[scan] == '.':
|
||||
dot_pos = scan
|
||||
break
|
||||
elif s[scan] in '0123456789 ':
|
||||
scan += 1
|
||||
else:
|
||||
break
|
||||
|
||||
if dot_pos is None:
|
||||
# 숫자만 있는 경우
|
||||
num_str = ''
|
||||
while pos < n and s[pos].isdigit():
|
||||
num_str += s[pos]
|
||||
pos += 1
|
||||
if num_str:
|
||||
results.append(float(num_str))
|
||||
elif pos < n:
|
||||
pos += 1
|
||||
continue
|
||||
|
||||
int_part = ''.join(c for c in s[pos:dot_pos] if c.isdigit())
|
||||
dec_part = ''
|
||||
j = dot_pos + 1
|
||||
while j < n and len(dec_part) < 2:
|
||||
if s[j].isdigit():
|
||||
dec_part += s[j]
|
||||
j += 1
|
||||
elif s[j] == ' ':
|
||||
j += 1
|
||||
else:
|
||||
break
|
||||
|
||||
int_part = int_part or '0'
|
||||
dec_part = dec_part or '0'
|
||||
results.append(float(f"{int_part}.{dec_part}"))
|
||||
pos = max(j, pos + 1)
|
||||
|
||||
return results if len(results) == 8 else None
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 후처리: 6×8 → 8×8
|
||||
# ============================================================
|
||||
def postprocess_matrix(raw_6x8: np.ndarray) -> np.ndarray:
|
||||
"""6×8 (AAA~B이하 × AAA~WR) → 8×8 (AAA~D × AAA~D)"""
|
||||
assert raw_6x8.shape == (6, 8), f"Expected (6,8), got {raw_6x8.shape}"
|
||||
|
||||
# WR 열(7) 제거 → 비례 재배분
|
||||
mat_6x7 = raw_6x8[:, :7].copy()
|
||||
for i in range(6):
|
||||
row_sum = mat_6x7[i].sum()
|
||||
if row_sum > 0:
|
||||
mat_6x7[i] = mat_6x7[i] / row_sum * 100.0
|
||||
|
||||
# 8×8 구성: B이하(5) → B(5), D:col6→col7
|
||||
mat = np.zeros((8, 8))
|
||||
for i in range(6):
|
||||
for j in range(6):
|
||||
mat[i, j] = mat_6x7[i, j]
|
||||
mat[i, 7] = mat_6x7[i, 6] # D
|
||||
|
||||
# CCC 행/열 extrapolation
|
||||
mat = _extrapolate_ccc(mat)
|
||||
|
||||
# D 행
|
||||
mat[7, :] = 0.0
|
||||
mat[7, 7] = 100.0
|
||||
|
||||
# → 확률, 행합 정규화
|
||||
mat /= 100.0
|
||||
for i in range(8):
|
||||
s = mat[i].sum()
|
||||
if s > 0:
|
||||
mat[i] /= s
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
def _extrapolate_ccc(mat: np.ndarray) -> np.ndarray:
|
||||
"""CCC 행/열 extrapolation from B이하 PD 패턴"""
|
||||
pd_bb = mat[4, 7]
|
||||
pd_b = mat[5, 7]
|
||||
|
||||
# CCC PD
|
||||
if pd_bb > 0 and pd_b > pd_bb:
|
||||
ratio = pd_b / pd_bb
|
||||
else:
|
||||
ratio = 2.5
|
||||
pd_ccc = min(pd_b * ratio, 60.0)
|
||||
pd_ccc = max(pd_ccc, pd_b * 1.5)
|
||||
|
||||
# Stay rates
|
||||
stay_bb = mat[4, 4]
|
||||
stay_b = mat[5, 5]
|
||||
stay_ratio = (stay_b / stay_bb) if (stay_bb > 0 and stay_b < stay_bb) else 0.7
|
||||
stay_ccc = max(stay_b * stay_ratio, 5.0)
|
||||
|
||||
upgrade_to_b = mat[5, 4] * 0.8 if mat[5, 4] > 0 else 2.0
|
||||
|
||||
# CCC 행
|
||||
mat[6, :] = [0, 0, 0.1, 0.2, 0.3, upgrade_to_b, stay_ccc, pd_ccc]
|
||||
|
||||
ccc_sum = mat[6].sum()
|
||||
if ccc_sum > 100:
|
||||
mat[6, 6] = max(mat[6, 6] - (ccc_sum - 100), 1.0)
|
||||
elif ccc_sum < 100:
|
||||
mat[6, 6] += (100 - ccc_sum)
|
||||
|
||||
# CCC 열: B→CCC, BB→CCC, BBB→CCC 전이 분리
|
||||
b_to_ccc = mat[5, 5] * 0.15
|
||||
mat[5, 6] = b_to_ccc
|
||||
mat[5, 5] -= b_to_ccc
|
||||
|
||||
bb_to_ccc = mat[4, 5] * 0.1 if mat[4, 5] > 0 else 0.5
|
||||
mat[4, 6] = bb_to_ccc
|
||||
mat[4, 5] = max(mat[4, 5] - bb_to_ccc, 0)
|
||||
|
||||
mat[3, 6] = 0.3
|
||||
mat[3, 5] = max(mat[3, 5] - 0.15, 0)
|
||||
mat[3, 3] = max(mat[3, 3] - 0.15, 0)
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
# ============================================================
|
||||
# 메인
|
||||
# ============================================================
|
||||
def main():
|
||||
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
all_matrices = {}
|
||||
|
||||
for agency, pdf_path in PDF_FILES.items():
|
||||
print(f"\n{'='*60}")
|
||||
print(f" Parsing: {agency} ({pdf_path.name})")
|
||||
print(f"{'='*60}")
|
||||
|
||||
if not pdf_path.exists():
|
||||
print(f" ERROR: File not found")
|
||||
continue
|
||||
|
||||
# 파서 선택
|
||||
if agency == "NICE":
|
||||
raw = parse_nice(pdf_path)
|
||||
elif agency == "KR":
|
||||
raw = parse_kr(pdf_path)
|
||||
else: # SCI
|
||||
raw = parse_via_tables(pdf_path)
|
||||
|
||||
print(f" Extracted {len(raw)} matrices: {sorted(raw.keys())}")
|
||||
|
||||
# 샘플 출력
|
||||
for sample_year in [1998, 2009, 2025]:
|
||||
if sample_year in raw:
|
||||
labels = ["AAA", "AA", "A", "BBB", "BB", "B_below"]
|
||||
print(f"\n Raw {sample_year}:")
|
||||
for idx, g in enumerate(labels):
|
||||
print(f" {g:>7}: [{', '.join(f'{v:7.2f}' for v in raw[sample_year][idx])}]")
|
||||
|
||||
# 후처리 + CSV 저장
|
||||
processed = {}
|
||||
for year, raw_mat in sorted(raw.items()):
|
||||
try:
|
||||
processed[year] = postprocess_matrix(raw_mat)
|
||||
except Exception as e:
|
||||
print(f" ERROR {year}: {e}")
|
||||
|
||||
all_matrices[agency] = processed
|
||||
print(f" Processed {len(processed)} matrices")
|
||||
|
||||
for year, mat in processed.items():
|
||||
df = pd.DataFrame(mat, index=MODEL_GRADES, columns=MODEL_GRADES)
|
||||
df.to_csv(OUTPUT_DIR / f"{agency}_{year}.csv", float_format="%.6f")
|
||||
|
||||
# 3사 평균
|
||||
print(f"\n{'='*60}")
|
||||
print(f" Computing 3-agency average")
|
||||
print(f"{'='*60}")
|
||||
|
||||
agency_names = list(all_matrices.keys())
|
||||
common_years = sorted(set.intersection(
|
||||
*[set(all_matrices[a].keys()) for a in agency_names]
|
||||
)) if len(agency_names) >= 2 else []
|
||||
|
||||
print(f" Common years: {len(common_years)}")
|
||||
if common_years:
|
||||
print(f" Range: {common_years[0]}~{common_years[-1]}")
|
||||
|
||||
for year in common_years:
|
||||
avg = np.mean([all_matrices[a][year] for a in agency_names], axis=0)
|
||||
for i in range(8):
|
||||
s = avg[i].sum()
|
||||
if s > 0:
|
||||
avg[i] /= s
|
||||
df = pd.DataFrame(avg, index=MODEL_GRADES, columns=MODEL_GRADES)
|
||||
df.to_csv(OUTPUT_DIR / f"AVG_{year}.csv", float_format="%.6f")
|
||||
|
||||
# PD 요약
|
||||
print(f"\n{'='*60}")
|
||||
print(f" PD Summary")
|
||||
print(f"{'='*60}")
|
||||
|
||||
print(f"\n {'':>6}", end='')
|
||||
for a in agency_names:
|
||||
print(f" {a:>10}", end='')
|
||||
if common_years:
|
||||
print(f" {'AVG':>10}", end='')
|
||||
print()
|
||||
|
||||
for sample_year in [2000, 2009, 2020, 2025]:
|
||||
if sample_year not in common_years and not any(sample_year in all_matrices[a] for a in agency_names):
|
||||
continue
|
||||
print(f"\n Year {sample_year}:")
|
||||
for gi, grade in enumerate(MODEL_GRADES[:-1]):
|
||||
print(f" {grade:>5}:", end='')
|
||||
for a in agency_names:
|
||||
if sample_year in all_matrices[a]:
|
||||
pd_val = all_matrices[a][sample_year][gi, -1] * 100
|
||||
print(f" {pd_val:9.3f}%", end='')
|
||||
else:
|
||||
print(f" {'N/A':>10}", end='')
|
||||
if sample_year in common_years:
|
||||
avg_f = OUTPUT_DIR / f"AVG_{sample_year}.csv"
|
||||
avg_df = pd.read_csv(avg_f, index_col=0)
|
||||
print(f" {avg_df.loc[grade, 'D']*100:9.3f}%", end='')
|
||||
print()
|
||||
|
||||
print(f"\n Output: {OUTPUT_DIR}")
|
||||
print(f" Total CSV files: {len(list(OUTPUT_DIR.glob('*.csv')))}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
9
data/real/AVG_1998.csv
Normal file
9
data/real/AVG_1998.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.576715,0.338615,0.084670,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.000000,0.559352,0.440648,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.017544,0.699909,0.207912,0.071635,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.068283,0.515874,0.244982,0.027220,0.143640
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.044442,0.476959,0.084169,0.394430
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.048887,0.353468,0.591645
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_1999.csv
Normal file
9
data/real/AVG_1999.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.833333,0.166667,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.933333,0.066667,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.061773,0.737460,0.117262,0.000000,0.083505,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.062378,0.797521,0.062053,0.075048,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.134711,0.796350,0.062045,0.006894,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.023801,0.090450,0.592972,0.104642,0.188136
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.079026,0.452999,0.461975
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2000.csv
Normal file
9
data/real/AVG_2000.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.014493,0.971014,0.014493,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.122075,0.817172,0.047406,0.013347,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.057296,0.883453,0.056255,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.075517,0.858165,0.028252,0.004798,0.033268
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.115489,0.671687,0.118533,0.094291
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.092391,0.622554,0.279054
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2001.csv
Normal file
9
data/real/AVG_2001.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.061444,0.893772,0.030291,0.014493,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.101044,0.861655,0.037302,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.068367,0.846477,0.060342,0.010752,0.003000,0.011062
|
||||
BB,0.000000,0.000000,0.000000,0.062964,0.847031,0.037988,0.004221,0.047796
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.160363,0.561351,0.099062,0.179224
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.128291,0.406102,0.459608
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2002.csv
Normal file
9
data/real/AVG_2002.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.076355,0.852232,0.071413,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.114891,0.872030,0.013079,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.047703,0.911130,0.038171,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.094675,0.725113,0.119048,0.013228,0.047937
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.080869,0.599699,0.105829,0.213603
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.071361,0.374766,0.547872
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2003.csv
Normal file
9
data/real/AVG_2003.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.085849,0.800426,0.113725,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.026047,0.910271,0.049112,0.000000,0.014570,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.078127,0.898498,0.020379,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.011905,0.073811,0.735706,0.115708,0.012856,0.050014
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.776242,0.136984,0.086774
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.732848,0.241152
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2004.csv
Normal file
9
data/real/AVG_2004.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.081732,0.885698,0.032570,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.105432,0.857125,0.037443,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.118503,0.855562,0.022940,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.180688,0.579904,0.029986,0.004990,0.204431
|
||||
B,0.000000,0.000000,0.000000,0.067996,0.025653,0.587401,0.103659,0.215291
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.033856,0.478994,0.481151
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2005.csv
Normal file
9
data/real/AVG_2005.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.027063,0.961034,0.011903,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.080727,0.901305,0.017968,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.113735,0.883270,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.174718,0.805287,0.015011,0.004985,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.737199,0.130094,0.132708
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.650564,0.323436
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2006.csv
Normal file
9
data/real/AVG_2006.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.039636,0.949612,0.010752,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.150519,0.849481,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.099090,0.862331,0.009213,0.017425,0.002999,0.008942
|
||||
BB,0.000000,0.000000,0.052771,0.113733,0.697852,0.102932,0.013095,0.019616
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.013320,0.822017,0.145062,0.019601
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.023990,0.921009,0.049001
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2007.csv
Normal file
9
data/real/AVG_2007.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.033387,0.927049,0.039565,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.030441,0.951364,0.018196,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.154455,0.823274,0.019275,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.790519,0.188533,0.020948,0.000000
|
||||
B,0.000000,0.000000,0.022231,0.000000,0.037026,0.799631,0.141111,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.042954,0.951046,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2008.csv
Normal file
9
data/real/AVG_2008.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.970045,0.029955,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.031482,0.923305,0.045213,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.100955,0.789007,0.094084,0.000000,0.002996,0.012958
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.838881,0.075012,0.008335,0.077771
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.792549,0.139862,0.067589
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.840113,0.133887
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2009.csv
Normal file
9
data/real/AVG_2009.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.009656,0.990344,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.104447,0.876365,0.019188,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.068251,0.856864,0.000000,0.071886,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.672167,0.165050,0.018339,0.144445
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.738601,0.130341,0.131057
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.646357,0.327643
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2010.csv
Normal file
9
data/real/AVG_2010.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.016612,0.983388,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.076151,0.916687,0.007162,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.151960,0.747671,0.000000,0.097368,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.088045,0.760897,0.033324,0.007019,0.110714
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.042016,0.596927,0.105340,0.255717
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.033613,0.432171,0.528216
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2011.csv
Normal file
9
data/real/AVG_2011.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.080891,0.912472,0.000000,0.000000,0.006636,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.056800,0.900004,0.020100,0.000000,0.002996,0.020100
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.958177,0.000000,0.004975,0.036848
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.722515,0.127503,0.149983
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.640697,0.333303
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2012.csv
Normal file
9
data/real/AVG_2012.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.996806,0.003194,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.045306,0.891376,0.057383,0.000000,0.000000,0.000000,0.005935
|
||||
BBB,0.000000,0.000000,0.044172,0.854883,0.078990,0.000000,0.002996,0.018959
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.882739,0.042857,0.008079,0.066325
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.527309,0.093055,0.379636
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.371213,0.602787
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2013.csv
Normal file
9
data/real/AVG_2013.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.006139,0.974049,0.019812,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.061071,0.896095,0.042834,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.025036,0.833740,0.000000,0.097981,0.003000,0.040243
|
||||
BB,0.000000,0.000000,0.000000,0.019608,0.633854,0.240730,0.026748,0.079061
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.783775,0.138313,0.077912
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.779051,0.194949
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2014.csv
Normal file
9
data/real/AVG_2014.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.982722,0.017278,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.935092,0.064908,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.042667,0.911635,0.039382,0.000000,0.000000,0.000000,0.006316
|
||||
BBB,0.000000,0.000000,0.049172,0.754148,0.095230,0.081005,0.003000,0.017445
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.889822,0.044140,0.004904,0.061134
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.809516,0.142856,0.047629
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.854929,0.119071
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2015.csv
Normal file
9
data/real/AVG_2015.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.987769,0.012231,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.942411,0.057589,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.044707,0.890625,0.044093,0.020575,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.883788,0.058686,0.054528,0.002999,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.824613,0.066133,0.009006,0.100248
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.033357,0.696715,0.122950,0.146978
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.040019,0.625156,0.328824
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2016.csv
Normal file
9
data/real/AVG_2016.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.986849,0.013151,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.006451,0.968852,0.024697,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.104974,0.858533,0.033497,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.017561,0.000000,0.807022,0.110507,0.012279,0.052632
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.770997,0.136058,0.092944
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.725061,0.248939
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2017.csv
Normal file
9
data/real/AVG_2017.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.002491,0.997509,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.006881,0.945764,0.047356,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.036065,0.960939,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.954884,0.039112,0.006004,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.037033,0.782552,0.138097,0.042318
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.042959,0.845245,0.105796
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2018.csv
Normal file
9
data/real/AVG_2018.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.002562,0.989769,0.007670,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.032033,0.957316,0.010651,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.070225,0.926780,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.036842,0.912222,0.042857,0.008079,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.850000,0.150000,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2019.csv
Normal file
9
data/real/AVG_2019.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.988467,0.011533,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.992525,0.007475,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.023329,0.956611,0.020060,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.057312,0.907983,0.031709,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.844864,0.079973,0.010544,0.064618
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.726629,0.128229,0.145142
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.609263,0.364737
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2020.csv
Normal file
9
data/real/AVG_2020.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.980288,0.019712,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.031368,0.950070,0.018561,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.981861,0.015143,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.995025,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.807501,0.142500,0.049999
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.849003,0.124997
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2021.csv
Normal file
9
data/real/AVG_2021.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.983165,0.016835,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.019705,0.980295,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.045741,0.951264,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.903741,0.077251,0.008583,0.010425
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.036290,0.785823,0.138675,0.039213
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.035699,0.872423,0.085878
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2022.csv
Normal file
9
data/real/AVG_2022.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.988889,0.011111,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.024003,0.972968,0.003029,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.056490,0.932766,0.007749,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.006520,0.938149,0.049798,0.005533,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.832292,0.146875,0.020833
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.921917,0.052083
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2023.csv
Normal file
9
data/real/AVG_2023.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.985058,0.014942,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.012441,0.967654,0.019175,0.000346,0.000192,0.000192,0.000000,0.000000
|
||||
A,0.000000,0.046798,0.925196,0.017851,0.000981,0.008194,0.000000,0.000981
|
||||
BBB,0.000000,0.000324,0.122103,0.840895,0.015282,0.011434,0.002997,0.006966
|
||||
BB,0.000000,0.000000,0.007813,0.059788,0.747704,0.087134,0.009682,0.087879
|
||||
B,0.000000,0.000000,0.000000,0.009755,0.004878,0.688927,0.121575,0.174865
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.017235,0.714467,0.262298
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2024.csv
Normal file
9
data/real/AVG_2024.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.989263,0.010737,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.009179,0.986330,0.004491,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.002861,0.987801,0.009338,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.986259,0.010745,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.019053,0.910296,0.052873,0.005875,0.011903
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.748310,0.132055,0.119636
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.691617,0.282383
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/AVG_2025.csv
Normal file
9
data/real/AVG_2025.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.997390,0.002610,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.005308,0.971845,0.022707,0.000140,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.018709,0.961237,0.018726,0.000443,0.000738,0.000000,0.000148
|
||||
BBB,0.000000,0.000000,0.054288,0.926175,0.010365,0.004800,0.002997,0.001374
|
||||
BB,0.000000,0.000000,0.000961,0.018349,0.881175,0.073681,0.009845,0.015990
|
||||
B,0.000000,0.000000,0.000000,0.001442,0.059834,0.665919,0.117515,0.155290
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.054534,0.617403,0.322063
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_1998.csv
Normal file
9
data/real/KR_1998.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.444444,0.444444,0.111111,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.000000,0.636374,0.363626,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.052632,0.787974,0.105263,0.051132,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.107188,0.464290,0.257113,0.028568,0.142841
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.425000,0.075000,0.500000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.224000,0.750000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_1999.csv
Normal file
9
data/real/KR_1999.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.500000,0.500000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.800000,0.200000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.078454,0.705876,0.137215,0.000000,0.078454,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.040009,0.851838,0.040009,0.065144,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.176529,0.735269,0.079382,0.008820,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.071403,0.071403,0.546436,0.096430,0.214329
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.057122,0.401055,0.535823
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2000.csv
Normal file
9
data/real/KR_2000.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.081662,0.857174,0.040776,0.020388,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.079514,0.864444,0.053047,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.064964,0.844180,0.046711,0.005190,0.038955
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.083322,0.672884,0.118744,0.125050
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.066658,0.525918,0.401424
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2001.csv
Normal file
9
data/real/KR_2001.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.049979,0.950021,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.106349,0.829818,0.063832,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.030564,0.876112,0.061259,0.008688,0.003000,0.020376
|
||||
BB,0.000000,0.000000,0.000000,0.095924,0.862930,0.024650,0.002739,0.013758
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.076950,0.653777,0.115372,0.153901
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.061560,0.332440,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2002.csv
Normal file
9
data/real/KR_2002.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.083374,0.916626,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.102050,0.897950,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.057049,0.911431,0.028525,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.114754,0.721311,0.118033,0.013115,0.032787
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.667819,0.117850,0.214331
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.374000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2003.csv
Normal file
9
data/real/KR_2003.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.129019,0.677454,0.193528,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.020426,0.938721,0.040853,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.053240,0.917088,0.026677,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.035714,0.107143,0.607143,0.192857,0.021429,0.035714
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.784560,0.138452,0.076988
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.808039,0.165961
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2004.csv
Normal file
9
data/real/KR_2004.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.050023,0.949977,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.134662,0.826882,0.038457,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.084410,0.898527,0.014068,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.200000,0.450000,0.045000,0.005000,0.300000
|
||||
B,0.000000,0.000000,0.000000,0.055556,0.000000,0.566667,0.100000,0.277778
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.374000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2005.csv
Normal file
9
data/real/KR_2005.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.045479,0.954521,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.094301,0.867906,0.037793,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.105697,0.891307,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.149988,0.799976,0.045032,0.005004,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.637500,0.112500,0.250000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.374000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2006.csv
Normal file
9
data/real/KR_2006.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.032255,0.935491,0.032255,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.147019,0.852981,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.082392,0.869092,0.011754,0.022008,0.003000,0.011754
|
||||
BB,0.000000,0.000000,0.058847,0.058847,0.647051,0.158766,0.017641,0.058847
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.800019,0.141180,0.058802
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.826996,0.147004
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2007.csv
Normal file
9
data/real/KR_2007.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.076940,0.897450,0.025609,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.037071,0.944394,0.018535,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.158273,0.826515,0.012216,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.714339,0.257095,0.028566,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.850000,0.150000,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2008.csv
Normal file
9
data/real/KR_2008.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.955575,0.044425,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.040582,0.945926,0.013492,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.109402,0.819255,0.068347,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.849962,0.045045,0.005005,0.099989
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.760532,0.134212,0.105257
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.816115,0.157885
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2009.csv
Normal file
9
data/real/KR_2009.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.102233,0.875013,0.022754,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.042594,0.870855,0.000000,0.083550,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.733252,0.120037,0.013337,0.133374
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.740280,0.130638,0.129082
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.651295,0.322705
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2010.csv
Normal file
9
data/real/KR_2010.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.037519,0.962481,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.087912,0.912088,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.205862,0.704431,0.000000,0.086707,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.773964,0.000000,0.004975,0.221061
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.038422,0.686561,0.121158,0.153859
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.030737,0.578614,0.384649
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2011.csv
Normal file
9
data/real/KR_2011.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.073416,0.926584,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.049914,0.947090,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.995025,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.680000,0.120000,0.200000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.474000,0.500000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2012.csv
Normal file
9
data/real/KR_2012.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.044629,0.892891,0.053554,0.000000,0.000000,0.000000,0.008926
|
||||
BBB,0.000000,0.000000,0.044413,0.886024,0.066567,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.995025,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.377791,0.066669,0.555540
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.140691,0.833309
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2013.csv
Normal file
9
data/real/KR_2013.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.009264,0.981472,0.009264,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.046726,0.915872,0.037402,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.021327,0.870775,0.000000,0.062363,0.003000,0.042535
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.703690,0.200038,0.022226,0.074046
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.772735,0.136365,0.090900
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.837650,0.136350
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2014.csv
Normal file
9
data/real/KR_2014.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.983845,0.016155,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.932769,0.067231,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.042146,0.915709,0.042146,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.023774,0.760530,0.095211,0.093711,0.003000,0.023774
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.850007,0.044957,0.004995,0.100041
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.789228,0.139276,0.071496
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.795260,0.178740
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2015.csv
Normal file
9
data/real/KR_2015.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.981782,0.018218,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.935477,0.064523,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.044409,0.900080,0.033307,0.022204,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.939931,0.057073,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.769245,0.138398,0.015378,0.076980
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.772767,0.136371,0.090862
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.837707,0.136293
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2016.csv
Normal file
9
data/real/KR_2016.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.984166,0.015834,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.010064,0.969700,0.020236,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.085539,0.854439,0.057026,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.789500,0.142110,0.015790,0.052600
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.719282,0.126932,0.153786
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.524379,0.449621
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2017.csv
Normal file
9
data/real/KR_2017.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.011122,0.944390,0.044488,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.041599,0.955406,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.941123,0.052989,0.005888,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.789286,0.139286,0.071429
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.795429,0.178571
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2018.csv
Normal file
9
data/real/KR_2018.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.007685,0.984630,0.007685,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.032247,0.957003,0.010749,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.086814,0.910191,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.857143,0.128571,0.014286,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.850000,0.150000,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2019.csv
Normal file
9
data/real/KR_2019.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.983300,0.016700,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.020358,0.948998,0.030644,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.047580,0.901844,0.047580,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.900042,0.089962,0.009996,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.743787,0.131257,0.124956
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.661609,0.312391
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2020.csv
Normal file
9
data/real/KR_2020.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.977808,0.022192,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.048079,0.942264,0.009657,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.997004,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.995025,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.765022,0.135004,0.099974
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.724065,0.249935
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2021.csv
Normal file
9
data/real/KR_2021.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.992953,0.007047,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.020222,0.979778,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.053973,0.943031,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.967756,0.029020,0.003224,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.058847,0.749959,0.132346,0.058847
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.047078,0.799804,0.147119
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2022.csv
Normal file
9
data/real/KR_2022.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.979737,0.020263,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.018174,0.972739,0.009087,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.069630,0.904128,0.023246,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.911742,0.079432,0.008826,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.850000,0.150000,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2023.csv
Normal file
9
data/real/KR_2023.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.985975,0.014025,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.024314,0.929246,0.044250,0.001037,0.000576,0.000576,0.000000,0.000000
|
||||
A,0.000000,0.140393,0.803316,0.043990,0.002942,0.006418,0.000000,0.002942
|
||||
BBB,0.000000,0.000972,0.210919,0.684066,0.045845,0.034301,0.003000,0.020897
|
||||
BB,0.000000,0.000000,0.023439,0.179363,0.441274,0.137580,0.015287,0.203057
|
||||
B,0.000000,0.000000,0.000000,0.029265,0.014633,0.366781,0.064726,0.524595
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.011706,0.195401,0.786893
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2024.csv
Normal file
9
data/real/KR_2024.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.014086,0.978922,0.006992,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.000000,0.990854,0.009146,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.964769,0.032236,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.928580,0.032139,0.003571,0.035710
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.799955,0.141168,0.058877
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.876927,0.097073
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/KR_2025.csv
Normal file
9
data/real/KR_2025.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.995674,0.004326,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.008638,0.970505,0.020436,0.000421,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.046355,0.922115,0.027547,0.001328,0.002213,0.000000,0.000443
|
||||
BBB,0.000000,0.000000,0.067727,0.879654,0.031095,0.014401,0.003000,0.004122
|
||||
BB,0.000000,0.000000,0.002883,0.055046,0.796592,0.087759,0.009751,0.047969
|
||||
B,0.000000,0.000000,0.000000,0.004327,0.012835,0.722757,0.127545,0.132535
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.010268,0.617541,0.366190
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_1998.csv
Normal file
9
data/real/NICE_1998.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.000000,0.500000,0.500000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.591057,0.296279,0.109664,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.050023,0.750000,0.134959,0.014995,0.050023
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.495856,0.087504,0.416640
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.349041,0.624959
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_1999.csv
Normal file
9
data/real/NICE_1999.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.021732,0.804413,0.086928,0.000000,0.086928,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.079374,0.728627,0.095249,0.093749,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.102555,0.820559,0.069197,0.007689,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.637468,0.112494,0.250037
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.374000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2000.csv
Normal file
9
data/real/NICE_2000.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.043478,0.913043,0.043478,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.156895,0.764603,0.058849,0.019653,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.056683,0.872192,0.068130,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.112645,0.816860,0.038045,0.004227,0.028222
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.157903,0.671088,0.118427,0.052582
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.126322,0.769710,0.097968
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2001.csv
Normal file
9
data/real/NICE_2001.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.090874,0.818251,0.090874,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.065196,0.913072,0.021732,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.051241,0.870396,0.051241,0.011310,0.003000,0.012810
|
||||
BB,0.000000,0.000000,0.000000,0.075724,0.833355,0.027238,0.003026,0.060657
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.181865,0.463610,0.081813,0.272712
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.145492,0.248508,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2002.csv
Normal file
9
data/real/NICE_2002.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.107174,0.678587,0.214238,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.117594,0.843171,0.039236,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.051660,0.910955,0.034389,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.081633,0.734694,0.128571,0.014286,0.040816
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.125000,0.531250,0.093750,0.250000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.100000,0.294000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2003.csv
Normal file
9
data/real/NICE_2003.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.095200,0.857143,0.047657,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.057715,0.865296,0.057715,0.000000,0.019274,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.095112,0.901892,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.057169,0.799974,0.051452,0.005717,0.085688
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.779167,0.137500,0.083333
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.765667,0.208333
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2004.csv
Normal file
9
data/real/NICE_2004.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.095200,0.857143,0.047657,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.101660,0.864454,0.033887,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.098239,0.882412,0.016353,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.142094,0.639698,0.000000,0.004975,0.213233
|
||||
B,0.000000,0.000000,0.000000,0.076959,0.076959,0.588439,0.103842,0.153802
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.061567,0.547929,0.384504
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2005.csv
Normal file
9
data/real/NICE_2005.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.035710,0.928580,0.035710,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.083314,0.916686,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.083163,0.913842,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.153070,0.841955,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.724096,0.127782,0.148123
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.603693,0.370307
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2006.csv
Normal file
9
data/real/NICE_2006.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.027787,0.972213,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.153888,0.846112,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.151344,0.830587,0.000000,0.000000,0.002996,0.015073
|
||||
BB,0.000000,0.000000,0.000000,0.083300,0.750000,0.150030,0.016670,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.039961,0.816033,0.144006,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.031969,0.962031,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2007.csv
Normal file
9
data/real/NICE_2007.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.953466,0.046534,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.017851,0.964299,0.017851,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.136149,0.830625,0.030231,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.857169,0.128548,0.014283,0.000000
|
||||
B,0.000000,0.000000,0.066692,0.000000,0.000000,0.793311,0.139996,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2008.csv
Normal file
9
data/real/NICE_2008.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.039961,0.893401,0.066638,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.115165,0.785788,0.076817,0.000000,0.002996,0.019235
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.933333,0.060000,0.006667,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.825706,0.145713,0.028581
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.902546,0.071454
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2009.csv
Normal file
9
data/real/NICE_2009.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.028968,0.971032,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.112361,0.865147,0.022493,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.108065,0.836402,0.000000,0.052533,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.749954,0.075069,0.008341,0.166636
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.728571,0.128571,0.142857
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.616857,0.357143
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2010.csv
Normal file
9
data/real/NICE_2010.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.064570,0.913944,0.021486,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.125019,0.790083,0.000000,0.081898,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.153054,0.841971,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.047675,0.526185,0.092856,0.333284
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.038140,0.355860,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2011.csv
Normal file
9
data/real/NICE_2011.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.069290,0.920766,0.000000,0.000000,0.009944,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.053973,0.889058,0.026987,0.000000,0.002996,0.026987
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.995025,0.000000,0.004975,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.743762,0.131252,0.124986
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.661535,0.312465
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2012.csv
Normal file
9
data/real/NICE_2012.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.990419,0.009581,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.044609,0.884037,0.062474,0.000000,0.000000,0.000000,0.008880
|
||||
BBB,0.000000,0.000000,0.025648,0.868876,0.076833,0.000000,0.002996,0.025648
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.796050,0.000000,0.004975,0.198975
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.637470,0.112495,0.250035
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.598947,0.375053
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2013.csv
Normal file
9
data/real/NICE_2013.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.958980,0.041020,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.073398,0.871553,0.055049,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.024413,0.778901,0.000000,0.144861,0.003000,0.048825
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.727283,0.204505,0.022723,0.045489
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.728591,0.128575,0.142835
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.525504,0.448496
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2014.csv
Normal file
9
data/real/NICE_2014.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,0.964320,0.035680,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.932853,0.067147,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.049476,0.901049,0.039623,0.000000,0.000000,0.000000,0.009853
|
||||
BBB,0.000000,0.000000,0.057122,0.770011,0.057122,0.084183,0.003000,0.028561
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.875014,0.037462,0.004162,0.083361
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.789319,0.139292,0.071390
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.795526,0.178474
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2015.csv
Normal file
9
data/real/NICE_2015.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.969894,0.030106,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.052662,0.873681,0.052662,0.020996,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.000000,0.855732,0.071384,0.069884,0.003000,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.904594,0.000000,0.004975,0.090431
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.637500,0.112500,0.250000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.374000,0.600000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2016.csv
Normal file
9
data/real/NICE_2016.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.000000,0.992432,0.007568,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.009289,0.962951,0.027760,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.086797,0.866742,0.043466,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.052682,0.000000,0.789409,0.094704,0.010523,0.052682
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.850000,0.150000,0.000000
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.974000,0.000000
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
9
data/real/NICE_2017.csv
Normal file
9
data/real/NICE_2017.csv
Normal file
@@ -0,0 +1,9 @@
|
||||
,AAA,AA,A,BBB,BB,B,CCC,D
|
||||
AAA,1.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
AA,0.007474,0.992526,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000
|
||||
A,0.000000,0.009521,0.942877,0.047603,0.000000,0.000000,0.000000,0.000000
|
||||
BBB,0.000000,0.000000,0.066597,0.930407,0.000000,0.000000,0.002996,0.000000
|
||||
BB,0.000000,0.000000,0.000000,0.000000,0.928504,0.064346,0.007150,0.000000
|
||||
B,0.000000,0.000000,0.000000,0.000000,0.000000,0.802803,0.141671,0.055526
|
||||
CCC,0.000000,0.000000,0.001000,0.002000,0.003000,0.020000,0.835184,0.138816
|
||||
D,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,1.000000
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user