Post

07. Big Data_About Money 1 (Gold, Exchange Rates)

07. Big Data_About Money 1 (Gold, Exchange Rates)

[toc]

학습 목표

  • 왜 돈을 배우는가: 소득(Income)과 자산(Asset)의 관계
  • 화폐의 역사: 실물화폐 → 금본위제 → 브레튼우즈 → 법정화폐(1971) → 전자화폐, 암호화폐
  • 신용창조로 돈이 늘어나는 과정과 M2(통화량)
  • 상대적인 돈의 가치인 환율과, 돈이 흘러간 자산(주가지수, 금, 은)
  • R로 금융 데이터 가져오기: quantmod(Yahoo Finance, FRED), fortify.zoo(), reduce(full_join), 로그 눈금, 연간 변화율

이번 주 실습은 Yahoo Finance와 FRED에서 실시간 데이터를 내려받아야 해서, 이 글을 쓰는 환경에서는 다시 실행할 수 없음. 그래프는 9주차 과제로 제출한 실행 결과(2026년 10월 26일까지의 데이터)를 그대로 싣고, 데이터 없이 확인할 수 있는 계산과 함수 동작만 직접 실행했음


소득과 자산: Income ⇒ Asset ⇒ Income

  • 소득은 소비(생활비, 세금), 저축(예금, 적금), 투자(주식, 펀드, 부동산, 코인)로 나뉘고, 저축과 투자가 쌓인 것이 자산
  • 자산이 다시 소득(이자, 배당, 월세)을 만들기 때문에 돈의 흐름을 이해하는 것이 중요
자산 범주예시
현금성 자산현금, 예금, 비상금
투자자산주식, 채권, 코인, 펀드, 금
실물자산부동산, 자동차, 귀금속
소득형 자산월세 부동산, 배당주, 이자 발생 상품
연금, 보험국민연금, 연금저축, IRP, 변액보험

돈이란 무엇인가? 화폐의 역사

시대시기화폐 제도핵심 특징
고대~중세~17세기 초실물화폐금, 은, 동 자체가 화폐. 왕권이나 국가가 주조
초기 근대17~19세기대표화폐 (금 보관증서)금과 1:1로 바꿀 수 있는 지폐, 초기 은행권
산업혁명~전간기1816~1930년대 초금본위제국가가 가진 금만큼 지폐 발행. 통화량이 제한됨
전후 체제1944~1971브레튼우즈 체제금 1온스(31.1g) = 35달러로 달러만 금에 고정, 다른 나라는 달러에 고정환율
현대1971~현재법정화폐 (Fiat Money)1971년 닉슨이 금 태환 중지. 정부 신뢰에 기반한 지폐
정보화 시대1990년대~현재전자화폐 시스템실물 없이 디지털 계좌 중심 거래
탈중앙화 실험기2009년~현재암호화폐, 디지털화폐비트코인(민간), CBDC(중앙은행 디지털화폐), 달러 스테이블코인
  • 1933년 미국 루스벨트 정부는 개인의 금 보유를 금지하고 금을 거둬들였으며, 개인의 금 보유는 1974년 포드 대통령 때 다시 합법이 됨
  • 1971년 이후 달러는 금과 완전히 결별했고, 1973년 변동환율제, 1974년 미국과 사우디의 석유 대금 달러 결제(페트로달러)가 달러 수요를 뒷받침함
  • 강의 자료 메모: 2024년에 돌았던 “페트로달러 50년 계약 만료설”은 근거 없음

금과 결별한 돈: 신용창조와 M2

  • 금이라는 한도가 없어지면서 중앙은행과 은행 시스템이 돈의 양을 늘리고 줄일 수 있게 됨
  • M2(광의통화)는 현금과 바로 현금화할 수 있는 예금 등을 합친 통화량 지표

은행 예금으로 돈이 늘어나는 과정 (지급준비율 10%)

  1. A가 100만 원을 예금
  2. 은행은 10만 원만 남기고 90만 원을 B에게 빌려줌
  3. B가 90만 원을 다시 은행에 예금하면, 은행은 9만 원을 남기고 81만 원을 C에게 빌려줌
  4. 이 과정이 계속 반복됨

통장에 찍힌 돈을 모두 더하면 첫 항이 100, 공비가 0.9인 등비급수가 되어 \(100 + 90 + 81 + \cdots = \dfrac{100}{1 - 0.9} = 1000\)(만 원)

