こんにちは!今日は、「日米の名目金利 差とドル円 相場」の関係についてみていきましょう!
金利 差とドル円 相場の関係って? まず、名目金利 差とは何か、そしてそれがドル円 相場にどう関わってくるのかを簡単に説明しましょう。名目金利 差とは、文字通り、異なる国の名目金利 の差のことを指します。この金利 差が外国為替 レート、特にここではドル円 相場にどのように影響を与えるのかを探るのが今回のテーマです。
理論的には、金利 が高い国の通貨は、金利 が低い国の通貨に対して高く評価される傾向があります。これは「キャリートレード 」という投資戦略にも利用されています。しかし、実際のところ、これが常に当てはまるわけではなく、多くの要因が相場に影響を与えます。そこで、過去20年のデータを使って、この関係を実際に確認してみましょう。
いつも通りコードへのリンクは下段にありますのでそちらからご覧ください。
データのダウンロード まずはデータの取得から。日本とアメリ カの金利 データおよびドル円 相場のデータを20年分集める必要があります。ここでは、yfinanceライブラリを使ってドル円 のデータをダウンロードし、金利 データについては公的なデータソースから取得します。
try :
# カンマを区切り文字として指定
df_jp = pd.read_csv ( '/content/Data_jp.csv ' , encoding= 'cp932' , sep= ',' )
except UnicodeDecodeError:
df_us = pd.read_excel ( '/content/Data_us.xlsx' )
try :
# カンマを区切り文字として指定
df_jp = pd.read_csv ( '/content/Data_jp.csv ' , encoding= 'cp932' , sep= ',' )
except UnicodeDecodeError:
df_us = pd.read_excel ( '/content/Data_us.xlsx' )
# 日付の形式を統一する(format指定を省略)
df_jp[ 'Date' ] = pd.to_datetime(df_jp[ 'Date' ])
df_us[ 'Effective Date' ] = pd.to_datetime(df_us[ 'Effective Date' ])
# データフレームの統合
df_merged = pd.merge(df_jp, df_us, left_on= "Date" , right_on= "Effective Date" , how= "outer" )
# 「Effective Rate」と「Rate (%)」の列だけを保持し、NaNが含まれる行を削除
df_filtered = df_merged[[ 'Date' , 'Effective Rate' , 'Rate (%)' ]].copy()
df_filtered.dropna(inplace= True )
df_filtered[ 'Rate Difference' ] = df_filtered[ 'Effective Rate' ] - df_filtered[ 'Rate (%)' ]
usdjpy = yf.download( "JPY=X" , start= "2004-03-01" , end= "2024-03-01" )
usdjpy_close = usdjpy[ 'Close' ]
# マージ(統合)する
# 既存のdf_mergedデータフレームとdf_usdjpyデータフレームをDate列でマージ
df_final = pd.merge(df_filtered, usdjpy_close, on= 'Date' , how= 'left' )
df_final.dropna(inplace= True )
df_final = df_final.rename(columns={
'Effective Rate' : 'Rate JP' ,
'Rate (%)' : 'Rate US'
})
今回はここまででかなり長いコードになってしまっています。これは今回yfinaceだけでなく、そのほかの公的機関からデータを取得し、形が全く違うからなんですね。実はデータ分析の世界ではこのクリーニング作業に一番時間がかかったりします。
データの視覚化
データを手に入れたら、次はそれを視覚化することによって、より深く理解を深めます。まずはドル円 の終値 と日米の金利 をそれぞれ時間の経過と共にプロットし、変化を観察します。
# データフレームの準備
df_final[ 'Date' ] = pd.to_datetime(df_final[ 'Date' ])
fig, ax1 = plt.subplots(figsize=( 14 , 7 ))
# Rate JP, Rate US, Rate Differenceを左の縦軸にプロット
ax1.plot(df_final[ 'Date' ], df_final[ 'Rate JP' ], label= 'Rate JP' , color= 'blue' )
ax1.plot(df_final[ 'Date' ], df_final[ 'Rate US' ], label= 'Rate US' , color= 'red' )
ax1.plot(df_final[ 'Date' ], df_final[ 'Rate Difference' ], label= 'Rate Difference' , color= 'orange' )
# Rate Differenceがゼロのラインを緑の濃い線で強調
ax1.axhline( 0 , color= 'darkgreen' , linewidth= 2 )
# 右の縦軸を設定してCloseをプロット
ax2 = ax1.twinx()
ax2.plot(df_final[ 'Date' ], df_final[ 'Close' ], label= 'Close' , color= 'purple' )
# レジェンドとラベル
ax1.legend(loc= 'upper left' )
ax2.legend(loc= 'upper right' )
ax1.set_xlabel( 'Date' )
ax1.set_ylabel( 'Rate' )
ax2.set_ylabel( 'Close' )
# 日付フォーマット
ax1.xaxis.set_major_formatter(mdates.DateFormatter( '%Y-%m' ))
plt.show()
結果
こうしてみると日銀とFRB の金利 差がゼロに近かった2009年ごろから2016年ごろまで、ドル円 相場は70円台から130円手前までかなりダイナミックに動いたことがわかりますね!
次に、金利 差とドル円 相場の終値 との関係を散布図で見てみましょう。この散布図から、金利 差がドル円 相場に与える影響の傾向を探ります。さらに、この関係を数学的に理解するために、リッジ回帰を使ってみます。リッジ回帰は、回帰分析の一種であり、過学習 を防ぐために正則化 項を導入したものです。
結果
リッジ回帰の結果の式で行くと名目金利 差がゼロのときはx=0となるので切片の99.43円がドル円 の正規レートということになります。ちなみに過去10年でやると、108.77円に値が変わってきます。
結果(過去検証期間10年)
過去五年でやると概ね同じような値で、名目金利 差がゼロであれば$1=108.97円という結果になりました。なので過去のデータだけで行けば、マイナス金利 が解除され、FRB が遅かれ早かれ利下げに動く場合108円方向に向かいそう、ということは言えそうですよね。さて、今回は名目金利 差でやってみたので次回は10年債の利回りでやってみようかなと思います。
今回のコードは以下からアクセスしてください。
また今回は各中央銀行 からのデータのダウンロードが必要となるのでご注意ください。
colab.research.google.com
参考サイト
無担保コールレート(オーバーナイト物)とは何ですか? 資金過不足とは何ですか? : 日本銀行 Bank of Japan (boj.or.jp)
日本銀行時系列統計データ検索サイト (boj.or.jp)
Federal Reserve Board - Home