Моделиране с 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()
- Оценка на RMSE: Средната квадратична грешка (RMSE) от 0,0306 беше. Тази ниска RMSE показва, че моделът прави точни прогнози, като грешките обикновено са в много тесен диапазон.
В заключение публикацията в блога демонстрира практическите стъпки за прогнозиране на цените на затваряне на обменния курс с помощта на модела ARIMA. Той подчерта значението на точните прогнози за обменния курс и как това може да се постигне чрез събиране на данни, избор на модел и строга оценка. Метриката RMSE служи като количествена мярка за ефективността на модела, показвайки способността му да прави надеждни прогнози.
пълните кодове могат да бъдат намерени тук https://github.com/takalani95/-Exchange_Rate_Forecasting-