1
2
3
4
5
6
# 지급준비율 10%: 은행은 예금의 10%만 남기고 90%를 다시 빌려줌
deposit <- 100 * 0.9^(0:9)        # 처음 10단계의 예금 (만 원)
round(deposit, 1)
sum(deposit)                      # 10단계까지 합
sum(100 * 0.9^(0:199))            # 200단계까지 합: 1000에 수렴
100 / (1 - 0.9)                   # 등비급수 공식

실행 결과

1
2
3
4
 [1] 100.0  90.0  81.0  72.9  65.6  59.0  53.1  47.8  43.0  38.7
[1] 651.3216
[1] 1000
[1] 1000
  • 10단계만 반복해도 651만 원, 끝까지 반복하면 실제 현금 100만 원으로 통장 속 돈 1,000만 원이 만들어짐
  • 일반적으로 지급준비율이 \(r\)이면 최대 \(1/r\)배 (이 배수를 통화승수라고 부름)

M2와 GDP

  • 강의 자료의 FRED 그래프(2000년 이후)에서 미국 M2는 2020년 코로나 때 급증했다가 2022년 이후 줄어듦
  • \(M2 / GDP\)는 경제 규모에 비해 돈이 얼마나 많이 풀렸는지를 나타내며, 실제 데이터로 그리는 실습은 다음 글(08)에서 다룸

상대적인 돈의 가치: 환율

  • 환율은 다른 나라 돈과 비교한 상대적인 가치. 원/달러 환율이 오르면 1달러를 사는 데 원화가 더 많이 필요하므로 원화 가치가 떨어진 것
  • 강의 자료에서는 원/달러(약 1,420원), 원/100엔(약 948원), 달러 인덱스(DXY) 화면을 예로 듦
  • 100엔 환율이 기간 중 최고 956원, 최저 915원이었다면
1
2
3
high <- 956; low <- 915           # 100엔당 원화 (강의 자료의 기간 중 최고, 최저)
high - low                        # 100엔당 차이
(high - low) * 100                # 1만 엔(100엔 × 100)이면

실행 결과

1
2
[1] 41
[1] 4100
  • 1만 엔을 바꿀 때 시점에 따라 4,100원 차이가 나므로, 큰 금액일수록 환율 변화의 영향이 커짐

돈은 어디로 갔나? 나스닥 100, S&P 500, 금, 은

  • 1971년 이후 늘어난 돈은 자산으로 흘러갔고, 강의 자료에서는 장기간의 QQQ(나스닥 100 ETF), SPY(S&P 500 ETF), GLD(금 ETF), SLV(은 ETF) 가격 그래프를 비교함
  • 모두 장기적으로 크게 올랐으며, 특히 최근 몇 년 동안 금과 은이 가파르게 상승함

실습 1: Yahoo Finance에서 금, 은 가격 가져오기

  • quantmod::getSymbols()는 종목 코드(ticker)로 가격 데이터를 내려받아 같은 이름의 xts 객체를 만들어 줌
  • Ad()는 수정 종가(Adjusted close: 배당, 분할 등을 반영한 종가)만 꺼냄
  • 2007년 12월(글로벌 금융위기 시작)부터 오늘까지의 금 ETF(GLD)와 은 ETF(SLV)
1
2
3
4
5
6
7
8
9
10
11
12
13
library(quantmod)
start_date <- as.Date("2007-12-01")
end_date <- Sys.Date()

getSymbols(c("GLD", "SLV"), src = "yahoo", from = start_date, to = end_date)

gold_price <- Ad(GLD)              # 수정 종가
silver_price <- Ad(SLV)

prices <- merge(gold_price, silver_price)   # 날짜를 기준으로 합치기
colnames(prices) <- c("Gold", "Silver")

plot(prices, plot.type = "single", col = c("gold", "gray"))

a

  • 노란 선이 금(GLD), 회색 선이 은(SLV)이며 단위는 달러
  • 금 ETF는 2007년 말 약 80달러에서 2025년 이후 400달러 안팎까지 올랐고, 은도 2025년 이후 급등함
  • xts 객체에 plot()을 쓰면 시간축이 자동으로 날짜로 표시됨

실습 2: FRED에서 한, 중, 일 환율 가져오기

  • FRED(Federal Reserve Economic Data)는 미국 세인트루이스 연방준비은행의 경제 데이터베이스
  • getSymbols("코드", src = "FRED")로 같은 방식으로 내려받을 수 있음
  • CCUSMA02KRA618N, CCUSMA02CNA618N, CCUSMA02JPA618N은 각각 한국, 중국, 일본의 연간 대미 환율(1달러당 자국 통화)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
