못 찾은 여섯 번째, 그래도 남는 것 (월드퀀트 브레인 9편)
8편에서 다섯 번째 알파를 확정해 제출했다. 이번 편에서 그 알파가 반영되며 점수판이 크게 뛰었다. 그런데 이번 편의 진짜 주인공은 따로 있다. 반영을 기다리는 동안 여섯 번째 알파를 찾아 수십 번의 배치를 돌렸고, 결국 못 찾았다. 못 찾은 이야기를 이렇게 정색하고 기록하는 이유가 있다.
0. 한 줄 요약
다섯 번째 알파가 반영되며 실버 점수가 크게 올라 골드까지 코앞으로 좁혀졌다. 그 사이 여섯 번째 알파를 찾으려 새로운 데이터 두 갈래(경쟁사와 고객의 관계망 중심성, 조건부 거래 게이팅)를 열어봤지만 둘 다 막혔다. 못 찾았다는 사실 자체보다, 왜 안 되는지를 숫자로 확인하고 그 길을 확실히 닫았다는 것이 이번 편의 성과다.
1. 반영, 그리고 반영이 늦게 온 이유
다섯 번째 알파는 이틀 전 새벽에 제출했다. 이 플랫폼은 매일 미국 동부시각 새벽 3시에 그 전날 제출한 알파들을 점수판에 반영한다. 3시가 되자마자 확인해봤지만 점수는 그대로였다. 15분 뒤에도, 30분 뒤에도 그대로였다. 시계를 보며 초조해하는 대신, 반영 시각이 정확히 3시 정각이 아니라 3시는 “이날 것들을 정산하기 시작하는 시각”일 뿐이고 실제로 각 계정에 숫자가 찍히기까지는 배치 처리 시간이 더 걸릴 수 있다고 가정하고 기다렸다. 결국 반영은 3시로부터 51분이 지나서야 확인됐다. 점수는 7,464점에서 9,429점으로, 보유 알파는 네 개에서 다섯 개로 늘었다. 골드(10,000점)까지 남은 거리는 2,536점에서 571점으로 줄었다. 다섯 번째 알파 하나가 거의 2,000점 가까이 밀어 올린 셈이다. 이제 여섯 번째 알파 하나만 게이트를 통과하면 골드는 사실상 확정이다.
2. 기다리는 동안 손을 놀리지 않기로 했다
반영을 기다리는 서너 시간 동안 아무것도 안 하고 있을 이유는 없었다. 이미 앞선 편들에서 재무제표 데이터를 업종 내 순위로 바꾸는 방법(업종 내에서 줄 세우면 신호가 강해진다는 것)으로 네 개 데이터셋을 샅샅이 훑었다. 그 결과는 명확했다. 부채, 리스, 거래 활동과 관련된 항목들만 강했고, 나머지(밸류에이션, 수익성, 현금 관련 항목)는 이 방법을 써도 여전히 약했다. 그리고 강했던 항목들은 이미 다섯 번째 알파에 다 들어가 있었다. 자본리스채무라는 새 항목을 하나 더 찾아내긴 했지만, 다섯 번째 알파와 겹치는 부분이 너무 많아서 함께 쓰면 상관도가 0.97까지 치솟았다. 사실상 같은 알파의 변형이라는 뜻이라 쓸 수 없었다. 이 길은 이미 여러 번 확인했으니 반복하지 않기로 했다. 대신 완전히 새로운 두 갈래를 열어보기로 했다.
3. 관계망에서 중심을 찾다
이 플랫폼에는 한 회사와 그 경쟁사, 고객, 협력사 사이의 관계를 담은 데이터가 있다. 지금까지는 그중 “경쟁사들의 평균 수익률”이나 “연결된 경쟁사의 수” 같은 단순한 값만 써왔다(세 번째와 네 번째 알파에 이미 들어간 재료다). 그런데 같은 데이터 안에 훨씬 정교한 값들이 숨어 있었다. 페이지랭크(웹 검색 엔진이 웹페이지의 중요도를 매기던 그 방식)와 허브권위 점수(관계망에서 누가 다른 중요한 노드들과 많이 연결돼 있는지를 재는 방식)로, 각 회사가 경쟁사 관계망과 고객 관계망에서 얼마나 “중심”에 있는지를 미리 계산해둔 값들이었다. 단순히 몇 개와 연결됐는지가 아니라, 얼마나 중요한 것들과 연결됐는지를 재는 값이라 지금까지 쓴 재료와는 결이 달랐다.
일곱 개 항목을 하나씩 시험해봤다. 제일 강한 게 경쟁사 관계망에서의 페이지랭크였는데, 그마저도 수익성 일관성 지표가 0.78에 그쳤다(게이트를 넘으려면 1.25는 넘어야 한다). 나머지는 이보다 약했고, 그중 둘은 아예 마이너스였다. 다섯 번째 알파를 만들 때 썼던 방법, 즉 각자는 약해도 여럿을 더하면 강해진다는 방법을 그대로 적용해봤다. 결과는 기대와 반대였다. 제일 강한 두 항목을 더해도 숫자는 그대로였고, 거기에 고객 쪽 항목까지 섞어 넣자 오히려 더 나빠졌다. 다섯 번째 알파에서는 재료 하나하나가 이미 어느 정도 강했기 때문에 더하기가 통했던 것이다. 이번엔 재료 자체가 다 약했다. 약한 것끼리 아무리 더해도 강해지지 않는다는, 이미 두 번째 편에서 배웠던 교훈을 한 번 더 확인한 셈이다.
4. 조건부 거래를 다시 걸어보다
이 플랫폼에는 신호를 항상 따르지 않고 특정 조건에서만 거래하도록 만드는 기능이 있다. 예를 들어 “시장이 평소보다 출렁이는 날에만 이 신호를 따르고, 아니면 포지션을 접어라” 같은 조건을 걸 수 있다. 사실 이 조건부 거래는 몇 편 전에 이미 한 번 시도했다가 “아무 효과가 없었다”고 기록해둔 적이 있다. 그때는 경쟁사 신호와 품질 점수를 곱한 알파에 걸었었다. 이번엔 그때와 완전히 무관한 새 재료, 즉 방금 찾은 경쟁사 관계망 페이지랭크에 똑같은 조건을 걸어 다시 시험해봤다. 혹시 그때 안 먹힌 게 그 특정 조합의 특수한 사정이었는지, 아니면 이 방법 자체가 원래 안 통하는 건지 구분하고 싶었다.
결과는 놀라울 정도로 명확했다. 조건을 걸었을 때와 안 걸었을 때의 숫자가 소수점까지 똑같았다. 수익성 일관성 0.78, 효율성 0.48, 회전율도 거의 그대로. 조건이 아예 작동을 안 한 것이나 마찬가지였다. 왜 이런 일이 생겼는지는 생각해보면 납득이 간다. 이 조건은 원래 “오늘 시장이 출렁였는지”를 보고 매일매일 거래 여부를 정하는 방식인데, 재무제표에서 나온 신호는 애초에 하루하루 크게 안 바뀌고 몇 달에 걸쳐 천천히 움직이는 신호다. 하루 단위로 시장이 출렁이든 말든, 이 알파의 포지션 자체가 거의 안 바뀌니 조건을 걸어도 걸 게 없었던 것이다. 두 번째로 확인하고 나니 이 방법을 이런 종류의 느린 신호에 쓰는 건 아예 은퇴시키는 게 맞겠다는 결론이 섰다.
5. 안 되는 이유를 아는 것도 전진이다
이렇게 두 갈래를 다 닫아버렸다고 손해를 본 건 아니다. 오히려 다음에 시간을 어디에 써야 할지가 더 선명해졌다. 재무제표를 업종 내 순위로 바꾸는 방법은 부채, 리스, 거래 활동 계열에서만 통하고 나머지엔 안 통한다는 걸 이미 알고 있었다. 이번엔 관계망의 중심성이라는 완전히 새 데이터도 시도해봤지만 이 시장에서는 힘이 약했고, 조건부 거래 게이팅이라는 완전히 새 메커니즘도 시도해봤지만 이런 느린 신호엔 안 맞는다는 걸 확인했다. 데이터도 새로 열어봤고 방법도 새로 열어봤다. 둘 다 확실히 닫혔다. 남은 건 아직 손대지 않은 다른 데이터셋들을 업종 순위가 아닌 다른 조합 방식으로 다시 보는 것, 그리고 배치 마이너에 만들어 두고 아직 안 써본 나머지 틀을 꺼내 쓰는 것이다.
다음 편은 여섯 번째 알파를 찾아 골드에 닿는 순간이 될 것이다.
기술 메모 (부록)
- 5호 반영 확인 (07-03 03:51 EDT): 점수 7,464 → 9,429, 보유 알파 4 → 5, Gold(10,000)까지 잔여 2,536 → 571. 타이밍 실측: 5호는 07-02 04:22 EST 제출, 다음날 07-03 03:00 EST refresh 대상이었으나 03:03/03:19/03:35 확인 전부 미반영, 03:51에 반영 확인. 3AM EST는 배치 트리거 시각이지 반영 완료 시각이 아니고, 최대 ~1시간 지연 가능.
- pv13 네트워크 중심성 7필드 단독 실측 (
rank(group_rank(ts_backfill(field,120),subindustry)), decay5/INDUSTRY/trunc0.02):
조합(zscore 합, 5호와 동일 패턴): 2-way(com_page_rank+com_rk_au) 0.77(무변화), 3-way(경쟁사+고객 교차) 0.48, 4-way 0.49(둘 다 하락). 5호와 달리 다리 자체가 약해 가산 시너지가 안 남, 라인 종결.0.78/0.48 pv13_com_page_rank (경쟁사 관계망 PageRank) 0.68/0.36 pv13_com_rk_au (경쟁사 관계망 HITS 권위점수) 0.52/0.25 pv13_ustomergraphrank_page_rank (고객 관계망 PageRank) 0.45/0.22 pv13_ustomergraphrank_auth_rank (고객 관계망 HITS 권위점수) 0.34/0.08 pv13_ompetitorgraphrank_hub_rank (경쟁사 관계망 HITS 허브점수) -0.65/-0.22 pv13_ustomergraphrank_hub_rank (고객 관계망 HITS 허브점수) -1.96/-0.85 (turnover 0.78) pv13_custretsig_retsig (고객 수익률 부호, 노이즈성 강해 배제) - trade_when 변동성 게이팅 재검증:
trade_when(ts_rank(ts_std_dev(returns,22),252)>0.55, core, -1). 이전에 comp x model16 천장(S1.01 to 1.08)에서 “안 먹힘” 기록. 무관 베이스(pv13_com_page_rank)에 재적용해도 게이트 유무와 무관하게 결과 완전 동일(0.78/0.48, turnover 0.010 vs 0.011). 저회전(~0.01) 펀더멘털/네트워크 신호엔 일간 변동성 트리거가 작동하지 않음을 두 번째 베이스로 확인, 이 신호군에 한해 일반적으로 은퇴 처리. - 남은 리드: analyst4/option8/news18(각 60필드, 지금까지 group_rank로만 스캔)에 신뢰도가중/곱셈 콤보 등 다른 조합 연산자 재시도, 배치마이너 val_tsrank/val_improve 템플릿(val_rank만 실사용), trade_when을 변동성이 아닌 펀더멘털 데이터 갱신 이벤트 트리거로 재설계.