Jonghyun Ho

경제지표의 상관관계

각종 경제 지표는 서로 간에 밀접한 관계를 갖고 있다.

미국, 유럽, 일본 시장이 어떻게 움직이는 지에 따라 한국 시장도 같이 움직이고,

금, 은, 유가, 채권, 환율 등 여러가지 요소에 영향을 받아 가격이 결정된다.

이러한 경제 지표 간에 서로 얼마나 밀접한 관계를 갖고 있는지 파악할 수 있다면 경제를 이해하는 데 좀 더 도움이 될 것 같다.

각 지표들 간의 관계는 피어슨 상관계수를 활용해 보려고 한다.

피어슨 상관계수란?

피어슨 상관 계수(Pearson correlation coefficient 또는 Pearson’s r)는 두 변수간의 관련성을 구하기 위해 보편적으로 이용된다.

$r = {\frac{X와 Y가 함께 변하는 정도}{X와 Y가 각각 변하는 정도}}$

r 값은 X 와 Y 가 완전히 동일하면 +1, 전혀 다르면 0, 반대방향으로 완전히 동일 하면 –1 을 가진다.

결정계수(coefficient of determination)는 $r^2$으로 계산하며 이것은 X 로부터 Y 를 예측할 수 있는 정도를 의미한다.

일반적으로 다음과 같이 해석한다.

참고 : 피어슨 상관계수

Python 을 이용하여 분석해보기

라이브러리

우선, 필요한 라이브러리들을 선언한다.

>>> import yfinance as yf

>>> import pandas as pd
>>> import matplotlib.pyplot as plt
>>> import seaborn as sns

경제 지표들의 코드 지정

Yahoo Finance 에서 다음과 같이 코드를 정의하고 있다.

금, 은, 크루드 오일, 미국 10년 만기 채권, S&P 500, 다우 존스, 나스닥, 닛케이, 달러, 유로, 파운드, 엔화, 코스피 등을 비교 지표로 뽑았다.

>>> codes = {'Gold': 'GC=F',
...          'Silver': 'SI=F',
...          'Crude Oil': 'CL=F',
...          '10-Yr Bond': '^TNX',
...          'S&P 500': '^GSPC',
...          'Dow Jones': '^DJI',
...          'Nasdaq': '^DJI',
...          'Nikkei 225': '^N225',
...          'USD/KRW': 'KRW=X',
...          'EUR/KRW': 'EURKRW=X',
...          'GBP/KRW': 'GBPKRW=X',
...          'JPY/KRW': 'JPYKRW=X',
...          'KOSPI': '^KS11'}

각 경제지표 지수 읽기

최근 5년 동안의 각 경제 지표를 구하고, 데이터 프레임 한 곳에 저장한다.

일부 누락된 정보는 제거한다.

>>> df = pd.DataFrame()
>>>
>>> for stock_type in codes:
...     code = codes[stock_type]
...
...     ticker = yf.Ticker(code)
...     ticker = ticker.history(period='5y')
...     ticker = ticker[['Close']]
...
...     df[stock_type] = ticker.Close
...
>>> df.dropna(inplace=True)
>>> print(df)
              Gold  Silver  Crude Oil  ...    GBP/KRW  JPY/KRW    KOSPI
Date                                   ...                             
2019-04-08  1297.1  15.173      64.40  ...  1481.9000  10.1750  2210.60
2019-04-09  1303.5  15.168      63.98  ...  1490.5000  10.2380  2213.56
2019-04-10  1309.1  15.201      64.61  ...  1488.6000  10.2610  2224.39
2019-04-11  1288.6  14.824      63.58  ...  1489.1000  10.2430  2224.44
2019-04-12  1290.6  14.920      63.89  ...  1489.6000  10.2210  2233.45
...            ...     ...        ...  ...        ...      ...      ...
2020-03-30  1637.2  14.155      20.48  ...  1508.5601  11.2811  1717.12
2020-03-31  1592.4  14.135      20.28  ...  1512.6100  11.3219  1754.64
2020-04-01  1605.2  14.085      21.19  ...  1509.5500  11.3168  1685.46
2020-04-02  1637.7  14.625      24.77  ...  1528.9000  11.5126  1724.86
2020-04-03  1648.8  14.525      29.00  ...  1518.9399  11.3480  1725.44

[203 rows x 13 columns]

데이터 스케일링

각 지표의 값은 서로 다른 단위를 사용하여 표시하므로, 지표 간의 비교를 위해 동일한 단위로 맞출 필요가 있다.

특정 날짜를 기준으로 하여 기준 날짜의 값을 100으로 보고, 상대적인 값을 구하면 모두 동일한 단위로 스케일링을 할 수 있다.

우선은 수집한 기간의 3분의 2 시점(2019년 12월 13일)을 기준으로 하였다.

>>> base_value = df.iloc[int(-len(df.index) / 3)]
>>> print(base_value)
Gold           1475.6000
Silver           16.9100
Crude Oil        60.0700
10-Yr Bond        1.8190
S&P 500        3168.8000
Dow Jones     28135.3800
Nasdaq        28135.3800
Nikkei 225    24023.1000
USD/KRW        1169.5900
EUR/KRW        1307.9800
GBP/KRW        1576.0300
JPY/KRW          10.6902
KOSPI          2170.2500
Name: 2019-12-13 00:00:00, dtype: float64

