ビットコインの価格予測:Rと機械学習で見る2024年の予測

こんにちは!今日は Rと機械学習でビットコインの価格見通しを分析する方法ビットコインの価格は、市場の様々な要因によって影響を受けます。

비트코인 가격 전망 포스트 - 비트코인 상승 그림

これを分析するために 時系列データを扱う代表的な方法である ARIMA モデルを使用以下では、データの準備から可視化、そしてモデルの評価まで段階的に説明します。

データ準備・前処理

まず、分析に必要なデータを取り込み、整理する段階です。 ヤフーファイナンスからビットコインの日別価格データを取得し、時系列データに変換します。

# 必要なパッケージのインストールとロード
install.packages(c("forecast", "ggplot2", "quantmod"))
library(forecast) # ARIMAモデリング用パッケージをロードします。
library(ggplot2) #データ可視化用パッケージ
library(quantmod) # 金融データ取得用パッケージ

# ビットコインデータの取得
getSymbols("BTC-USD", src = "yahoo") # ヤフーファイナンスからデータを収集します。
btc_price <- Cl(get("BTC-USD"))       # 終値データのみ抽出

コード解説:

  1. install.packages(c("forecast", "ggplot2", "quantmod")):必要なパッケージをインストールします。forecastはARIMAモデル、 ggplot2は視覚化、quantmodは金融データの収集に使用されます。
  2. library(forecast):forecastパッケージを読み込みます。
  3. getSymbols("BTC-USD", src = "yahoo"):Yahoo Financeからビットコインデータを取得します。
  4. Cl(get("BTC-USD")):取得したデータから終値(Closing Price)だけを抽出してbtc_price変数に保存します。

ARIMAモデルの実装

次に、データをARIMAモデルに適合させ、今後のビットコイン価格予測に活用します。

# 時系列データに変換
btc_ts <- ts(btc_price, frequency = 365) # 日次データに変換する

# ARIMAモデルを適用
model_fit <- auto.arima(btc_ts, seasonal = TRUE) # 最適モデル自動選択

# 30日間の価格予測
forecast_result <- forecast(model_fit, h = 30) # 今後30日間の予測を実行します。

コード解説:

  1. ts(btc_price, frequency = 365): 終値データを日別時系列データに変換します。frequency = 365は年間周期を表します。
  2. auto.arima(btc_ts, seasonal = TRUE):ARIMAモデルを自動で設定し、最適なパラメータを選択します。
  3. forecast(model_fit, h = 30): model_fitに適合したモデルを使用して30日間のビットコイン価格を予測します。

予測結果の可視化

予測結果を可視化し、ビットコインの価格見通しを一目で確認できるようにします。下のグラフの右端を見ると、上下変動幅で予測結果を視覚化しています。

# ggplot2で結果の可視化
autoplot(forecast_result) + +...
  ggtitle("Bitcoin Price Forecast") + + gg title("Bitcoin Price Forecast")
  xlab("Date") + + xlab("Date")
  ylab("Price (USD)") + + ylab("Price (USD)")
  theme_minimal()

コード解説:

  1. autoplot(forecast_result): 予測結果を自動的に視覚化します。
  2. ggtitle(): グラフのタイトルを設定します。
  3. xlab() / ylab():x軸とy軸のラベルをそれぞれ設定します。
  4. theme_minimal(): グラフのテーマを簡素化してすっきりさせます。
비트코인 가격 전망 시계열 그림
( ビットコインの価格見通しの可視化グラフ )

モデル性能評価

ビットコイン価格予測のためのARIMAモデルの性能を評価するために、精度指標を確認し、残差を分析します。

# 精度評価
accuracy(forecast_result) #の予測精度の確認

# 残差分析の実行
checkresiduals(model_fit) #モデルの適合性検証

コード解説:

  1. accuracy(forecast_result): 予測結果の精度を評価し、RMSE、MAEなど様々な指標を提供します。
  2. checkresiduals(model_fit):残差分析を実行して、モデルがデータによく適合しているかどうかを検証します。時系列データのパターンがよくモデル化されたか確認するのに便利です。
정확도 평가 확인 콘솔화면
( 精度評価確認コンソール画面 )

上記で示したビットコイン価格予測モデルの予測精度データについて、より詳細な説明は以下の通りです。

accuracy(forecast_result) 関数の出力結果を解釈してみましょう。 この関数は、予測モデルの性能を評価するために様々な指標を提供します。以下は各指標とその値の解釈です:

