재현 패키지 — 보고서1 「산업별 실질부가가치 시나리오 전망과 인력수급 시사점」 4장 산업모형(2026-10 정비판)

이 묶음은 4장의 모형 비교(베이지언 VARX 12개 옵션 × 36·62·69개 산업과 총량)를 데이터 입수 → 분석 → 결과 도출 세 단계로 다시 계산한다.

2026-10 정비판. 3장이 기준선을 정비하면서 외생 6종 가운데 실질금리의 투입형을 수준에서 1차 차분으로 바꾸었다(실질금리 수준은 2000–2025년 하락 추세를 지녀 성장률 식과 적분차수가 맞지 않았다). 이 패키지는 정비판 외생으로 12개 옵션을 다시 계산하고, 이전 판 공표 그리드(2026-08-28 외생)도 그대로 재현하여 두 판을 비교하며, 실질금리 계수의 부호를 점검한다. 마지막 단계의 검증 셀이 정비판 기록 그리드와 이전 판 공표 그리드를 함께 대조하며, 하나라도 다르면 실행이 멈춘다. 이전 판 패키지(2026-10-08)는 포털 보관본으로 남는다.

폴더 구조

s4-model/ ├─ README.md 이 문서 ├─ requirements.txt 검증한 패키지 버전 ├─ config.py 경로·표본 분할·옵션·정비판 기록 수치(PUBLISHED)·이전 판 공표 수치(PREVIOUS) ├─ run_all.py 01→02→03 노트북을 순서대로 실행하고 output/run_log.txt 기록 ├─ 01_입수.ipynb 동결 입력의 해시·구조 검증, 정비판·이전 판 외생 비교 → data/interim/ ├─ 02_분석.ipynb 12개 옵션 추정·평가(정비판), 이전 판 재현과 정비 영향, 실질금리 계수 부호, 36 행렬 정규화, λ 민감도, 기여 분해 방법 → output/ ├─ 03_결과.ipynb 옵션 비교표·그림, 이전 판 대비 표 + 검증 셀 ├─ src/varx_grid.py 계산 함수 — industry_pipeline/run_grid.py 엔진의 정리본(+ 외생 계수표·부호 요약) ├─ data/ │ ├─ inputs/ 2장·3장 산출물 사본 9개 + PROVENANCE.md │ ├─ published/ 정비판 기록 그리드 grid_summary_{36,62,69,AGG}.csv(2026-10 정비 실행에서 동결) │ ├─ published_prev/ 이전 판 공표 그리드(2026-08-28·09-01 실행) │ └─ interim/ 01이 만드는 중간 산출물 └─ output/ 02·03이 만드는 최종 산출물

실행 방법

bash pip install -r requirements.txt python run_all.py

전체 실행은 약 25초 걸린다. JupyterLab에서 01_입수.ipynb부터 차례로 실행해도 같은 결과가 나온다. config.py는 선형대수 라이브러리(OpenBLAS·MKL)의 스레드를 1개로 고정한다(다중 스레드 경합으로 수십 배 느려지는 환경이 있다). 결과 값은 스레드 수와 무관하다. 인증키는 필요 없다.

입력과 산출물

단계 입력 산출물
01 입수 data/inputs/ 9개 파일 data/interim/logpanel_{36,62,69,AGG}.csv, io_{36,62,69}.csv, exog_new.csv, exog_prev.csv, split.csv
02 분석 interim output/grid_{36,62,69,AGG}.csv(정비판, 반올림 전), grid_prev_*.csv(이전 판 외생), check_prev_vs_new*.csv, real_rate_coef.csv, real_rate_sign.csv, check_io36_normalized.csv, lambda_sensitivity.csv, decomposition_check_62.csv
03 결과 output, data/published/, data/published_prev/ table1_grid_rmse.csv ~ table6_real_rate_sign.csv, fig1_rmse_69.png, fig2_valid_heatmap.png, verification.csv
입력 파일 내용 만든 장
levels_sa.csv 36개 산업 분기 실질부가가치(계절조정, 십억 원)와 실질 GDP, 1980Q1–2025Q4 2장 데이터
levels_62.csv, levels_69.csv 62·69개 산업 분기 실질부가가치, 2000Q1–2025Q4 2장 데이터
levels_agg.csv 총량 단일 계열(실질 GDP) 4장(총량 그리드용)
io_linkage_W.csv, io_linkage_62.csv, io_linkage_69.csv 산업연관 연계강도(생산유발계수) 2장 데이터
exog_hist_v2.csv 외생 6종 투입형 과거값 — 정비판(실질금리 1차 차분) 3장(2026-10 정비)
exog_hist_v2_20260828.csv 외생 6종 투입형 과거값 — 이전 공표 그리드가 쓴 판(실질금리 수준, 복원) 3장

계산 요약

검증

03_결과.ipynb 마지막 셀이 308개 항목을 대조하며 모두 통과한다.

