티스토리 뷰

출처 : BST261AGV09

 

 

# 주가 추정 고도화를 위한 벡터 분석(Vector Analysis) 방법론 보고서

본 보고서는 시계열 주가 데이터를 고차원의 벡터(Vector)로 변환하여 패턴 유사성을 분석하고, 이를 통해 미래 주가를 추정하는 기법에 대한 전문적인 견해와 방법론을 제시합니다.

---

## 1. 벡터 분석(Vector Analysis)의 개념

### 1-1. 정의
주식 시장에서의 벡터 분석이란, 단순히 "오늘 올랐나?"(스칼라 값)를 보는 것이 아니라, **"지난 20일간 어떤 모양(Shape)과 속도(Velocity)로 움직였는가?"**를 하나의 묶음 숫자(벡터)로 표현하여 해석하는 기법입니다.
수학적으로는 $N$차원 공간상의 한 점(Point) 또는 원점에서의 화살표로 표현되며, 두 주가 패턴 간의 **거리(Distance)**나 **각도(Angle, Cosine Similarity)**를 측정하여 유사성을 판단합니다.

### 1-2. 핵심 원리 (패턴 매칭)
*   **"역사는 반복된다"**: 현재의 주가 흐름 벡터($V_{current}$)와 가장 닮은 과거의 벡터($V_{past}$)를 찾으면, 그 직후에 일어난 일을 통해 미래를 예측할 수 있다는 가정입니다.
*   **유사도 측정**:
    *   **유클리드 거리 (Euclidean Distance)**: 두 차트가 얼마나 가까운가? (값이 작을수록 유사)
    *   **코사인 유사도 (Cosine Similarity)**: 두 차트의 등락 '방향'이 얼마나 같은가? (크기는 무시, 패턴만 중요시)

---

## 2. 주가 추정을 위한 벡터 구성 (Vector Components)

벡터를 구성하는 성분(Element)을 어떻게 채우느냐가 분석의 성패를 좌우합니다. 단순 가격만 넣는 것보다 다차원 정보를 혼합하는 것이 유리합니다.

### 2-1. 추천 벡터 성분 (Input Data)

하나의 시점 $t$에 대해 다음과 같은 요소들을 결합하여 벡터를 생성합니다.

1.  **형상 성분 (Shape Component) - 원본 데이터 기반**:
    *   **정규화된 가격 (Normalized Price)**: 최근 $N$일간의 종가를 0~1 사이로 스케일링하거나, 시작점을 0으로 맞춘 누적 수익률 곡선.
    *   *예시*: `[-0.05, -0.02, +0.01, +0.03, +0.06]` (점진적 우상향 패턴)

2.  **에너지 성분 (Energy Component) - 2차 데이터/FFT**:
    *   **FFT 스펙트럼**: 주가 파동을 주파수로 변환했을 때, 저주파(추세)와 고주파(노이즈)의 에너지 강도.
    *   *예시*: `[Energy_Low, Energy_High, Dom_Freq]`

3.  **수급 성분 (Volume Component) - 1차 데이터**:
    *   **거래량 강도**: 가격 변화에 수반된 거래량의 상대적 크기 (Z-Score).
    *   *예시*: `[Vol_t-4, Vol_t-3, ..., Vol_t]`

### 2-2. 적정한 벡터 크기(Dimension) 결정

*   **시간 차원 (Time Window)**: 
    *   **단기 예측용**: 최근 **10~20일** (약 2주~1달) 데이터가 적절합니다. 너무 길면 과거 정보가 희석되고, 너무 짧으면 노이즈에 취약합니다.
*   **성분 차원 (Features)**:
    *   지나치게 많은 성분을 넣으면 '차원의 저주(Curse of Dimensionality)'에 빠져 계산이 부정확해집니다.
    *   **권장 크기**: 시간축(20일) + 추가정보(5개) = 약 **25~30차원** 벡터가 적당합니다.

---

## 3. 벡터 분석 방법 및 프로세스