1. ME (Mean Error, 平均誤差)

  • : 0.03430013
  • 意味: 予測値と実際の値の差を平均で表した指標です。 値が0に近いほど、予測バイアスがないことを示します。
  • 解釈: 値がほぼ0に近いので、予測に大きな偏りはないようです。

2. RMSE (Root Mean Square Error, 平均平方根誤差)

  • : 915.6077
  • 意味: 予測値と実際の値との誤差を二乗した後、平均を求め、これを平方根に変換した値です。誤差の大きさを測定し、値が低いほど予測精度が高くなります。
  • 解釈RMSE 値が比較的高く、予測値と実際の値との間にかなりの変動があることを示唆しています。

3. MAE (Mean Absolute Error, 平均絶対誤差)

  • : 449.3615
  • 意味: 予測値と実際の値との間の絶対誤差の平均です。MAEはRMSEより外れ値(outlier)の影響を受けにくいです。
  • 解釈MAEは449.36で、RMSEよりも低い値を示しています。これは、異常値が存在するものの、全体的に誤差の平均は比較的低いことを意味します。

4. MPE (Mean Percentage Error, 平均パーセンテージ誤差)

  • : -1.857804
  • 意味:予測値と実際の値の相対誤差をパーセンテージで表した平均値です。負の値は、予測値が実際の値より低く推定されたことを示します。
  • 解釈約 : 約 -1.86%で、予測値が実際の値より若干低く見積もられる傾向があります。

5. MAPE (Mean Absolute Percentage Error, 平均絶対パーセント誤差)

  • : 3.660335
  • 意味: 予測値と実際の値の相対誤差の絶対値をパーセンテージで平均化した値です。一般的に、値が10%以下であれば、非常に良い予測と評価されます。
  • 解釈: MAPEが 3.66%これは、モデルが全体的に正確な予測をしていることを示すものです。

6. MASE (Mean Absolute Scaled Error, 平均絶対スケール誤差)

  • : 0.03490917
  • 意味:モデルのMAEを基準モデル(例えば、単純なナイーブモデル)のMAEで割った値です。 値が1より小さい場合、モデルが基準モデルより優れた性能を示すことを示します。
  • 解釈MASE : MASEが 0.035と非常に低く、モデルが基準モデルよりはるかに優れた性能を発揮していることを示しています。

7. ACF1 (First-order Autocorrelation of Residuals, 残差の1次自己相関)

  • : 1.077496e-05 (つまり、 0.00001077に近い)
  • 意味: 残差の1次時差における自己相関係数を示します。 値が0に近いほど、残差が独立(white noise)であることを示します。
  • 解釈: ACF1値がほぼ0に近く、残差が独立しており、ARIMAモデルがデータのパターンをよく説明していることを示しています。

総合解釈

  • メリット:
    • MEとACF1の値がほぼ0に近く、予測の偏りがなく、残差の独立性がよく保たれています。
    • MAPEが3.66%と非常に低く、予測精度が高いです。
    • MASEが基準モデルに比べて非常に優れた性能を発揮します。
  • 限界:
    • RMSE値が高いため、異常値による影響がある可能性があります。
    • 予測性能が高いデータ区間と低い区間との偏差が大きい場合があります。

ビットコイン価格予測ARIMAモデルの全体的な性能は優れていると評価されますが、データのボラティリティが高い場合は、より綿密に分析したり、異常値を除去/補完してRMSEを改善することが望ましいかもしれません。

( モデル適合性検証分析グラフ )

上記で示したビットコイン価格予測モデルの適合性検証分析グラフのより詳細な説明は以下の通りです。

添付の図は、ARIMA(0,1,2)モデルの残差分析結果を示しています。 各パネルの解釈は以下の通りです:

1.上部パネル: 時間による残差

  • 残差が時間とともに0を中心に変動していますが、分散が大きくなっている様子が見られます。 これは 二分散性(heteroskedasticity)を示し、これはARIMAモデルの仮定(分散が一定)に反するものです。
  • 明確なパターンが見られないことはポジティブですが、分散が増加する問題を解決することで、より良いモデル適合が可能になります。

2.左下パネル:残差の自己相関関数(ACF)

  • ACFグラフは残差の自己相関を表します。
  • 理想的には、すべての点が青色の信頼区間内にあり、残差が純粋なホワイトノイズ(white noise)であることを示す必要があります。
  • しかし、このグラフでは、一部のスパイクが信頼区間を越えていることがわかります。 これは、残差に自己相関が残っていることを示しており、モデルがデータの時間的構造を完全に説明していない可能性を示唆しています。

