01 데이터 입수 — AI 확산 지표, 산업모형 입력, 설문¶
목적. AI 확산 지수(총량·산업별)와 VARX 대안 모형에 필요한 입력을 불러오고 검증한다.
| 입력 | 내용 | 출처 | 공개 |
|---|---|---|---|
levels_62.csv, exog_hist_v2.csv, exog_scen_v2.csv, io_linkage_62.csv |
62개 산업 분기 실질부가가치(100·log), 외생 6종 과거·시나리오, 산업연관 연계 가중치 | 보고서1 5장 재현 패키지 입력(2026-10 정비판) | 공개 |
base_va_62.csv |
정합화 후 기준 시나리오(S1) 산업별 실질부가가치 | 보고서1 5장 산출물(보고서2 4장 입력과 같은 파일) | 공개 |
findip_g06n_by_year.csv, openalex_by_year.csv, eventregistry_ai_eng_daily.csv |
연도별 AI 특허(G06N, 5개국)·AI 논문, 일별 영문 AI 뉴스 | 보고서2 1장 스냅샷 | 공개 |
eventregistry_industry_ai_share_2025.csv |
2025년 업종 키워드 뉴스 중 AI를 함께 다룬 비율 | Event Registry(이 장에서 조회) | 공개 |
openalex_field_ai_share_2023_2025.csv |
2023–2025년 학문 분야별 AI 논문 비중 | OpenAlex(이 장에서 조회) | 공개 |
findip_g06n_coipc_5c_2020_2025.csv, findip_g06n_coipc_supplement_2020_2025.csv |
G06N 특허의 동시분류 IPC별 건수(상위 20개 + 포함–배제 보완) | FindIP CENSUS(이 장에서 조회) | 공개 |
keis_r14_va_scenarios.csv |
기준전망·혁신전망의 산업별 실질부가가치 연평균 증가율(인쇄값) | 한국고용정보원(2017) 「기술혁신을 반영한 중장기 인력수요 전망 2016~2030」 표 8-6·8-8~8-14, 11장 | 공개 |
data/private/AI수용도조사_통계표_260417.xlsx, AI수용도조사_원자료_n2297.xlsx |
E4-1(AI의 매출 영향 정도) 업종 평균과 응답 분포 | 한국고용정보원 공유자료 | 비공개 |
출처·조회 시각·SHA-256은 data/inputs/PROVENANCE.md, FindIP 조회 조건은 data/inputs/FINDIP_QUERY.md, Event Registry 조회 조건은 data/inputs/EVENTREGISTRY_QUERY.md에 적었다.
산출물. data/interim/survey_signal_21.csv(E4-1 4시점 업종 평균), data/interim/survey_se_21.csv(E4-1 2040년 업종 평균의 표준오차) — 둘 다 비공개 자료에서 만든 중간 산출물이다.
import os, hashlib
import numpy as np, pandas as pd
import config as C
import ai_index as I, ai_varx as X, ai_forecast as F, varx_engine as V, alt_run as R
pd.set_option("display.float_format", lambda v: f"{v:,.3f}")
pd.set_option("display.width", 200)
C.setup()
Python 3.12.10 · pandas 2.2.3 · numpy 2.4.6 · matplotlib 3.11.0 판: 2026-10 정비판 기준 · Λ 0.5 · 드리프트 목표 1.8% · ONLINE=0(스냅샷) · Event Registry 키 없음 설문 통계표(비공개) 있음 data\private\AI수용도조사_통계표_260417.xlsx 설문 원자료(비공개) 있음 data\private\AI수용도조사_원자료_n2297.xlsx
1. 입력 파일 검증¶
공개 입력 13개의 SHA-256을 config.INPUT_SHA256의 기록과 대조한다. 보고서1 5장·보고서2 1장·4장 패키지에서 복사한 파일은 원본과 해시가 같다.
def sha256(p):
h = hashlib.sha256()
with open(p, "rb") as f:
h.update(f.read())
return h.hexdigest()
chk = pd.DataFrame([{"파일": k, "SHA-256(앞 16자리)": sha256(os.path.join(C.DATA, k))[:16],
"기록과 일치": sha256(os.path.join(C.DATA, k)) == v} for k, v in C.INPUT_SHA256.items()])
display(chk)
assert chk["기록과 일치"].all(), "입력 파일이 기록된 SHA-256과 다르다 — data/inputs/PROVENANCE.md와 config.INPUT_SHA256을 확인한다"
| 파일 | SHA-256(앞 16자리) | 기록과 일치 | |
|---|---|---|---|
| 0 | inputs/levels_62.csv | 00469e892aac4742 | True |
| 1 | inputs/exog_hist_v2.csv | d142ff2992b5ae3e | True |
| 2 | inputs/exog_scen_v2.csv | f45f8007d7b88faf | True |
| 3 | inputs/io_linkage_62.csv | 3f747a97c3804541 | True |
| 4 | inputs/base_va_62.csv | 81c0a99e7e67aad3 | True |
| 5 | inputs/findip_g06n_by_year.csv | f6e79f9f95ebec5b | True |
| 6 | inputs/openalex_by_year.csv | 19811d9fa29793f3 | True |
| 7 | inputs/eventregistry_ai_eng_daily.csv | edaf04ea090e175f | True |
| 8 | inputs/eventregistry_industry_ai_share_2025.csv | 6e105511bea37791 | True |
| 9 | inputs/openalex_field_ai_share_2023_2025.csv | f14368ff7d0da4ab | True |
| 10 | inputs/findip_g06n_coipc_5c_2020_2025.csv | f327ecb7e4d97dfe | True |
| 11 | inputs/findip_g06n_coipc_supplement_2020_2025.csv | 59db0c342111bbb4 | True |
| 12 | inputs/keis_r14_va_scenarios.csv | 6f1ce507eb886c63 | True |
2. 총량 지수의 원천 — 특허·논문·뉴스¶
세 자료는 보고서2 1장과 같은 스냅샷이다. 특허는 출원 후 약 18개월 뒤 공개되므로 2025년 값은 하한이며, 총량 지수에서는 2024년까지만 쓴다.
pat = pd.read_csv(C.PATENT_YEAR, index_col=0)
pap = pd.read_csv(C.PAPER_YEAR, index_col=0)
news = pd.read_csv(C.NEWS_DAILY, index_col=0, parse_dates=True).iloc[:, 0]
src = pd.DataFrame({"특허_5개국_G06N": pat["5개국_G06N"], "논문_AI개념": pap["AI_개념_전체"],
"뉴스_영문_AI(건)": news.groupby(news.index.year).sum()}).loc[2015:2025]
display(src)
print(f"뉴스 일별 자료: {news.index.min().date()} ~ {news.index.max().date()} ({len(news):,}일)")
| 특허_5개국_G06N | 논문_AI개념 | 뉴스_영문_AI(건) | |
|---|---|---|---|
| 2015 | 11236 | 587875 | 24,403.000 |
| 2016 | 19798 | 600936 | 61,363.000 |
| 2017 | 37365 | 615136 | 108,244.000 |
| 2018 | 64670 | 682018 | 168,256.000 |
| 2019 | 105498 | 757190 | 243,108.000 |
| 2020 | 150623 | 812529 | 249,449.000 |
| 2021 | 180708 | 870702 | 281,966.000 |
| 2022 | 180372 | 864639 | 251,660.000 |
| 2023 | 185064 | 993579 | 644,746.000 |
| 2024 | 224600 | 1344532 | 949,803.000 |
| 2025 | 222017 | 1306793 | 1,145,636.000 |
뉴스 일별 자료: 2015-01-01 ~ 2025-12-31 (4,018일)
3. 산업별 노출의 원천¶
- 뉴스. 설문 21개 업종마다 대표 영문 키워드 하나로 2025년 기사 수를 세고, 같은 키워드와 'artificial intelligence'를 함께 담은 기사 수를 다시 센다. 비율이 높을수록 그 업종 뉴스에서 AI가 자주 다루어진다.
- 논문. OpenAlex의 2023–2025년 문헌을 주제 분야(26개)별로 세고, 그중 'Artificial intelligence' 개념 문헌의 비중을 구한다.
- 특허. 5개국 G06N(AI 핵심 IPC) 특허 2020–2025년 출원의 동시분류 IPC별 건수다. FindIP 집계는 상위 20개 IPC만 돌려주므로, 대응표에 있으나 상위 20개 밖인 IPC는 포함–배제 원리로 정확히 구했다: $|G06N \cap X| = |G06N| + |X| - |G06N \cup X|$ (세 값 모두 CENSUS 정확 건수). 상위 20개 안에 있는 G05B로 이 방식을 점검하면 두 값이 같다.
er = pd.read_csv(C.NEWS_IND)
display(er)
fs = pd.read_csv(C.PAPER_FIELD).set_index("분야(OpenAlex field)")
display(fs.head(10))
top20 = pd.read_csv(C.PATENT_COIPC)
sup = pd.read_csv(C.PATENT_COIPC_SUP)
display(sup)
g05b_top = int(top20.set_index("IPC").loc["G05B"].iloc[0])
g05b_ie = int(sup.set_index("IPC").loc["G05B", "G06N_동시분류_건수_5개국_2020_2025"])
assert g05b_top == g05b_ie, "포함–배제 점검 실패: G05B 동시분류 건수가 상위 20개 표와 다르다"
assert (sup["G06N_전체"] == int(top20.set_index("IPC").loc["G06N"].iloc[0])).all(), "G06N 전체 건수가 상위 20개 표와 다르다"
print(f"포함–배제 점검: G05B 상위 20개 표 {g05b_top:,}건 = 포함–배제 {g05b_ie:,}건")
| 설문업종 | 키워드 | 기사수_업종 | 기사수_업종AND_AI | AI비중_% | |
|---|---|---|---|---|---|
| 0 | 01. 전기전자 | semiconductor | 240649 | 62531 | 25.984 |
| 1 | 02. 정밀기기 | medical device | 43680 | 4070 | 9.318 |
| 2 | 03. 섬유가죽 | textile | 89949 | 2373 | 2.638 |
| 3 | 04. 석유화학 | chemical industry | 9276 | 558 | 6.016 |
| 4 | 05. 비금속광물 | cement | 195807 | 6490 | 3.314 |
| 5 | 06. 금속제품 | steel | 653708 | 20049 | 3.067 |
| 6 | 07. 기계장비 | machinery | 245137 | 10510 | 4.287 |
| 7 | 08. 자동차 | automotive | 365309 | 26955 | 7.379 |
| 8 | 09. 식료품 | food industry | 36718 | 1053 | 2.868 |
| 9 | 10. 에너지 | utilities | 253515 | 18917 | 7.462 |
| 10 | 11. 건설 | construction | 1684546 | 57662 | 3.423 |
| 11 | 12. 운수 | logistics | 535050 | 37939 | 7.091 |
| 12 | 13. 정보통신 | telecommunications | 160597 | 18590 | 11.576 |
| 13 | 14. 도소매 | retail | 1223940 | 61239 | 5.003 |
| 14 | 15. 음식숙박 | hospitality | 381444 | 10006 | 2.623 |
| 15 | 16. 금융 | banking | 667680 | 38916 | 5.829 |
| 16 | 17. 연구개발업 | scientific research | 84714 | 8908 | 10.515 |
| 17 | 18. 사업지원서비스 | consulting | 412602 | 38437 | 9.316 |
| 18 | 19. 교육 | education | 2551736 | 126992 | 4.977 |
| 19 | 20. 보건사회 | healthcare | 1237042 | 92167 | 7.451 |
| 20 | 21. 문화/예술 | entertainment | 1283184 | 35217 | 2.745 |
| AI논문 | 전체논문 | AI비중_% | |
|---|---|---|---|
| 분야(OpenAlex field) | |||
| Computer Science | 1087535 | 2380834 | 45.679 |
| Neuroscience | 79992 | 393921 | 20.307 |
| Agricultural and Biological Sciences | 468562 | 2416451 | 19.391 |
| Decision Sciences | 78114 | 407624 | 19.163 |
| Engineering | 696950 | 3832229 | 18.187 |
| Mathematics | 63837 | 511915 | 12.470 |
| Psychology | 103889 | 1122951 | 9.251 |
| Health Professions | 58519 | 701315 | 8.344 |
| Environmental Science | 116332 | 1676514 | 6.939 |
| Earth and Planetary Sciences | 33145 | 497829 | 6.658 |
| IPC | G06N_전체 | X_전체 | G06N_또는_X | G06N_동시분류_건수_5개국_2020_2025 | 비고 | |
|---|---|---|---|---|---|---|
| 0 | G05B | 1143384 | 252352 | 1374820 | 20916 | 점검용: 상위 20개 동시분류 표의 20,916건과 일치 |
| 1 | G01R | 1143384 | 365437 | 1489886 | 18935 | NaN |
| 2 | G01S | 1143384 | 289574 | 1415095 | 17863 | NaN |
| 3 | G05D | 1143384 | 181594 | 1316166 | 8812 | NaN |
| 4 | B60W | 1143384 | 169937 | 1300892 | 12429 | NaN |
| 5 | G08G | 1143384 | 146110 | 1275308 | 14186 | NaN |
| 6 | G08B | 1143384 | 162772 | 1293333 | 12823 | NaN |
| 7 | H01L | 1143384 | 657693 | 1795418 | 5659 | NaN |
포함–배제 점검: G05B 상위 20개 표 20,916건 = 포함–배제 20,916건
3-2. 한국고용정보원(2017) 기술혁신 시나리오¶
같은 기관의 이전 인력수요 전망은 '기준전망'(최근 추세 지속)과 '혁신전망'(4차 산업혁명 적극 대응: 총요소생산성·노동의 질 개선, 신성장산업 견인)의 산업별 부가가치 증가율을 함께 제시하였다. 8장은 산업연구원 모형(KIET-DIMM)에 업종 전문가 조정을 더한 세부 산업 전망(세 구간), 11장은 인력수급 산업별 2016~2030년 전망이다. 입력 파일은 보고서의 인쇄값만 담는다. AI만이 아니라 기술혁신 전반의 효과이고 생성형 AI 이전의 전망이므로, 산업 배분의 독립적인 비교 자료(대안 1c)와 크기 Λ의 참고값으로만 쓴다.
keis = pd.read_csv(C.KEIS_R14)
print(f"인쇄값 {len(keis)}개: 8장 {keis['표'].str.startswith('표 8').sum()}개, 11장 {(~keis['표'].str.startswith('표 8')).sum()}개")
tot = keis[(keis["표"] == "표 8-6") & (keis["산업(원문)"] == "전 산업")].pivot(index="기간", columns="시나리오", values="실질VA_연평균증가율_%")
tot["차이(%p)"] = tot["혁신"] - tot["기준"]
display(tot)
인쇄값 400개: 8장 354개, 11장 46개
| 시나리오 | 기준 | 혁신 | 차이(%p) |
|---|---|---|---|
| 기간 | |||
| 2017~21 | 2.900 | 3.100 | 0.200 |
| 2022~26 | 2.400 | 2.900 | 0.500 |
| 2027~30 | 2.100 | 2.800 | 0.700 |
4. 재조회(ONLINE=1에서만)¶
OpenAlex는 키 없이도 조회된다. Event Registry는 EVENTREGISTRY_API_KEY가 있어야 하며 조회 42회(업종 21 × 2)에 토큰이 든다.
재조회 값은 data/interim/에 따로 저장하고 스냅샷과의 차이만 보여 준다(분석은 언제나 스냅샷으로 한다). 색인이 갱신되면 값이 조금 달라질 수 있다.
if C.ONLINE:
import fetch
fs_new = fetch.openalex_field_share(2023, 2025)
fs_new.to_csv(os.path.join(C.INTERIM, "openalex_field_ai_share_재조회.csv"), encoding="utf-8-sig")
d = fs.join(fs_new, rsuffix="_재조회")
print(f"OpenAlex 분야별 AI 비중 최대 차이: {(d['AI비중_%'] - d['AI비중_%_재조회']).abs().max():.3f}%p")
if os.environ.get("EVENTREGISTRY_API_KEY"):
er_new = fetch.eventregistry_industry_share(er.set_index("설문업종")["키워드"], 2025)
er_new.to_csv(os.path.join(C.INTERIM, "eventregistry_industry_ai_share_재조회.csv"), index=False, encoding="utf-8-sig")
d = er.set_index("설문업종").join(er_new.set_index("설문업종"), rsuffix="_재조회")
print(f"Event Registry 업종별 AI 비중 최대 차이: {(d['AI비중_%'] - d['AI비중_%_재조회']).abs().max():.3f}%p")
else:
print("EVENTREGISTRY_API_KEY가 없어 뉴스 재조회를 건너뛴다.")
else:
print("ONLINE=0: 스냅샷만 쓴다.")
ONLINE=0: 스냅샷만 쓴다.
5. 설문 — E4-1(AI가 매출에 미치는 영향의 정도)¶
통계표에서 21개 업종·전체·제조업의 E4-1 4시점(2025·2029·2034·2040) 평균 점수를 읽는다(4장과 같은 함수). 원자료에서는 업종별 2040년 응답의 표준편차와 응답 수로 업종 평균의 표준오차를 구한다. 이 표준오차가 대안 2 사전분포의 폭이 된다. 업종 평균 점수는 비공개 집계이므로 이 절의 출력은 공개 화면에서 숨긴다.
if not (os.path.exists(C.SURVEY_XLSX) and os.path.exists(C.SURVEY_RAW)):
raise SystemExit("비공개 설문 자료가 없다 — data/private/에 통계표와 원자료를 두고 다시 실행한다(배포 묶음에는 들어 있지 않다).")
sig = F.read_survey_signal(C.SURVEY_XLSX)
sig.to_csv(os.path.join(C.INTERIM, "survey_signal_21.csv"), encoding="utf-8-sig")
se = X.survey_se_by_group(C.SURVEY_RAW)
se.to_csv(os.path.join(C.INTERIM, "survey_se_21.csv"), encoding="utf-8-sig")
display(sig[[f"AI성장_{t}" for t in F.TIME_POINTS]])
display(se)
(비공개 설문 집계를 보여주는 셀이다. 공개 화면에서는 출력을 생략했다. 자료를 가진 경우 직접 실행하면 표시된다.)
print(f"설문 업종 {len(se) - 2}개 + 전체·제조업, 응답 {int(se.loc['전체', 'count']):,}개(2040년 E4-1 유효 응답)")
print(f"업종 평균 표준오차 범위: {se.drop(['전체', '제조업'])['se'].min():.3f} ~ {se.drop(['전체', '제조업'])['se'].max():.3f}(점수 단위)")
(비공개 설문 집계를 보여주는 셀이다. 공개 화면에서는 출력을 생략했다. 자료를 가진 경우 직접 실행하면 표시된다.)