こんにちは!今日は、「日米の実質金利差とドル円相場」の関係についてみていきましょう!前回の記事では名目金利差で比較をしましたが実質金利することでどう変わるのでしょうか?
特にゼロ金利政策が解除となった今、投資家の皆さんにとっては非常に気になる内容ですよね!早速コードを見てみましょう。
また最下部にもコードへのリンクを貼っていますのでご自由にお使いください。
ライブラリのインポート
まずはデータを手に入れることから始めます。今回は過去20年間の日本とアメリカの金利データ、そしてドル円相場のデータが必要になります。これらのデータを入手するために、yfinance
というおなじみのライブラリを使用します。また今回は回帰直線を引くためにsklearn.linear_modelから最小二乗法とリッジ回帰、ラッソ回帰をインポートしました。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.dates as mdates
from sklearn.linear_model import LinearRegression, Ridge, Lasso
データの前処理
次のコードブロックでは、yfinance
を使って、日本とアメリカの金利データ、そしてドル円の為替レートデータをダウンロードしています。そして、これらのデータを一つのDataFrame
に結合し、日米の実質金利差も計算しています。DataFrame
には、日付、日本の金利、アメリカの金利、金利差、ドル円為替レートが含まれています。
interest_rate_us = "^TNX" # 米国10年債金利
usdjpy = "JPY=X"
# 過去20年分のデータを取得
data_us = yf.download(interest_rate_us, start="2004-03-01", end="2024-03-01")
data_jp = pd.read_csv('/content/10yr bond yield_jp.csv')
usdjpy_data = yf.download(usdjpy, start="2004-03-01", end="2024-03-01")
# 'Date'列の日付形式を変更してDateTimeオブジェクトに変換
data_jp['Date'] = pd.to_datetime(data_jp['Date'], format='%m/%d/%y')
# 変換した'Date'列をDataFrameのインデックスに設定
data_jp.set_index('Date', inplace=True)
data_us = data_us["Close"].rename("Rate US")
data_jp = data_jp[" Close"].rename("Rate JP")
usdjpy_data = usdjpy_data["Close"].rename("USD/JPY")
# DataFrameの作成
df = pd.concat([data_jp, data_us, usdjpy_data], axis=1)
df["Rate Difference"] = df["Rate US"] - df["Rate JP"]
# NaNを含む行を削除
df = df.dropna()
散布図と近似直線の視覚化
このコードブロックでは、Rate Difference
とUSD/JPY
の関係を散布図で表示し、最小二乗法、Ridge、およびLassoを使用してデータに近似直線をフィットさせています。各近似直線の方程式もプロットに表示されます。
これらのステップによって、実質金利差とUSD/JPYの相関関係を視覚化し、さらに統計的手法を用いてその関係を数値化することができます。
X = df['Rate Difference'].values.reshape(-1, 1)
y = df['USD/JPY'].values
models = {
'Linear Regression': LinearRegression(),
'Ridge': Ridge(alpha=1.0),
'Lasso': Lasso(alpha=0.1)
}
plt.figure(figsize=(14, 7))
for name, model in models.items():
model.fit(X, y)
y_pred = model.predict(X)
plt.plot(X, y_pred, label=f'{name}: y={model.coef_[0]:.4f}x + {model.intercept_:.4f}')
plt.scatter(X, y, color='lightgray', label='Actual Data')
plt.xlabel('Rate Difference')
plt.ylabel('USD/JPY')
plt.title('Last 20 years: Rate Difference vs. USD/JPY with Approximation Lines')
plt.legend()
plt.show()
いかにそれぞれ5年、10年、20年の過去データを使って描画したものを並べました。
こうしてみると最近5年のものがかなりわかりやすいですよね。大体金利差が1%縮まると14円円高方向に振れて金利差がゼロのときは約90円が適正価格、ということですね。
もちろん為替相場は金利差がすべてではありませんが、間違いなくみんなが気にしている部分であることは間違いないのでこのような情報を使ってしっかり予測していきたいですね。
注:今回も日本の10年債の金利はyfinanceの対象になかったのWall Street Journalより自前でダウンロードしております。
colab.research.google.com
参考サイト
TMBMKJP-10Y | Japan 10 Year Government Bond Historical Prices - WSJ