AIとファイナンス

AIとファイナンスの架け橋、それがこのブログの目指すところです。兼業投資家向けに、Pythonを駆使して株やFXの分析を「自分で」行えるようになるための情報を提供します。ニューラルネットワークを活用した市場予測から、実証済みの金融理論まで、全てのコードを公開し、誰もが活用できるように!是非色々なコードで遊んでみてください!

【分析】日米の実質金利差とドル円相場の関係【Python】

こんにちは!今日は、「日米の実質金利差とドル円相場」の関係についてみていきましょう!前回の記事では名目金利差で比較をしましたが実質金利することでどう変わるのでしょうか?

特にゼロ金利政策が解除となった今、投資家の皆さんにとっては非常に気になる内容ですよね!早速コードを見てみましょう。

また最下部にもコードへのリンクを貼っていますのでご自由にお使いください。

ライブラリのインポート

まずはデータを手に入れることから始めます。今回は過去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")

# USD/JPYの終値を取得
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 DifferenceUSD/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年

結果 過去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