Combining Functions

강병오·2026년 3월 7일
post-thumbnail

🚨 Recap
월드퀀트에서 말하는 Alpha를 앞으로 우리는 Signal을 생성하는 Function(함수/전략)이라는 용어로 통일해서 사용함을 반드시 기억! (브레인 플랫폼에서 자료 학습할 때도 유의할 것) 수학에서 함수들을 합성하면 새로운 합성함수를 만들 수 있듯이, 새로운 전략을 설계할 때 완전히 새로운 아이디어를 작성하기보다 이미 존재하는 Function들을 적절히 조합해 활용하는 방법이 가능함. 이 장에서는 이러한 방식으로 Function을 결합할 때 각 Function이 갖추어야 할 조건과 고려해야 할 요소들을 소개하고자 함.

1) Combining Function

Brain: “Well-performing alphas typically stem from clear and well\text{Brain: “Well-performing alphas typically stem from clear and well}
-grounded economic intuition. When multiple alphas are combined,\text{-grounded economic intuition. When multiple alphas are combined,}
their interactions can create synergistic effects, ultimately leading\text{their interactions can create synergistic effects, ultimately leading}
to a more robust and resilient alpha architecture.”\text{to a more robust and resilient alpha architecture.”}

1-1) Function끼리의 선형 결합

fnew=af1+bf2f_{new} = a * f1 + b * f2

위의 방식으로 새로운 함수를 제안해도 안될 건 없지만, 서로 관련 없는 function을 선형결합하는 것은 몇 가지 문제가 있음

  • 알파 pool (우리 기준으로는 Function Pool) 다양화에 도움이 되지 않음
  • 금융적인 의미를 부여하기가 어려움

따라서, 좋은 합성 함수를 만들기 위한 두 가지 조건을 자연스럽게 떠올릴 수 있음.

  • f1, f2가 좋아야 함 ( ≈ 재료가 좋아야 한다)
    • 각각의 금융적 의미가 명확하다
      • 전략을 자연어로 설명할 수 있어야 하는데, 그러려면 "중립화"가 충분히 되어있어야 하며, "쓸데없이 복잡해서는 안됨"
    • 서로의 금융적 의미가 겹치지 않는다 (= 상관관계가 낮다)
      • 직관적으로, y=2x+xy = 2x + x 를 만들거면 그냥 한 번에 y=3xy = 3x를 적으면 되는 것처럼, 비슷한 금융적 의미를 가진 전략을 합치는 건 비효율적임.
    • 각각의 단일 함수로서의 종합성능 고려
      • 직관적으로, 삼겹살과 김치처럼 기본적으로 각자의 체급이 높은 재료를 사용할 경우 특별한 조리 기술이 없어도 일정 수준 이상의 결과가 나오는 경향이 있음. 오히려 지나치게 복잡한 조리를 적용하면 본래 재료의 장점이 희석될 가능성도 존재함. 그렇다고 체급이 낮은 재료를 사용한다고 해서 반드시 결과가 나쁜 것은 아님. 뛰어난 조합 능력이 있다면 예상 밖의 재료로도 충분히 훌륭한 결과를 만들어낼 수 있기 때문임. 이를 함수 설계 관점에서 보면 단일 함수로서의 금융적 의미와 성능이 뛰어날수록 구조는 최대한 간결하게 유지하는 것이 바람직함. 반대로 단일 성능이 상대적으로 약한 경우에는 보다 정교한 변환이나 결합을 통해 보완이 요구됨. 따라서 각 함수가 반드시 높은 성능을 가져야 한다기보다 각 함수의 성능 수준을 고려하여 적절한 방식으로 활용하는 것이 중요하다고 볼 수 있음
  • function들을 결합하는 방식이 좋아야 함 ( ≈ 요리를 잘해야 한다)
    • 보완적인 결합방식
      • f1, f2를 선정할 때 금융적 의미가 겹치지 않는 전략을 채택했다 하더라도, 결합 방식을 어떻게 설정하느냐에 따라 그 선택의 의미가 약화될 수 있음. 예를 들어 2x와 x가 유사한 의미를 가진다고 판단하여 2x와 -x를 결합하기로 구성 함수를 설계했더라도, 결합 방식을 뺄셈으로 설정하면 2x(x)=3x2x - (-x) = 3x가 되어 다시 하나의 동일한 방향의 신호로 수렴하게 되며, 결과적으로 전략을 분리해 설계한 의도가 사라질 수 있음. 이를 Drawdown Diversification이라고 함. 즉, 어떤 알파가 큰 손실을 겪을 때 다른 알파는 그 손실을 보완할 수 있는 구조가 되도록 합성함수를 설계해야함.

