Data & AI

매크로에 활용하는 Cosine Similarity

JeTech 2024. 7. 23. 00:00
반응형

안녕하세요

 

오늘은 거시적인 관점에서 데이터를 통해 확인할 수 있는 투자들에 대해서 

 

이야기해보려고 합니다. 

 

 

자산군들의 상관관계

 

자본주의가 발전하면서 다양한 자산군들 간의 상관관계는

 

금융 시장에서 중요한 연구 주제가 되었습니다.

 

자산군 간의 상관관계는 투자 전략, 포트폴리오 관리, 위험 관리 등에서 중요한 역할을 하고

 

두 자산의 가격 변동이 서로 어떻게 연관되어 있는지를 나타내는 통계적 개념을 가집니다.

 

양의 상관관계는 두 자산이 같은 방향으로 움직이는 경향이 있음을,

 

음의 상관관계는 반대 방향으로 움직이는 경향이 있음을 의미합니다.

 

0에 가까운 상관관계는 두 자산의 움직임이 크게 상관이 없다는 것을 의미합니다. 

 

 

상관관계의 형성 배경

 

자본주의의 발전과 금융 시장의 통합

 

자본주의가 발전해가면서 금융 시장은 점점 더 글로벌화되고 통합되었습니다.

 

기술의 발전, 통신의 혁신, 그리고 규제의 완화는 전 세계 투자자들이 다양한 자산에 접근할 수 있게 만들었습니다.

 

이는 자산군 간의 상관관계 형성에 기여하였습니다.

 

예를 들어, 미국 주식 시장과 유럽 주식 시장은 과거에는 독립적으로 움직였으나,

 

글로벌 금융 위기와 같은 사건들은 이들 시장이 긴밀히 연관되어 있음을 보여줍니다.

 

우리가 머나먼 한국땅에서 미국 FOMC를 라이브로 보면서 

 

미국의 기준금리가 국제적인 자산시장에 끼치는 영향을 파악하게 되는 것처럼요

 

 

경제와 금융의 상호 의존성 증가

 

경제와 금융 시스템이 복잡해지고 상호 의존성이 증가하면서

 

자산군들 간의 상관관계도 더욱 명확해졌습니다.

 

경제 지표, 통화 정책, 무역 관계 등 다양한 요인들이 서로 영향을 미치며 자산 가격에 영향을 줍니다.

 

예를 들어, 금리가 인상되면 채권 가격은 하락하고, 이는 주식 시장에도 영향을 미칠 수 있습니다.

 

 

주식과 채권

 

전통적으로 주식과 채권은 음의 상관관계를 보이는 경향이 있습니다.

 

주식 시장이 호황을 누릴 때, 투자자들은 더 높은 수익을 기대하며 주식에 투자하고,

 

이는 채권의 수요를 감소시켜 가격을 하락시킵니다.

 

반대로, 경제 불황이나 금융 위기 시기에는 안전 자산으로서의 채권 수요가 증가하여 가격이 상승하고,

 

주식 가격은 하락하는 경향이 있습니다.

 

 

주식과 원자재

 

주식과 원자재의 상관관계는 특정 원자재와 산업에 따라 다릅니다.

 

예를 들어, 원유 가격 상승은 에너지 관련 주식에 긍정적인 영향을 미칠 수 있지만,

 

원유를 많이 사용하는 항공사 주식에는 부정적인 영향을 미칠 수 있습니다.

 

둘 다 인플레이션으로 상승하는 자산들이기 때문에 최근 몇 년간 같은 성향을 띤 것처럼 보이지만

 

일반적으로 원자재 가격과 주식 시장 간의 상관관계는 낮거나 중립적인 편입니다.

 

 

 

주식과 금

 

금은 전통적으로 안전 자산으로 간주되며,

 

주식 시장과 음의 상관관계를 보이는 경향이 있습니다.

 

주식 시장이 불안정할 때 투자자들은 금에 투자하여 리스크를 회피하려고 합니다.

 

이는 금 가격을 상승시키고, 반대로 주식 시장이 안정적일 때는 금의 수요가 감소하여 가격이 하락하는 경향이 있습니다.

 

 

 

