재현 패키지 — 보고서1 「산업별 실질부가가치 시나리오 전망」 2장 데이터
이 묶음은 2장의 데이터 구축 전 과정을 데이터 입수 → 분석 → 결과 도출 세 단계로 다시 계산한다. 한국은행 국민계정 36개 산업 분기 실질부가가치(2020년 연쇄가격)를 산업연관표 비중으로 62개 산업에 배분하고, 신산업 7개를 분화해 69개 산업 패널을 만들며, 36개 산업 실질값만으로 연쇄가중 총부가가치를 재현한다. 마지막 단계의 검증 셀이 계산 결과를 공표 산출물·공표 수치와 대조하며, 하나라도 다르면 실행이 멈춘다.
폴더 구조
s2-data/
├─ README.md 이 문서
├─ requirements.txt 검증한 패키지 버전
├─ config.py 경로·상수·스위치(ONLINE·FULL)·스냅샷 SHA-256·공표 수치(검증 기준) — 모든 경로는 이 폴더 기준 상대경로
├─ run_all.py 01→02→03 노트북을 순서대로 실행하고 output/run_log.txt 기록
├─ 01_입수.ipynb 스냅샷 무결성·형태 검증, (ONLINE=1) ECOS·KOSIS 재수집 대조 → data/interim/
├─ 02_분석.ipynb 36→62 배분·시변 몫·62→69 분화·총량 패널·IO 연계·연쇄가중 재현 → output/
├─ 03_결과.ipynb 표 1–5·그림 1–2 + 공표 산출물·수치 대조(검증 셀)
├─ src/gva_data.py 계산 함수(노트북은 이 함수만 호출)
├─ data/
│ ├─ inputs/ 공개 원천 스냅샷 9개 + PROVENANCE.md(출처·통계표 코드·수집일)
│ ├─ crosswalk_62.json KEIT62 ↔ BOK36 ↔ IO 상품중분류(83) 대조표(본 연구 설계)
│ ├─ carveout_rules.csv 62→69 분화 규칙 7건(본 연구 설계)
│ ├─ published/ 공표 산출물 사본(검증 기준): levels_62·69·agg, 배분표, 시변 몫, IO 연계, 재현 검증 자료
│ ├─ external/ (선택) 산업연관표 통합소분류 원본 xlsx를 두는 자리 — 배포 묶음에 없음
│ └─ interim/ 01이 만드는 중간 산출물
└─ output/ 02·03이 만드는 최종 산출물
실행 방법
bash
pip install -r requirements.txt
python run_all.py
기본 실행은 data/inputs/의 스냅샷만 읽으므로 인증키와 인터넷 연결이 필요 없고, 약 30초 안에 끝난다.
JupyterLab에서 01_입수.ipynb부터 차례로 열어 위에서 아래로 실행해도 같은 결과가 나온다.
스위치
| 환경변수 | 기본 | 동작 |
|---|---|---|
ONLINE=1 |
0 | 01의 6절에서 ECOS(200Y103·200Y104·200Y108·271Y120·271Y122)와 KOSIS(101/DT_1F02001, 388/TX_38803_A016A)를 다시 조회해 스냅샷과 공통 관측을 비교하고(data/interim/online_diff.csv), 02의 8절에서 재수집 자료로 62 패널과 이차전지 몫을 다시 계산해 차이를 보인다. 수정 공표에 따른 차이는 보고만 하고 멈추지 않는다. 인증키는 환경변수 API_KEY_BOK(ECOS), API_KEY_KOSIS(KOSIS)에서만 읽는다 |
FULL=1 |
0 | 이 장에는 5분을 넘는 단계가 없으므로 결과에 영향이 없다(모든 계산을 항상 다시 수행한다) |
```bash
예: 원천 재수집 대조(PowerShell은 $env:ONLINE="1" 형식)
ONLINE=1 API_KEY_BOK=... API_KEY_KOSIS=... python run_all.py ```
data/external/에 한국은행 산업연관표 「투입산출표(생산자가격) 통합소분류」 xlsx 4개(2020 실측, 2021–2023 연장)를 두면
01의 7절이 전기장비(37x) 부가가치를 다시 추출해 스냅샷과 대조한다(파일명 형식은 config.IO_SMALL_XLSX).
입력과 산출물
| 단계 | 입력 | 산출물 |
|---|---|---|
| 01 입수 | data/inputs/*.csv, crosswalk_62.json, carveout_rules.csv |
data/interim/va36_real_q.csv, va36_nominal_q.csv, snapshot_check.csv, (ONLINE) online_diff.csv·online_*.csv |
| 02 분석 | interim, inputs, 설계표 | levels_62.csv, mapping_62_official.csv, share_battery.csv, renew_gen_actual.csv, share_renew.csv, levels_69.csv, carve_log.csv, levels_agg.csv, io_linkage_62.csv, io_linkage_69.csv, recon_total_q.csv, recon_total_a.csv |
| 03 결과 | output의 위 파일, data/published/ |
table1_panels.csv ~ table5_recon.csv, fig1_shares.png, fig2_recon.png, verification.csv |
계산 요약
- 36→62: $VA^{62}{k,t} = VA^{36}\cdot s_k$. 한 모산업을 여러 KEIT 산업이 나누어 가지면 $s_k$는 2020년 산업연관표 상품중분류 부가가치 비중(상수), 아니면 1이다(분할 47개, 1:1·병합 15개).
- 이차전지 몫: $\kappa\cdot C282_t/C28_t$. $\kappa$는 산업연관표 소분류 373(전지)/37(전기장비) 부가가치 비중의 2020–2023 평균을 2020Q1–2023Q4 생산지수 비율 평균으로 나눈 상수(0.1822)이다.
- 신재생 몫: 신재생 발전비중(2006–2015 KPX, 2016–2025 KEPCO, 2000–2005 선형 접합)을 분기로 보간해 전력부문 부가가치 몫(IO 45/(45+46) = 0.796)을 곱한다.
- 62→69: 반도체·조선업·철강·택배는 IO 상품중분류 고정 몫, 이차전지·신재생은 시변 몫으로 모산업에서 떼어 '(잔여)' 열을 남기고, 건설은 건물건설·건축보수와 토목건설로 나눈다(62+6+1=69).
- 총량 패널:
levels_agg.csv= 실질 GDP(200Y108, 계절조정) 1980Q1–2025Q4. - IO 연계: 중분류 생산유발계수를 62·69 산업으로 VA 가중 집계하고 오프대각 평균 1로 정규화(하한 0.05)한 산업모형 사전용 행렬이다.
- 연쇄가중 재현: $\hat Y_t=\hat Y_{t-1}\sum_i w_{i,t-1}X_{i,t}/X_{i,t-1}$, $w$는 전기 명목 비중, 기준점 2020Q1에서 양방향으로 잇는다. 평균 |괴리|가 단순합 7.65%에서 0.23%로 줄어든다.
검증
03_결과.ipynb 마지막 셀이 47개 항목을 대조한다.
- 공표 산출물 원소별 대조(8개):
levels_62·levels_69·levels_agg(최대 차이 1.2×10⁻¹⁰ 십억원),share_battery·share_renew·io_linkage_62·io_linkage_69(차이 0), 배분표 몫(차이 0). - 36/62/69 정합(4개): 62합−36합·69합−36합 최대 오차(3.5×10⁻¹⁰ 십억원 이하), 분화 항등식(신산업+잔여=모산업), 62분류 2025Q4 합계 549,415.1십억원.
- 배분·분화(10개): 분할 47·1:1 15, 분화 몫 7개(반도체 0.5471·조선업 0.5703·철강 0.7041·택배 0.2066·이차전지 평균 0.1394·신재생 평균 0.0335·건물건설 0.7013), κ 0.1822 — 원 노트북
industry_pipeline/01_데이터입수_산업구분.ipynb출력과 포털 「62개에서 69개로」. - 시변 몫 수치(6개): IO 373 비중 평균 0.199, 원 코드 상수의 출처(소분류표 반올림 4개년 일치), 발전비중 2006·2016·2025(1.0·4.8·11.5%), 전력부문 VA몫 0.796.
- 연쇄가중 재현(19개): 포털 「36개 산업 실질값으로 GVA 재현하기」 검증표 16개 수치(6개 시점의 괴리, 184분기 평균·최대), 연간 최대 0.0014%, 뷰어의 분기별 184개 괴리 계열 2종.
허용오차는 공표 자릿수의 반올림 범위(소수 d자리이면 0.5×10⁻ᵈ)이고, 파일 대조는 부동소수점 오차 범위(10⁻⁶ 십억원 이하)이다.
정정 기록과 쟁점
- 연쇄가중 재현 코드의 위치. 포털 「36개 산업 실질값으로 GVA 재현하기」는 전체 코드를
code/industry_models_36q/reconstruct_total.py로 안내하지만 프로젝트 안에서 이 파일을 찾지 못했다. 같은 페이지 4절에 실린 알고리즘(기준점 2020Q1, 전기 명목 비중 가중 성장배율, 양방향 연쇄)을gva_data.reconstruct로 옮겨 계산한 결과, 검증표 16개 수치와 뷰어의 184분기 괴리 계열이 반올림 범위에서 모두 일치하였다. 같은 페이지의 '연간 단위 최대 0.0014%'는 분기 계절조정 계열을 연간 합으로 묶어 같은 방식으로 이으면 재현된다(0.00142%). '분기별 성장률 오차 0.05~0.15%p 수준'이라는 서술은 평균(0.049%p)에는 맞으나 최대 차이는 0.466%p이다. - 62·69 패널의
총량GDP열. 이름과 달리 국내총생산이 아니라 36개 산업 실질 부가가치의 단순합이다(2025Q4 549,415.1십억원; 총부가가치 543,908.0, 실질 GDP 585,964.0). 연쇄가중 계열은 가법성이 없어 이 합은 기준연도에서 멀어질수록 총부가가치와 달라진다(2000Q1 +5.7%). 실질 GDP는levels_agg.csv에 있다. 공표 파일은 바꾸지 않았다. - 이차전지 벤치마크의 반올림. 원 코드는 소분류 373/37 비중을 소수 셋째 자리로 반올림한 상수(0.182·0.200·0.215·0.198, 평균 0.19875)를 썼다. 반올림 전 평균은 0.19846이며, 이를 쓰면 κ가 0.18222에서 0.18196으로 0.15% 낮아진다. 포털의 '평균 약 19.9%'는 반올림 상수에서 나온 값이다. 공표 결과를 재현하기 위해 원 상수를 그대로 쓴다.
- 신재생 발전비중의 반올림. 원 코드는 2016–2025년 발전비중을 소수 여섯째 자리로 반올림한 값을, 2006–2015년은 반올림하지 않은 비율을 쓴다. 영향은 10⁻⁶ 이하이며 그대로 재현하였다.
- 포털 「36개 산업에서 69개 산업으로 — 매칭 방법론」과 실제 코드의 차이. 이 페이지는 36→62 배분을 광업제조업조사의 연도별 비중으로, 62→69를 화학·의약·고무플라스틱 3분할 등 다른 8개 항목의 세분화로 설명한다.
공표 패널(
levels_62.csv·levels_69.csv)을 만든 코드는 2020년 산업연관표 상품중분류 비중(상수)으로 배분하고, 「62개에서 69개로 — 7가지 분화 제안」의 7개 분화(반도체·이차전지·신재생·조선·건설·철강·택배)를 적용한다. 본문 작성 시 앞의 페이지는 이전 설계안으로 표시하거나 수정할 필요가 있다. - 이차전지 몫의 서술. 포털은 '2020년대 15~20%'로 적었으나 연평균은 2020–2025년 18.2·19.3·21.9·20.1·15.7·14.7%이다(표 4).
- 대조표의 모호 표기. KEIT 50(장비·용품임대업)의 모산업은 '111501 또는 111502'로 적혀 있으며, 원 코드 규칙에 따라 마지막 코드(111502 사업지원 서비스업)로 확정된다.
- 원 코드의 예비 상수.
build_69.py의 잠정 몫(이차전지 0.25, 신재생 0.15×전력몫)은 시변 몫 파일이 있으면 쓰이지 않으며 공표 결과에도 쓰이지 않았다.
범위에서 제외한 것 — 월별 패널
월별 실질부가가치(repo2/db/gva_monthly.sqlite, 혼합주기 상태공간 시점분해)는 이 패키지에 넣지 않았다. 이유는 다음과 같다.
- 별도 후속연구의 70개 산업(MECE) 분류이며, 보고서1의 산업모형·전망(4–5장)은 분기 62·69 패널만 쓴다(원 노트북의 '분기만 사용, 월별 미경유').
- DB의
latent_monthly_va표는 열 구성(date·ind_id·va_level·va_growth)이 보관된 코드(04_mf_statespace.py, logva 열을 추가로 기록)와 달라, 검증 기준으로 삼을 공표본과 생성 코드의 대응을 확정할 수 없다. 포털의 69개 산업 월별 뷰어를 만든 코드도 프로젝트에서 찾지 못했다. - 재현에 KOSPI 산업별 주가지수·서비스업생산지수·월별 외생변수 등 이 장의 분기 패널과 무관한 원자료가 추가로 필요하다.
R 사용 여부
R은 쓰지 않는다. 이 장의 계산(비중 배분, 비율 지표, 연쇄지수, 행렬 집계)은 pandas·numpy로 충분하며 R에만 표준 구현이 있는 기법이 없다.
출처
- 입력 원천·통계표 코드·수집일:
data/inputs/PROVENANCE.md - 원 코드:
industry_pipeline/build_62.py,build_69.py,build_share_battery.py,build_share_renew.py,build_io_linkage.py,repo/code/fetch_gdp_quarterly.py,fetch_gdp_industry.py,fetch_io_tables.py - 포털: https://aiforalab.com/gva-scenario-2025-2035/report-gva/s2-data/