1-2) if_else(condition, f1, f2)

조건에 따라 서로 다른 알파를 직접 전환하는 regime switching 구조임. 즉 조건이 참이면 한 전략을 사용하고, 거짓이면 다른 전략을 사용하므로, 두 신호를 동시에 더하거나 빼서 하나의 방향성으로 다시 수렴시키는 문제가 발생하지 않음. 따라서 if_else의 핵심은 상황별로 대체 전략을 명확히 분리해 적용함으로써, 한 알파가 부진한 구간에서 다른 알파가 보완적으로 작동할 수 있게 만드는 것

if_else()의 직관적 이해
구간별로 정의된 함수에서 각 구간의 식을 f1, f2로 볼 수 있으며, 특정 기준값(예: 1.0)을 기준으로 어떤 식을 사용할지를 선택하는 구조가 if_else라고 이해할 수 있음. 즉 조건이 참이면 f1을 사용하고, 거짓이면 f2를 사용하는 방식으로 서로 다른 식을 구간에 따라 선택하게 됨. 이처럼 고차식(삼차식·사차식 등)을 직접 사용하지 않더라도, 조건에 따라 다른 식을 선택하는 구조만으로도 전체 함수 f의 관점에서는 비선형적인 형태가 만들어질 수 있다는 점을 직관적으로 이해하면 좋음.

1-3) trade_when(entry, f, exit)

특정 조건에서만 알파 함수가 실제 포지션을 생성하도록 제한하는 조건부 실행 구조임. entry 조건이 충족된 구간에서만 함수 (f)의 신호가 사용되어 포지션이 생성·업데이트되며, exit 조건이 발생하면 해당 종목의 포지션은 즉시 0으로 리셋되어 완전히 종료되는 구조임. 따라서 exit 이후에는 기존 포지션이 유지되지 않고, 다시 entry 조건이 충족되기 전까지 해당 종목은 거래되지 않는 상태를 유지하게 됨. 이러한 구조는 시장 전체의 거래를 멈추기 위한 목적이라기보다, 알파의 신뢰도가 낮아질 가능성이 있는 특정 종목·상황을 제외하거나 예외적인 구간에서의 노출을 줄이기 위한 장치임. 즉 이벤트, 유동성 문제, 데이터 왜곡 등으로 인해 신호가 정상적으로 작동하지 않을 수 있는 상황에서 해당 종목에 대한 진입을 제한하거나 기존 포지션을 정리함으로써 알파의 취약 구간 노출을 줄이는 역할을 수행함.


2) 참고사항

2-1) Low Correlation (낮은 상관관계)

fnewf_{new}를 구성하는 f1f_1, f2f_2의 상관관계가 낮아야 한다고 하면 “상관관계가 음수여야 진짜로 보완적인 것이 아닌가?”라는 의문이 생길 수 있음. 예를 들어 모멘텀 전략과 리버전 전략처럼 서로 명확히 반대 방향의 신호가 되어야만 결합을 통해 의미 있는 효과가 발생하는 것이 아닌지 생각할 수 있음.

이론적으로는 상관관계가 큰 음수일수록 가장 강한 헤지 효과가 발생하지만, 실제 알파 연구에서는 이러한 관계가 거의 나타나지 않음. 대부분의 알파는 가격, 모멘텀, 거래량, 뉴스 등 유사한 정보 집합을 기반으로 만들어지기 때문에 완전히 반대 방향의 신호가 지속적으로 나타나는 경우가 드물며, 설령 나타나더라도 장기적으로 안정적으로 유지되기 어렵기 때문임. 따라서 실무에서는 “강한 음의 상관”을 목표로 하기보다는 서로 거의 독립적으로 움직이는 낮은 상관(low correlation 또는 near independence)의 알파들을 많이 확보하는 것​을 더 현실적인 목표로 삼음.