library(dplyr)
library(tidyr)
library(purrr)      # reduce()
library(zoo)        # fortify.zoo()

getSymbols("CCUSMA02KRA618N", src = "FRED")   # 한국
getSymbols("CCUSMA02CNA618N", src = "FRED")   # 중국
getSymbols("CCUSMA02JPA618N", src = "FRED")   # 일본

krw <- fortify.zoo(CCUSMA02KRA618N, names = "Year") %>% rename(KRW = CCUSMA02KRA618N)
cny <- fortify.zoo(CCUSMA02CNA618N, names = "Year") %>% rename(CNY = CCUSMA02CNA618N)
jpy <- fortify.zoo(CCUSMA02JPA618N, names = "Year") %>% rename(JPY = CCUSMA02JPA618N)

df <- list(krw, cny, jpy) %>%
  reduce(full_join, by = "Year") %>%
  pivot_longer(-Year, names_to = "Currency", values_to = "Rates")

ggplot(df, aes(Year, y = Rates, color = Currency)) +
  geom_line()

사용한 함수의 동작 확인

  • 아래는 내려받기 없이 함수만 확인하려고 만든 설명용 예시 숫자(실제 환율 아님)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
library(dplyr)
library(tidyr)
library(purrr)
library(zoo)
# 설명용 예시 숫자 (실제 환율 아님): 3년치 연간 환율
yrs <- as.Date(c("2021-01-01", "2022-01-01", "2023-01-01"))
KR <- zoo(c(1000, 1100, 1050), yrs)
CN <- zoo(c(6.5, 6.8, 6.6), yrs)
JP <- zoo(c(110, 105, 115), yrs)

krw <- fortify.zoo(KR, names = "Year") %>% rename(KRW = KR)   # zoo → 데이터프레임
cny <- fortify.zoo(CN, names = "Year") %>% rename(CNY = CN)
jpy <- fortify.zoo(JP, names = "Year") %>% rename(JPY = JP)
krw

wide <- list(krw, cny, jpy) %>%
  reduce(full_join, by = "Year")   # full_join(full_join(krw, cny), jpy)와 같음
wide

wide %>%
  pivot_longer(-Year, names_to = "Currency", values_to = "Rates")   # Year는 빼고 나머지를 세로로

실행 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        Year  KRW
1 2021-01-01 1000
2 2022-01-01 1100
3 2023-01-01 1050
        Year  KRW CNY JPY
1 2021-01-01 1000 6.5 110
2 2022-01-01 1100 6.8 105
3 2023-01-01 1050 6.6 115
# A tibble: 9 × 3
  Year       Currency  Rates
  <date>     <chr>     <dbl>
1 2021-01-01 KRW      1000  
2 2021-01-01 CNY         6.5
3 2021-01-01 JPY       110  
4 2022-01-01 KRW      1100  
5 2022-01-01 CNY         6.8
6 2022-01-01 JPY       105  
7 2023-01-01 KRW      1050  
8 2023-01-01 CNY         6.6
9 2023-01-01 JPY       115
  • fortify.zoo(): 시간 정보가 행 이름(index)에 있는 zoo, xts 객체를 Year 열이 있는 데이터프레임으로 바꿈
  • reduce(리스트, full_join, by = "Year"): 리스트의 데이터를 앞에서부터 차례로 합침. 데이터가 10개여도 한 줄로 끝남
  • full_join()은 양쪽의 모든 행을 유지하므로, 나라마다 데이터가 시작하는 해가 달라도 빠지는 해가 없음 (없는 값은 NA)
  • pivot_longer(-Year, ...)는 Year만 빼고 나머지 열을 (통화, 값) 두 열로 세로로 쌓아서 ggplot이 color = Currency로 선을 나눌 수 있게 함

b

  • 원/달러 환율은 1950년대 후반 수십 원에서 1997~1998년 외환위기 때 급등했고, 최근에는 1,400원대
  • 엔/달러는 1971년 이전 360엔 고정에서 변동환율제 이후 100엔 안팎으로 내려감 (엔화 가치 상승)
  • 위안/달러는 10 이하의 숫자라서 같은 눈금에서는 0 근처의 평평한 선으로 보임. 세 통화의 단위 차이가 너무 커서 비교가 어려움

로그 눈금으로 같이 보기

1
2
3
ggplot(df, aes(Year, y = Rates, color = Currency)) +
  geom_line(linewidth = 1) +
  scale_y_log10()          # y축을 로그 눈금으로
  • 로그 눈금에서는 같은 비율 변화(예: 2배)가 같은 높이로 보이므로, 단위가 다른 통화도 변화의 모양을 함께 비교할 수 있음

