성적이 나쁜 신호가 하나 있었다
여러 종류의 신호를 만들어 종목을 고르는데, 그중 하나가 3개월 연속 마이너스였다. 청산 29건, 평균 -2.63퍼센트다. 표본이 적다고 넘기기 어려운 수준이었다.
폐기하기는 아까웠다. 시장 국면이 바뀌면 살아날 수 있는 성격의 신호였고, 표본이 더 쌓이면 판단이 달라질 여지도 있었다. 그래서 가중치를 1.5에서 0.5로 낮췄다.
그리고 문서에 이렇게 적었다.
폐기가 아니라 감량이다. 값만 되돌리면 복구되고, 그동안 표본은 계속 쌓인다.
세 문장 다 틀렸다.
한 달 뒤 발생이 0이었다
한 달 뒤 성적을 다시 보러 갔다. 그 신호의 청산 기록이 없었다. 진입 기록도 없었다. 발생 자체가 한 건도 없었다.
원인은 파이프라인 구조였다. 신호마다 가중치를 곱해 점수를 만들고, 그 점수가 일정 값을 넘는 것만 다음 단계로 보낸다. 가중치를 낮추면 점수가 낮아지고, 점수가 낮아지면 뒤에 있던 임계 필터를 못 넘는다.
1.5에서 0.5는 "3분의 1 비중으로 계속 참여한다"가 아니었다. 그 신호가 만들 수 있는 최대 점수가 임계 아래로 내려간 것이다. 감량이 아니라 차단이었고, 나는 스위치를 껐다는 사실을 모른 채 한 달을 보냈다.
대조군이 없으면 구분이 안 됐다
발생 0건을 처음 봤을 때 원인 후보가 셋이었다.
- 그 신호가 나올 조건인 시장이 한 달간 없었다
- 원천 데이터가 결손이라 계산 자체가 안 됐다
- 내가 손댄 것이 발생을 막았다
셋 다 관측상 같은 모습이다. 0건이라는 숫자 하나로는 갈라지지 않는다.
갈라준 건 손대지 않은 쪽이었다. 같은 최고 등급이면서 가중치를 건드리지 않은 다른 신호가 있었고, 그쪽은 같은 달에 4건이 정상 발생했다. 전체 신호를 합치면 32건이었다. 원천 데이터도 시장 조건도 문제가 없었다는 뜻이다. 남는 건 3번뿐이었다.
내가 처음부터 대조군을 의도해서 남겨둔 게 아니다. 그저 그 신호는 성적이 나쁘지 않아서 손대지 않았을 뿐이고, 우연히 대조군 역할을 했다.
재평가 조건이 도달 불가였다
더 나쁜 것은 되돌릴 조건 쪽이었다. 하향할 때 재평가 트리거를 이렇게 걸어뒀다.
하향 후 청산 10건이 쌓이면 성적을 다시 보고 가중치를 원복할지 결정한다
발생이 0이면 청산도 0이다. 이 조건은 영원히 도달하지 않는다.
되돌릴 수 있게 남겨뒀다고 믿은 항목이 실은 닫히지도 열리지도 않는 상태로 한 달을 있었다. 문서에는 "관찰 중"이라고 적혀 있었으니 목록을 훑으면 진행 중인 항목처럼 보인다. 아무 일도 일어나지 않는 항목이 진행 중으로 위장해 있는 게 가장 조용한 형태의 부채다.
💡 조정과 차단이 갈리는 지점은 그 값 뒤에 게이트가 있는지다. 값을 절반으로 줄이는 변경이 절반의 효과로 남는 것은 그 값이 최종 출력일 때뿐이고, 하위에 임계 비교가 하나라도 있으면 조정은 임의 지점에서 차단으로 바뀐다. 값을 바꾸기 전에 "이 값이 지나가는 경로에 임계 비교가 있는가"를 묻는 것으로 이 계열은 걸러진다. 그리고 되돌릴 조건은 차단된 상태에서도 관측 가능한 값으로 세워야 한다. 발생 건수에 의존하는 조건을 발생을 막는 변경에 붙이면 스스로를 잠근다.
폐기가 더 정직했다
결론은 트리거를 폐기하는 것이었다. 도달할 수 없는 조건을 목록에 남겨두는 것보다 없애는 편이 정확하다.
애초에 판단이 틀렸던 것은 "폐기는 무섭고 감량은 안전하다"고 여긴 부분이다. 실제로 벌어진 일은 그 반대였다. 폐기는 기록에 남고 다시 논의할 수 있는 결정이지만, 내가 한 감량은 폐기와 같은 효과를 내면서 폐기했다는 기록조차 남기지 않았다.
안전해 보이는 선택이 실제로 안전한지는 그 값이 흐르는 경로를 따라가 봐야 알 수 있었다. 나는 값만 봤다.