ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 은행 예금으로만 노후준비를 하면 안되는 이유
    자산배분 투자 2020. 3. 24. 17:58

    노후 준비를 위한 자산을 확보하기 위한 방법은 여러가지가 있다. 여기서는 그 중 은행예금에 대해 분석해 보자.

    최근 읽은 책에서 정기예금에 대한 내용을 보았다.

    예금만 하면 되지 위험까지 감수하며 투자해서 수익률을 높여야 하나?' 하는 질문이
    나오는 것은 당연하다. 위험을 피하고 싶은 것은 당연한 심리다. 그럼에도 '위험'을
    감수하고 투자해야 한다는데 '위험'은 무엇인가? 
    
    투자에서 위험은 '손실가능성'과 '불확실성'이다. 
    첫번째 위험은 돈을 잃을 가능성을 말한다. 손실이 난다는 말이다. 수익을 얻고자 하는 게임에서의
    위험이란 직관적으로도 돈을 잃는 것이라는 게 이해가 간다. 문제는 투자를 하지 않았는데도 돈을
    잃고 있다는 것이다. 많은 사람이 눈치 채지 못하고 있는, 가만히 있는데도 돈을 잃는 이유는 
    "인플레이션" 때문이다.
    
    1996년부터 2018년까지 우리나라의 정기예금 이자율 자료를 조사했다. 조사 기간 동안의 이자소득세가
    변화한 부분을 반영해 세후 실질수익률을 계산했다.
    
    예금으로 이자를 받아도 실제로는 손해가 났다. 금융위기 시절만이 아닌 2014년~2017년까지도 그랬다.
    이런 시기를 '실질금리 마이너스 시대'라고 한다. 실질금리 마이너스란 금리가 물가상승률을 따라가지
    못한다는 말이다. 금리만으로는 애써 모은 돈의 가치를 지킬 수가 없다.
    - 마법의 연금 굴리기(김성일) 페이지 77-79

    최근 파이썬(python) pandas를 이용한 데이터 분석에 중독되어 있다. 이런 내용을 보면 내가 직접 분석하고 싶은 충동이 강하게 생긴다. 아래는 1996년부터 현재까지 정기예금 금리에 대한 분석이다.

     

    소스코드와 분석 결과는 맨 아래에 첨부해 두었다.

     

     

    목적

    In [1]:
    import pandas as pd
    from pandas import Series, DataFrame
    import numpy as np
    import matplotlib.pyplot as plt
    from datetime import datetime, timedelta
    from IPython.display import Image
    from IPython.core.display import display, HTML
    #Jupyter Notebook을 Tistory에 업로드하기 위한 설정
    display(HTML("<style>.container {width:90% !important;}</style>")) 
    
     
     
    In [2]:
    물가 = pd.read_csv('소비자물가지수.csv', engine='python', header=None, skiprows=5, index_col=0, parse_dates=True)
    물가.index.name = '일시'
    물가.rename(columns={1: '소비자물가지수'}, inplace=True)
    물가['물가상승율'] = np.round(물가['소비자물가지수'].pct_change(12) * 100, 2)
    
    In [3]:
    물가[:15]
    
    Out[3]:
      소비자물가지수 물가상승율
    일시    
    1965-01-01 2.628 NaN
    1965-02-01 2.686 NaN
    1965-03-01 2.691 NaN
    1965-04-01 2.733 NaN
    1965-05-01 2.788 NaN
    1965-06-01 2.763 NaN
    1965-07-01 2.798 NaN
    1965-08-01 2.827 NaN
    1965-09-01 2.813 NaN
    1965-10-01 2.796 NaN
    1965-11-01 2.748 NaN
    1965-12-01 2.757 NaN
    1966-01-01 2.823 7.42
    1966-02-01 2.903 8.08
    1966-03-01 2.950 9.62
    In [4]:
    예금 = pd.read_csv('정기예금금리.csv', engine='python', header=None, skiprows=4, index_col=0, parse_dates=True)
    예금 = 예금[6]
    예금 = DataFrame(예금)
    예금.index.name = '일시'
    예금.rename(columns={6: '예금금리(세전)'}, inplace=True)
    예금.dropna(how='all', inplace=True)
    
    In [5]:
    예금.head()
    
    Out[5]:
      예금금리(세전)
    일시  
    1996-07-01 9.83
    1996-08-01 10.26
    1996-09-01 10.31
    1996-10-01 10.38
    1996-11-01 9.78
     

    이자소득세율 이력

    In [6]:
    Image(filename='이자소득세율_변화.jpg')
    
    Out[6]:
     

    이자소득세율을 구하기 위한 함수

    In [7]:
    def get_ts(start, end, interest):
        return Series(interest, index=pd.date_range(start - timedelta(1), end, freq='M') + timedelta(1))
    
    In [8]:
    기간_이자소득세 = {
        (datetime(1991,1,1), datetime(1995,12,1)): 0.215,
        (datetime(1996,1,1), datetime(1997,12,1)): 0.165,
        (datetime(1998,1,1), datetime(1998,9,1)): 0.22,
        (datetime(1998,10,1), datetime(1999,12,1)): 0.242,
        (datetime(2000,1,1), datetime(2000,12,1)): 0.22,
        (datetime(2001,1,1), datetime(2004,12,1)): 0.165,
        (datetime(2005,1,1), datetime(2020,3,1)): 0.154,
    }
    
    In [9]:
    result = []
    for date, interest in 기간_이자소득세.items():
        result.append(get_ts(date[0], date[1], interest))
    이자소득세 = DataFrame(pd.concat(result, axis=0))
    이자소득세.rename(columns={0: '이자소득세'}, inplace=True)
    
    In [10]:
    이자소득세.head()
    
    Out[10]:
      이자소득세
    1991-01-01 0.215
    1991-02-01 0.215
    1991-03-01 0.215
    1991-04-01 0.215
    1991-05-01 0.215
     

    물가, 예금, 이자소득세를 하나의 DataFrame으로 통합

    In [11]:
    df= pd.merge(pd.merge(물가, 예금, left_index=True, right_index=True),
                 이자소득세, left_index=True, right_index=True)
    
    In [12]:
    df.head()
    
    Out[12]:
      소비자물가지수 물가상승율 예금금리(세전) 이자소득세
    1996-07-01 57.766 5.40 9.83 0.165
    1996-08-01 58.039 5.27 10.26 0.165
    1996-09-01 58.150 4.53 10.31 0.165
    1996-10-01 58.150 5.05 10.38 0.165
    1996-11-01 58.150 5.26 9.78 0.165
     

    이자소득세를 고려한 세후예금금리

    In [13]:
    df['예금금리(세후)'] = np.round(df['예금금리(세전)'] * (1 - df['이자소득세']), 2)
    
    In [14]:
    df.head()
    
    Out[14]:
      소비자물가지수 물가상승율 예금금리(세전) 이자소득세 예금금리(세후)
    1996-07-01 57.766 5.40 9.83 0.165 8.21
    1996-08-01 58.039 5.27 10.26 0.165 8.57
    1996-09-01 58.150 4.53 10.31 0.165 8.61
    1996-10-01 58.150 5.05 10.38 0.165 8.67
    1996-11-01 58.150 5.26 9.78 0.165 8.17
     

    물가상승율을 고려한 실질예금금리

    In [15]:
    df['실질금리'] = df['예금금리(세후)'] - df['물가상승율']
    
    In [16]:
    df.head()
    
    Out[16]:
      소비자물가지수 물가상승율 예금금리(세전) 이자소득세 예금금리(세후) 실질금리
    1996-07-01 57.766 5.40 9.83 0.165 8.21 2.81
    1996-08-01 58.039 5.27 10.26 0.165 8.57 3.30
    1996-09-01 58.150 4.53 10.31 0.165 8.61 4.08
    1996-10-01 58.150 5.05 10.38 0.165 8.67 3.62
    1996-11-01 58.150 5.26 9.78 0.165 8.17 2.91
     

    주요 이벤트들

    In [17]:
    crisis_data = [
        (datetime(1997, 12, 3), 'IMF 구제금융'),
        (datetime(2008, 9, 15), '리먼브라더스 파산'),
        (datetime(2020, 1, 22), '코로나바이러스 확산')
    ]
    
    In [18]:
    fig, ax = plt.subplots(figsize=(12, 8))
    ax.plot((datetime(1995,1,1), datetime(2021, 1,1)), (0, 0), color='black', linestyle='--', linewidth=5, alpha=0.7)
    df[['물가상승율', '예금금리(세후)', '실질금리']].plot(kind='line', ax=ax)
    ax.tick_params(axis='both', which='major', labelsize=12)
    ax.set_xlabel('연도', fontsize=15)
    title = '1996~2020 1년만기 정기예금금리(세후) 및 물가상승율'
    plt.title(title, fontsize=20)
    for date, label in crisis_data:
        ax.annotate(label, xy=(date, df['예금금리(세후)'].asof(date)),
                    xytext=(date, df['예금금리(세후)'].asof(date) + 3.5),
                    arrowprops=dict(facecolor='black', headwidth=4, width=2,
                                    headlength=4),
                    horizontalalignment='left',
                    verticalalignment='top',
                    fontsize=15)
    plt.show()
    
     
    C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:211: RuntimeWarning: Glyph 8722 missing from current font.
      font.set_text(s, 0.0, flags=flags)
    C:\Anaconda3\lib\site-packages\matplotlib\backends\backend_agg.py:180: RuntimeWarning: Glyph 8722 missing from current font.
      font.set_text(s, 0, flags=flags)
    
     
     

    결론

    2009년 금융위기 이후 2020년(현재)까지:

    • 실질금리는 2% 이하이며,
    • 실질금리가 마이너스인 구간도 다수 있음
    In [19]:
    df[df['실질금리'] < 0]
    
    Out[19]:
      소비자물가지수 물가상승율 예금금리(세전) 이자소득세 예금금리(세후) 실질금리
    2001-05-01 69.234 5.26 6.05 0.165 5.05 -0.21
    2001-06-01 69.434 5.03 6.00 0.165 5.01 -0.02
    2001-08-01 69.833 4.69 5.54 0.165 4.63 -0.06
    2003-02-01 72.962 3.89 4.56 0.165 3.81 -0.08
    2003-03-01 73.828 4.52 4.37 0.165 3.65 -0.87
    2003-04-01 73.695 3.75 4.37 0.165 3.65 -0.10
    2003-09-01 74.294 3.33 3.96 0.165 3.31 -0.02
    2003-10-01 74.360 3.71 3.92 0.165 3.27 -0.44
    2003-11-01 74.227 3.43 4.04 0.165 3.37 -0.06
    2004-05-01 76.025 3.35 3.95 0.165 3.30 -0.05
    2004-06-01 76.025 3.63 3.93 0.165 3.28 -0.35
    2004-07-01 76.491 4.36 3.93 0.165 3.28 -1.08
    2004-08-01 77.156 4.79 3.82 0.165 3.19 -1.60
    2004-09-01 77.156 3.85 3.65 0.165 3.05 -0.80
    2004-10-01 77.156 3.76 3.63 0.165 3.03 -0.73
    2004-11-01 76.691 3.32 3.59 0.165 3.00 -0.32
    2004-12-01 76.824 3.04 3.57 0.165 2.98 -0.06
    2005-01-01 77.580 3.40 3.51 0.154 2.97 -0.43
    2005-02-01 77.895 3.37 3.55 0.154 3.00 -0.37
    2005-05-01 78.365 3.08 3.58 0.154 3.03 -0.05
    2008-05-01 86.052 4.87 5.52 0.154 4.67 -0.20
    2008-06-01 86.601 5.54 5.58 0.154 4.72 -0.82
    2008-07-01 87.229 5.90 5.71 0.154 4.83 -1.07
    2008-08-01 87.072 5.61 5.98 0.154 5.06 -0.55
    2009-02-01 87.543 4.10 3.40 0.154 2.88 -1.22
    2009-03-01 88.170 3.88 3.13 0.154 2.65 -1.23
    2009-04-01 88.405 3.58 3.05 0.154 2.58 -1.00
    2009-05-01 88.405 2.73 2.94 0.154 2.49 -0.24
    2010-09-01 92.068 3.41 3.75 0.154 3.17 -0.24
    2010-10-01 92.068 3.68 3.58 0.154 3.03 -0.65
    2011-01-01 93.070 3.44 4.00 0.154 3.38 -0.06
    2011-02-01 93.707 3.94 4.25 0.154 3.60 -0.34
    2011-03-01 94.072 4.13 4.24 0.154 3.59 -0.54
    2011-04-01 94.163 3.82 4.23 0.154 3.58 -0.24
    2011-05-01 94.345 3.91 4.19 0.154 3.54 -0.37
    2011-06-01 94.527 4.22 4.20 0.154 3.55 -0.67
    2011-07-01 94.982 4.51 4.24 0.154 3.59 -0.92
    2011-08-01 95.620 4.69 4.18 0.154 3.54 -1.15
    2011-09-01 95.529 3.76 4.09 0.154 3.46 -0.30
    2011-10-01 95.347 3.56 4.07 0.154 3.44 -0.12
    2011-11-01 95.438 4.18 4.05 0.154 3.43 -0.75
    2011-12-01 95.802 4.16 4.09 0.154 3.46 -0.70
    2016-09-01 101.460 1.35 1.41 0.154 1.19 -0.16
    2016-10-01 101.600 1.49 1.49 0.154 1.26 -0.23
    2016-11-01 101.450 1.53 1.62 0.154 1.37 -0.16
    2017-01-01 102.640 2.24 1.59 0.154 1.35 -0.89
    2017-02-01 102.920 2.08 1.57 0.154 1.33 -0.75
    2017-03-01 102.850 2.28 1.58 0.154 1.34 -0.94
    2017-04-01 102.720 1.96 1.57 0.154 1.33 -0.63
    2017-05-01 102.830 2.00 1.57 0.154 1.33 -0.67
    2017-06-01 102.610 1.81 1.58 0.154 1.34 -0.47
    2017-07-01 102.780 2.17 1.56 0.154 1.32 -0.85
    2017-08-01 103.370 2.49 1.61 0.154 1.36 -1.13
    2017-09-01 103.490 2.00 1.68 0.154 1.42 -0.58
    2017-10-01 103.390 1.76 1.81 0.154 1.53 -0.23
    2018-09-01 105.650 2.09 2.01 0.154 1.70 -0.39
    2018-10-01 105.460 2.00 2.07 0.154 1.75 -0.25
    2018-11-01 104.710 2.04 2.15 0.154 1.82 -0.22
    2020-01-01 105.790 1.49 1.62 0.154 1.37 -0.12
     

    결과를 파일로 추출

    In [20]:
    title = '1996~2020 1년만기 정기예금금리(세후) 및 물가상승율'
    df.to_excel(title + '.xlsx')
    plt.savefig(title + '.png')
    
     
    <Figure size 432x288 with 0 Axes>
    In [ ]:
     
    

    정기예금금리(1996-2020).ipynb
    0.18MB
    소비자물가지수.csv
    0.01MB
    정기예금금리.csv
    0.05MB
    1996~2020 1년만기 정기예금금리(세후) 및 물가상승율.png
    0.00MB
    1996~2020 1년만기 정기예금금리(세후) 및 물가상승율.xlsx
    0.02MB
    이자소득세율_변화.jpg
    0.03MB

    반응형
Designed by Tistory.