자산군들 간의 상관관계는 금융 시장에서 매우 중요한 개념입니다.

 

자본주의가 발전하면서 글로벌 금융 시장의 통합과 경제적 상호 의존성이 증가하였고,

 

이는 자산군 간의 상관관계를 더욱 복잡하게 만들었습니다.

 

투자자들은 이러한 상관관계를 이해하고 분석함으로써 포트폴리오를 최적화하고 리스크를 관리할 수 있습니다.

 

현대 금융 시장에서 주식, 채권, 원자재, 금, 환율 등의 자산군 간의 상관관계는

 

다양한 요인에 의해 영향을 받으며, 지속적으로 변화하고 있습니다.

 

이러한 상관관계를 지속적으로 연구하고 분석하는 것은 성공적인 투자 전략 수립에 필수적입니다.

 

 

 

코사인 유사도(Cosine Similarity)

 


코사인 유사도(Cosine Similarity)는 두 벡터 간의 유사도를 측정하는 방법 중 하나로,

 

 주로 텍스트 분석, 정보 검색, 데이터 마이닝 등 다양한 분야에서 사용됩니다. 

 

주로 언어모델이나 검색엔진에서 많이 사용되지만

 

고차원 영역의 벡터 간 상관성을 분석하는 기본 개념을 이용해서 

 

매크로 투자에 이용해 볼 예정입니다. 

 

코사인 유사도는 두 벡터가 이루는 각도의 코사인 값을 통해 유사도를 계산합니다. 

 

벡터가 동일한 방향을 가리킬 때 코사인 유사도는 1이 되며, 

 

직각(orthogonal) 일 때는 0, 반대 방향을 가리킬 때는 -1이 됩니다. 

 

코사인 유사도는 벡터의 크기보다는 방향에 중점을 두기 때문에, 크기가 다른 벡터 간의 유사도를 비교하는 데 유용합니다.

코사인 유사도의 수학적 정의

코사인 유사도는 다음과 같이 정의됩니다:


여기서 A, B는 벡터들이고

 

두 벡터의 내적과 norm, 그리고 벡터 간의 각도를 이용해 계산될 수 있습니다. 

 

 

 

코사인유사도를 활용한 시장분석 

 

시장을 분석하는 것은 투자의 첫걸음입니다. 

 

차트를 분석하는 차트분석가이던, 거시적인 경제를 분석하는 매크로 분석가이건 

 

객관적인 근거들로 분석을 하고 그것을 통해 주관적 견해를 만들어나가는 과정이 필요합니다. 

 

오늘 여러분들께 보이는 시장분석도 객관적인 자료를 기반한 저의 주관적인 해법으로

 

여러분들이 이해해 주시면 좋을 것 같습니다. 

 

저는 글로벌 경제를 포함한 거시적인 관점에서 캔들의 물리적인 움직임과 파동을 다루는 미시적인 영역까지

 

Top-Down 방식으로 생각의 흐름을 전개하는 것을 좋아합니다. 

 

거시적 관점의 분석에선

 

앞서 이야기했듯 자산군들의 상관관계를 기반한 데이터들에 관심이 많았고

 

오늘은 코사인 분석을 활용하기 위해

 

자산군들이 10일 단위로 움직였던 패턴들을 벡터화시키고

 

최근 자산들의 움직임과 가장 유사한 움직이을 보였던 과거 패턴들을 찾고

 

유사했던 자산들의 움직임 이후 자산들이 어떻게 이어졌는지, 투자로 이어질 수 있을지 등을 확인해 보았습니다. 

 

 

 

 

Postgres for Vector DB

 

VectorDB를 잘 쓰면 유용하겠다는 생각을 기술칼럼을 보면서 느끼고 있었고

 

언젠가 활용해 봐야지 라는 생각만 가지고 있다가 

 

PostgreSQL에서 VectorDB를 지원한다는 것을 알게 되어 이용해 보게 되었습니다. 

 

 Postgres를 설치하고 로컬개발환경에서 접근할 수 있도록 해주었고

 

