Почему прогноз моей модели ARIMA является прямой линией?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему прогноз моей модели ARIMA является прямой линией?

Сообщение Anonymous »

Я работаю над проблемой прогнозирования временных рядов, используя модель ARIMA из statsmodels. Моя цель — спрогнозировать транспортный поток для конкретного места (PEMS08). Первоначально я использовал произвольные параметры (p, d, q) = (2, 1, 2), но в результате прогноза получилась плоская прямая линия, которая не отражает фактические изменения данных.
Я подозреваю, что проблема может быть связана с неправильным выбором параметров или ограниченностью данных. Затем я реализовал ручной поиск по сетке, чтобы найти оптимальные значения (p, d, q). При использовании лучших параметров (0, 1, 1) прогнозы модели улучшились, но ошибки по-прежнему значительны, и модель не полностью отражает сложность временного ряда.
Последовательность действий диаграмма

Код: Выделить всё

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error, mean_squared_error
from statsmodels.tsa.stattools import adfuller

# Function for Mean Absolute Percentage Error (MAPE)
def mean_absolute_percentage_error(y_true, y_pred):
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100

# Simulated time series data for example
np.random.seed(42)
time_steps = 100
series = np.cumsum(np.random.randn(time_steps)) + 50  # Example data

# Create a DataFrame with a datetime index
time_index = pd.date_range(start='2023-01-01', periods=len(series), freq='D')
df = pd.DataFrame({'value': series}, index=time_index)

decomposition = sm.tsa.seasonal_decompose(df['value'], model='additive', extrapolate_trend='freq')
fig = decomposition.plot()
plt.show()

adf_result = adfuller(df['value'])
adf_stat = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]
print(f"ADF Statistic: {adf_stat}")
print(f"p-value: {p_value}")
print(f"Critical Values: {critical_values}")

train_size = int(0.8 * len(series))
train, test = series[:train_size], series[train_size:]

# Using manually tuned parameters based on earlier exploration
optimized_model = sm.tsa.ARIMA(train, order=(0, 0, 1))  # p=0, d=0, q=1
optimized_fitted_model = optimized_model.fit()

# Forecast
optimized_forecast = optimized_fitted_model.forecast(steps=len(test))

optimized_mape = mean_absolute_percentage_error(test, optimized_forecast)
optimized_mae = mean_absolute_error(test, optimized_forecast)
optimized_rmse = np.sqrt(mean_squared_error(test, optimized_forecast))

print(f"MAPE: {optimized_mape:.2f}%")
print(f"MAE: {optimized_mae:.2f}")
print(f"RMSE: {optimized_rmse:.2f}")

# Step 6: Plot Results
plt.figure(figsize=(10, 6))
plt.plot(test, label='Actual')
plt.plot(optimized_forecast, label='Optimized ARIMA Prediction')
plt.plot(
pd.Series(test).rolling(window=5).mean(),
label='Moving Average', linestyle='--'
)
plt.title('Optimized ARIMA Model Forecast vs Actual')
plt.xlabel('Time Steps')
plt.ylabel('Values')
plt.legend()
plt.grid()
plt.show()

Диаграмма сезонного остатка тренда

Подробнее здесь: https://stackoverflow.com/questions/792 ... aight-line
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему прогноз моей модели ARIMA является прямой линией?
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Почему прогноз моей модели ARIMA является прямой линией?
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Получение прямой линии при создании модели ARIMA
    Anonymous » » в форуме Python
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Прогноз временных рядов: ARIMA против Пророка
    Anonymous » » в форуме Python
    0 Ответы
    65 Просмотры
    Последнее сообщение Anonymous
  • Почему мой прогноз Auto ARIMA не соответствует фактическим данным о спросе с четкими тенденциями и сезонностью?
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»