대조 대상 항목 수 허용오차 근거
정비판 기록 그리드 RMSE(4개 분류 × 12개 옵션 × 3개 구간) 144 0.0005 data/published/grid_summary_*.csv(소수 셋째 자리)
이전 판 공표 그리드 RMSE(이전 판 외생으로 다시 계산) 144 0.0005 data/published_prev/grid_summary_*.csv
분류별 선택 옵션(두 판) 8 동률 포함 총량은 두 사전분포가 같은 모형이라 동률
차분·io·varx의 valid·test(정비판 기록값, 이전 판 논문 1–3 인용값) 12 0.005 소수 둘째 자리

쟁점과 정정 기록

  1. 정비판 외생(2026-10). 실질금리 수준은 KPSS 검정에서 상수 주위 정상성이 기각되고 상수+추세를 두면 추세 정상으로 판정되는, 하락 추세를 지닌 계열이다(3장 02 7절). 성장률(차분) 식에 수준으로 넣으면 두 계열의 공통 하락 추세가 양(+)의 계수로 나타나 전망을 움직였다(6장 진단: 실질금리 기여 1위). 정비판은 1차 차분을 쓴다. 정비 전후 RMSE 차이는 최대 |Δvalid| 0.064이며 선택은 네 분류 모두 바뀌지 않는다.
  2. 이전 판 외생의 판 차이(2000년 실질금리). 이전 판 공표 그리드는 2000Q1–Q4 실질금리를 2001Q1 값(3.5972)으로 역채움한 2026-08-28판을 썼다(PROVENANCE.md의 복원 근거). 이 패키지는 그 판으로 이전 판 그리드를 반올림 범위까지 재현한다.
  3. 36분류 산업연관 행렬의 정규화 누락. 62·69 행렬과 달리 36분류 그리드는 정규화하지 않은 생산유발계수 평균(비대각 평균 0.037)을 쓴다. 정규화 여부에 따른 결과는 02 5절과 check_io36_normalized.csv에 있다.
  4. 사전분포 선택의 λ 의존성. 정비판에서도 명세(차분)와 외생(VARX)의 선택은 λ=0.05·0.1·0.2·0.4에서 유지되지만, 62·69분류의 산업연관표 대 미네소타 차이는 작고 (λ=0.2에서 62분류 -0.007, 69분류 -0.002) λ=0.2에서만 산업연관표가 앞선다. '산업연관표 사전이 미네소타보다 낫다'는 결론은 λ=0.2에 조건부이다.
  5. 62·69 패널의 성장률 중복. 62·69개 산업은 36개 공표 산업을 2020년 고정 비중으로 나눈 것이어서 서로 다른 분기 성장률 계열이 62분류 32개, 69분류 34개뿐이다. 옵션 비교는 같은 분류 안에서 한다.
  6. VECM 기준점의 정의 차이. 오차수정항의 기준이 36분류는 실질 GDP, 62·69분류는 산업 합계이다. 총량(AGG)은 오차수정항이 항상 0이어서 VECM이 차분과 같다.
  7. 사전 척도의 표본 범위. $\sigma_i$는 전체 표본(2000–2025)의 AR(4) 잔차로 계산한다(원본과 같다).
  8. 총량 모형과 5장. 총량 그리드의 valid 최소는 수준·VAR이다. 정비판 5장은 총량의 기준선을 BOKDPM 실질GDP 전망에서 가져오고, 총량 VARX(수준·산업연관표·VARX)는 시나리오 간 차이(S1 대비 비율)를 내는 데만 쓴다. 수준 명세의 총량 VARX는 자기 시차 계수의 합이 1보다 작아 10년 전망에서 성장률이 기계적으로 낮아지기 때문이다(5장 패키지 02 4절).
  9. 문서와 저장 출력의 불일치(이전 판에서 확인). 포털·통합 번들의 4장 재현 안내는 industry_models.py를 사전분포 구현으로 소개하지만, 그리드는 run_grid.py의 엔진으로 계산되었다. 수치의 기준은 grid_summary_*.csv이다.
  10. 원고와의 대조. 원고(reports_src/content/report-gva/s4-model.md)와 논문 1–3은 이전 판 수치(예: 36분류 valid 6.79)를 인용한다. 정비판 수치(위 계산 요약)로 고쳐야 하며, 선택 옵션의 결론은 같다. 선택은 valid 기준이고 시험 구간 최소는 분류에 따라 다르다는 점, '후방연쇄'가 실제로는 생산유발계수라는 점은 이전 판 쟁점과 같다.

출처

입력 파일의 원래 위치, 생성 프로그램, 작성 시각, SHA-256은 data/inputs/PROVENANCE.md에 있다. src/varx_grid.py는 industry_pipeline/run_grid.py(2026-08-28)의 추정·평가 식을 그대로 옮긴 정리본이다.

R 사용

R은 쓰지 않는다. 모든 계산은 닫힌 형태의 선형대수(numpy)이다.