Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Modelo Autoregressivo Integrado de Médias Móveis | Modelos Estacionários
Análise de Séries Temporais

book
Modelo Autoregressivo Integrado de Médias Móveis

O último modelo que vamos examinar é o média móvel integrada autoregressiva. Este modelo combina autoregressão, média móvel e técnica de diferenciação (esta não é o modelo que discutimos acima). Ele é apresentado da seguinte forma:

Pode parecer bastante complicado, mas, na realidade, olhe, AR é um modelo autorregressivo com o qual você já está familiarizado, MA é uma média móvel, que implica uma combinação linear de erros de previsões passadas.

ARIMA usa 3 parâmetros que devemos escolher (p, d, q):

P - é chamado de ordem de autorregressão. É o número de valores imediatamente anteriores na série que são usados para prever o valor no tempo presente;

D - ordem da diferenciação;

Q - a ordem da média móvel. Permite definir o erro do modelo como uma combinação linear dos valores de erro observados anteriormente.

Nota

Vamos considerar técnicas de diferenciação com mais detalhes nos próximos capítulos

Qual é a vantagem deste modelo? Ele pode prever processos simples não estacionários (mais precisamente, processos nos quais a média e covariância mudam ao longo do tempo) e é mais eficiente ao trabalhar com previsões de curto prazo.

Vamos criar um modelo ARIMA usando statsmodels, para isso, usamos a classe ARIMA():

python
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error
from math import sqrt

X = df.values
size = int(len(X) * 0.6)
train, test = X[0:size], X[size:]
history = train.tolist()
predictions = list()

# Fazendo previsões com o modelo ARIMA
for t in range(len(test)):
model = ARIMA(history, order=(5, 1, 0))
model_fit = model.fit()
output = model_fit.forecast()
predictions.append(output[0])
history.append(test[t])

# Calcular erro MSE
rmse = sqrt(mean_squared_error(test, predictions))
print("Test RMSE: %.3f" % rmse)

# Plotar resultados
plt.plot(test)
plt.plot(predictions, color="red")
plt.show()

Os resultados:

Basicamente, você usará 2 funções: .forecast() e .predict(). A primeira função é para previsões fora do conjunto de dados (o que explica o uso de um laço no exemplo acima), enquanto a função .predict() é utilizada para previsões dentro do conjunto de dados.

Além disso, você pode experimentar com os parâmetros p, q e d para obter os melhores resultados. Mas, mesmo com esses parâmetros, pode-se observar que o modelo acompanha bem as tendências principais.

O código pode levar até 1 minuto para ser processado.

Tarefa

Swipe to start coding

Crie um modelo ARIMA e treine-o com o conjunto de dados pr_air_quality.csv.

  1. Dentro do loop for, crie um modelo ARIMA usando os dados de history e atribua-o à variável model. Em seguida, ajuste o model aos dados e salve-o como model_fit. Depois, faça previsões usando o model_fit ajustado.
  2. Calcule o RMSE: pegue a raiz quadrada (sqrt) do erro médio quadrático (calculado usando os test e predictions).
  3. Visualize os resultados: exiba os valores de test na primeira chamada da função .plot() e os valores de predictions na segunda chamada.

Por favor, note que o código pode levar um tempo longo para completar

Solução

# Importing libraries
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
from math import sqrt
import pandas as pd

# Reading data
df = pd.read_csv("https://codefinity-content-media.s3.eu-west-1.amazonaws.com/943e906e-4de6-4694-a1df-313ceed7cfe7/pr_air_quality.csv")

# Preparing data
X = df["value"].values
size = int(len(X) * 0.97)
train, test = X[0:size], X[size:]
history = train.tolist()
predictions = list()

# Making foreasts with ARIMA model using a `for` loop
for t in range(len(test)):
model = ARIMA(history, order=(5, 1, 0))
model_fit = model.fit()
output = model_fit.forecast()
predictions.append(output[0])
history.append(test[t])

# Calculate MSE error
rmse = sqrt(mean_squared_error(test, predictions))
print("Test RMSE: %.3f" % rmse)

# Visualize results
plt.plot(test)
plt.plot(predictions, color="black")
plt.show()
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 4
single

single

# Importing libraries
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
from math import sqrt
import pandas as pd

# Reading data
df = pd.read_csv("https://codefinity-content-media.s3.eu-west-1.amazonaws.com/943e906e-4de6-4694-a1df-313ceed7cfe7/pr_air_quality.csv")

# Preparing data
X = df["value"].values
size = int(len(X) * 0.97)
train, test = X[0:size], X[size:]
history = train.tolist()
predictions = list()

# Making foreasts with ARIMA model using a `for` loop
for t in range(len(test)):
model = ___(___, order=(5, 1, 0))
model_fit = model.___()
output = model_fit.___()
predictions.append(output[0])
history.append(test[t])

# Calculate MSE error
rmse = ___(mean_squared_error(___, ___))
print("Test RMSE: %.3f" % rmse)

# Visualize results
plt.plot(___)
plt.plot(___, color="black")
plt.show()

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

We use cookies to make your experience better!
some-alt