반응형

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

OHLCV 결측치 보정 기준: 가격 데이터 빈칸을 다룰 때 핵심 흐름과 판단식 도식
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 같은 표시를 남긴다.
  • 대량 보정 전후의 수익률 분포를 비교한다.

함께 보면 좋은 글

반응형

+ Recent posts