こんにちは!データサイエンティストのウマたん(@statistics1012)です。
最近非常に振れ幅の大きいドル円相場。
2022年の頭ごろから一気に円安ドル高が進み一時期は落ち着きを見せるもさらに上昇して一時はドル円160円を超える時期もありました。
ドル円の動きによって多くのビジネスや収入が影響を受けるため、ここまでボラティリティが大きいと困りますよね・・・
僕自身も日本円とドルの収入を得ながらジョージアという国でラリを使って生活しているので、日本円とドルだけでなくラリとの為替レートも日々気にしながら生活しています。
この記事では、そんな関心の大きいドル円レートの予想AIを簡単に作っていきたいと思います。
複雑なモデルではないので予測精度は期待できません。あくまでもモデル構築の参考にしてください。
それではいってみましょう!
ドル円の値動きをPythonで取得
まずPythonでドル円の値動きを取得していきましょう!
こちらはPythonのライブラリであるyfinanceを使えば取得できます。
なお、ここではGoogle Colabを利用していきますので最初からyfinanceがインストールされていますが、他の環境を使う場合はあらかじめ以下のようにpip installしておいてください。
pip install yfinance
それでは、以下のようにコードを記述していきましょう!
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
# データの取得
start_date = "2020-01-01"
end_date = "2025-01-01"
ticker = "JPY=X" # Yahoo Financeのドル円ティッカー
data = yf.download(ticker, start=start_date, end=end_date)
display(data)
結果は以下のようになりました。
1日ごとにドル円のデータが取得されているのが分かると思います。
カラムがいくつか存在しますが、Closeが終値、Highが高値、Lowが安値、Openが始値、Volumeが出来高を表しています。
コードのtickerというのは取得対象のデータのコードを表していて、JPY=Xと入れることでYahooファイナンスのドル円データを取得することができます。
他にも株価データは各企業のティッカーコードが決まっているので、それを入力することで株価を取得できます。
株価分析に関しては以下の記事を参考にしてみてください。
続いて取得したドル円データを可視化していきましょう!
いくつかある指標の中から今回は終値(Close)を抽出して利用していきます。
可視化コードは以下のようになります。
data = data[['Close']]
data.rename(columns={'Close': 'USD_JPY'}, inplace=True)
# ドル円の値動きを可視化
plt.figure(figsize=(12, 6))
plt.plot(data.index, data['USD_JPY'], label="USD/JPY", color="blue")
plt.title("USD/JPY Exchange Rate Movement")
plt.xlabel("Date")
plt.ylabel("Exchange Rate")
plt.legend()
plt.show()
結果は以下のようになりました。
2020年から直近までのドル円データを取得して動きを可視化することができました。
こう見ると改めて、物凄い勢いで円安ドル高が進んでいるのが分かると思います。
特徴量を作成しドル円の値動きを予想するAIを構築
それでは続いて特徴量を生成し、ドル円の値動きを予想するAIを構築していきましょう!
今回は、過去の値動きを元に次の日のドル円を予想するシンプルなAIを構築していきたいと思います。
それではコードを書いていきましょう!
まずは以下のようにライブラリをインポートしてください。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
import yfinance as yf
今回はモデルとしてはシンプルな線形回帰モデルを使っていきます。
また評価指標としては平均絶対誤差(MAE)と決定係数(R2)を利用していきます。
そのため、それらを利用するのに必要なライブラリをあらかじめインポートしています。
続いて先ほど実行したようにデータを取得していきます。
# データの取得
start_date = "2024-01-01"
end_date = "2025-01-01"
ticker = "JPY=X" # Yahoo Financeのドル円ティッカー
data = yf.download(ticker, start=start_date, end=end_date)
data = data[['Close']]
data.rename(columns={'Close': 'USD_JPY'}, inplace=True)
そして、こちらのデータに対して特徴量を追加していきます。
今回はシンプルに過去5日間分のデータを特徴量として追加します。
以下のようにコードを記述しましょう!
# 特徴量の作成
lags = 5
for i in range(1, lags + 1):
data[f'lag_{i}'] = data['USD_JPY'].shift(i)
data.dropna(inplace=True)
このコードでは、1~5までshiftメソッドでずらして新たな特徴量として追加しています。
そして最終的にdropnaで欠損値が発生するレコードを除去しています。
どんなデータになっているか見ておきましょう!
display(data)
ちゃんとカラムとしてlag_1からlag_5までが入っているのが分かると思います。
そしてこれらのデータを使ってモデル構築、予測をおこなっていきましょう!
# モデルの訓練
X = data.drop('USD_JPY', axis=1)
y = data['USD_JPY']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=False)
model = LinearRegression()
model.fit(X_train, y_train)
ターゲットである当日のドル円の値はyに格納し、それ以外はXに格納しています。
そしてtrain_test_splitメソッドを使ってデータを学習データとテストデータに分割しています。
test_size=0.2なのでテストデータの割合が2割になるように分割します。
そしてshuffle=Falseなのでデータをランダムに分割するのではなく前から順番に分割しています。
というのも、時系列データをランダムに分割してしまうと「未来の知り得ない情報で学習して過去を予測する」という、現実では起こり得ないことが起こってしまうからです。
さて、分割したデータのうち学習データを使って線形回帰モデルを構築しています。
ドル円予想AIモデルを使って予測をしてみよう!
それでは、構築したドル円予想AIモデルを使って実際に予測をしてみましょう!
コードは以下のようになります。
# 予測
predictions = model.predict(X_test)
# 結果の評価
mae = mean_absolute_error(y_test, predictions)
r2 = r2_score(y_test, predictions)
print(f"MAE: {mae:.2f}")
print(f"R2: {r2:.2f}")
# 結果の可視化
plt.figure(figsize=(12, 6))
plt.plot(y_test.index, y_test, label="Actual", color="blue")
plt.plot(y_test.index, predictions, label="Predicted", color="red")
plt.legend()
plt.title("USD/JPY Prediction")
plt.xlabel("Date")
plt.ylabel("USD/JPY Rate")
plt.show()
まずモデルに対してテストデータを投入し、実際に予測値を算出しています。
その上でMAEとR2を計算しMatplotlibでグラフを描画しています。
Matplotlibの使い方については以下の記事で詳しく解説していますのでチェックしてみてください!
結果は以下のようになりました!
MAE: 0.76
R2: 0.82
結果は、MAEが0.76なので1日の平均誤差が1以内。これは現在のボラティリティの高さの中では上手く予測できている方なのか?
ドル円予想AI まとめ
ここまででドル円予想AIの構築方法について見てきました。
今回構築したモデルは非常にシンプルです。
実はこのモデル、シンプルに過去5日間の平均値を予測値として出力するアルゴリズムに負けちゃってたりします(MAE:0.57、R2:0.90)。
他にもたくさんの特徴量を投入したり、外部の経済的な指標も特徴量に含めて、モデルを改良していくことで精度はよくなっていきます。
ぜひ精度改善をしてみましょう!
さらに詳しくAIやデータサイエンスの勉強がしたい!という方は当サイト「スタビジ」が提供するスタビジアカデミーというサービスで体系的に学ぶことが可能ですので是非参考にしてみてください!
AIデータサイエンス特化スクール「スタアカ」
【価格】 | ライトプラン:1280円/月 プレミアムプラン:149,800円 |
---|---|
【オススメ度】 | |
【サポート体制】 | |
【受講形式】 | オンライン形式 |
【学習範囲】 | データサイエンスを網羅的に学ぶ 実践的なビジネスフレームワークを学ぶ SQLとPythonを組み合わせて実データを使った様々なワークを行う マーケティングの実行プラン策定 マーケティングとデータ分析の掛け合わせで集客マネタイズ |
データサイエンティストとしての自分の経験をふまえてエッセンスを詰め込んだのがこちらのスタビジアカデミー、略して「スタアカ」!!
当メディアが運営するスクールです。
24時間以内の質問対応と現役データサイエンティストによる複数回のメンタリングを実施します!
カリキュラム自体は、他のスクールと比較して圧倒的に良い自信があるのでぜひ受講してみてください!
他のスクールのカリキュラムはPythonでの機械学習実装だけに焦点が当たっているものが多く、実務に即した内容になっていないものが多いです。
そんな課題感に対して、実務で使うことの多いSQLや機械学習のビジネス導入プロセスの理解なども合わせて学べるボリューム満点のコースになっています!
Pythonが初めての人でも学べるようなカリキュラムしておりますので是非チェックしてみてください!
ウォルマートのデータを使って商品の予測分析をしたり、実務で使うことの多いGoogleプロダクトのBigQueryを使って投球分析をしたり、データサイエンティストに必要なビジネス・マーケティングの基礎を学んでマーケティングプランを作ってもらったり・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践してもらったりする盛りだくさんの内容になってます!
・BigQuery上でSQL、Google Colab上でPythonを使い野球の投球分析
・世界最大手小売企業のウォルマートの実データを用いた需要予測
・ビジネス・マーケティングの基礎を学んで実際の企業を題材にしたマーケティングプランの策定
・Webサイト構築してデータ基盤構築してWebマーケ×データ分析実践して稼ぐ