### 3-1. 데이터 전처리 (Preprocessing) - 필수
주가는 1만원짜리 주식과 100만원짜리 주식을 직접 비교할 수 없습니다. 따라서 모든 벡터는 **정규화(Normalization)** 과정을 거쳐야 합니다.
*   **Z-Score 정규화**: $(\text{데이터} - \text{평균}) / \text{표준편차}$
*   **Min-Max 정규화**: $(\text{데이터} - \text{최소값}) / (\text{최대값} - \text{최소값})$

### 3-2. 유사 패턴 검색 (Nearest Neighbor Search)
1.  **현재 벡터 생성**: 오늘 날짜 기준 최근 20일간의 데이터를 벡터 $V_{now}$로 만듭니다.
2.  **과거 탐색**: 지난 10년치 전체 데이터베이스에서 $V_{now}$와 코사인 유사도가 0.9 이상인 시점들을 모두 찾습니다. (K-Nearest Neighbors 알고리즘 활용)
3.  **미래 투영**: 찾아낸 과거 시점들의 **"그 다음 3일간의 수익률"**을 평균 내어 예측값으로 사용합니다.

---

## 4. 파이썬 코드 구현 아이디어

```python
from sklearn.neighbors import NearestNeighbors
from sklearn.preprocessing import StandardScaler

# 1. 벡터 데이터 준비 (예시: 1000일간의 가격 흐름을 20일씩 윈도우로 자름)
# X_history shape: (980, 20) -> 980개의 과거 패턴, 각 패턴은 20일치 가격
# vector_now shape: (1, 20) -> 현재의 20일치 패턴

# 2. 정규화 (중요: 각 윈도우별로 독립적으로 스케일링해야 함)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_history.T).T # 행 단위(시간축)로 정규화
vec_now_scaled = scaler.transform(vector_now.T).T

# 3. 유사 패턴 검색 (KNN)
# 거리 기준(metric)을 'cosine'이나 'euclidean'으로 설정
knn = NearestNeighbors(n_neighbors=5, metric='cosine')
knn.fit(X_scaled) 

distances, indices = knn.kneighbors(vec_now_scaled)

# 4. 결과 해석
print("현재와 가장 유사했던 과거 시점 인덱스:", indices)
print("유사도 거리:", distances)
# 이 indices에 해당하는 날짜의 '내일 수익률'을 조회하여 평균내면 예측값이 됨.
```

# 4. 파이썬 코드 구현 아이디어

```python
from sklearn.neighbors import NearestNeighbors
from sklearn.preprocessing import StandardScaler

# 1. 벡터 데이터 준비 (예시: 1000일간의 가격 흐름을 20일씩 윈도우로 자름)
# X_history shape: (980, 20) -> 980개의 과거 패턴, 각 패턴은 20일치 가격
# vector_now shape: (1, 20) -> 현재의 20일치 패턴

# 2. 정규화 (중요: 각 윈도우별로 독립적으로 스케일링해야 함)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_history.T).T # 행 단위(시간축)로 정규화
vec_now_scaled = scaler.transform(vector_now.T).T

# 3. 유사 패턴 검색 (KNN)
# 거리 기준(metric)을 'cosine'이나 'euclidean'으로 설정
knn = NearestNeighbors(n_neighbors=5, metric='cosine')
knn.fit(X_scaled) 

distances, indices = knn.kneighbors(vec_now_scaled)

# 4. 결과 해석
print("현재와 가장 유사했던 과거 시점 인덱스:", indices)
print("유사도 거리:", distances)
# 이 indices에 해당하는 날짜의 '내일 수익률'을 조회하여 평균내면 예측값이 됨.
```

## 5. 종합 의견 (기존 내용)

벡터 분석은 기존의 보조지표(RSI, MACD)가 놓치는 **'형태적 유사성(Morphological Similarity)'**을 포착할 수 있는 강력한 도구입니다. 
단순 가격 비교보다 **[가격패턴 + 거래량패턴 + 주파수특성]**이 결합된 하이브리드(Hybrid) 벡터가 훨씬 강력할 것입니다.

---

## 6. 추천 벡터 성분 구성안 (Recommended Configurations)

