※ 해당 게시글은 투자목적이 아니라 학습 목적으로 분석한 내용이므로 투자에 이용하지 않으시길 바랍니다.
1. 진행 배경 및 목적
주식은 FOMC 금리 결정이나 국내외 경제상황에 따른 시장의 반응을 나타내는 대표 지표로 볼 수 있습니다.
주가는 사람의 탐욕과 공포, 경제상황, 정치적 영향 등, 수많은 변수들에 의해 움직이고 있어 경제학자조차 예측하기란 어려운 일이겠죠. 대신 "투자하기 좋은 주식"을 판단할 수 있는 여러 기준들을 투자자들은 가지고 있을 것입니다.
주식에 대해 많이 알고있는 것은 아니지만, 분석 과정에서 얻은 나름의 기준들을 공유하고자 하므로 참고만 해주시면 좋을 것 같습니다.
2. 데이터 수집
감사하게도 미국 주식 데이터를 손쉽게 얻을 수 있는 yfinance라는 라이브러리가 있습니다.
이 라이브러리를 통해서 미국 주식 중 S&P500에 포함된 기업들의 주가 데이터를 분석해보았습니다.
※ S&P500은 미국 주식 시장을 대표하는 주요 지수 중 하나로, Standard & Poor's가 관리합니다. 이 지수는 미국 내 500개의 대형 상장 기업의 주가를 기반으로 하여 산출됩니다.
3. 기업 기본정보 탐색
아래 표는 SP500에 포함된 기업들의 기본정보 리스트 입니다.
왼쪽부터 소속국가, 산업, 섹터, 배당수익률, 시가총액, 심볼, 회사명, 부채 대비 자본비율이 있습니다.
하지만 이런 데이터 보다 데이터를 통해서 어떤 정보를 얻을 수 있는지 알아봅시다.
SP500 내에서 시가총액 비중이 가장 높았던 산업은 약 13.7%를 차지한 인터넷 콘텐츠 및 정보 산업이었습니다.
두번째는 반도체로 10.5%를 차지했고, 다음으로 소프트웨어 인프라(8.8%), 전자제품(8.5%)가 있습니다.
그 다음으로 탐색해본 데이터는 배당수익률과 자본대비 부채비율이였습니다.
SP500의 포함된 기업의 평균 배당수익률은 2.4%, 중앙값은 2.1%로 약 2%초반대로 나타났습니다.
가장 오른쪽 그래프의 자본대비 부채비율은 기업 건전성을 평가하는 주요지표 중 하나로 중앙값이 83%로 나타났습니다.
추가로 애플과 아마존의 부채비율은 약 200%로 추정되고, 마이크로소프트, 구글은 약 50%로 재무건정성이 좋았습니다.
(인베스트 닷컴 참고: https://kr.investing.com/)
4. 주가 데이터 탐색
주식 가격은 왼쪽 그래프와 같이 시계열 데이터 입니다.
데이터 분석에서는 통상적으로 시계열 데이터가 비정상성일 경우, 정상성 데이터로 변환하여 분석합니다.
대표적으로 차분이라는 방법이 있습니다. 과거 데이터와 현재 데이터의 오차를 활용하는 것이죠.
자세한 내용은 시계열 관련해서 추가적으로 글을 올리겠습니다.
우선 주가 데이터에 차분을 적용하면 전일가격과 금일가격의 차이 즉, 주가 변동가격이 됩니다.
더 나아가서 전일 가격 대비 변동가격은 주가변동률이 됩니다.
주가 변동률은 가운데 분포도와 같은 형태를 띄는데, 왜도의 개념을 활용하여 리스크를 판단할 수 있습니다.
왜도는 분포의 편향을 수치화한 지표로 왜도가 양수일 때는 주가 상승빈도가 더 많다고 판단할 수 있어
이를 활용하고자 합니다.
아래 그래프의 주황색 선은 애플의 14일 이동평균값을 나타냅니다.
가운데 그래프는 주가 변동률과 이동평균값의 변동률을 나타냅니다.
맨아래 그래프는 주가 변동률 분포와 이동평균값과 실제값의 오차 분포를 나타냅니다.
이동평균값과 실제값의 오차 분포에 마이너스값이 많으면 해당 주식은 이동평균값 14일 기준으로 하향빈도가 높다고 판단할 수 있습니다.
좋은 주식을 평가하는 기준으로 리스크를 수치화한 "주가변동률 왜도값"과 "이동평균값 오차"를 활용해보겠습니다.
5. 훈련용 데이터셋 구성
기업 기본정보 데이터셋에 각 기업별 주가변동률 왜도(표준화), 최신 주가, 최신 이동평균선값, "주가-이동평균값 오차율 중앙값" 데이터를 추가하여 아래와 같은 데이터셋을 구성하였습니다.
목적은 좋은 주식을 찾는 것이므로 생성된 데이터셋에 조건을 부여합니다.
왜도값이 0보다 작고, 이동평균오차 중앙값이 -0.16이하이면 제외 합니다.
자본 대비 부채비율은 대부분 160%이하이므로 부채비율이 자본의 160%이상이면 제외 합니다.
그리고 이동평균값보다 현재 주가가 높으면 제외 합니다.
결과적으로 39개의 좋은 기업이 선정되었습니다.
추가적으로 해당 기업들의 예상 주가를 분석하여 더 좋은 기업들을 찾으면 좋겠습니다.
6. 시계열 분석을 통한 주가 예측 (ARIMA)
ARIMA 모델은 통계적인 전통적 시계열 분석 기법 중의 하나로 AR(자기회귀모델)과 MA(이동평균모델), 차분의 개념을 적용한 모델입니다. 효율적인 ARIMA 모델 수행을 위해 auto_arima 모듈을 사용하였습니다.
ARIMA 모델 활용을 위해 애플 주가를 통해 분석해보았습니다.
왼쪽은 비정상성 형태의 애플 주가이고, 오른쪽은 1차 차분한 애플 주가 변동가격 추이 입니다. 1차 차분을 하였을 때, 정상성 시계열 데이터의 형태를 띄고 있으므로, ARIMA 모델에 적용 가능할 것으로 보입니다.
애플 주식 가격을 토대로 여러 파라미터를 지정한 ARIMA 모델을 생성하였습니다.
# Auto ARIMA : Automatically discover the optimal order for an ARIMA model.
model_autoARIMA = auto_arima(train_df['Close'],
start_p=0, start_q=0, # p, q의 시작값
max_p=3, max_q=3, # p and q 최대값
test='adf', # adf를 통해 d 계산
d=1, # 모델을 통해 d 지정
m=1, # 연(year)간 데이터
seasonal=False, # 계절성 없음
trace=True, # 값 보여줌
with_intercept='auto', # 상수 자동으로 포함 / 비포함 결정
stepwise=True # p, q 조합으로 진행
)
print(model_autoARIMA.summary())
모델에 대해 Summary를 진행한 후, 모델이 정상성을 만족하는지, 정규성과 등분산성을 보이는지 모델이 데이터에 잘 적합하는지 확인이 필요합니다.
잔차의 정규성을 검정한 Jarque-Box 검정통계량의 Prob이 0.00로 유의수준 0.05 넘기지 않아 귀무가설을 기각할 수 있습니다. 즉, "잔차는 정규성을 만족한다"는 대립가설을 채택할 수 있습니다.
추가로 그래프를 통해서도 해당 시계열 모델의 정상성, 정규성 등을 눈으로 확인하여 실제 모델이 데이터에 잘 적합하였는지 확인하였습니다. 이와 같이 모델 생성 후, 모델이 실제 사용가능한지 검토를 진행하였습니다.
이제 실제 예측을 진행해봅시다.
데이터셋은 1일 단위 주가를 포함한 가격이므로 모델을 통해 예측하면 1일 후에 대한 예측값을 도출합니다.
그 예측값을 다시 모델에 업데이트한 후, 다시 그 다음날에 대한 주가를 예측하는 방식으로 진행하였습니다.
그 결과를 아래와 같이 그래프로 생성하였습니다.
그렇다면 해당 모델을 통해 예측한 값과 실제 주가는 얼만큼 차이가 날까요?
모델을 평가한 결과, 예측값과 실제값의 잔차가 실제값의 0.24%를 차지하였습니다. 생각보다 결과가 잘 나왔습니다.
# 모델 평가
test_list = test_df['Close'].tolist()
result = list(map(lambda a, b: (a - b) / a, test_list, pred_list))
print(f'잔차가 실제값의 {round(np.mean(result) * 100, 2)}%를 차지')
# 잔차가 실제값의 0.24%를 차지
ARIMA 모델을 공부하면서 알게되었는데, ARIMA 모델은 추세가 있거나, 계절성을 띄는 시계열 데이터를 잘 분석한다고 합니다. 그럴 것이 auto_arima 모델의 파라미터에 계절성과 주기를 지정하는 파라미터가 있어 ARIMA 모델에 적합하도록 구성이 되어있는 것 같습니다.
※ 해당 게시글은 투자목적이 아니라 학습 목적으로 분석한 내용이므로 투자에 이용하지 않으시길 바랍니다.
[참고자료] https://dong-guri.tistory.com/9
시계열 분석, ARIMA model (Autoregressive Integrated Moving average Model)
들어가기 앞서 . . - 석사 과정 중에 공부하던 시계열 분석에 대해 기억을 더듬으며 정리할 예정이다. 시계열 분석이라는 항목이 수학적으로 정리하기 어렵고, 방법론도 다양해서, 글로 모든 내
dong-guri.tistory.com
'Project' 카테고리의 다른 글
프로젝트 팀 운영 가이드라인 (1) | 2024.12.09 |
---|---|
[Project] 전력사용량 예측 프로젝트 (feat. LSTM) (2) | 2024.08.27 |
[Tableau] KBO OPS 타자지표 분석 (0) | 2024.08.01 |
[Project] KBO 프로야구 승률 예측 모델 (0) | 2024.05.05 |