이를 직관적으로 이해하기 위해 간단한 실생활 함수 예시를 생각해 볼 수 있음. 예를 들어 f1(x)=xf_1(x) = xf2(x)=2xf_2(x) = 2x처럼 동일한 입력 변수에 대해 같은 방향으로 선형적으로 반응하는 함수들은 입력이 증가하거나 감소할 때 항상 같은 방향으로 함께 움직이므로 높은 양의 상관관계를 가지게 됨. 반대로 f1(x)=xf_1(x) = xf2(x)=xf_2(x) = -x와 같이 입력에 대해 정확히 반대 방향으로 반응하는 함수들은 한 함수가 증가할 때 다른 함수가 동일한 크기로 감소하므로 강한 음의 상관관계를 형성함. 한편 서로 다른 구조를 가진 함수들, 예를 들어 f1(x)=xf_1(x) = xf2(x)=sin(x)f_2(x) = \sin(x)처럼 선형 함수와 주기 함수의 관계에서는 특정 구간에서는 같은 방향으로 움직이기도 하고 다른 구간에서는 반대 방향으로 움직이기도 하므로 전체적으로 상관관계가 낮은 관계가 나타나게 됨. 더 나아가 f1(x)=xf_1(x) = xf2(k)=2kf_2(k) = 2k처럼 서로 다른 변수에 의존하는 함수의 경우 두 함수의 변동이 직접적으로 연결되지 않기 때문 near independence(거의 독립적인 관계)로 이해할 수 있음. 실제 알파 연구에서도 완전히 반대 방향의 신호를 찾기보다는 이렇게 서로 다른 방식으로 반응하여 동조성이 낮은 신호들을 확보하는 것이 포트폴리오 분산 효과를 만드는 데 더 현실적인 접근으로 여겨짐.

이렇게 구성된 알파 집합에서는 특정 알파가 드로우다운을 겪더라도 다른 알파들이 동일한 시점에 동시에 악화될 가능성이 낮아 전체 포트폴리오의 변동성과 드로우다운이 완화되는 분산 효과가 발생함. 반대로 상관관계가 높은 알파들로 구성된 풀에서는 여러 알파가 동일한 구간에서 동시에 성과가 악화될 수 있어 포트폴리오 리스크가 커지게 됨. 이러한 이유로 플랫폼에서 말하는 Alpha pool diversification은 보통 강한 음의 상관을 의미하기보다는 낮은 상관관계와 서로 다른 드로우다운 패턴을 가진 알파들의 집합을 의미함..

2-2) fnewf_{new}는 순수 액티브 알파 전략인가, 확장형인가

이전 글에서 남재현님의 질문에 대한 답변을 먼저 확인해주세요

f1f_1f2f_2가 기존에 널리 알려진 팩터를 기반으로 한 함수라면, 예를 들어 rank(returns)처럼 단순한 모멘텀 팩터를 활용한 구조의 경우 기존 팩터의 영향권 안에서 변형된 형태로 볼 수 있으므로 이러한 결합을 통해 만들어진 fnewf_{new}확장형 액티브 알파 전략에 가깝다고 볼 수 있음. 반대로 f1f_1f2f_2가 기존에 정립된 팩터가 아니라 새로운 데이터 해석이나 구조에서 출발한 함수라면, 이들을 결합해 만든 fnewf_{new} 역시 기존 팩터 체계와 독립적인 순수 액티브 알파 전략으로 해석될 수 있음. 실제 함수(전략) 연구에서는 이러한 두 유형이 반복적으로 확장되는 구조가 자주 나타남. 즉 먼저 새로운 아이디어를 기반으로 한 비교적 순수한 형태의 함수 ff들을 몇 개 설계하고, 이후 이들을 결합하거나 변형하여 확장형 함수를 만들어 함수 풀을 넓혀 나가는 방식임. 이후 다시 새로운 아이디어에서 출발한 순수 함수들을 추가하고, 이를 기존 함수들과 재조합하는 과정을 반복하면서 함수의 수와 구조를 점진적으로 확장해 나가는 식으로 연구가 진행되는 경우가 많음. (질적 연구 + 양적 연구 병행). 스마트 베타 전략을 쓸 일은 브레인 플랫폼 상에서 없기 때문에 앞으로 우리가 만들어낼 함수는 순수형, 확장형 이렇게 두개로 부르기로 약속!

2-3) 금융적 의미가 명확한 ff는 어떻게 디자인하나

앞에서도 잠깐 언급했듯이 함수가 지나치게 복잡해지거나, 중립화가 원하는 수준만큼 이루어지지 않거나, 불필요한 미세 조정(e.g. setting에서 decay를 2에서 3으로 늘리는 식의 조정)을 하게 되면 ff가 담고 있던 금융적 해석 가능성이 점차 희석되고 동시에 overfitting 위험도 함께 증가하게 됨.

