투자 데이터를 믿기 전에 검사할 것: 미국 ETF 데이터의 확보와 품질 검증
근거와 검증 범위 — 데이터 계약 설계
공식 자료를 참고해 데이터 접근·보존·품질 검사 기준을 설계합니다. 실제 ETF 가격 행, 파일 해시, 정제본과 검사 로그를 제시하지 않으므로 데이터 확보·검증 완료 보고서가 아닙니다.
1편에서 정한 SPY·IEF·GLD와 2006~2025는 연구의 조건이다. 그 기간의 일별 가격 파일을 이미 확보했고 검증했다는 뜻은 아니다. 이번 단계의 목표는 수익률을 계산하는 일이 아니라, 어떤 데이터를 연구에 받아들일지 결정하는 데이터 계약을 만드는 일이다.
SPY는 2026년 1월 26일부터 공식 명칭이 State Street SPDR S&P 500 ETF Trust로 변경됐지만, 기호 SPY와 NYSE Arca 상장은 유지됐다. IEF와 GLD 역시 각 발행인 공시에서 식별할 수 있다. 티커만 파일명에 남기지 말고 상품명, 공급자 심볼, 내려받은 시각까지 함께 기록해야 하는 이유다. [S1] [S2] [S3]
이 글은 실제 ETF 가격 행, 파일 해시, 정제본, 검사 로그를 제시하지 않는다. 따라서 “검증 완료” 보고서가 아니라, 실제 파일을 받기 전에 적용할 접근 조건, 보존 방식, 검사 기준을 완결된 형태로 설계하는 글이다.
무료 데이터보다 먼저 확인할 데이터 계약
시장데이터 경로를 고를 때 첫 질문은 “무료인가?”가 아니라 “무엇을, 어떤 권한으로, 어떤 정의에 따라 받는가?”여야 한다. 아래 항목은 실제 수집 전에 공급자별로 확인할 계약 항목이며, 이번 조사에서 확인 완료한 목록은 아니다.
- 계정 또는 API 키가 필요한가
- 무료·유료 구분과 이용 가능한 기간은 무엇인가
- 개인 연구, 상업적 이용, 재배포가 각각 허용되는가
Close,Adjusted Close, 분배금, 분할, 거래량의 정의는 무엇인가- 시간대와 정규장·연장장 포함 여부는 무엇인가
- 원본을 얼마나 오래 보존할 수 있는가
이번 조사에서 날짜가 명시된 공식 근거로 확인된 것은 Massive의 조건뿐이다. Massive의 시장데이터 약관은 계정과 비전문 개인의 개인·비상업적 이용을 전제로 하며, 별도 서면 동의나 제3자 계약이 없으면 데이터 및 데이터 기반 저작물의 제3자 재배포·상업적 사용을 제한한다. [S4] 무료·유료 구분, SPY·IEF·GLD 장기 데이터 제공 여부, 가격 열과 조정 방식, 원본 보존 조건은 이 글의 근거만으로 확정하지 않는다. 실제 수집 때 해당 공급자의 공식 문서와 적용 계약을 다시 확인한다.
Close·Adjusted Close·NAV·체결가는 다르다
가격 열 이름이 같아 보여도 같은 경제적 의미를 보장하지 않는다. [S3] [S5] [S6] 아래 표는 실제 공급자 사양이 정해지기 전 사용할 작업용 사전이다. 실제 연구를 시작할 때는 반드시 받은 파일과 공급자 문서의 정의로 교체한다.
| 항목 | 작업용 정의 | 해석 경계 |
|---|---|---|
| Close | 공급자가 해당 일자에 보고한 가격 | 공식 종가, 통합테이프 기반 값, 다른 산식과 자동으로 같지 않음 |
| Adjusted Close | 분배금·분할 등을 반영하도록 공급자가 산출한 조정 열 | 실제 주문 체결가나 실제 체결 성과가 아님 |
| Dividend | 현금분배 기록 | 재투자 시점·가격·세금 가정은 별도 규칙 |
| Split | 분할 비율과 효력일 기록 | 과거 가격 조정 방식은 공급자별 확인 필요 |
| Volume | 공급자와 세션 범위가 정의한 거래량 | 주문 가능 물량이나 완전한 시장 미시구조를 뜻하지 않음 |
ETF 시장가격과 NAV도 구분해야 한다. GLD의 NAV는 금과 기타 자산의 가치에서 추정 비용과 부채를 차감한 뒤 발행주식 수로 나누어 계산된다. 이는 거래소에서 관찰한 시장가격과 같은 개념이 아니다. [S3]
통합테이프 역시 모든 주문 정보의 복제본은 아니다. SEC는 통합테이프가 상장주식과 상장상품 거래를 일반적으로 포함하지만, 100주 미만 거래는 대체로 보고되지 않고 최우선 호가 밖 주문 정보도 제공하지 않는다고 설명한다. [S5] S&P 500 방법론은 공식 일마감 계산에 주거래소 종가를, 실시간 지수에는 통합테이프 값을 사용한다. 이는 ETF 공급자의 종가 정의를 뜻하는 것이 아니라, 가격 산식의 목적과 계산 맥락이 달라질 수 있음을 보여 주는 사례다. [S6]
따라서 조정가격으로 계산한 결과는 “공급자 정의에 따른 조정가격 기반 연구 결과”라고 적는 편이 정확하다. 이를 실제 주문의 체결가격이나 실제 체결 성과로 바꾸어 부르면 안 된다. SPY의 공시 총수익 계산에서도 NAV 재투자가 실제 재투자 가격과 다를 수 있음이 명시돼 있다. [S1]
원본은 불변으로 보관하고, 판단은 따로 남긴다
연구용 데이터프레임이 깔끔해졌다고 재현 가능한 것은 아니다. 출발점은 다음 흐름을 분리하는 것이다.
원본 불변 보존 → 정규화 → 품질 검사 → 보고서
원본 파일은 내려받은 상태 그대로 보관한다. 파일 옆 메타데이터에는 최소한 공급자명, URL, 접근 UTC, 요청 파라미터, 종목, 요청 기간, 원본 파일명, SHA-256, 라이선스 확인일, 열 정의 문서의 위치를 기록한다. 정규화본에는 원본 행 식별자, 열 이름 변경, 날짜 파싱 방식, 제거·대체·보류의 이유를 남긴다. 원본을 정규화본으로 덮어쓰지 않는 것이 핵심이다.
해시는 알려진 버전과 파일이 같은지 확인하는 무결성 도구로 활용할 수 있다. 다만 해시가 가격의 경제적 정확성, 계약 적합성, 또는 그 값이 당시 실제로 이용 가능했는지를 보증하지는 않는다. [S7] 디지털 객체의 보존에는 저장매체와 객체 자체에 따른 고려사항이 있으므로, 파일 하나만이 아니라 그 파일을 얻은 맥락도 함께 남겨야 한다. [S8]
과거 값은 나중에 바뀔 수 있다. S&P 500 방법론에는 수정된 종가, 누락되거나 잘못 적용된 기업행사, 늦은 기업행사 공시 등이 재계산 사유로 제시된다. 이는 SPY·IEF·GLD의 특정 데이터 공급자가 동일한 수정 정책을 쓴다는 증거는 아니다. 그러나 다운로드 날짜와 원본 해시를 남겨야 하는 실무적 이유는 된다. [S6]
품질 검사는 통과증이 아니라 발견 장치다
검사는 데이터 구조의 문제를 찾아내는 절차다. 미래정보 누수가 없다는 증명도, 실제 주문이 가능했다는 증명도 아니다. 수집본마다 적어도 다음을 검사한다.
- 날짜 형식과 종목별 날짜 오름차순
- 종목-날짜 복합키 중복
- 필수값 결측
- 가격의 유한성 및 양수성
- 거래량 정의·세션 범위·허용 형식에 따른 유효 범위
- 거래일 달력과 비교한 날짜 공백
- 상장 이전으로 보이는 행
- 비정상 급등락·급락 후보
날짜 공백은 먼저 휴장일과 거래일 결측을 구분해야 한다. 실제 거래일 달력과 상품별 거래 가능 시작일을 아직 확보하지 않았다면, “결측 없음”이라고 결론내릴 수 없다. 급변도 오류 확정이 아니다. 원본 행, 기업행사, 조정 방식, 세션 정의를 다시 확인할 조사 후보로 남긴다.
아래 코드는 실제 ETF 자료가 아니라, 이상값을 의도적으로 넣은 완전한 합성 소표본을 위한 예시다. 이 글에서 실행한 결과는 아니다.
import numpy as npimport pandas as pd# Synthetic input only; not market data.raw = pd.DataFrame( { "ticker": ["SPY", "SPY", "SPY", "IEF"], "date": ["2025-01-03", "2025-01-02", "2025-01-02", "2025-01-02"], "close": [600.0, np.nan, 599.0, -101.0], "volume": [100, 100, -1, 50.5], })data = raw.assign(date=pd.to_datetime(raw["date"], errors="coerce"))checks = { "bad_date": data["date"].isna(), "not_ascending": data.groupby("ticker")["date"].diff().lt(pd.Timedelta(0)), "duplicate_key": data.duplicated(["ticker", "date"], keep=False), "missing_required": data[["ticker", "date", "close", "volume"]].isna().any(axis=1), "bad_price": data["close"].notna() & (~np.isfinite(data["close"]) | data["close"].le(0)), # Synthetic input assumes non-negative integer volume. "bad_volume": data["volume"].lt(0) | data["volume"].mod(1).ne(0),}이 입력에서 기대하는 발견은 SPY 날짜 역순 1건, SPY-2025-01-02 중복 2건, close 결측 1건, 음수 가격 1건, 음수 거래량 1건, 소수 거래량 1건이다. 실제 수집본에서는 검사별 건수만 적지 말고 문제 행의 원본 식별자, 처리 결정, 처리 이유까지 남긴다.
결측을 편의적으로 메우지 않는다
행이 없다고 자동으로 전일값을 채우면 안 된다. 그 날짜가 휴장일인지, 거래일인데 공급자 행이 빠진 것인지, 특정 열만 비어 있는지에 따라 처리 방식이 달라진다.
제거·대체·보류 중 무엇을 선택하든 원본값, 대체값, 적용 규칙, 적용 시점, 원본 행 식별자를 분리해 기록한다. 특히 조정가격과 원가격을 혼합해 결측을 메우면 이후 수익률 계산의 의미가 흐려질 수 있다. 판단이 보류된 행은 억지로 깨끗한 데이터셋에 넣기보다 조사 대상으로 남기는 편이 낫다.
후보군에도 한계가 있다. 현재 확인 가능한 SPY·IEF·GLD 세 종목만 고정하는 교육용 설계는 당시 투자 가능했던 전체 후보군을 복원하지 않는다. 생존편향을 상당 부분 제거한 뮤추얼펀드 표본에서도 저조한 성과와 소멸 확률의 관계가 보고됐다. 다만 그 연구는 이 세 ETF의 생존편향 크기나 성과를 추정한 것이 아니다. [S9]
이번 단계의 종료 조건
이번 단계의 산출물은 수익률 그래프가 아니라 데이터 계약과 검사 기록이다. 실제 파일을 확보한 뒤에는 가격 정의, 접근 조건, 이용 권한, 원본 메타데이터, 정규화 규칙, 검사 결과를 한 묶음으로 남긴다. 원자료 공개 권한이 확인되지 않았다면 CSV 자체를 공유하지 않고, 절차·메타데이터 구조·해시·검사 규칙·공개 가능한 합성 예제만 공유한다. [S4] [S7]
품질 검사를 통과해도 미래정보 누수가 없다고 말할 수는 없다. 주문 가능성, 호가, 스프레드, 시장충격을 포함한 실제 체결도 보장하지 않는다. 다음 3편에서는 신호일, 레이블 계산일, 주문 시점을 분리해 “그 시점에 실제로 알 수 있었던 정보만 사용했는가”를 시험한다.
이 글은 교육·연구 목적의 데이터 설계 기록이며, 특정 ETF의 매수·매도 권유나 투자 성과 보장이 아니다.
Sources
- [S1] State Street SPDR S&P 500 ETF Trust | PDR Services LLC | 2026-01-26 | https://www.sec.gov/Archives/edgar/data/884394/000119312526022775/d77353d497.htm ↩
- [S2] EDGAR Filing Documents for 0001100663-26-000031 | iShares Trust / U.S. Securities and Exchange Commission | 2026-05-05 | https://www.sec.gov/Archives/edgar/data/1100663/000110066326000031/0001100663-26-000031-index.htm ↩
- [S3] FORM 10-Q | SPDR Gold Trust / World Gold Trust Services, LLC | 2026-08-04 | https://www.sec.gov/Archives/edgar/data/1222333/000143774926025680/gld20260630_10q.htm ↩
- [S4] Market Data Terms of Service | Massive.com, Inc. | 2025-08-28 | https://massive.com/legal/market-data-terms-of-service ↩
- [S5] MIDAS: Market Information Data Analytics System | U.S. Securities and Exchange Commission | 2024-06-14 | https://www.sec.gov/securities-topics/market-structure-analytics/midas-market-information-data-analytics-system ↩
- [S6] PRICING SUPPLEMENT | Nomura America Finance, LLC | 2026-05-13 | https://www.sec.gov/Archives/edgar/data/1163653/000110465926061943/tm2613459d26_424b2.htm ↩
- [S7] Hash, Hash Value | National Institute of Standards and Technology | 2025-01-15 | https://www.nist.gov/glossary-term/38726 ↩
- [S8] Digital Evidence Preservation: Considerations for Evidence Handlers | National Institute of Standards and Technology | 2026-05-01 | https://www.nist.gov/itl/csd/secure-systems-and-applications/computer-forensics-tool-testing-program-cftt/digital ↩
- [S9] Performance Persistence | Stephen J. Brown and William N. Goetzmann | June 1995 | https://onlinelibrary.wiley.com/doi/10.1111/j.1540-6261.1995.tb04800.x ↩
오류 제보·의견 보내기
글 제목과 주소가 포함된 메일 초안을 엽니다. 내용과 받는 사람을 확인한 뒤 보내주세요.
받는 사람: [email protected]
메일 앱에서 작성메일 앱이 열리지 않으면 아래 내용을 복사해 평소 쓰는 이메일에 붙여 넣으세요.
관련 글
퀀트·데이터 연구 LLM과 함께 퀀트 리서치하는 안전한 방법: 질문부터 검증과 연구 기록까지
LLM을 활용하는 퀀트 리서치를 질문과 근거, 코드와 시간 검증, 실행과 기록의 흐름으로 정리합니다. 사람의 확인 절차와 실패한 실험을 남기는 방법을 다룹니다.
퀀트·데이터 연구 좋은 백테스트는 무엇이 다른가? 수익률보다 먼저 검증 절차를 설계하는 법
가설과 기준 전략을 먼저 정하고 시간순 분할, walk-forward 검증과 테스트 구간 보호를 설계합니다. 반복 탐색의 선택 편향과 연구 기록의 역할을 살펴봅니다.