Моделирование с помощью ARIMA

Раздел 4: Моделирование с помощью ARIMA

В этом разделе мы углубимся в процесс моделирования с использованием модели ARIMA (авторегрессивное интегрированное скользящее среднее). ARIMA — это метод прогнозирования временных рядов, который сочетает в себе компоненты авторегрессии (AR) и скользящего среднего (MA), что делает его пригодным для прогнозирования зависящих от времени данных, таких как обменные курсы.

Обзор модели ARIMA:

  • Авторегрессия (AR): этот компонент моделирует взаимосвязь между текущим значением временного ряда и его прошлыми значениями. В предоставленном вами коде p представляет порядок компонента авторегрессии. Он указывает, сколько значений задержки временного ряда будет использоваться для прогнозирования текущего значения.
  • Интегрированный (I): этот компонент представляет собой количество различий, необходимых для того, чтобы временной ряд стал стационарным.
  • Скользящее среднее (MA): этот компонент моделирует взаимосвязь между текущим значением и прошлыми ошибками прогноза.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from datetime import datetime

data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)

# Split data into training and validation sets
train_data = data[data.index < datetime(2023, 8, 1)]
valid_data = data[data.index >= datetime(2023, 8, 1)]

# Determine p, d, and q based on your analysis
p = 1  # Example value
d = 1  # Example value
q = 1  # Example value

# Fit the ARIMA model with additional features
order = (p, d, q)
exogenous_features = ['Open', 'High', 'Low', 'Change %', '20-day MA', 'RSI', 'MACD', 'Signal Line', 'Histogram', 'Upper Bollinger Band', 'Lower Bollinger Band']
model = ARIMA(train_data['Price'], exog=train_data[exogenous_features], order=order)
model_fit = model.fit()

# Forecast future values with additional features
forecast_steps = len(valid_data)  # Forecast for the length of validation data
forecast = model_fit.forecast(steps=forecast_steps, exog=valid_data[exogenous_features])

# Calculate RMSE
rmse = np.sqrt(np.mean((forecast - valid_data['Price'])**2))
print(f"Root Mean Squared Error (RMSE): {rmse:.4f}")

# Create a DataFrame for actual and predicted values
forecast_df = pd.DataFrame({'Actual': valid_data['Price'], 'Predicted': forecast}, index=valid_data.index)

# Plot the actual and predicted values
plt.figure(figsize=(10, 6))
plt.plot(forecast_df.index, forecast_df['Actual'], label='Actual')
plt.plot(forecast_df.index, forecast_df['Predicted'], label='Predicted')
plt.xlabel('Date')
plt.ylabel('Closing Price')
plt.title('Actual vs Predicted Closing Prices')
plt.legend()
plt.show()
  1. Оценка RMSE: среднеквадратическая ошибка (RMSE), равная 0,0306, была. Такое низкое значение RMSE указывало на то, что модель давала точные прогнозы с ошибками, как правило, в очень узком диапазоне.

В заключение в блоге продемонстрированы практические шаги по прогнозированию цен закрытия обменного курса с использованием модели ARIMA. Он подчеркнул важность точных прогнозов обменного курса и то, как этого можно достичь посредством сбора данных, выбора модели и тщательной оценки. Метрика RMSE служила количественной мерой эффективности модели, демонстрируя ее способность делать надежные прогнозы.

полные коды можно найти здесь https://github.com/takalani95/-Exchange_Rate_Forecasting-