브레인 플랫폼에서도 이러한 이유로 알파를 설계할 때 데이터 필드는 최대 3개, 연산자는 최대 8개 이내로 제한하는 비교적 단순한 구조를 일반적으로 권장하고 있으며, 더불어 중립화(neutralization)를 통해 의도하지 않은 factor 노출을 제거하는 과정 역시 중요한 설계 원칙으로 강조됨.

profile
Computer Science @Kyung Hee University | Quantitative Finance | Leveraging fundamental, technical, and machine learning approaches to solve financial problems

7개의 댓글

comment-user-thumbnail
2026년 3월 13일
  1. 알파를 판단하는데에 있어 점수가 산출될 때, setting 값에 의해서 결정된다면 그것이 단순 알파에 대한 판단이라고 할 수 있는지, 아니면 그것조차 포함해서 알파 or 시그널이라고 부르는 건지 궁금합니다

  2. 설계에 따라 알파 값이 강하게 작용하는 시기가 만들어진다고 한다면, 의도적으로 특정 시기를 거냥하고 만드는 것은 잘못된 것인가요?
    반대로 모든 사람이 일반적인 상황에서 성능을 잘 내는 알파를 만든다고 한다면 그것이 오히려 헤지 효과를 낮추는 일이 아닌가 하는 의문이 있습니다.

답글 달기
comment-user-thumbnail
2026년 3월 20일

exit 조건 발생 시 해당 종목의 포지션을 즉시 0으로 리셋하여 위험 노출을 줄인다고 명시하셨습니다. 포지션을 즉각적으로 0으로 청산한다는 것은 그 순간 해당 종목에 대해 Turnover이 발생함을 의미합니다. 브레인 플랫폼과 같은 퀀트 평가 환경에서는 Turnover과 거래 비용이 시그널의 Fitness나 Sharpe를 손상시킬 수 있습니다니다. 위험 노출을 피하려다 오히려 거래 비용 폭탄을 맞아 알파가 망가지는 현상을 피하는게 좋을지 아니면 그래도 위험 부담을 줄이는 것이 좋을지 궁금합니다.( 어떤 전략이 일반적으로 좋을지 궁금합니다)

답글 달기
comment-user-thumbnail
2026년 3월 20일

마지막 부분에서 함수가 지나치게 복잡할 경우 금융적 해석 가능성은 희석 되고 동시에 과대적합의 가능성도 높아진다고 나와있습니다. 금융적 해석 가능성의 희석은 이해가 되지만 어떻게 과대적합이 증가하는 것이며, 이를 해결하는 방법이 함수를 간단하게 설계하는 방법 밖에 없는 것인지 궁금합니다.

답글 달기
comment-user-thumbnail
2026년 3월 20일

if_else(condition, f1, f2)가 조건에 따라 서로 다른 알파를 직접 전환하는 regime switching 구조라고 나와있습니다. 그런데 데이터가 조건의 경계선에서 왔다갔다해서 f1, f2 전략을 수시로 바꿔야 하는 상황이 온다면, 거래 비용이 증가할 것 같은데, 이를 해결할 수 있는 방법이 있는지 궁금합니다. 또한, 앞에서 말한 f1,f2 전략을 수시로 바궈야 하는 상황이 trade_when(entry, f, exit)에서 exit 조건에 포함되는지 궁금합니다.

1개의 답글
comment-user-thumbnail
2026년 3월 21일

독립적인(상관관계가 0에 가까운) 알파들을 그럼 많이 합칠수록 각각의 실수는 서로 상쇄하고 수익은 쌓일 수도 있을 것 같은데 이런 알파들을 많이 합치는 방법에 단점은 무엇일까요? 당장 생각나는게 사고팔아야 하는 종목 수가 많아지니까 수수료 문제만 떠오릅니다. 근데 그래도 수익이 더 난다면 수수료 단점을 상쇄하고도 남을 것 같아서요

답글 달기
comment-user-thumbnail
2026년 3월 21일

알파의 금융적 의미가 명확해야하는 이유와 브레인 플랫폼에서도 단순한 구조를 권장하는 이유가 궁금합니다.
금융적 의미가 명확하지 않거나 복잡하더라도 모든 시기에 안정적인 성과를 내면 괜찮지 않나 생각되고 금융적 의미가 명확하더라도 그냥 끼워맞춘 의미일 수도 있기 때문입니다.

답글 달기