곱하지 말고 더하라 (월드퀀트 브레인 8편)
퀀트 트레이딩 플랫폼 WorldQuant BRAIN에서 알파를 쌓아 점수를 올리는 공개 기록. 7편에서 다섯 번째 알파 후보가 자기상관이라는 벽 앞에서 0.0063 차이로 멈췄다. 이번 편은 그 벽을 돌아서, 완전히 다른 재료로 다섯 번째 알파를 잡은 이야기다.
0. 한 줄 요약
세 개의 신호를 곱해서 만든 알파는 소수의 우량 종목에만 쏠려 무너졌다. 같은 세 신호를 곱하지 않고 더하자, 그 즉시 종목 분포가 고르게 퍼지며 모든 통과 기준을 넘었다. 곱셈과 덧셈은 산수로는 사촌이지만, 이 게임에서는 완전히 다른 무기였다.
1. 경쟁사 신호를 내려놓다
7편 끝에서 확인한 게 있었다. 세 번째와 네 번째 알파에 이미 쓴 경쟁사 수익률 신호를 다섯 번째에 또 쓰려니, 자기상관이라는 문에서 계속 걸렸다. 같은 좋은 재료라도 세 번째로 꺼내 쓰면 이미 낸 알파들과 겹치는 부분이 누적된다는 뜻이었다. 그래서 이번엔 이 재료를 아예 내려놓기로 했다.
대신 6편, 7편에서 검증한 방법 하나는 그대로 가져왔다. 재무제표의 어떤 항목을 “전체 시장에서 줄 세우기”가 아니라 “같은 업종 안에서 줄 세우기”로 바꾸면 신호가 강해진다는 것. 이 방법으로 이미 여러 항목을 시험해 놓은 게 있었다. 장기 이연수익(고객에게 아직 제공하지 않은 서비스의 대가로 미리 받은 돈 중 장기성 부분), 장기부채의 신규 발행액, 그리고 주식 거래 회전율. 셋 다 업종 내 순위로 바꿨을 때 단독으로 1.0을 웃도는 값이 나온, 이번 사냥에서 가장 강한 재료들이었다.
2. 세 개를 곱치니 강해졌다, 그런데
이 세 재료를 곱해봤다. 4편, 6편에서 두 개를 곱해 성공했던 방식을 셋으로 늘린 것이었다. 결과는 수익성 일관성 지표 1.40, 효율성 지표 0.96. 게이트에 아주 가까웠다.
그런데 견고성을 확인하는 문에서 걸렸다. 종목을 줄여 다시 재보니 0.53. 기준(0.61)에 못 미쳤다. 자세히 들여다보니 원인이 보였다. 롱(매수) 포지션이 886개, 숏(매도) 포지션이 1,621개였다. 한쪽으로 크게 치우쳐 있었다.
곱셈이라는 연산의 성질 때문이었다. 세 신호를 곱한다는 건 “셋 다 동시에 좋아야만” 큰 값이 나온다는 뜻이다. 이연수익도 좋고, 부채 발행도 건전하고, 거래 회전율도 활발한, 세 조건을 모두 만족하는 종목은 흔치 않다. 그러니 롱 쪽 포지션이 소수의 완벽한 종목에만 몰리고, 나머지 대다수는 숏 쪽에 뭉뚱그려 들어갔다. 결측값을 채워봐도(값이 비어 있는 종목에 최근값을 끌어와 채우는 방법) 이 쏠림 자체는 고쳐지지 않았다. 결측의 문제가 아니라 곱셈이라는 연산 자체의 문제였다.
3. 더하기로 바꾸다
세 신호를 각각 표준화(평균 0, 분산 1로 맞추는 것)한 뒤, 곱하지 않고 그대로 더해봤다. 곱셈이 “셋 다 동시에 좋아야” 인정하는 연산이라면, 덧셈은 “어느 하나라도 좋으면 그만큼 반영한다”는 연산이다. 조건이 훨씬 느슨해진다.
결과는 수익성 일관성 1.54, 효율성 1.10. 곱셈 버전보다 오히려 더 좋은 숫자였다. 그리고 결정적으로, 롱 포지션이 1,273개, 숏 포지션이 1,288개로 거의 정확히 반반이 됐다. 종목 줄여서 다시 잰 값도 0.87로 넉넉하게 통과했다.
곱셈은 교집합을 찾고, 덧셈은 그 교집합보다 훨씬 넓은 영역을 아우른다. 조건을 하나씩 완화한 셈이니 신호가 약해질 법도 한데, 오히려 강해졌다. 아마 세 재료가 각자 따로도 의미 있는 신호를 담고 있어서, 억지로 교집합을 좁히기보다 셋의 정보를 골고루 합산하는 쪽이 더 많은 종목에서 더 안정적으로 통했던 것 같다.
4. 자기상관을 마지막으로 확인하다
마지막 문이 남아 있었다. 이 알파는 경쟁사 신호를 전혀 쓰지 않았으니, 지금까지 낸 네 알파와 자기상관이 낮을 거라 기대했다. 확인해 보니 0.50. 세 번째 알파(0.14) 다음으로 낮은 수치였다. 재료를 완전히 새로 가져온 보람이 있었다.
여덟 개의 문을 전부 확인했다. 전부 통과였다.
장기이연수익(업종내순위) + 장기부채신규발행(업종내순위) + 주식거래회전율(업종내순위)
세 값을 표준화해서 더한 뒤 다시 순위 매기기
USA / TOP3000 / 지연 1일 / decay 5 / 업종 중립화 / 비중상한 2%
→ Sharpe 1.54, Fitness 1.10, 작은 유니버스 0.87, 자기상관 0.50, 8/8 통과
다섯 번째 알파다.
5. 되짚어 보는 숫자들
이번 세션에서 재무제표 항목 스물일곱 개를 “업종 내 순위”로 바꿔 시험해 봤다. 최고치가 1.03이었던 항목이 둘 있었다. 주식 거래 회전율과 장기 이연수익. 그 뒤를 장기부채 신규발행(1.01), 장기부채 잔액(0.92), 매출원가(0.88)가 이었다. 흥미롭게도 이 강한 항목들은 전부 회사의 자금 사정이나 영업 규모와 관련된 것들이었다. 반면 기업가치나 자기자본처럼 이미 시장가격이 많이 반영된 항목은 업종 내 비교로 바꿔도 크게 나아지지 않았다. 아마 가격에 이미 녹아든 정보와, 아직 덜 알려진 재무제표 안쪽의 정보가 갈리는 지점이 아닐까 싶다.
6. 이번 편에서 배운 것
- 곱셈과 덧셈은 다른 철학이다. 곱셈은 모든 조건이 동시에 맞아야 하는 교집합이라 소수에 몰릴 위험이 있다. 덧셈은 하나라도 좋으면 반영하는 합산이라 더 널리 퍼진다. 신호가 두 개일 때는 곱셈이 통했지만, 세 개로 늘자 곱셈은 무너지고 덧셈이 이겼다.
- 결합하는 신호가 늘수록 곱셈의 위험도 커진다. 신호 하나하나가 좁히는 조건이라, 여러 개를 곱하면 그 조건들이 겹겹이 쌓여 극소수만 남는다. 셋 이상을 합칠 때는 덧셈부터 시도해 볼 이유가 있다.
- 결측값을 채우는 것과 쏠림을 고치는 것은 다른 문제다. 처음엔 소수 종목 쏠림이 결측 데이터 때문이라 짐작했다. 결측을 채워도 쏠림은 그대로였다. 진짜 원인은 연산자 자체에 있었다.
- 재료를 아예 바꾸는 것도 답이다. 자기상관의 벽에 부딪혔을 때, 그 벽을 미세조정으로 넘으려 애쓰는 대신 완전히 다른 재료로 갈아탄 것이 더 빨랐다.
다음 편은 지금까지 나온 다섯 개 알파의 점수 누적을 보며 골드까지 남은 그라인드를 정리하는 회차가 될 것이다.
기술 메모 (부록)
- 제출 알파 5호 (drlt_dltis_cshtr_3way_zscore, id leVnJG0e):
rank(zscore(rank(group_rank(ts_backfill(fnd6_drlt,120),subindustry))) + zscore(rank(group_rank(ts_backfill(fnd6_dltis,120),subindustry))) + zscore(rank(group_rank(ts_backfill(fnd6_cshtr,120),subindustry)))), USA/TOP3000/delay1/decay5/INDUSTRY/truncation0.02. Sharpe 1.54, Fitness 1.10, turnover 0.0134, sub-universe 0.87, self-corr 0.5032. 서버 8/8 PASS. 제출 완료(2026-07-02 04:22 EST). - 곱셈 대 덧셈 실측 대조: 동일 3필드, 곱셈(
a*b*c) → Sharpe 1.40, Fitness 0.96 to 0.98, sub-universe 0.51 to 0.53 FAIL(long 886 : short 1675). 덧셈(zscore(a)+zscore(b)+zscore(c)) → Sharpe 1.54, Fitness 1.10, sub-universe 0.87 PASS(long 1273 : short 1288). 결측 보완(ts_backfill(120))은 Fitness만 미세 개선(0.96→0.98), sub-universe는 안 고침. 원인이 결측이 아니라 곱셈 연산자였음을 시사한다. - group_rank(field,subindustry) 실측 (27필드 누적): 최고 fnd6_cshtr(주식회전율)/fnd6_drlt(이연수익LT) 1.03, fnd6_dltis(장기부채신규발행) 1.01, debt_lt 0.92, cogs 0.88. 레버리지/유동성/영업규모 계열에서 val_rank 대비 uplift, 밸류에이션 계열(EV/equity/cashflow_op)엔 무효.
- 점수 현황: SILVER 7,464점(4알파 반영), Gold(10,000)까지 2,536점. 5호는 07-03 리프레시에 가산 예정(캡 분산 원칙).
- SUBINDUSTRY 변형 기각 사례: 같은 덧셈식을 SUBINDUSTRY 중립화로 돌리면 Sharpe 1.65/Fitness 1.23으로 더 높았으나 sub-universe 0.66(한도 0.71) FAIL. 수치가 더 좋아도 견고성 문에서 걸리면 채택하지 않는다. INDUSTRY 버전(8/8 PASS)을 최종 제출했다.