반응형
OHLCV에서 빈칸을 만나면 가장 쉬운 처리는 전일 값을 복사하는 것이다. 하지만 그 한 줄이 수익률, 변동성, 거래대금 계산을 모두 흔들 수 있다. 빈칸을 채우기 전에 먼저 “거래가 없었던 것인지, 데이터가 빠진 것인지”를 나눠야 한다.

결측 원인별로 처리 기준을 다르게 둔다
| 원인 | 정상 결측인가 | 처리 |
|---|---|---|
| 시장 휴장 | 예 | 거래일 캘린더에서 제외 |
| 거래정지 | 부분적으로 예 | 가격 보정 대신 상태 플래그 저장 |
| 상장폐지 이후 | 예 | 분석 universe에서 제외 |
| 원천 API 누락 | 아니오 | 재수집 또는 보조 원천 대조 |
보정 전에 계산할 숫자
expected_days = trading_calendar.count(start, end)
missing_rate = empty_ohlcv_rows / expected_days
if missing_rate > 0.01:
hold_batch_and_compare_secondary_source()
forward fill을 조심할 때
종가는 이어붙일 수 있는 경우가 있지만 거래량은 같은 방식으로 채우면 안 된다. 거래량을 복사하면 유동성 지표가 바로 왜곡된다.
보정값에는 표시를 남긴다
- 원천 값과 보정 값을 같은 필드에 섞지 말고 is_imputed 같은 플래그를 둔다.
- 고가, 저가, 시가, 종가의 관계가 깨지지 않는지 확인한다.
- 특정 날짜나 시장에 결측이 몰리면 배치 장애 가능성을 먼저 본다.
실전 적용 포인트
OHLCV 결측을 처리할 때는 빈 값을 채우는 것보다 왜 비었는지 기록하는 일이 먼저다. 휴장일, 거래정지, 상장폐지, 원천 API 장애는 모두 결측처럼 보이지만 처리 방식은 서로 다르다.
실무에서는 보정된 값과 원천 값을 같은 컬럼에 섞지 않는 편이 좋다. 원천 값, 보정 값, 보정 사유, 보정 시각을 나누어 저장하면 나중에 수익률이나 변동성 계산이 흔들렸을 때 원인을 추적할 수 있다.
- 휴장일 결측과 데이터 수집 실패를 구분한다.
- 보정 값에는 is_imputed 같은 표시를 남긴다.
- 대량 보정 전후의 수익률 분포를 비교한다.
함께 보면 좋은 글
반응형
'Data Engineering' 카테고리의 다른 글
| 티커 변경 이벤트 처리: 기업 이벤트와 가격 시계열 연결 (0) | 2026.06.14 |
|---|---|
| 티커 재사용 문제 처리: 상장폐지 종목을 구분하는 법 (0) | 2026.06.14 |
| 분기 재무 데이터 구축 방법: 제출일, 수정 데이터, 재처리 기준 (0) | 2026.06.14 |
| 외부 금융 데이터 소스 전환 검토 기준: 범위, 품질, 비용 (0) | 2026.06.14 |
| 기업 데이터 식별자 매핑 설계: 내부 키와 외부 키를 맞추는 법 (0) | 2026.06.14 |
