Captain's Log
← Observatory
Observatory·

세 번 틀린 뒤에 얻은 답 — 실적발표일, 종목은 요동친다

지수에서는 12개 카테고리 전부 검정력 미달이라 판정조차 못 했다. 종목으로 내려가니 신호가 잡음보다 컸다 — 9종목 중 8종목이 실적발표일에 평소의 1.6~6.3배로 요동친다(다중비교 보정 후). 이 저장소가 보정을 뚫은 최초의 결과다. 그런데 여기 오기까지 세 번 틀렸고, 매번 결과가 화려했다.

UnderwayDataStatisticsResearch

항해 기록

지금까지 이 배는 지수를 봤다. 그리고 계속 같은 벽에 부딪혔다 — 카테고리 평균은 잡음(표준편차 7.6%)이 효과(-4.7%)보다 커서, 12개 카테고리 전부 검정력 0.80 미달이었다. "효과가 없다"가 아니라 **"알 수 없다"**였다. 이번 항해는 시야를 지수에서 종목으로 내렸다.

  • DART 잠정실적 수집 (src/collect/dart.py) — 9종목 11년치 413건. 추정창이 확보된 390건을 검정
  • 분산비 검정 — 발표일 잔차 제곱을 평소 변동성과 비교한다. U = (AR₀² + AR₁²) / σ²
  • 실측 귀무 분포 — 실적발표가 아닌 모든 거래일(종목당 2,622일)에 같은 계산을 걸어 "평소의 U"를 만들고, 발표일이 그 분포의 어디에 있는지 본다
  • 결과: 8/9 종목이 유의 — 아모레퍼시픽 6.34배 · 한화에어로 4.53배 … 삼성전자 1.64배. BH 보정 후에도 살아남았다. 셀트리온만 q=0.081로 미달

이 저장소가 다중비교 보정을 뚫은 최초의 결과다. 그동안 카테고리 12개도, 전략 14개도 보정 후 생존 0개였다.

판단

왜 종목만 되는가

같은 방법인데 지수에선 안 되고 종목에선 된다. 신호 대 잡음이 다르기 때문이다. 지수에서 2% 효과를 잡으려면 표본이 559건 필요한데 우리에겐 없다. 종목 실적 서프라이즈는 같은 2%를 8건이면 잡는다 — 종목당 44건을 갖고 있다. 데이터를 더 모은 게 아니라, 답할 수 있는 크기의 질문으로 바꾼 것이다.

범위는 반드시 지킨다 — 지수가 아니라 종목, 방향이 아니라 크기. 방향성(평균 CAR)은 9종목 전부 유의하지 않다. 모순이 아니라 효율적 시장과 정확히 일관된다: 요동치는 건 확실한데 어느 쪽으로 갈지는 못 맞춘다. 종목 결과를 지수 이야기로 넓히는 것이 이 프로젝트가 계속 경계해온 과장이다.

★ 세 번 틀렸고, 매번 결과가 화려했다

여기가 이번 항해의 진짜 기록이다. 정답에 닿기까지 세 번 틀린 답을 얻었는데, 셋 다 그럴듯했다.

  1. 평균 CAR 검정 → 0/9. 질문이 틀렸다. 방향을 물었는데, 알고 싶은 건 크기였다.
  2. 이론 χ² 귀무 → 9/9 유의, 최저 q=4.9e-77. 너무 좋았다. 플라시보로 무너뜨렸다 — 실적발표와 무관한 무작위 날짜에 같은 계산을 걸었더니 분산비가 1이 아니라 0.592.44로 흩어졌고, **삼성전자는 무작위 날짜(2.44)가 실적발표일(1.89)보다 더 '유의'**했다. 원인: 수익률이 정규분포가 아니다(변동성 군집·두꺼운 꼬리). σ는 20140일 전 추정이라 현재 국면과 어긋나는데, χ²가 그 어긋남을 전부 이벤트 탓으로 돌렸다.
  3. 경험적 귀무를 500일 표본으로 → seed에 따라 7/9~9/9. 삼성전자 p가 0.100.02 사이를 오갔다. 난수의 산물이었다 — 꼬리가 두꺼우면 표본평균이 느리게 수렴한다.
  4. 전수(모든 비발표일) → 8/9, 완전히 결정적. 종목당 1.9초면 끝난다. 표본을 뽑을 이유가 없었다.

교과서 공식도 맞았고 코드도 맞았다. 틀린 건 그 공식의 가정이 이 데이터에 맞는지 확인하지 않은 것이다.

이건 이 저장소가 계속 싸워온 '조용한 실패'의 사촌이다. 조용한 실패는 아무 일도 안 일어났는데 성공이라 보고하는 것이고, 이건 다 일어났는데 답이 틀린 것이다. 그런데 더 고약하다 — 신선도 검사도, 테스트 214종도 이런 건 못 잡는다. 파이프라인 입장에서는 전부 정상이니까. "너무 좋은 결과는 의심한다"와 "플라시보를 돌려본다"가 유일한 방어선이었다.

곁가지: 현대차가 알려준 것

수집에서 현대차만 766건이 나왔다. 다른 종목은 44건 안팎인데. 현대차는 월간 판매실적을 분기 실적과 똑같은 보고서명("영업(잠정)실적(공정공시)")으로 매월 올린다. 11년간 139건. 이름으로는 가를 수 없다 — 구조로 갈랐다. 분기 실적은 한 분기에 한 번뿐이니, 접수일의 역년 분기별 1건만 남기고 연결을 우선한다.

여기서 내가 한 번 더 틀렸다. KB금융이 3건뿐인 걸 보고 **"은행은 이 채널을 안 쓴다"**고 진단했다. 아니었다 — 날짜 기반 중복 제거가 진짜 공시를 버리고 있었다. KB금융은 46건이다. 데이터가 적은 걸 보고 세상의 성질이라고 설명하는 것, 이것도 같은 병이다.

남은 항로

  • 전향 검증은 불가 — DART 접수일자는 사후에 알게 된다. 이 결과는 기록·사후 검정용이지 예측이 아니다
  • 종목 9개는 임의 선정이다. 표본을 넓히되 결과가 나온 대로 기록한다 — q<0.05가 나올 때까지 종목을 추가하면 그게 p-해킹이다
  • 지수 쪽 카테고리 평균은 여전히 판정 불가로 남긴다. 표본이 부족한 것이지 효과가 없는 게 아니다

이어지는 항로

Logbook한국 증시 이벤트 분석·예측 시스템 '증시 리서치'Fleet증시 리서치 — 한국 증시 이벤트 분석·예측 · 시장모델 AR/CAR + t검정 · 매일 GitHub Actions로 무인 운영Observatory미래 날짜로 출항한 리포트 — 저자가 둘이면 배가 흔들린다Observatory무료 회원제로 전환 — 경계는 파일로 가른다Observatory증시 리서치, 클라우드로 출항 — 매일 스스로 도는 파이프라인Observatory감으로 말하던 것을 숫자로 — 한국 증시 이벤트 스터디 파이프라인