벡터필드를 만들어서 대표적인 자산들의 상승률에 대한 값들을 벡터로 치환하여 넣어주었습니다.

 

벡터라는 말이 어려울 수 있지만

 

단순히 숫자들이 적힌 배열입니다. 

 

저의경우는 7개 경제상황을 대표하는 나름의 ETF 대한 10일간 가격변동에 대해 데이터를 넣어주었고 

 

기간은 2008년도부터로 대략 16년 정도의 데이터를 넣어주었습니다. 

 

벡터 컬럼에는 70차원 벡터가 한 row에 들어가게 되었습니다. 

 

사진 속 테이블의 벡터들은 정규화가 되어있지만

 

처음에 데이터를 벡터화할 때 정규화를 하지 않고 넣어봤었는데 

 

pgvector에서 코사인 유사도라는 값을 조회해 보니 코사인 유사도의 범위값인 -1 ~ 1 사이 값이 나오지 않아 확인해 보니

 

pg에서는 cosine distance를 지원한다고 합니다. 

 

사실 cosine distnacer값이 1-cosine-sim이기 때문에 큰 상관은 없어서 해당 값들을 기준으로, 

 

DB에 들어가지 않은 기간의 자산별 가격변동 벡터를 입력으로, 

 

가장 유사한 가격변동벡터를 가진 기간과, 가장 유사하지 않은 가격변동벡터를 가진 기간을 출력해 보기로 했습니다. 

 

그리고, 유사한 / 유사하지 않은 기간 이후의 자산의 움직임이 실제로 어떻게 움직였는지도 자산별 수익률을 통해 알아보았습니다. 

 

 

 

 

 

가장 첫 차트가 입력으로 넣을 벡터 기간의 자산별 수익률을 나타낸 것입니다. 

 

오른쪽 바차트는 10일을 기점으로 전, 후의 자산의 상승률을 나타내고 있습니다. 

 

(지금보니 순서에맞지않고 헷갈리게 투명한바가 빨간선 이후 / 투명하지 않은 바가 빨간선 이전이네요..)

 

두 번째 차트는 cosine distance가 큰, 즉 유사도가 떨어지는 그래프입니다. 

 

벡터의 연산은 그래프상의 빨간 선 이전의 값만 연산되고 빨간선 이후의 값은 벡터 유사도와 수익의 추이를 확인하기 위해 출력했습니다. 

 

세 번째 차트는 cosine distance가 작은, 유사도가 높은 그래프입니다. 

 

여러분들이 보시기에 자산들의 움직임이 유사해 보이시나요?

 

입력 시기는 2024년 6월 12일 ~이고

 

가장 유사한 시기는 2011년 10월 29 ~ 로 보입니다.

 

해당시점은 TLT 장기채(주황선) 가격이 상승하던 시점으로 보이고 

 

원자재(빨간 선) 가격도 하락하는 추세의 시점으로 보입니다. 

 

 

 

하지만 cosine distance 만으로는 정말 유사한 가격패턴들을 분류해내지는 못했습니다. 

 

위 기간을 보면 유사하다고 도출된 기간들과 입력 기간의 수익률이 특정자산들은 유사하지만

 

특정 자산들은 가장 낮은 수익/가장 높은 수익으로 구분되고 있습니다. 

 

(유사기간 XLE수익률 1위이지만 입력기간 XLE 수익은 꼴등입니다)

 

 

제가 입력차원을 늘려서 그런 것인지, 

 

아니면 벡터와 코사인유사도의 계산 한계인지 모르겠지만

 

아무래도 한계점을 느낀 것은 맞습니다. 

 

사실 벡터들의 유사도를 구하며 문제를 해결해 낸 분야가

 

자연어 처리 분야이고, LLM의 핵심인 트랜스포머가 그 역할을 잘 수행해 냈기 때문에

 

다음에는 벡터들을 트랜스포머로 다시 학습시켜 유사한 기간들을 알려주고 

 

과거 유사했던 자산들의 움직임을 기반으로 어떻게 가격이 변동되었는지 알려주는 모델도 연구하고 공유드릴 수 있도록 하겠습니다. 

 

 

 

 

반응형