다시 실행해 확인한 것들: 퀀트 리서치 시스템의 현재와 AI의 역할
지난 글에서는 합성 입력의 성공과 실패를 파일로 남기는 도구를 다뤘습니다. 「나만의 퀀트 리서치 시스템 만들기」의 마지막 8편에서는 그 기록을 다음 날 다시 실행한 기록과 대조합니다.
이 연재는 미국 ETF를 대상으로 질문·데이터·검사·실행기록을 연결하는 Python 연구 프로젝트입니다. 프로젝트 제공 현황에 따르면 SPY·IEF·GLD 실제 원자료는 아직 확보하지 못했고, 모델 학습·월별 백테스트·전략 우열 실증도 미완료입니다. 연재의 완결과 투자시스템의 완성은 구분해야 합니다.
아래 현황은 프로젝트가 제공한 요약에, 재실행 수치는 호스트 검증자가 직접 확인해 전달한 기록에 근거합니다. 이 글의 작성 과정에서 원본 코드와 검증파일을 직접 열람하거나 재실행한 것은 아닙니다.
여덟 편에서 확보한 것
제공된 프로젝트 현황을 완료·미완료 범위로 나누면 다음과 같습니다. 1~6편의 세부 코드와 실행로그는 이번 조사에 제공되지 않았으므로, 표의 완료는 전달된 범위에 한정합니다.
| 편 | 제공기록상 완료 범위 | 미완료·미확인 범위 |
|---|---|---|
| 1~2편 | 연구 질문, 미국 시장 범위, 데이터 확보 한계 정리 | SPY·IEF·GLD 실제 원자료 확보 |
| 3편 | 시점누수 합성 검사 | 실제 데이터 전체의 시점 정합성 |
| 4~5편 | 합성 보유·비용회계 검사 | 실제 체결·비용을 적용한 월별 백테스트 |
| 6편 | 모델과 기준 전략의 비교 설계 | 모델 학습, 세 전략의 성과·우열 비교 |
| 7편 | 합성 입력의 성공·실패 기록 도구 | 모든 장애에서의 기록 보존 |
| 8편 | 동일 호스트에서 다음 날 새 폴더로 재실행하고 지정 항목 대조 | 새 환경·다른 OS·타인의 독립 재현 |
계산 재현성은 같은 입력·계산 단계·방법·코드·분석 조건에서 일관된 계산 결과를 얻는 것으로 설명됩니다. [S10] 이번 결산에서도 합성 검사, 비교 설계, 기록 대조를 각각의 산출물로 평가하되, 실제 시장 자료로 연구 질문을 검증하는 일은 남겨 두어야 합니다.
다음 날 재실행에서 무엇이 같았나
호스트 검증자의 전달기록에 따르면, 재실행은 2026-09-22, 전날과 같은 호스트의 Python 3.14.5에서 이뤄졌습니다. 기존 7편 코드를 변경 없이 runpy로 로드하고 이전 inputs.json을 읽어, 새 UUID 폴더에 성공·실패 사례를 각각 실행했습니다. 검사 결과는 checks PASS로 전달됐습니다.
runpy는 현재 프로세스에서 코드를 실행합니다. [S3] 따라서 이번 새 폴더 실행을 새 환경이나 다른 OS, 타인의 독립 재현으로 해석할 수는 없습니다.
| 비교 항목 | 성공 사례 | 실패 사례 |
|---|---|---|
| 이전 실행 ID | d711f515-8380-4bca-9112-23ef651f6bf6 | 330fd103-4ddc-41ce-9620-7ae15bae1003 |
| 새 실행 ID | 70cb18b9-370d-4aa6-ba77-f9d2e49c3f17 | 1cddaea1-88a4-4340-9fae-bd846e05a188 |
| 합성 입력 | SYN_A=0.60, SYN_B=0.45, SYN_C=0.70 | SYN_A=1.20 |
| 설정·입력검증 | 임계값 0.55 | 확률 허용 범위 [0, 1] 위반 |
| 비중 결과 | SYN_A: 0.5, SYN_B: 0, SYN_C: 0.5, cash_weight=0 | 계산 결과 없음 |
| 상태·오류 | 성공, 이전 상태와 일치 | FAILED, ValueError |
| 실패 사유 | 해당 없음 | probabilities must be nonempty and within [0, 1] |
result.json | 존재하며 이전 파일과 바이트 일치 | 이전·새 실행 모두 없음 |
이 확률은 합성 입력이며 학습된 모델의 출력이나 ETF 예측값이 아닙니다. cash_weight=0은 현금 비중입니다. 표는 전달된 입력과 결과를 설명한 것이며, 원본 JSON의 전체 구조를 재구성한 것은 아닙니다.
성공 사례에서는 같은 비중이 남았는지를, 실패 사례에서는 같은 상태와 오류 사유가 남고 결과파일이 없는지를 대조했습니다. 두 사례 모두 이전 기록과의 비교 대상입니다.
결과와 실행 메타데이터를 나누어 비교하기
제공된 검증기록에서 일치한 항목과 별도로 취급한 항목은 다음과 같습니다.
- 입력·설정·코드의 SHA-256, Python 버전,
status·error_type·reason이 이전 실행과 일치했습니다. inputs.json·config.json·result.json·report.md의 존재 여부가 일치했고, 존재하는 파일은 바이트가 정확히 일치했습니다.- 기존 실행 폴더의 모든 파일은 재실행 전후 바뀌지 않았습니다.
- 새
run_id는 이전 값과 달랐으며,started_at·finished_at은 비교에서 제외했습니다.
이번 기준은 수치 오차를 허용하는 비교가 아니라 지정 파일의 바이트 정확 비교입니다. record.json을 포함한 모든 새 기록파일이 이전 파일과 통째로 같았다는 뜻은 아닙니다. 계산 산출물과 실행 식별자·시각을 분리해야 일치 여부를 올바르게 읽을 수 있습니다.
아래는 파일 비교 규칙을 설명하기 위해 새로 작성한 미실행 예시입니다. 보존 검증기의 원문 발췌나 checks PASS를 받은 코드가 아닙니다. Path.read_bytes()는 파일의 내용을 바이트로 반환합니다. [S4]
from pathlib import Pathdef saved_bytes(path): try: return path.read_bytes() except FileNotFoundError: return Nonedef compare_files(previous_dir, replay_dir): names = ("inputs.json", "config.json", "result.json", "report.md") for name in names: before = saved_bytes(Path(previous_dir) / name) after = saved_bytes(Path(replay_dir) / name) if before != after: raise AssertionError(f"{name}: presence or bytes differ")이 예시는 양쪽 파일의 부재와 바이트 차이만 비교합니다. 다른 읽기 오류는 그대로 발생시키며, 실행 ID·고정 메타데이터·기존 폴더의 재실행 전후 불변성 검사는 포함하지 않습니다.
예시에서는 조건문으로 명시적 예외를 발생시켰습니다. Python의 assert 문은 최적화 옵션 -O에서 제거됩니다. [S7] 실제 검증의 전체 명령행과 최적화 상태는 확보하지 못했으므로, 전달된 통과 기록을 실행 조건 전체의 확인으로 확대하지 않습니다.
SHA-256은 바이트 입력의 해시를 계산합니다. [S5] 그 기능과 재현성의 정의를 함께 보면, 해시 일치만으로 원자료 정확성·경제적 유효성·완전한 재현성이 입증된다고 해석할 근거는 없습니다. [S5][S10] 잘못된 자료가 그대로 보존됐는지와 자료가 올바른지는 서로 다른 질문입니다.
프로젝트가 안내한 보존 위치는 다음과 같습니다.
- 실행 코드:
data/manual-revisions/quant-research-07-records.py - 검증 도구명:
quant-research-08-replay.py - 보존 검증:
data/manual-revisions/quant-research-08-runs/c9e4c439-40ab-4d17-9f49-f6c851f60728/verification.json
검증 도구의 상위 경로는 제공되지 않았습니다. 이 위치들은 로컬 보존 안내이며 공개 다운로드 링크가 아닙니다. 전체 코드의 공개 배포가 완료됐다는 의미도 아닙니다.
AI가 수행한 작업과 측정하지 못한 효과
제공된 대화 요약에 따르면 AI는 글의 brief 구성, 합성검증 코드와 assert 작성, 실행기록을 집필 요구사항으로 전달하는 작업을 수행했습니다. 사용자는 미국 시장이라는 범위와 편 진행을 결정했고, 7편까지 시스템상 승인이 완료된 것으로 전달됐습니다. 다만 승인 상태는 문장별·수치별 사람 검토의 증거가 아닙니다.
이 프로젝트에는 작업시간 측정, 비AI 대조실험, 채택·폐기 전체 로그가 없습니다. 따라서 AI가 얼마나 시간을 줄였거나 정확도를 높였는지 수치로 말할 수 없습니다. 관찰 가능한 것은 전달된 작업 내역이며, 효과의 크기는 측정되지 않았습니다.
외부 연구에서도 측정 방식은 중요한 쟁점입니다. METR는 후속 개발 생산성 실험에서 참가자·과제 선택과 작업시간 측정 문제 때문에 실험 설계를 변경한다고 밝혔습니다. [S11] 별도의 자기보고 조사에서는 체감 속도와 산출물 가치의 차이, 응답의 일관성과 과장 가능성을 논의했습니다. [S12] 이 연구들은 측정의 어려움을 설명하는 배경이며, 이 프로젝트의 효과를 대신 측정해 주지는 않습니다.
AI가 작성한 코드가 검사를 통과했다는 전달사항 역시 해당 합성 사례와 비교 항목에 한정됩니다. 이를 모델의 예측력이나 전략 성과, 연구 결론의 타당성을 입증하는 자료로 확대할 수는 없습니다.
실제 ETF 연구로 이어가기 위한 우선순위
남은 작업은 다음 순서로 진행할 수 있습니다. 이는 완료 목록이 아니라 실제 자료를 확보한 뒤 연구 질문을 검증하기 위한 순서입니다.
- 원자료와 처리 기준 확보: 이용 가능한 미국 ETF 원자료, 라이선스·사용권, 배당·분할 처리 명세를 확보합니다.
- 시점과 회계 연결: 실제 데이터의 시점 검사에 공통 비용·체결회계를 통합합니다.
- 비교 규칙 고정 후 평가: 데이터 분할과 비교 규칙을 고정한 뒤 세 전략을 평가하고, 확보한 결과로 우열을 판단합니다.
- 환경과 장애기록 강화: 환경 재생성 조건을 명시하고 중단·쓰기 실패에서 기록이 어떻게 남는지 검증합니다.
제공된 구현 현황에서 처리하는 예외는 입력검증의 ValueError뿐입니다. 디스크 오류·강제종료 대응, 원자적 쓰기, 환경 잠금은 미구현입니다.
환경을 보강할 때 venv는 패키지 격리에 사용할 수 있지만, 환경은 일반적으로 이식 가능하지 않아 대상 위치에서 재생성할 수 있어야 합니다. [S8] 쓰기 과정을 보강할 때 os.replace는 성공 시 원자적 이름변경을 제공하지만, 서로 다른 파일시스템 사이에서는 실패할 수 있습니다. [S9] 각각의 기능을 환경 전체 고정이나 여러 파일의 일괄 복구가 구현됐다는 뜻으로 받아들여서는 안 됩니다.
무엇을 검증할 수 있게 되었는가
이번 전달기록이 보여 주는 도달점은 구체적입니다. 동일 호스트에서 두 합성 사례를 다시 실행해 지정 파일·상태·오류를 대조했고, 기존 폴더가 유지됐는지 확인했습니다. 실제 ETF 성과와 독립 환경 재현은 여전히 미검증입니다.
자신의 실험에서도 성공과 실패를 새 폴더에서 다시 실행해 보세요. 같은 입력·설정의 결과를 대조하되, 실행마다 달라질 식별자와 시각은 구분해야 합니다. 무엇이 같았는지, 무엇을 비교하지 않았는지, 무엇이 아직 미완료인지 기록하는 습관이 이번 연재의 마지막 산출물입니다.
이 글의 도구와 실습은 교육·연구용이며, 투자 추천이나 수익 보장이 아닙니다.
Sources
- [S3] runpy — Locating and executing Python modules — Python 3.14.7 documentation | Python Software Foundation | 2026-09-21 | https://docs.python.org/3.14/library/runpy.html ↩
- [S4] pathlib — Object-oriented filesystem paths — Python 3.14.7 documentation | Python Software Foundation | 2026-09-22 | https://docs.python.org/3.14/library/pathlib.html ↩
- [S5] hashlib — Secure hashes and message digests — Python 3.14.7 documentation | Python Software Foundation | 2026-09-21 | https://docs.python.org/3.14/library/hashlib.html ↩
- [S7] 7. Simple statements — Python 3.14.7 documentation | Python Software Foundation | 2026-09-21 | https://docs.python.org/3.14/reference/simple_stmts.html ↩
- [S8] venv — Creation of virtual environments — Python 3.14.7 documentation | Python Software Foundation | 2026-09-21 | https://docs.python.org/3.14/library/venv.html ↩
- [S9] os — Miscellaneous operating system interfaces — Python 3.14.7 documentation | Python Software Foundation | 2026-09-22 | https://docs.python.org/3.14/library/os.html ↩
- [S10] Reproducibility and Replicability in Science | National Academies of Sciences, Engineering, and Medicine; The National Academies Press | 2019 | https://www.nationalacademies.org/read/25303/chapter/2 ↩
- [S11] We are Changing our Developer Productivity Experiment Design | METR; Joel Becker, Nate Rush, Tom Cunningham, David Rein, Khalid Mahamud | 2026-02-24 | https://metr.org/blog/2026-02-24-uplift-update/ ↩
- [S12] Measuring the Self-Reported Impact of Early-2026 AI on Technical Worker Productivity | METR; Joel Becker | 2026-05-11 | https://metr.org/blog/2026-05-11-ai-usage-survey/ ↩
오류 제보·의견 보내기
글 제목과 주소가 포함된 메일 초안을 엽니다. 내용과 받는 사람을 확인한 뒤 보내주세요.
받는 사람: [email protected]
메일 앱에서 작성메일 앱이 열리지 않으면 아래 내용을 복사해 평소 쓰는 이메일에 붙여 넣으세요.
관련 글
퀀트·데이터 연구 AI는 퀀트 투자에 실제로 도움이 되는가: 조건부 결론과 검증의 기준
AI의 연구 보조 가치와 투자 수익성을 구분하고, 유용함을 판단할 조건을 정리합니다. 시간순 검증, 기준선 비교와 재현 가능한 기록이 필요한 이유를 살펴봅니다.
퀀트·데이터 연구 LLM과 함께 퀀트 리서치하는 안전한 방법: 질문부터 검증과 연구 기록까지
LLM을 활용하는 퀀트 리서치를 질문과 근거, 코드와 시간 검증, 실행과 기록의 흐름으로 정리합니다. 사람의 확인 절차와 실패한 실험을 남기는 방법을 다룹니다.