3.右下のパネル: 残差のヒストグラム

  • ヒストグラムは残差の分布を示しています。中央に尖ったピークがありますが、両端の両端に 極端な値(異常値) が見えます。
  • これは、残差が正規分布に従わないことを示し、ARIMAモデルのもう一つの仮定(残差の正規性)を破ります。
  • このような異常値は、モデルの性能に悪影響を及ぼす可能性があります。

ARIMAモデル結果の意味

ARIMAモデル結果の解釈:予測結果は、ビットコインの価格見通しの全体的な傾向を示しています。モデルの適合性と残差分析の結果が安定していれば、予測の信頼性を高く評価することができます。注意点としては、外部要因(市場ニュース、経済的変化など)がモデルに反映されていないため、単純な参考用としてのみ使用する必要があります。

仕上げ

この記事では、ARIMAモデルを活用してビットコインの価格見通しを分析し、視覚化しました。Rと機械学習を活用したデータ駆動型分析は、将来の価格を予測するための強力なツールになりますが、実際の投資には、より多くの要因を考慮する必要があることを忘れないでください。

#用語解説

1.ARIMA(自己回帰統合移動平均)
定義: 時系列データを分析し、将来の値を予測するために使用される統計モデル。
構成要素:
AR(自己回帰):過去のデータの値が現在の値に影響を与えること。
I(差分):データを安定した形に変換するために使用する演算。
MA(移動平均):過去の予測誤差を利用して現在の値を説明する。
使用例:株価、ビットコインの価格、気温の変化など、時間順に観測されたデータを予測するために主に使用されます。


2.時系列データ (Time Series Data)
定義: 時系列に従って収集されたデータ。
特徴:データが時間とともに変化するパターン(トレンド、季節性など)を含む。
例:ビットコインの日次価格、月次売上高、年間温度変化。
目的:時間経過に伴うデータの特性を分析し、未来を予測する。

3.RMSE(RMSE(Root Mean Square Error)
定義:予測値と実際の値との差を測定する指標。
計算方法: 予測誤差(実測値 - 予測値)の二乗平均の平方根。
意味: RMSE値が小さいほど、予測モデルが実際のデータによく適合していることを意味します。
使用例:モデルの予測精度を評価する際に使用されます。

4.MAE(平均絶対誤差)
定義: 予測値と実際の値の絶対的な差の平均。
違い:RMSEは誤差を二乗するため、大きな誤差に敏感ですが、MAEはすべての誤差を同じように扱います。
意味:予測モデルがどの程度正確に機能するかを理解するのに便利な指標。

5.残差分析 (Residual Analysis)
定義: モデルの予測値と実際の値との差(残差)を分析するプロセス。
目的: モデルがデータをどれだけよく説明しているかを確認し、パターンがないかをチェックする。
分析方法:
残差の平均は0であること。
残差が特定のパターンがなく、ランダムに分布していること。
使用事例: 残差分析を通じてモデルの適合性を評価し、改善点を見つけることができます。

6.可視化(Visualization)
定義:データをグラフで表現して、複雑な情報を直感的に理解できるようにする方法。
例:
時系列グラフ:時間の経過に伴うデータの変化を可視化する。
散布図:2つの変数間の関係を示す。
目的:データのパターン、傾向、相関関係を簡単に把握し、伝達する。

7.auto.arima()
定義: ARIMAモデルのパラメータ(P, D, Q)を自動的に選択してくれるRの関数。
メリット: ユーザーが直接パラメータを設定しなくても、最適なモデルを自動的に設定。
使用例: 時系列データを素早く簡単に分析したい場合。

8.forecast()
定義: ARIMAモデルに基づいて未来値を予測するR関数。
使い方: 予測期間を指定(h = n)してn個の未来データを生成。
結果:予測値と信頼区間を含む結果を返す。
応用:ビットコインの価格、株価、需要予測など。

9.オートプロット()
定義: Rで視覚化を簡単に作成するのに役立つ関数。
特徴:データをグラフの形で自動表現。
例:autoplot(forecast_result)は予測結果を折れ線グラフで表示。
メリット:直感的でシンプルなコーディングで可視化を実現。

10.季節性 (Seasonality)
定義:データに周期的に繰り返されるパターンが存在する現象。
例:ビットコインの価格は、特定の期間(例えば、週末、特定の月)にパターンが繰り返されることがある。
分析目的:このようなパターンをモデルに反映し、予測精度を高める。

類似の投稿