파이썬으로 팩터투자 (퀀트 투자)
짐 사이먼 연평균 수익률 66%, 클리프 애스니스, 라리 스웨드로의 성공 비밀은 팩터투자이다. 팩터투자는 무엇이고 파이썬으로 팩터투자를 어떻게 구현하는 지 비개발자도 활용할 수 있도록 정리한다.
팩터투자 이론
팩터 투자는 특정 팩터(요인)에 초점을 맞추는 투자 전략입니다.
주요 특징:
-
팩터 식별: 주식 수익률에 영향을 미치는 팩터를 찾는다.(시장,규모,가치)
-
포트폴리오 구성: 식별된 팩터가 높은 주식들로 포트폴리오를 구성한다.
-
장기 투자: 팩터 투자는 장기 투자 전략. 주기적 리밸런싱 필요
-
분산 투자: 분산 투자하여 리스크를 줄인다.
파이썬으로 팩터투자 소스코드
import numpy as np
import pandas as pd
import pandas_datareader.data as web
import yfinance as yf
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 시작일과 종료일 설정
start_date = '2015-01-01'
end_date = '2024-04-13'
# Fama-French 3 요인 데이터 가져오기 (일별 데이터)
ff_data = web.DataReader('F-F_Research_Data_Factors_daily', 'famafrench', start_date, end_date)[0]
ff_data = ff_data[['Mkt-RF', 'SMB', 'HML']] / 100
ff_data.index = pd.to_datetime(ff_data.index, format='%Y%m%d')
# 주가 데이터 가져오기 (예시로 AAPL(애플) 사용)
stock_data = yf.download('AAPL', start=start_date, end=end_date)
stock_returns = stock_data['Adj Close'].pct_change().dropna()
stock_returns.index.name = 'Date'
# 데이터 병합
merged_data = pd.merge(stock_returns, ff_data, left_index=True, right_index=True)
# 회귀분석 수행
X = merged_data[['Mkt-RF', 'SMB', 'HML']]
y = merged_data['Adj Close']
model = LinearRegression().fit(X, y)
# 팩터 노출도와 알파 계수 출력
exposures = model.coef_
alpha = model.intercept_
print(f'Factor Exposures: {exposures}')
print(f'Alpha: {alpha}')
# 팩터 노출도 정규화 (절대값의 합이 1이 되도록)
normalized_exposures = exposures / np.abs(exposures).sum()
print(f'Normalized Factor Exposures: {normalized_exposures}')
# 팩터 노출도 막대 그래프
factors = ['Mkt-RF', 'SMB', 'HML']
plt.bar(factors, exposures, color=['b', 'r', 'r'])
plt.xlabel('Factors')
plt.ylabel('Exposure')
plt.title('AAPL Stock Exposure to Fama-French Factors')
plt.show()
colab에서 위코드를 붙여 넣고 실행하면 아래 결과를 확인할 수 있다.
파이썬으로 팩터투자 결과 해석
주어진 결과를 해석하면 다음과 같습니다:
1. Factor Exposures (팩터 노출도):
-
Mkt-RF (시장 요인): 1.18589989
-
SMB (규모 요인): -0.32607825
-
HML (가치 요인): -0.40809161
AAPL(아이폰 만든 애플) 주식의 수익률은 시장 요인에 강한 양(+)의 노출도를 가지고 있습니다. 이것은 주식 시장 전체의 수익률이 1% 증가한다면, AAPL 주식의 수익률은 1.18589989% 증가함을 의미합니다. 즉, 주식 시장 상황이 좋을 때 애플을 사두면 더 큰 수익을 얻는 다는 것입니다.
반면에, 규모 요인과 가치 요인에는 음(-)의 노출도를 가지고 있습니다. 이것은 주식 시장 전체에서 소형주 수익률이 대형주 수익률보다 1% 높을 때, AAPL 주식의 수익률은 0.32607825% 감소한다는 의미입니다.
주식 시장 전체에서 소형주 수익률이 대형주 수익률보다 1% 높을 때는 아래의 경우입니다.
-
경기 회복기: 경제가 침체에서 벗어나 회복될 때, 소형주는 대형주보다 더 빠른 성장을 보이는 경향이 있음. 이는 소형주가 경제 변화에 더 민감하게 반응하기 때문.
-
리스크 선호 증가: 투자자들이 더 높은 리스크를 감수하고자 할 때, 소형주에 대한 투자가 증가. 소형주는 일반적으로 대형주보다 변동성이 크지만, 잠재적인 수익률도 더 높을 수 있기 때문.
-
기술 혁신: 새로운 기술이 등장하고 빠르게 성장할 때, 관련 분야의 소형주들이 큰 혜택을 볼 수 있음. 이들은 종종 혁신을 주도하고 빠른 성장을 경험하기 때문.
-
저금리 환경: 금리가 낮을 때, 투자자들은 수익률을 높이기 위해 더 많은 위험을 감수하려는 경향이 있음. 이는 소형주에 대한 투자 증가로 이어질 수 있음.
-
특정 산업의 호황: 특정 산업이나 섹터가 급성장할 때, 해당 분야의 소형주들이 대형주보다 더 큰 혜택을 볼 수 있음.
그래고, 주식 시장 전체에서 가치주 수익률이 성장주 수익률보다 1% 높을 때, AAPL 주식의 수익률은 0.40809161% 감소함을 의미합니다.
가치주 수익률이 성장주 수익률보다 1% 높을 때는 아래의 경우입니다.
-
경제 불확실성 증가: 경제에 대한 불확실성이 커지면, 투자자들은 안정적이고 저평가된 가치주를 선호하는 경향. 가치주는 일반적으로 재무건전성이 높고, 안정적인 현금흐름을 가지고 있어 불확실한 시기에 더 나은 성과.
-
금리 상승: 금리가 상승하면, 미래 현금흐름의 현재 가치가 하락하게 됨. 이는 미래 성장에 대한 기대가 주가에 반영되어 있는 성장주에게 부정적인 영향. 반면, 가치주는 현재의 수익성에 기반하므로 상대적으로 영향이 작다.
-
시장 조정: 시장이 과도하게 상승한 후에는 조정 국면에 접어들 수 있음. 이 때, 고평가된 성장주의 가격이 하락. 상대적으로 저평가된 가치주의 매력도가 부각될 수 있음.
-
경기 후퇴기: 경제가 둔화되거나 침체에 진입할 때, 성장주의 수익성은 타격을 받을 수 있음. 반면, 가치주는 안정적인 사업모델과 현금흐름으로 인해 상대적으로 선방할 가능성이 높음.
-
시장 심리 변화: 투자자들의 심리가 변화하여 고위험-고수익 전략에서 저위험-저수익 전략으로 선회할 때, 가치주가 선호됨.
-
반대로, 경제가 확장하고 투자자들이 위험을 감수할 준비가 되어 있을 때는 성장주가 더 나은 성과.
2. Alpha (알파):
-
Alpha 값은 0.0004227087625081361로, 이는 Fama-French 3 요인으로 설명되지 않는 AAPL 주식의 초과 수익률입니다.
-
이 값은 양(+)의 값으로, AAPL 주식이 일별 약 0.042%의 초과 수익률을 가지고 있음을 의미합니다.
3. Normalized Factor Exposures (정규화된 팩터 노출도):
-
Mkt-RF: 0.61763375
-
SMB: -0.16982625
-
HML: -0.21253999
정규화된 팩터 노출도를 보면, AAPL 주식은 시장 요인에 가장 큰 비중(61.76%)을 두고 있으며, 규모 요인과 가치 요인에는 각각 -16.98%, -21.25%의 음(-)의 비중을 두고 있습니다. 이는 AAPL 주식이 시장 요인에 강하게 노출되어 있으며, 상대적으로 대형주와 성장주의 특성을 가지고 있음을 시사합니다.
삼성전자도 파이썬으로 팩터투자
아래는 삼성전자에대한 팩터분석 입니다.
import numpy as np
import pandas as pd
import pandas_datareader.data as web
import yfinance as yf
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 시작일과 종료일 설정
start_date = '2015-01-01'
end_date = '2024-04-13'
# Fama-French 3 요인 데이터 가져오기 (일별 데이터)
ff_data = web.DataReader('F-F_Research_Data_Factors_daily', 'famafrench', start_date, end_date)[0]
ff_data = ff_data[['Mkt-RF', 'SMB', 'HML']] / 100
ff_data.index = pd.to_datetime(ff_data.index, format='%Y%m%d')
# 주가 데이터 가져오기 (삼성전자 사용)
stock_data = yf.download('005930.KS', start=start_date, end=end_date)
stock_returns = stock_data['Adj Close'].pct_change().dropna()
stock_returns.index.name = 'Date'
# 데이터 병합
merged_data = pd.merge(stock_returns, ff_data, left_index=True, right_index=True)
# 회귀분석 수행
X = merged_data[['Mkt-RF', 'SMB', 'HML']]
y = merged_data['Adj Close']
model = LinearRegression().fit(X, y)
# 팩터 노출도와 알파 계수 출력
exposures = model.coef_
alpha = model.intercept_
print(f'Factor Exposures: {exposures}')
print(f'Alpha: {alpha}')
# 팩터 노출도 정규화 (절대값의 합이 1이 되도록)
normalized_exposures = exposures / np.abs(exposures).sum()
print(f'Normalized Factor Exposures: {normalized_exposures}')
# 팩터 노출도 막대 그래프
factors = ['Mkt-RF', 'SMB', 'HML']
plt.bar(factors, exposures, color=['b', 'r', 'g'])
plt.xlabel('Factors')
plt.ylabel('Exposure')
plt.title('Samsung Stock Exposure to Fama-French Factors')
plt.show()
colab에 복붙하면 아래의 결과가 확인됩니다.
Factor Exposures: [ 0.17926278 -0.08372251 0.12778136] Alpha: 0.0005507001937777538 Normalized Factor Exposures: [ 0.45874636 -0.21425194 0.3270017 ]
-
Market-Risk Factor (Mkt-RF):
0.1793
(약 17.93%)- 인덱스 지수가 오르면 삼성전자도 오른다는 의미입니다.
-
Size Factor (SMB, Small Minus Big):
-0.0837
(약 -8.37%)- 소형주가 잘 나갈 때는 삼성전자는 사면 안된다는 의미이겠습니다.
-
Value Factor (HML, High Minus Low):
0.1278
(약 12.78%)- 가치주가 잘 나갈 때는 삼성전자를 사라는 의미입니다.
파이썬으로 팩터투자 결론
정리하면, 2015년 1월 1일부터 2024년 4월 13일까지의 기간 동안 애플 주식은 아래와 같이 투자하면 되나, 주의사항도 확인하시라.
-
인덱스 지수가 높으면(주식 시장 전체가 상승세이면) 투자해라.
-
경기 안정기에, 금리가 낮지 않을 때 투자해라.(그러나 예측이 어려우니 주의)
-
현재의 배당가치보다는, 미래 성장할 것을 기대하고 투자해라.
주의사항
투자 결정을 내리기 전에 몇 가지 추가 사항을 고려해야 합니다.
-
시장 노출도: AAPL 주식은 시장 요인(Mkt-RF)에 대해 양(+)의 노출도를 가지고 있으므로, 주식 시장 전체가 상승할 때 투자하는 것이 좋음. 그러나 이는 시장이 하락할 때 AAPL 주식도 영향을 받을 수 있음.
-
경기 사이클과 금리: AAPL 주식은 성장주의 특성을 가지고 있으므로, 경기 확장기에 투자, 금리가 낮을 때 투자. 그러나 경기와 금리 환경은 예측이 어려우니 기준으로 삼지마라.
-
성장 잠재력: AAPL은 지속적인 혁신과 새로운 제품 및 서비스 개발을 통해 미래 성장 가능성을 보여주고 있다. 따라서 현재의 가치뿐만 아니라 미래 성장 잠재력을 고려하는 것이 중요.
하지만 투자 결정은 개인의 투자 목표, 위험 감수성, 투자 기간 등에 따라 달라질 수 있습니다. 또한, Fama-French 3 요인 분석은 과거 데이터에 기반한 것으로, 미래 성과를 보장하지는 않습니다.
따라서 투자 결정을 내리기 전에 기업의 재무제표, 경쟁 환경, 경영진의 능력, 시장 트렌드 등 다양한 요소를 종합적으로 고려하고, 투자 포트폴리오를 적절히 분산하는 것이 필요합니다. 필요한 경우 전문가의 조언을 구하는 것도 도움이 될 수 있습니다.
팩터투자를 위한 분산투자전략도 정리 예정입니다.
파이썬으로 팩터투자 (퀀트 투자)
오늘자 골든크로스/데드크로스 종목 추출 파이썬 코드
퀀트를 위한 파이썬FinanceDataReader
퀀트를 이용한 파이썬 이동 평균선
차트 기반 퀀트 투자
퀀트의 전설들과 실패한 유명인