티스토리 뷰
주가 추정 고도화를 위한 상관관계 맵(Correlation Map) 구축 보고서
bizmaker 2026. 1. 31. 05:30출처 : BST261AG, Ver.0.9
# 주가 추정 고도화를 위한 상관계수 맵(Correlation Map) 구축 보고서
본 보고서는 주가 예측의 정확도를 높이기 위해 개별 종목과 거시경제 지표 간의 연관성을 분석하고, 이를 체계적인 데이터베이스(Map)로 구축하는 방안에 대해 기술합니다.
---
## 1. 상관계수(Correlation Coefficient)의 개요
### 1-1. 개념 및 원리
상관계수는 두 변수 간의 선형적 관계의 강도와 방향을 나타내는 통계적 지표입니다.
가장 널리 사용되는 **피어슨 상관계수(Pearson Correlation Coefficient, $r$)**는 -1에서 +1 사이의 값을 가집니다.
* **+1**: 완벽한 양의 상관관계 (하나가 오르면 다른 하나도 똑같은 비율로 오름)
* **-1**: 완벽한 음의 상관관계 (하나가 오르면 다른 하나는 반대로 내림)
* **0**: 상관관계 없음 (서로 무관하게 움직임)
수식적으로는 두 변수의 공분산을 각 변수의 표준편차의 곱으로 나눈 값으로 정의됩니다.
$$ r = \frac{\sum((x - \bar{x})(y - \bar{y}))}{\sqrt{\sum(x - \bar{x})^2}\sqrt{\sum(y - \bar{y})^2}} $$
### 1-2. 산출 방법
현대 데이터 분석에서는 시계열 데이터(날짜별 주가 흐름) 두 개를 준비한 후, 일별 등락률(Return)로 변환하여 계산합니다. 단순 가격(Price)으로 계산하면 장기 우상향하는 추세(Trend) 때문에 가짜 상관관계(Spurious Correlation)가 발생할 수 있어, 반드시 **로그 수익률** 또는 **변화율(Change %)**을 사용해야 신뢰성이 보장됩니다.
---
## 2. 상관계수 맵(Correlation Map)의 이해
### 2-1. 개념 및 원리
상관계수 맵이란 수천 개의 개별 종목(Target)과 수십~수백 개의 거시지표(Factor) 간의 **1:N 상관계수를 모두 계산하여 저장해 둔 거대한 매핑 테이블**입니다.
단순히 "주식이 오를까?"를 묻는 것이 아니라, **"이 종목은 지난 3년간 유가와 0.8의 관계였고, 금리와는 -0.6의 관계였다"**는 고유의 성격(DNA)을 규명하는 지도입니다.
### 2-2. 발전 역사 (History)
* **통계적 기원**: 19세기 프랜시스 골턴과 칼 피어슨에 의해 개념이 정립되었습니다.
* **금융 적용 (포트폴리오 이론)**: 1950년대 해리 마코위츠가 '모던 포트폴리오 이론(MPT)'을 발표하며, 자산 간의 상관계수가 분산 투자와 리스크 관리에 핵심임을 증명했습니다.
* **다요인 모델 (Multi-Factor Model)**: 이후 유진 파마와 프렌치 등이 주식 수익률이 단순히 시장 수익률(베타) 뿐만 아니라, 특정 요인(소형주, 가치주 등)과 높은 상관성을 가짐을 밝혀내며 퀀트(Quant) 투자의 핵심 도구로 자리 잡았습니다.
### 2-3. 구축 방법
1. **유니버스 구성**: 분석 대상 종목 전체 (예: KOSPI/KOSDAQ 2500개).
2. **팩터 풀(Factor Pool)**: 비교 대상이 될 지표 수집 (S&P500, 나스닥, 필라델피아반도체, WTI유가, 달러인덱스, 국채금리 등).
3. **기간 설정**: 최근 6개월(단기 민감도)부터 3년(장기 성향)까지 기간별로 롤링(Rolling) 계산.
4. **매핑 저장**: 종목코드 | 지표명 | 기간 | 상관계수 | 유의성(p-value) 형태로 DB화.
---
## 3. 주가 추정을 위한 활용 방안
### 3-1. 활용 이유 (Why)
* **노이즈 제거 (Feature Selection)**:
* 삼성전자를 예측할 때 '옥수수 선물 가격'은 노이즈일 가능성이 높습니다. 반면 '필라델피아 반도체 지수'는 강력한 신호입니다.
* 상관계수 맵이 있으면, AI 모델에게 **"삼성전자는 반도체 지수만 보고 학습해"**라고 알려줄 수 있어 학습 효율과 정확도가 비약적으로 상승합니다.
* **동적 가중치 조정**:
* 과거엔 유가에 민감하던 항공주가 최근엔 환율에 더 민감해졌다면, 맵 갱신을 통해 이를 감지하고 예측 모델의 가중치를 바꿀 수 있습니다.
### 3-2. 활용 방법 (How)
1. **입력 단계**: AI가 특정 종목을 분석하기 전, Correlation Map을 조회합니다.
2. **Top-K 선정**: 해당 종목과 상관계수 절대값이 가장 큰 상위 3~5개 지표(Key Drivers)만 선별합니다.
3. **모델 주입**: 선별된 지표의 어제/오늘 데이터를 예측 모델의 보조 변수(Feature)로 투입합니다.
---
## 4. 데이터 구조 및 형식
### 4-1. 입력 데이터 (Input)
* **종목 데이터**: 일별 등락률 (예: 삼성전자 -1.2%, SK하이닉스 +0.5% ...)
* **거시 지표**: 일별 변화율 (예: S&P500 +0.8%, WTI유가 -0.3% ...)
### 4-2. 결과 데이터 형식 (Output Example)
| 종목코드 | 종목명 | 연동지표(Factor) | 상관계수(r) | 비고 |
|:---:|:---:|:---|:---:|:---|
| 005930 | 삼성전자 | US_Semi_Index (필라델피아반도체) | 0.85 | 매우 높음 |
| 005930 | 삼성전자 | KRW_USD (환율) | -0.62 | 역의 상관 |
| 005380 | 현대차 | US_Auto_ETF (미국 자동차) | 0.72 | 높음 |
| 005380 | 현대차 | Interest_Rate (미국채 10년) | -0.45 | 중간 |
---
## 5. 파이썬 코드 구현 사례
다음은 `pandas`를 활용하여 특정 종목들과 글로벌 지수 간의 상관계수를 계산하고, 가장 연관성 높은 지표를 추출하는 예시입니다.
```python
import pandas as pd
import numpy as np
def build_correlation_map(stock_returns, macro_returns):
"""
stock_returns: DataFrame (Index=Date, Columns=Tickers, Value=Daily Change %)
macro_returns: DataFrame (Index=Date, Columns=Indices, Value=Daily Change %)
"""
# 1. 상관계수 행렬 계산
# 각 주식(Column)과 각 지수(Column) 간의 모든 조합 계산
# 결과: (종목 수) x (지수 수) 크기의 행렬
correlation_matrix = pd.DataFrame(index=stock_returns.columns, columns=macro_returns.columns)
print("Computing correlations...")
for ticker in stock_returns.columns:
# 해당 종목의 수익률 시리즈
stock_series = stock_returns[ticker]
# 모든 매크로 지표와의 상관계수를 한 번에 계산 (corrwith 활용 가능하지만 여기선 명시적 반복)
corrs = macro_returns.corrwith(stock_series) # Series vs DataFrame Correlation
correlation_matrix.loc[ticker] = corrs
return correlation_matrix
def get_top_factors(correlation_matrix, top_n=3):
"""
상관관계가 높은 상위 N개 팩터를 추출하여 맵(Dictionary) 형태로 반환
"""
correlation_map = {}
for ticker, row in correlation_matrix.iterrows():
# 절대값 기준으로 정렬 (강한 음의 상관관계도 중요하므로)
sorted_factors = row.abs().sort_values(ascending=False)
# 상위 N개 팩터 이름과 실제 계수값 저장
top_factors = []
for factor_name in sorted_factors.head(top_n).index:
r_value = row[factor_name]
top_factors.append((factor_name, r_value))
correlation_map[ticker] = top_factors
return correlation_map
# --- 사용 예시 ---
if __name__ == "__main__":
# 1. 가짜 데이터 생성
dates = pd.date_range('2023-01-01', periods=100)
# 주식 등락률 (랜덤)
df_stocks = pd.DataFrame(np.random.randn(100, 3), index=dates, columns=['Samsung', 'Hyundai', 'Naver'])
# 지수 등락률 (랜덤)
df_macro = pd.DataFrame(np.random.randn(100, 4), index=dates, columns=['S&P500', 'Nasdaq', 'Oil', 'BondYield'])
# 2. 맵 구축
corr_matrix = build_correlation_map(df_stocks, df_macro)
final_map = get_top_factors(corr_matrix, top_n=2)
# 3. 결과 출력
for stock, factors in final_map.items():
print(f"[{stock}] Key Drivers:")
for name, r in factors:
print(f" - {name}: {r:.4f}")
```
### 5-1. 코드 설명
1. **`stock_returns` & `macro_returns`**: 반드시 전일 대비 변화율(Change Pct) 데이터여야 합니다.
2. **`corrwith` 메서드**: 특정 종목 하나와 전체 지수 그룹 간의 상관계수를 고속으로 계산합니다.
3. **`abs().sort_values`**: +0.1(약한 양의 상관)보다 -0.8(강한 음의 상관)이 훨씬 중요한 정보이므로, 절대값 기준으로 정렬하여 가장 강력한 영향요인을 찾아냅니다.
'SWDesk > ArtificialIntelligence' 카테고리의 다른 글
| 주가 예측 및 추천 알고리즘 상세 설명서 (0) | 2026.02.01 |
|---|---|
| 주가 추정 알고리즘 실전 적용 및 고도화를 위한 작업 매뉴얼 (0) | 2026.01.31 |
| 주가 추정 고도화를 위한 벡터 분석(Vector Analysis) 분석 방법론 (1) | 2026.01.30 |
| [Python] Head and Hands Gesture Detector, Ver.0.2 (0) | 2025.10.23 |
| [Python] Head and Hands Gesture Detector (0) | 2025.10.20 |
- Total
- Today
- Yesterday
- 치매
- 혁신과허들
- arduino
- 배프
- BSC
- 혁신
- Innovation&Hurdles
- 허들
- 심심풀이
- ServantClock
- 오블완
- BiliChild
- 절연형
- 치매방지
- DYOV
- Innovations
- 빌리칠드
- 둎
- 아두이노
- Video
- bilient
- 티스토리챌린지
- 전압
- 심심풀이치매방지기
- image
- 전류
- Decorator
- Hurdles
- Innovations&Hurdles
- 빌리언트
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |

