Facebook Prophetでドル円(USD/JPY)を予測してみた|精度と限界をPythonで検証

Python実装・コード

ドル円が161円台まで急騰したニュースを見て、僕は「あれ、これってチャートのトレンドから事前にある程度予測できたんじゃないか?」と思ってしまいました。。。完全に後出しジャンケンの発想なんですが、本当にそうなのか気になって仕方がなかったので、Pythonの時系列予測ライブラリ「Prophet」で試してみることにしました。

正直、機械学習はほぼ素人なので「とりあえず動かしてみて、当たるかどうか見てみよう」くらいの気持ちでの検証です。先に結論を言うと、思っていたよりも参考にならない部分と、意外と使える部分の両方がありました。

Prophetとは

ProphetはMeta(旧Facebook)が公開している時系列予測ライブラリです。トレンド・季節性・休日効果などを分解して将来値を予測してくれるのが特徴で、統計やデータサイエンスの専門知識がなくても比較的簡単に使えるよう設計されています。インストールはpipで一発です。

pip install prophet yfinance pandas

Pythonでドル円データを取得して予測する

yfinanceでUSDJPY=Xの過去データを取得し、Prophetが要求する「ds(日付)」「y(値)」の2カラム形式に整えてモデルに渡します。

import yfinance as yf
import pandas as pd
from prophet import Prophet

# 過去2年分のドル円データを取得
df = yf.download("USDJPY=X", period="2y", interval="1d")
df = df.reset_index()[["Date", "Close"]]
df.columns = ["ds", "y"]

# Prophetモデルの学習
model = Prophet(
    changepoint_prior_scale=0.05,  # トレンドの変化に対する感度
    daily_seasonality=False,
)
model.fit(df)

# 30日先まで予測
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)

print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail(10))

これを動かすと、向こう30日分の予測値(yhat)と、その上下の信頼区間(yhat_lower / yhat_upper)が出力されます。グラフにすると緩やかな上昇トレンドのラインがきれいに描かれて、「お、ちゃんと動いてるじゃん」とちょっと感動しました。

実際のFOMC急騰には全く追いつけなかった

ただし、今回のように6月FOMCでウォーシュFRB議長体制下の経済見通しがタカ派的に上方修正され、ドル円が160円台後半から一気に161.81円前後まで跳ねたような「イベント駆動の急騰」は、Prophetの予測区間(信頼区間)を普通に超えてきました。当然です。Prophetは過去の価格パターンからなめらかなトレンドを描くモデルなので、要人発言や金融政策イベントのような「サプライズ」までは織り込めません。

逆に言うと、Prophetは「平常時の緩やかなトレンド把握」には向いていても、「FOMCや日銀会合前後の値動き」を当てる用途には不向きということがよく分かりました。当たり前のことを身をもって確認した、という回でした。。。

まとめ

Prophetは導入のハードルが低く、トレンドを可視化する用途には十分使えると感じました。ただ短期のFX予測、特にイベント前後の急変動を当てる目的では過信は禁物です。次は、FOMCや日銀会合の日付を「holidays」パラメータとして組み込んで、イベント前後だけ予測区間がどう変わるかを試してみようと思っています。

タイトルとURLをコピーしました