실습 3: 연간 변화율로 “누구랑 짝인지” 보기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
library(lubridate)   # year()

df <- list(krw, cny, jpy) %>%
  reduce(full_join, by = "Year") %>%
  mutate(
    KRW_ret = log(KRW) - lag(log(KRW)),
    CNY_ret = log(CNY) - lag(log(CNY)),
    JPY_ret = log(JPY) - lag(log(JPY))
  ) %>%
  filter(year(Year) >= 2008) %>%
  select(Year, KRW_ret, CNY_ret, JPY_ret) %>%
  pivot_longer(-Year, names_to = "Currency", values_to = "Return")

ggplot(df, aes(x = Year, y = Return, color = Currency)) +
  geom_line(linewidth = 1)
1
2
3
4
library(dplyr)
x <- c(1000, 1100, 1050)          # 위 예시의 KRW
x / lag(x) - 1                    # 단순 변화율: 올해 / 작년 - 1
log(x) - lag(log(x))              # 로그 변화율: log(올해 / 작년)

실행 결과

1
2
[1]          NA  0.10000000 -0.04545455
[1]          NA  0.09531018 -0.04652002
  • lag(x)는 한 칸 뒤로 민 값(작년 값)이라 첫 해는 NA
  • 로그 변화율 \(\log(x_t) - \log(x_{t-1}) = \log(x_t / x_{t-1})\)는 변화가 작을 때 단순 변화율 \(x_t / x_{t-1} - 1\)과 거의 같음 (10% → 9.5%)
  • 로그 변화율은 여러 해를 더하면 전체 기간의 변화가 되는 장점이 있음

c

  • 환율의 변화율이 양수이면 그해 그 통화의 가치가 떨어진 것 (1달러당 자국 통화가 늘어남)
  • 2008, 2009년 원화는 금융위기로 가치가 크게 떨어졌고(약 +0.17, +0.15), 2022년에는 세 통화 모두 달러 대비 약해짐
  • “누구랑 짝인지”는 그래프만 보고 단정하기 어려움. 연간 데이터가 18개 정도뿐이므로 cor()로 통화 사이의 상관계수를 구해서 함께 확인하는 것이 좋음

강의 자료 및 실습 코드에서 정정한 부분 정리

위치원래정정이유
9주차 실습 코드 (주석)“올해 수익률 = 올해/작년”변화율 = 올해/작년 - 1, 코드는 로그 변화율 log(올해/작년)올해/작년은 비율이고, 1을 빼거나 로그를 취해야 변화율
9주차 실습 코드 (변수 이름)end_data <- Sys.Date()end_date오타 (같은 이름으로 계속 써서 실행은 됨)
9주차 실습 코드 (주석)“나스닥에서 거래되는 금과 은의 ETF 티거”티커(ticker), NYSE Arca 상장GLD, SLV는 나스닥이 아니라 NYSE Arca에 상장된 ETF
9주차 실습 코드 (그래프)geom_line(size = 1)geom_line(linewidth = 1)ggplot2 3.4.0부터 선 굵기는 linewidth (size는 경고)
9주차 실습 코드 (해석)환율 변화를 “수익률(Return)”로 표시환율 변화율원/달러 환율 상승은 원화 기준 수익이 아니라 원화 가치 하락

최종 핵심 정리

  1. 소득이 저축과 투자를 거쳐 자산이 되고, 자산이 다시 소득을 만든다 (Income ⇒ Asset ⇒ Income)
  2. 화폐는 실물화폐 → 금본위제 → 브레튼우즈(금 1온스 = 35달러) → 1971년 이후 법정화폐로 바뀌었고, 본질은 신뢰
  3. 지급준비율이 \(r\)이면 예금이 최대 \(1/r\)배로 불어나며, 10%면 현금 100만 원이 통장 속 1,000만 원이 됨
  4. 환율은 돈의 상대적 가치이며, 원/달러 환율이 오르면 원화 가치가 떨어진 것
  5. quantmod::getSymbols()로 Yahoo Finance(GLD, SLV)와 FRED(환율) 데이터를 내려받고, Ad()로 수정 종가를 꺼냄
  6. fortify.zoo()로 시계열을 데이터프레임으로, reduce(full_join)으로 여러 데이터를 한 번에 합침
  7. 단위가 크게 다른 시계열은 scale_y_log10()으로 같은 비율 변화를 같은 높이로 비교
  8. 연간 변화율은 log(x) - lag(log(x))로 구하고, 첫 해는 NA가 됨

End.