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