본문 바로가기
Fixed Income 101

RV_PCA_팩터 모델로서의 PCA와 마켓 적용 2

by 레오파드91 2024. 11. 5.

1. PCA와 같은 통계 모델은 투자수단에 대한 특별한 지식을 요구하지 않아 광범위 하게 사용 될 수 있음. 

 

2. PCA에서 알아야 할 것은 단지 시계열, 그 시계열은 금리일수도 있고 스프레드, 변동성 등 무엇이든 상관 없음.

 

3. 따라서 일드커브 모델에 비해 훨씬 광범위한 적용이 가능하다 이 말임. 

 

4. 예시로 원자재시장의 콩 관련 세가지 프로덕트의 주간 데이터를 보겠음. (soybean, soybean meal, soybean oil)

 

5. PCA 결과를 보면 PC1이 거의 대부분을 설명하며 2, 3번 팩터는 거의 영향이 없어보임 

 

6. 이는 soybean product들간의 가격차이가 전체적인 가격 움직임에 비해 굉장히 제한적임을 뜻함. 

 

7. 다음으로 각 프로덕트의 팩터 민감도를 보면 아래와 같음. 팩터 1에 의해 다같이 움직이고. 팩터 2에 의해 meal과 oil의 가격차이가 일부 설명됨. 

 

8. 마지막으로 시간에 따른 PCA factor evolution을 보면 아래와 같음. 

9. 공통 팩터 1은 시간이 지날수록 증가하는 팩터로 soy products의 수요로 해석 될 수 있음. 

 

10. 수요가 지속 증가하며 가격도 증가하는 트랜드를 보여주고 있는 것. 

 

11. 반면 팩터2는 뚜렷한 트랜드 없이 등락하는 모습. 뭔가가 평균회귀한다 ? 트레이딩 기회임. 

 

12. 역사적으로 PC2의 최근값은 매우 높은 영역으로 좋은 트레이딩 기회가 생길 수 있음. 

 

13. PC2가 매우 높다는것을 위에서 본 PC민감도에 대응해 생각해 보면 soybean meal이 soybean oil에 비해 매우 비싸다는 의미. 즉 높은 factor2 level은 soybean meal의 relative richness를 보여준다고 해석 하며 거래에 이용 할 수 있다. 

 

14. 지금까지의 분석은 순수하게 통계적인 방법으로, 시장의 historical driving force를 밝히고 현재의 프라이싱에 대해 판단 할 수 있었고 이는 트레이딩 의사결정에 좋은 기준점을 제공 할 수 있음. 

 

15. 예를 들어 현재 크게 이격되어있는 factor2가 과거처럼 평균수준으로 회귀 할 것인가 ? 아니면 최근의 변화가 향후에도 지속 될 soymarket의 regime shift일 가능성이 있는가 ?

 

16. 이러한 판단은 통계의 영역 밖의 문제이지만, PCA는 이런 거래 결정을 탐짛고 구성 할 수 있도록 할 뿐 아니라, 영구적인 레짐 변화가 생기기 위해서는 지난 10년간 발생한 어떤 것 보다도 더 강력한 factor 변화가 필요하다는 것을 시사함. 

 

17. 그러므로 PCA는 레짐 변호에 대한 주장을 펼치기 위해서는 매우 타당한 이유가 필요하다는 것을 보여줌. 

 

18. 그렇다면 현재의 PC2의 급등이 레짐의 변화가 아니며 지난 10년간의 움직임으로 회귀 할 것이라고 믿는 투자자는 soybean meal을 매도하고 soybean oil을 매수하고자 할 것임. 

 

19. 그럼 두가지 주장중 무엇이 더 나은가 ? 얼마나 사고 얼마나 팔아야 하는가 ? factor 2를 거래했는데 factor1에 의해 포지션이 휩쓸리지는 않을까 ?

 

20. 이제 이런 질문들에도 답할 수 있도록 PCA를 좀더 디벨롭 해볼 것임. 

 

21. 지금까지 본 예제들을 통해 PCA의 analytical strength, 시장의 숨은 매커니즘을 밝히고 RV에 얼마나 유용하게 쓰일 수 있는지에 대해 알 수 있었을 것임. 

 

22. 앞으로는 이런 인사이트들을 통해서 어떻게 트레이딩 아이디어를 찾아내고(find), 분석하고(analyze), 구성할 수 있는지(construct)에 포커스를 맞추며 공부 해 볼것임. 

 

23. PCA supports the translation of its insight into practical trading position

 

 

 

사용 코드. 

# Load and prepare the data
file_path = '/mnt/data/SOYBEAN.xlsx'
data = pd.ExcelFile(file_path)
df = data.parse(data.sheet_names[0])
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

# Perform PCA on the scaled data
data_scaled = (df - df.mean()) / df.std()
pca = PCA(n_components=3)
pca.fit(data_scaled)
eigenvectors = pca.components_

# 1. Plot the explained variance ratio
explained_variance_ratio = pca.explained_variance_ratio_
plt.figure(figsize=(8, 5))
bars = plt.bar(range(1, 4), explained_variance_ratio * 100, tick_label=[f'PC{i}' for i in range(1, 4)])
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, yval, f'{yval:.2f}%', ha='center', va='bottom')
plt.title('Explained Variance Ratio by Principal Component')
plt.xlabel('Principal Component')
plt.ylabel('Explained Variance (%)')
plt.show()

# 2. Grouped bar graphs to show sensitivities
x = np.arange(len(df.columns))
width = 0.25
plt.figure(figsize=(10, 6))
plt.bar(x - width, eigenvectors[0], width, label='PC1')
plt.bar(x, eigenvectors[1], width, label='PC2')
plt.bar(x + width, eigenvectors[2], width, label='PC3')
plt.xlabel('Variables')
plt.ylabel('Sensitivity')
plt.title('Sensitivities of Variables to PC1, PC2, and PC3')
plt.xticks(x, df.columns)
plt.legend()
plt.grid(visible=True, axis='y')
plt.show()

# 3. Plot the historical evolution of PC1 and PC2 with dual axes
fig, ax1 = plt.subplots(figsize=(14, 6))

# Plot PC1 with the left y-axis
ax1.plot(df.index, pc1_values, label='PC1', color='tab:blue', alpha=0.8)
ax1.set_xlabel('Date')
ax1.set_ylabel('PC1 Value', color='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:blue')

# Create a second y-axis for PC2
ax2 = ax1.twinx()
ax2.plot(df.index, pc2_values, label='PC2', color='tab:orange', alpha=0.8)
ax2.set_ylabel('PC2 Value', color='tab:orange')
ax2.tick_params(axis='y', labelcolor='tab:orange')

# Add a title and grid
fig.suptitle('Historical Evolution of PC1 and PC2 with Dual Axes')
ax1.grid(visible=True, axis='x')

# Show the plot
plt.show()




'Fixed Income 101' 카테고리의 다른 글

RV_PCA_팩터 모델로서의 PCA와 마켓 적용 1  (2) 2024.11.05
RV_PCA_팩터모델의 기본 구조와 정의  (1) 2024.10.17
RV_PCA_인트로  (4) 2024.10.16
1월 30년 국고채 입찰 프리뷰  (0) 2024.01.01
국고채권 바이백  (0) 2023.08.24

댓글