Моделиране с ARIMA

Раздел 4: Моделиране с ARIMA

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

Преглед на модела ARIMA:

  • AutoRegressive (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-