03 결과 도출 — 패널 요약·분화 몫·연쇄가중 재현과 검증¶
02_분석.ipynb의 산출물로 2장의 표와 그림을 만든다. 마지막 셀은 계산 결과를 공표 산출물(data/published/의 패널·몫·연계 행렬 사본)과
공표 수치(config.PUBLISHED)에 대조한다. 허용오차는 공표 자릿수의 반올림 범위이며, 파일 대조는 부동소수점 오차 범위이다.
In [1]:
import os, glob
import numpy as np, pandas as pd
import config as C
import gva_data as F
pd.set_option("display.float_format", lambda v: f"{v:,.4f}")
pd.set_option("display.width", 160)
C.setup()
import matplotlib.pyplot as plt
import koreanize_matplotlib # noqa: F401 (한글 글꼴)
rd = lambda n, **kw: pd.read_csv(os.path.join(C.OUTPUT, n), **kw)
real = pd.read_csv(os.path.join(C.INTERIM, "va36_real_q.csv"), index_col=0)
L62, L69 = rd("levels_62.csv", index_col=0), rd("levels_69.csv", index_col=0)
mapping, carve_log = rd("mapping_62_official.csv"), rd("carve_log.csv")
share_b, share_r = rd("share_battery.csv", index_col=0).iloc[:, 0], rd("share_renew.csv", index_col=0).iloc[:, 0]
act, rq, ra = rd("renew_gen_actual.csv"), rd("recon_total_q.csv", index_col=0), rd("recon_total_a.csv", index_col=0)
rules = pd.read_csv(C.CARVE_RULES, dtype={"IO분자": str, "IO분모": str})
Python 3.12.10 · pandas 2.2.3 · numpy 2.4.6 ONLINE=0 (원천 재수집) FULL=0 ECOS 키 없음 · KOSIS 키 없음 36개 산업 분기 있음 data\inputs\bok36_va_q.csv 총부가가치 있음 data\inputs\gva_total_q.csv 실질 GDP 있음 data\inputs\gdp_quarterly_sa.csv IO 중분류 부가가치 있음 data\inputs\io_benchmark_va_83ind.csv IO 생산유발계수 있음 data\inputs\io_M_mid_2020.csv IO 소분류 37x 있음 data\inputs\io_small_37x_va.csv 생산지수 C28·C282 있음 data\inputs\mfg_prod_c28_c282.csv 발전량 KPX 있음 data\inputs\power_gen_kpx.csv 발전량 KEPCO 있음 data\inputs\power_gen_kepco.csv 대조표 62 있음 data\crosswalk_62.json 분화 규칙 69 있음 data\carveout_rules.csv
표 1. 산업 해상도별 분기 실질부가가치 패널(2020년 연쇄가격)¶
In [2]:
t1 = F.panel_summary(real, L62, L69, ["2000Q1", "2020Q1", "2025Q4"])
t1.to_csv(os.path.join(C.OUTPUT, "table1_panels.csv"), index=False, encoding="utf-8-sig")
t1.style.format({c: "{:,.1f}" for c in t1.columns if "조원" in c} | {"36합 대비 최대오차(십억원)": "{:.1e}"}).hide(axis="index")
Out[2]:
| 분류 | 산업 수 | 기간 | 2000Q1 합계(조원) | 2020Q1 합계(조원) | 2025Q4 합계(조원) | 36합 대비 최대오차(십억원) |
|---|---|---|---|---|---|---|
| 36(한국은행) | 36 | 2000Q1–2025Q4 | 233.4 | 475.9 | 549.4 | 0.0e+00 |
| 62(KEIT) | 62 | 2000Q1–2025Q4 | 233.4 | 475.9 | 549.4 | 2.9e-10 |
| 69(62+분화) | 69 | 2000Q1–2025Q4 | 233.4 | 475.9 | 549.4 | 3.5e-10 |
표 2. 36→62 배분 — 모산업을 나누는 산업과 몫(2020년 산업연관표)¶
62개 가운데 47개는 BOK36 산업 17개를 나누어 가지고(분할), 15개는 BOK36 산업 하나(13개) 또는 병합 묶음(전기업+가스·증기, 건설 4개 업종)과 1:1로 대응한다.
In [3]:
split = mapping[mapping["유형"].str.startswith("분할")].copy()
t2 = split.groupby("BOK36부모").apply(lambda g: pd.Series({"산업 수": len(g), "구성(몫)": " · ".join(f"{n}({s:.3f})" for n, s in zip(g["산업명"], g["몫"]))}),
include_groups=False)
t2.to_csv(os.path.join(C.OUTPUT, "table2_split_62.csv"), encoding="utf-8-sig")
print(mapping["유형"].str.split("(").str[0].value_counts().to_string())
t2
유형 분할 47 1:1/병합 15
Out[3]:
| 산업 수 | 구성(몫) | |
|---|---|---|
| BOK36부모 | ||
| 1101 | 3 | 농업(0.820) · 임업(0.073) · 어업(0.108) |
| 1102 | 2 | 석탄ㆍ원유ㆍ천연가스(0.016) · 금속ㆍ비금속광업(0.984) |
| 110301 | 3 | 식료품(0.603) · 음료품(0.161) · 담배(0.236) |
| 110302 | 2 | 섬유ㆍ의복(0.925) · 가죽제품(0.075) |
| 110303 | 3 | 목재ㆍ목제품(0.156) · 펄프ㆍ종이제품(0.561) · 인쇄ㆍ복제(0.283) |
| 110305 | 4 | 화학물질ㆍ제품(0.343) · 화학섬유(0.010) · 의료ㆍ의약품(0.195) ·... |
| 110309 | 2 | 전자부품ㆍ컴퓨터ㆍ영상ㆍ음향ㆍ통신장비(0.888) · 의료ㆍ정밀ㆍ광학기기ㆍ시계(0.112) |
| 110312 | 2 | 자동차(0.836) · 기타 운송장비(0.164) |
| 110403 | 3 | 수도사업(0.172) · 하수ㆍ폐수ㆍ분뇨처리업(0.195) · 폐기물ㆍ자원재활용서비... |
| 1107 | 4 | 육상운송업(0.380) · 수상운송업(0.066) · 항공운송업(0.068) · 창... |
| 1108 | 3 | 금융업(0.589) · 보험ㆍ연금업(0.136) · 금융ㆍ보험관련서비스업(0.276) |
| 1112 | 2 | 의료ㆍ보건업(0.747) · 사회복지 서비스업(0.253) |
| 11131 | 2 | 문화서비스업(0.292) · 스포츠ㆍ오락서비스업(0.708) |
| 11132 | 2 | 사회단체(0.259) · 수리ㆍ개인서비스업(0.741) |
| 11142 | 5 | 출판업(0.045) · 영상ㆍ오디오기록물제작 배급업(0.058) · 방송업(0.06... |
| 111501 | 3 | 연구개발업(0.412) · 사업관련전문서비스업(0.272) · 과학기술관련전문서비스... |
| 111502 | 2 | 장비ㆍ용품임대업(0.198) · 사업지원서비스업(0.802) |
표 3. 62→69 분화 — 몫과 2025Q4 수준¶
In [4]:
lv = L69.loc["2025Q4"]
t3 = carve_log.assign(**{"신산업 2025Q4(십억원)": [lv[n] for n in carve_log["신산업"]],
"나머지 2025Q4(십억원)": [lv[n] for n in carve_log["나머지 열"]]})
t3.to_csv(os.path.join(C.OUTPUT, "table3_carveout_69.csv"), index=False, encoding="utf-8-sig")
t3.style.format({"몫(평균)": "{:.4f}", "신산업 2025Q4(십억원)": "{:,.1f}", "나머지 2025Q4(십억원)": "{:,.1f}"}).hide(axis="index")
Out[4]:
| 신산업 | 모산업 | 나머지 열 | 방식 | 몫(평균) | 신산업 2025Q4(십억원) | 나머지 2025Q4(십억원) |
|---|---|---|---|---|---|---|
| 반도체 | 22.전자부품ㆍ컴퓨터ㆍ영상ㆍ음향ㆍ통신장비 | 22.전자부품ㆍ컴퓨터ㆍ영상ㆍ음향ㆍ통신장비(잔여) | IO고정 | 0.5471 | 29,767.7 | 24,644.0 |
| 조선업 | 27.기타 운송장비 | 27.기타 운송장비(잔여) | IO고정 | 0.5703 | 2,069.3 | 1,559.4 |
| 철강 | 20.1차 금속 | 20.1차 금속(잔여) | IO고정 | 0.7041 | 4,206.3 | 1,767.5 |
| 택배 | 38.창고ㆍ운송보조서비스업 | 38.창고ㆍ운송보조서비스업(잔여) | IO고정 | 0.2066 | 2,796.5 | 10,740.5 |
| 이차전지 | 24.전기장비 | 24.전기장비(잔여) | share_battery | 0.1394 | 1,279.0 | 7,233.3 |
| 신재생에너지 | 29.전기ㆍ가스ㆍ증기ㆍ공기조절공급업 | 29.전기ㆍ가스ㆍ증기ㆍ공기조절공급업(잔여) | share_renew | 0.0335 | 831.8 | 8,255.1 |
| 건물건설건축보수 | 33.건설업 | 토목건설 | IO고정 | 0.7013 | 16,289.9 | 6,937.3 |
표 4. 시변 몫 — 연평균(이차전지/전기장비, 신재생/전기·가스·증기)¶
In [5]:
yr = lambda s: s.groupby(s.index.str[:4]).mean()
t4 = pd.DataFrame({"이차전지 몫": yr(share_b), "신재생 몫": yr(share_r)}).loc[["2000", "2005", "2010", "2015", "2020", "2021", "2022", "2023", "2024", "2025"]]
t4["신재생 발전비중(%)"] = act.set_index(act["year"].astype(str))["renew_share"].reindex(t4.index) * 100
t4.to_csv(os.path.join(C.OUTPUT, "table4_timevarying_shares.csv"), encoding="utf-8-sig")
t4.style.format({"이차전지 몫": "{:.4f}", "신재생 몫": "{:.4f}", "신재생 발전비중(%)": "{:.2f}"}, na_rep="—")
Out[5]:
| 이차전지 몫 | 신재생 몫 | 신재생 발전비중(%) | |
|---|---|---|---|
| 2000 | 0.0278 | 0.0072 | — |
| 2005 | 0.0896 | 0.0082 | — |
| 2010 | 0.1661 | 0.0168 | 1.90 |
| 2015 | 0.1622 | 0.0360 | 4.36 |
| 2020 | 0.1823 | 0.0558 | 6.71 |
| 2021 | 0.1927 | 0.0642 | 7.51 |
| 2022 | 0.2186 | 0.0736 | 8.99 |
| 2023 | 0.2015 | 0.0799 | 9.67 |
| 2024 | 0.1573 | 0.0874 | 10.67 |
| 2025 | 0.1474 | 0.0915 | 11.50 |
그림 1. 이차전지·신재생에너지 시변 몫(분기)¶
In [6]:
fig, ax = plt.subplots(figsize=(8, 3.8))
x = range(len(share_b))
ax.plot(x, share_b.values, color="#1f4e79", label="이차전지 / 전기장비")
ax.plot(x, share_r.values, color="#a9781f", label="신재생에너지 / 전기·가스·증기")
ticks = [i for i, q in enumerate(share_b.index) if q.endswith("Q1") and int(q[:4]) % 5 == 0]
ax.set_xticks(ticks, [share_b.index[i][:4] for i in ticks]); ax.set_ylabel("모산업 대비 몫")
ax.grid(alpha=.3); ax.legend(frameon=False); ax.set_title("분화 산업의 시변 몫", loc="left")
fig.tight_layout(); fig.savefig(os.path.join(C.OUTPUT, "fig1_shares.png"), dpi=150)
표 5. 연쇄가중 총부가가치 재현 — 검증표¶
'단순합 괴리'(포털 검증표의 '그냥 합 괴리')는 36개 산업 실질값 단순합의 총부가가치 대비 괴리, '재현값 괴리'는 2020Q1 기준 양방향 연쇄 재현값의 괴리이다(%).
In [7]:
pts = ["1980Q1", "2000Q1", "2019Q4", "2020Q1", "2020Q4", "2025Q4"]
t5 = rq.loc[pts, ["단순합_괴리_pct", "재현_괴리_pct"]].copy()
t5.loc["전체(184분기) 최대 |괴리|"] = rq[["단순합_괴리_pct", "재현_괴리_pct"]].abs().max()
t5.loc["전체(184분기) 평균 |괴리|"] = rq[["단순합_괴리_pct", "재현_괴리_pct"]].abs().mean()
t5.loc["연간(46년) 최대 |괴리|"] = ra[["단순합_괴리_pct", "재현_괴리_pct"]].abs().max()
t5.columns = ["단순합 괴리(%)", "재현값 괴리(%)"]
t5.to_csv(os.path.join(C.OUTPUT, "table5_recon.csv"), encoding="utf-8-sig")
t5.style.format({"단순합 괴리(%)": "{:+.3f}", "재현값 괴리(%)": "{:+.4f}"})
Out[7]:
| 단순합 괴리(%) | 재현값 괴리(%) | |
|---|---|---|
| 분기 | ||
| 1980Q1 | +21.935 | +0.1200 |
| 2000Q1 | +5.716 | +0.2153 |
| 2019Q4 | +0.003 | +0.0380 |
| 2020Q1 | +0.027 | +0.0000 |
| 2020Q4 | -0.031 | +0.0687 |
| 2025Q4 | +1.013 | +0.3278 |
| 전체(184분기) 최대 |괴리| | +25.208 | +0.8232 |
| 전체(184분기) 평균 |괴리| | +7.655 | +0.2324 |
| 연간(46년) 최대 |괴리| | +23.096 | +0.0014 |
그림 2. 36개 산업 단순합과 연쇄 재현값의 총부가가치 대비 괴리(분기)¶
In [8]:
fig, ax = plt.subplots(figsize=(8, 3.8))
x = range(len(rq))
ax.plot(x, rq["단순합_괴리_pct"].values, color="#b03a2e", label="36개 단순합")
ax.plot(x, rq["재현_괴리_pct"].values, color="#1e8449", label="연쇄 재현값(기준 2020Q1)")
ax.axhline(0, color="grey", lw=.8)
ticks = [i for i, q in enumerate(rq.index) if q.endswith("Q1") and int(q[:4]) % 5 == 0]
ax.set_xticks(ticks, [rq.index[i][:4] for i in ticks]); ax.set_ylabel("괴리(%)")
ax.grid(alpha=.3); ax.legend(frameon=False); ax.set_title("총부가가치 대비 괴리", loc="left")
fig.tight_layout(); fig.savefig(os.path.join(C.OUTPUT, "fig2_recon.png"), dpi=150)
검증 — 공표 산출물·공표 수치와 대조¶
① 패널·몫·연계 행렬은 data/published/의 공표본 사본과 원소별로 비교한다(부동소수점 오차 범위).
② 배분 유형·분화 몫·총량 정합은 원 노트북(industry_pipeline/01_데이터입수_산업구분.ipynb)의 실행 출력,
③ 이차전지·신재생 몫 수치는 포털 「62개에서 69개로 — 7가지 분화 제안」, ④ 연쇄가중 재현 수치는 포털 「36개 산업 실질값으로 GVA 재현하기」의 검증표와 비교한다.
In [9]:
P = C.PUBLISHED
R = lambda d: 0.5 * 10 ** -d + 1e-12 # 소수 d자리 반올림 범위(부동소수점 여유 1e-12)
pub = lambda n: os.path.join(C.PUB_DIR, n)
fd = lambda n: F.max_abs_diff(rd(n, index_col=0), pub(n))[0]
viewer = pd.read_csv(pub("recon_viewer.csv"), index_col=0)
map_pub = pd.read_csv(pub("mapping_62_official.csv"))
s36 = real.loc[L62.index].sum(axis=1)
share = dict(zip(carve_log["신산업"], carve_log["몫(평균)"]))
bench = F.io_battery_bench(pd.read_csv(C.IO_SMALL, dtype={"소분류코드": str}))
kappa = np.mean(list(C.BATTERY_BENCH.values())) / (lambda m: (F.quarterly_mean(m["C282"].dropna()) / F.quarterly_mean(m["C28"].dropna())).loc["2020Q1":"2023Q4"].mean())(F.read_mfg_prod(C.MFG_PROD))
gen = act.set_index("year")["renew_share"] * 100
nsplit = int(mapping["유형"].str.startswith("분할").sum())
checks = [
("levels_62 공표본 대비 최대차(십억원)", fd("levels_62.csv"), 0.0, 1e-6),
("levels_69 공표본 대비 최대차(십억원)", fd("levels_69.csv"), 0.0, 1e-6),
("levels_agg 공표본 대비 최대차(십억원)", fd("levels_agg.csv"), 0.0, 1e-6),
("share_battery 공표본 대비 최대차", fd("share_battery.csv"), 0.0, 1e-12),
("share_renew 공표본 대비 최대차", fd("share_renew.csv"), 0.0, 1e-12),
("io_linkage_62 공표본 대비 최대차", fd("io_linkage_62.csv"), 0.0, 1e-9),
("io_linkage_69 공표본 대비 최대차", fd("io_linkage_69.csv"), 0.0, 1e-9),
("mapping_62 몫 공표본 대비 최대차", float((mapping["몫"] - map_pub["몫"]).abs().max()), 0.0, 0.0),
("62합−36합 최대오차(십억원)", float((L62.drop(columns="총량GDP").sum(axis=1) - s36).abs().max()), P["62합-36합_최대오차"], 1e-6),
("69합−36합 최대오차(십억원)", float((L69.drop(columns="총량GDP").sum(axis=1) - s36).abs().max()), P["69합-36합_최대오차"], 1e-6),
("분화 항등식 최대오차(십억원)", F.mece_gap(L62, L69, rules), 0.0, 1e-6),
("62분류 2025Q4 합계(십억원)", float(L62.drop(columns="총량GDP").loc["2025Q4"].sum()), P["62_2025Q4_합계"], R(1)),
("분할 산업 수", nsplit, P["분할_산업수"], 0),
("1:1·병합 산업 수", len(mapping) - nsplit, P["1:1병합_산업수"], 0),
("몫: 반도체", share["반도체"], P["몫_반도체"], R(4)),
("몫: 조선업", share["조선업"], P["몫_조선업"], R(4)),
("몫: 철강", share["철강"], P["몫_철강"], R(4)),
("몫: 택배", share["택배"], P["몫_택배"], R(4)),
("몫: 이차전지(평균)", share["이차전지"], P["몫_이차전지_평균"], R(4)),
("몫: 신재생에너지(평균)", share["신재생에너지"], P["몫_신재생_평균"], R(4)),
("몫: 건물건설·건축보수", share["건물건설건축보수"], P["몫_건물건설"], R(4)),
("이차전지 κ", kappa, P["이차전지_k"], R(4)),
("IO 373/37 비중 2020–23 평균(원 코드 상수)", np.mean(list(C.BATTERY_BENCH.values())), P["IO373_비중_2020_23평균"], R(3)),
("원 코드 상수 = 소분류표 비중 반올림(일치 연도 수)", int((bench.round(3) == pd.Series(C.BATTERY_BENCH)).sum()), 4, 0),
("신재생 발전비중 2006(%)", gen[2006], P["발전비중_2006_pct"], R(1)),
("신재생 발전비중 2016(%)", gen[2016], P["발전비중_2016_pct"], R(1)),
("신재생 발전비중 2025(%)", gen[2025], P["발전비중_2025_pct"], R(1)),
("전력부문 VA몫 IO45/(45+46)", F.io_share(F.read_io_va83(C.IO_VA83), [45], [45, 46]), P["전력부문_VA몫"], R(3)),
("단순합 평균 |괴리|(%)", rq["단순합_괴리_pct"].abs().mean(), P["단순합_평균괴리"], R(3)),
("단순합 최대 |괴리|(%)", rq["단순합_괴리_pct"].abs().max(), P["단순합_최대괴리"], R(3)),
("재현 평균 |괴리|(%)", rq["재현_괴리_pct"].abs().mean(), P["재현_평균괴리"], R(4)),
("재현 최대 |괴리|(%)", rq["재현_괴리_pct"].abs().max(), P["재현_최대괴리"], R(4)),
]
for q in ["1980Q1", "2000Q1", "2019Q4", "2020Q1", "2020Q4", "2025Q4"]:
checks.append((f"단순합 괴리 {q}(%)", rq.loc[q, "단순합_괴리_pct"], P[f"단순합_{q}"], R(3)))
checks.append((f"재현 괴리 {q}(%)", rq.loc[q, "재현_괴리_pct"], P[f"재현_{q}"], R(4)))
checks += [
("연간 재현 최대 |괴리|(%)", ra["재현_괴리_pct"].abs().max(), P["연간_재현_최대괴리"], R(4)),
("분기별 단순합 괴리 184개 공표 대비 최대차(%p)", float((rq["단순합_괴리_pct"] - viewer["단순합_괴리_pct"]).abs().max()), 0.0, R(4)),
("분기별 재현 괴리 184개 공표 대비 최대차(%p)", float((rq["재현_괴리_pct"] - viewer["재현_괴리_pct"]).abs().max()), 0.0, R(4)),
]
res = pd.DataFrame([{"항목": k, "계산": float(v), "공표": float(p), "허용오차": tol, "통과": bool(abs(float(v) - float(p)) <= tol)}
for k, v, p, tol in checks])
res.to_csv(os.path.join(C.OUTPUT, "verification.csv"), index=False, encoding="utf-8-sig")
with pd.option_context("display.float_format", lambda v: f"{v:,.6g}", "display.max_rows", 100):
display(res)
assert res["통과"].all(), "공표 수치와 계산 결과가 다르다 — 위 표에서 통과=False 항목을 확인한다"
print(f"검증 통과: {len(res)}개 항목 — 62·69·총량 패널, 분화 몫, IO 연계 행렬, 연쇄가중 재현 수치를 재현했다.")
| 항목 | 계산 | 공표 | 허용오차 | 통과 | |
|---|---|---|---|---|---|
| 0 | levels_62 공표본 대비 최대차(십억원) | 1.16415e-10 | 0 | 1e-06 | True |
| 1 | levels_69 공표본 대비 최대차(십억원) | 1.16415e-10 | 0 | 1e-06 | True |
| 2 | levels_agg 공표본 대비 최대차(십억원) | 0 | 0 | 1e-06 | True |
| 3 | share_battery 공표본 대비 최대차 | 0 | 0 | 1e-12 | True |
| 4 | share_renew 공표본 대비 최대차 | 0 | 0 | 1e-12 | True |
| 5 | io_linkage_62 공표본 대비 최대차 | 0 | 0 | 1e-09 | True |
| 6 | io_linkage_69 공표본 대비 최대차 | 0 | 0 | 1e-09 | True |
| 7 | mapping_62 몫 공표본 대비 최대차 | 0 | 0 | 0 | True |
| 8 | 62합−36합 최대오차(십억원) | 2.91038e-10 | 0 | 1e-06 | True |
| 9 | 69합−36합 최대오차(십억원) | 3.49246e-10 | 0 | 1e-06 | True |
| 10 | 분화 항등식 최대오차(십억원) | 7.27596e-12 | 0 | 1e-06 | True |
| 11 | 62분류 2025Q4 합계(십억원) | 549,415 | 549,415 | 0.05 | True |
| 12 | 분할 산업 수 | 47 | 47 | 0 | True |
| 13 | 1:1·병합 산업 수 | 15 | 15 | 0 | True |
| 14 | 몫: 반도체 | 0.5471 | 0.5471 | 5e-05 | True |
| 15 | 몫: 조선업 | 0.5703 | 0.5703 | 5e-05 | True |
| 16 | 몫: 철강 | 0.7041 | 0.7041 | 5e-05 | True |
| 17 | 몫: 택배 | 0.2066 | 0.2066 | 5e-05 | True |
| 18 | 몫: 이차전지(평균) | 0.1394 | 0.1394 | 5e-05 | True |
| 19 | 몫: 신재생에너지(평균) | 0.0335 | 0.0335 | 5e-05 | True |
| 20 | 몫: 건물건설·건축보수 | 0.7013 | 0.7013 | 5e-05 | True |
| 21 | 이차전지 κ | 0.182221 | 0.1822 | 5e-05 | True |
| 22 | IO 373/37 비중 2020–23 평균(원 코드 상수) | 0.19875 | 0.199 | 0.0005 | True |
| 23 | 원 코드 상수 = 소분류표 비중 반올림(일치 연도 수) | 4 | 4 | 0 | True |
| 24 | 신재생 발전비중 2006(%) | 1.0439 | 1 | 0.05 | True |
| 25 | 신재생 발전비중 2016(%) | 4.7805 | 4.8 | 0.05 | True |
| 26 | 신재생 발전비중 2025(%) | 11.5004 | 11.5 | 0.05 | True |
| 27 | 전력부문 VA몫 IO45/(45+46) | 0.795993 | 0.796 | 0.0005 | True |
| 28 | 단순합 평균 |괴리|(%) | 7.65469 | 7.655 | 0.0005 | True |
| 29 | 단순합 최대 |괴리|(%) | 25.2081 | 25.208 | 0.0005 | True |
| 30 | 재현 평균 |괴리|(%) | 0.232416 | 0.2324 | 5e-05 | True |
| 31 | 재현 최대 |괴리|(%) | 0.823244 | 0.8232 | 5e-05 | True |
| 32 | 단순합 괴리 1980Q1(%) | 21.9347 | 21.935 | 0.0005 | True |
| 33 | 재현 괴리 1980Q1(%) | 0.119986 | 0.12 | 5e-05 | True |
| 34 | 단순합 괴리 2000Q1(%) | 5.71561 | 5.716 | 0.0005 | True |
| 35 | 재현 괴리 2000Q1(%) | 0.215264 | 0.2153 | 5e-05 | True |
| 36 | 단순합 괴리 2019Q4(%) | 0.0027738 | 0.003 | 0.0005 | True |
| 37 | 재현 괴리 2019Q4(%) | 0.0380028 | 0.038 | 5e-05 | True |
| 38 | 단순합 괴리 2020Q1(%) | 0.0271549 | 0.027 | 0.0005 | True |
| 39 | 재현 괴리 2020Q1(%) | 0 | 0 | 5e-05 | True |
| 40 | 단순합 괴리 2020Q4(%) | -0.0305575 | -0.031 | 0.0005 | True |
| 41 | 재현 괴리 2020Q4(%) | 0.068685 | 0.0687 | 5e-05 | True |
| 42 | 단순합 괴리 2025Q4(%) | 1.01251 | 1.013 | 0.0005 | True |
| 43 | 재현 괴리 2025Q4(%) | 0.327767 | 0.3278 | 5e-05 | True |
| 44 | 연간 재현 최대 |괴리|(%) | 0.00142224 | 0.0014 | 5e-05 | True |
| 45 | 분기별 단순합 괴리 184개 공표 대비 최대차(%p) | 4.98075e-05 | 0 | 5e-05 | True |
| 46 | 분기별 재현 괴리 184개 공표 대비 최대차(%p) | 4.99501e-05 | 0 | 5e-05 | True |
검증 통과: 47개 항목 — 62·69·총량 패널, 분화 몫, IO 연계 행렬, 연쇄가중 재현 수치를 재현했다.