다음과 같이 기준 날짜의 값으로 스케일링 후 대부분의 값이 100 이라는 값 내외로 변경된 것을 확인할 수 있다.

>>> for stock_type in codes:
...    df[stock_type] = df[stock_type] / base_value[stock_type] * 100
...
>>> print(df)
                  Gold     Silver  ...     JPY/KRW       KOSPI
Date                               ...                        
2019-04-08   87.903226  89.717360  ...   95.180633  101.859233
2019-04-09   88.336948  89.687796  ...   95.769958  101.995623
2019-04-10   88.716454  89.882923  ...   95.985108  102.494643
2019-04-11   87.327189  87.653737  ...   95.816729  102.496947
2019-04-12   87.462727  88.221381  ...   95.610933  102.912107
...                ...        ...  ...         ...         ...
2020-03-30  110.951477  83.697966  ...  105.527492   79.120839
2020-03-31  107.915424  83.579707  ...  105.909150   80.849672
2020-04-01  108.782868  83.313623  ...  105.861443   77.662021
2020-04-02  110.985362  86.417928  ...  107.693027   79.477480
2020-04-03  111.737598  85.885762  ...  106.153299   79.504205

[203 rows x 13 columns]

Process finished with exit code 0

데이터 시각화

위 데이터 프레임을 그래프로 표시하면 다음과 같다.

너무 많은 feature 를 넣어 그래프가 복잡하게 표시되고 있지만 그래프는 단순히 확인하는 용도일 뿐,

나중에 상관관계를 다양하게 도출하기 위해 많은 수의 feature 를 유지하고자 한다.

>>> df.plot()
>>> plt.grid()
>>> plt.show()

5년 간의 경제지표

상관계수 표시

위에서 설명한 상관계수는 pandas 데이터 프레임의 corr() 이라는 함수를 이용하여 출력할 수 있다.

참고 : pandas.DataFrame.corr

>>> print(df.corr())
                Gold    Silver  Crude Oil  ...   GBP/KRW   JPY/KRW     KOSPI
Gold        1.000000  0.578434  -0.588975  ...  0.290338  0.502117 -0.327670
Silver      0.578434  1.000000   0.245663  ...  0.259771  0.050130  0.362752
Crude Oil  -0.588975  0.245663   1.000000  ... -0.027969 -0.627055  0.808066
10-Yr Bond -0.885136 -0.229970   0.840196  ... -0.180331 -0.703376  0.652542
S&P 500     0.172943  0.701609   0.562134  ...  0.405106 -0.451195  0.800775
Dow Jones  -0.027390  0.644563   0.723518  ...  0.267907 -0.520197  0.871725
Nasdaq     -0.027390  0.644563   0.723518  ...  0.267907 -0.520197  0.871725
Nikkei 225 -0.035360  0.590545   0.675302  ...  0.386376 -0.658605  0.872334
USD/KRW     0.486054 -0.070670  -0.711727  ... -0.004479  0.885940 -0.840846
EUR/KRW     0.167778 -0.340608  -0.577914  ... -0.147190  0.857446 -0.806888
GBP/KRW     0.290338  0.259771  -0.027969  ...  1.000000 -0.093344  0.268144
JPY/KRW     0.502117  0.050130  -0.627055  ... -0.093344  1.000000 -0.796779
KOSPI      -0.327670  0.362752   0.808066  ...  0.268144 -0.796779  1.000000

[13 rows x 13 columns]

이 상관계수는 seabornheatmap을 이용하면 시각적 효과가 좋다.

>>> sns.heatmap(df.corr(), square=True, annot=True, cmap=plt.cm.viridis, linewidths=0.01, linecolor='white')
>>> plt.show()

5년 간의 경제지표 상관계수

금값은 S&P 500, 다우 존스, 나스닥 등 미국의 경제 지표와 유사하게 움직이고 있다.

일본의 닛케이 지수도 0.8 이상의 수치로 미국의 경제 지표를 따르고 있다.

코스피 지수는 -0.72의 수치로 원달러 환율과 음의 관계로 강한 관계를 갖고 있다.

즉, 원달러 환율이 올라가면 코스피는 낮아지고 환율이 낮아지면 코스피는 높아지는 경향을 확인할 수 있다.

또한 코스피 지수는 크루드 오일, 미국 10년 만기 채권, 닛케이 지수와도 어느정도의 연관성이 있다.

최근의 경향은 어떠할까?

최근 3년 간의 경제지표와 상관계수를 살펴보면 다음과 같다.

3년 간의 경제지표

3년 간의 경제지표 상관계수

코스피 지수가 5년 간의 상관 관계에 있어서는 원달러 환율과 깊은 연관이 있었지만, 원달러 환율 뿐 아니라 엔화와도 관련이 깊어졌다.

금값과는 음의 관계로 연관성이 깊어진 반면, 미국의 경제 지표와는 연관성이 다소 떨어졌다.

최근 1년 간의 경제지표와 상관계수를 살펴보면 다음과 같다.

1년 간의 경제지표

1년 간의 경제지표 상관계수

최근 1년 간의 코스피 지수는 금, 은, 파운드 환율을 제외한 대부분의 지수와 밀접한 관계를 가지며 움직이는 것을 확인할 수 있다.

그리고 모든 지표 중, 금, 은 값의 상승률이 가장 높은 것으로 보아 화폐 가치의 하락으로 인해 실물 자산을 선호하는 경향이 뚜렷해지는 것으로 보인다.

comments powered by Disqus
comments powered by Disqus