단순히 많은 데이터를 넣는 것보다, 서로 **상관성이 낮은(독립적인) 정보**를 섞어야 벡터의 분별력이 높아집니다. 다음의 3가지 조합을 추천합니다.

### 6-1. 옵션 A: '에너지-추세' 혼합형 (추천)
가장 균형 잡힌 구성으로, 주가의 방향(추세)과 힘(에너지)을 동시에 봅니다.
*   **원본 데이터 (10 차원)**: 최근 10일간의 정규화된 종가 흐름. (모양 비교)
*   **1차 데이터 (5 차원)**: 최근 5일간의 **거래량 강도** (평균 거래량 대비 비율). (수급 확인)
*   **2차 데이터 (5 차원)**: 
    *   **FFT 에너지 (1)**: 현재 파동의 세기.
    *   **FFT 지배 주기 (1)**: 파동의 속도.
    *   **이격도 (3)**: 20/60/120일선 대비 현재가 위치.
*   **총 차원**: 20차원

### 6-2. 옵션 B: '고속 스캐닝' 특화형 (단기 매매용)
장중 실시간(분봉) 대응을 위한 가벼운 벡터입니다.
*   **원본 (15 차원)**: 최근 15분의 1분봉 종가 흐름.
*   **1차 (3 차원)**: 직전 3분간의 체결강도.
*   **2차 (2 차원)**: 순간 가속도(2차 미분값), 순간 변동성.
*   **총 차원**: 20차원

### 6-3. 옵션 C: '매크로 연동' 특화형 (스윙/중기용)
종목 자체의 흐름뿐만 아니라 외부 환경과의 동조화를 봅니다.
*   **원본 (20 차원)**: 최근 20일 종가.
*   **상관 지표 (5 차원)**: (Correlation Map에서 추출된) 해당 종목과 가장 연관 깊은 핵심 지수(나스닥, 유가 등)의 동기간 등락률 5일치 평균.
*   **총 차원**: 25차원

---

## 7. 최적 성분 탐색 및 분석 방법론 (Methodology)

어떤 성분 조합이 "황금 조합"인지는 종목마다, 시기마다 다릅니다. 이를 체계적으로 찾아내기 위한 로직입니다.

### 7-1. 성분 탐색 방법 (Feature Selection Strategy)

**1) 전진 선택법 (Forward Selection)**
*   가장 기본인 '종가 데이터'만으로 시작합니다.
*   여기에 '거래량', 'FFT', '이동평균' 등을 하나씩 추가해 보며 예측 정확도(적중률)가 올라가는지 테스트합니다.
*   점수가 떨어지거나 멈추면 해당 성분은 버립니다.

**2) 유전자 알고리즘 (Genetic Algorithm) - 고급**
*   수십 개의 후보 성분(1차, 2차, FFT, 매크로 등)을 유전자처럼 무작위로 조합하여 수백 개의 벡터 모델을 만듭니다.
*   가장 성능 좋은 상위 10% 모델끼리 '교배(결합)'시켜 다음 세대를 만듭니다.
*   이를 반복하면 인간이 생각지 못한 기상천외한(하지만 적중률 높은) 성분 조합이 탄생합니니다.

### 7-2. 결과 분석 및 검증 방법 (Analysis & Validation)

**1) 군집 분리도 시각화 (t-SNE / PCA)**
*   만들어진 벡터가 좋은지 나쁜지 눈으로 확인하는 방법입니다.
*   고차원 벡터를 2차원 평면에 점으로 뿌려봅니다.
*   **좋은 벡터**: '급등한 날들의 점'끼리 똘똘 뭉쳐 있고, '폭락한 날들의 점'과 멀리 떨어져 있습니다. (명확한 구분)
*   **나쁜 벡터**: 급등패턴과 폭락패턴이 뒤섞여 구분되지 않습니다.

**2) 백테스팅 수익률 곡선 (Equity Curve Comparison)**
*   A조합, B조합, C조합으로 각각 과거 5년을 시뮬레이션합니다.
*   단순 적중률(Hit Ratio)보다 **손익비(Profit Factor)**와 **MDD(최대 낙폭)**가 더 우수한 조합을 최종 선택합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
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
글 보관함