절반 넘게 비정상인 배치
매일 장 마감 뒤 도는 배치가 있다. 시세를 모으고, 후보를 채점하고, 결과를 저장한다. 돌 때마다 상태를 하나 남긴다. 정상, 부분 성공, 실패, 건너뜀.
석 달 남짓한 기록을 집계했다.
| 상태 | 횟수 |
|---|---|
| 정상 | 40 |
| 부분 성공 | 31 |
| 실패 | 14 |
| 건너뜀 | 3 |
88회 중 정상이 40회, 45%다. 실패 14회는 이미 고친 한 가지 결함에서 나온 것이라 원인이 분명했다. 남은 문제는 부분 성공 31회였다.
분석에 쓰기 전에 비정상인 날을 걸러내야겠다고 생각했다. 정상인 날의 결과만 믿고 쓰는 것, 상식적인 판단으로 보였다.
거르기 전에 한 가지를 확인했다
정상인 날과 부분 성공인 날이 실제로 얼마나 다른가.
수집량부터 봤다. 하루 평균 모은 종목 수는 두 집단 차이가 7% 안쪽이었다. 거의 같다.
결과물을 봤다. 배치가 하루에 만들어 내는 후보 신호 수다.
| 정상인 날 | 부분 성공인 날 | |
|---|---|---|
| 신호 합계 | 44 | 121 |
| 신호 0건인 날 | 40일 중 25일 | 31일 중 2일 |
방향이 반대였다. 부분 성공인 날이 결과물을 세 배 가까이 더 만들고 있었다. "정상"으로 기록된 40일 중 25일은 아무 결과도 없는 날이었다.
상태값이 재던 것은 품질이 아니었다
상태가 정해지는 방식을 따라가 보니 이유는 단순했다. 배치는 단계마다 사소한 문제(한 종목 조회 실패, 보조 자료 누락 같은 것)를 경고로 붙이고, **경고가 하나라도 붙으면 "부분 성공"**이 된다. 상태값이 뜻하는 것은 "결과가 좋았는가"가 아니라 **"경고가 하나라도 붙었는가"**였다.
그러면 일을 많이 한 날일수록 경고가 붙을 자리도 많다. 후보가 많이 나온 날은 조회도 많고 계산도 많아서 어딘가에서 하나쯤 걸린다. 반대로 결과가 0건인 날은 경고가 붙을 단계까지 가지도 않는다. 그래서 "정상"이 된다.
걸러냈다면 무엇이 남았을까
정상인 날만 남겼다면 신호 165건 중 44건만 남는다. 73%가 사라진다.
크기보다 나쁜 것은 모양이다. 사라지는 것이 무작위가 아니다. 결과가 많이 나온 날만 골라서 빠진다. 남는 표본은 "조용했던 날"에 치우친다. 그 위에서 신호의 성과를 재면, 신호가 많이 나오는 장(대개 시장이 크게 움직이는 날)의 모습은 통째로 빠진 채 결론이 나온다.
💡 "비정상 제외"는 중립적인 정제처럼 보이지만, 비정상의 정의가 일의 양과 엮여 있으면 그 자체가 선택 편향이다. 거르기 전에 거르는 기준이 무엇과 상관있는지부터 본다.
그 뒤에 한 일
상태값은 품질 지표로 쓰지 않기로 했다. 분석에서 부분 성공인 날을 빼지 않는다. 대신 부분 성공이 무슨 경고 때문인지를 따로 기록하게 바꿨다. 이전 31회는 경고 내용이 남아 있지 않아 되살릴 수 없었고, 그 부분은 앞으로 쌓이는 분만 답할 수 있다.
남은 것
상태값을 쓰기 전에 그 값이 정해지는 규칙을 읽는다. "정상", "성공" 같은 이름은 사람이 붙인 것이다. 실제로는 "경고 0개"를 뜻할 수도 있고, 그 정의는 품질과 전혀 다른 축일 수 있다.
거르기 전에 두 집단의 산출물을 나란히 놓는다. 수집량, 결과 수처럼 일의 양을 보여 주는 값 하나만 비교해도 상태값이 무엇을 재는지 드러난다. 이번에는 그 한 번의 비교가 결론을 뒤집었다.
제외 규칙이 무작위로 빼는지, 특정한 날을 골라서 빼는지 묻는다. 표본의 크기가 줄어드는 것은 감수할 수 있다. 표본의 모양이 바뀌는 것은 감수할 수 없다.