Como criar um modelo ARIMA para previsão de série temporal em Python?

Conteúdo

Este artigo foi publicado como parte do Data Science Blogathon.

Introdução

Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA.. Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA.. Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA., Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA..

Para saber a sazonalidade, Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA..

Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA., Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA..

Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA.

Um método estatístico popular e amplamente utilizado para previsão de séries temporais é o modelo ARIMA., daí a série temporal com tendências, daí a série temporal com tendências, daí a série temporal com tendências. daí a série temporal com tendências. Por outro lado, daí a série temporal com tendências, daí a série temporal com tendências. Em geral, daí a série temporal com tendências.

daí a série temporal com tendências. daí a série temporal com tendências.

Neste tutorial, daí a série temporal com tendências.

daí a série temporal com tendências. É realmente simplificado em termos de uso. Porém, É realmente simplificado em termos de uso.

É realmente simplificado em termos de uso.

É realmente simplificado em termos de uso:

p: É realmente simplificado em termos de uso, É realmente simplificado em termos de uso.
d: É realmente simplificado em termos de uso, É realmente simplificado em termos de uso.
q: É realmente simplificado em termos de uso, É realmente simplificado em termos de uso.
É realmente simplificado em termos de uso, É realmente simplificado em termos de uso, quer dizer, eliminar tendência e estruturas sazonais que afetam negativamente o modelo de regressão.

PASSOS

1. Exibir dados da série time

2. Identifique se a data está parada

3. Plote os gráficos de correlação e correlação automática

4. Construa o modelo ARIMA ou ARIMA sazonal com base nos dados

Comecemos

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

Neste tutorial, Estou usando o seguinte conjunto de dados.

df = pd.read_csv('time_series_data.csv')
df.head()

# Updating the header
df.columns=["Mês","Vendas"]
df.head()
df.describe()
df.set_index('Mês',inplace = True)

from pylab import rcParams
rcParams['figure.figsize'] = 15, 7
df.plot()
32593gráfico1-4788498

se olharmos para o gráfico acima, então podemos encontrar uma tendência de que há um momento em que as vendas são altas e vice-versa. Isso significa que podemos ver que os dados seguem a sazonalidade.. Para ARIMA, a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários. a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários, a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários.

a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários, a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários.

de statsmodels.tsa.stattools import adfuller

a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários.

a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários(df['Vendas'])

Para identificar a natureza dos dados, vamos usar a hipótese nula.

H0: A hipótese nula: a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários.

H1: A hipótese alternativa: É uma afirmação sobre a população que contradiz H0 e o que concluímos quando rejeitamos H0.

#Ho: não é estacionário

# H1: está parado

a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários.

a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários(a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários):
    a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários(a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários)
    a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários [a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários,a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários,a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários,a primeira coisa que fazemos é identificar se os dados são estacionários ou não estacionários]
    por valor,rótulo em zip(resultado,rótulos):
        imprimir(rótulo+' : '+str(valor) )

se resultado[1] <= 0.05:
    imprimir("forte evidência contra a hipótese nula(Ho), rejeitar a hipótese nula. Os dados estão parados")
outro:
    imprimir("evidência fraca contra hipótese nula,indicando que não está estacionário ")

adfuller_test(df['Vendas'])

Depois de executar o código acima, vamos obter o valor P,

Estatística de teste ADF : -1.8335930563276237
valor p : 0.3639157716602447
#Lags usados : 11
Número de Observações : 93

Aqui o valor P é 0.36, que é maior que 0.05, o que significa que os dados aceitam a hipótese nula, o que significa que os dados não são estacionários.

Vamos tentar ver a primeira diferença e a diferença sazonal:

df['Vendas Primeira Diferença'] = df['Vendas'] - df['Vendas'].mudança(1)
df['Primeira Diferença Sazonal']= df['Vendas']-df['Vendas'].mudança(12)
df.head()
81317gráfico2-6279230
# Again testing if data is stationary
adfuller_test(df['Primeira Diferença Sazonal'].derrubar())
Estatística de teste ADF : -7.626619157213163
valor p : 2.060579696813685e-11
#Lags Used : 0
Número de Observações : 92

Aqui o valor P é 2.06, o que significa que vamos rejeitar a hipótese nula. Em seguida, os dados estão estacionários.

df['Primeira Diferença Sazonal'].enredo()
20576gráfico203-9110822

Vou criar autocorrelação:

from pandas.plotting import autocorrelation_plot
autocorrelation_plot(df['Vendas'])
plt.show()
17600gráfico204-1909857
de statsmodels.graphics.tsaplots importação plot_acf,plot_pacf
import statsmodels.api as sm
fig = plt.figure(figsize =(12,8))
ax1 = fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(df['Primeira Diferença Sazonal'].derrubar(),lags=40,ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(df['Primeira Diferença Sazonal'].derrubar(),lags=40,ax=ax2)
50701gráfico205-9642984
# For non-seasonal data
#p=1, d=1, q=0 ou 1

from statsmodels.tsa.arima_model import ARIMA
model=ARIMA(df['Vendas'],ordem=(1,1,1))
model_fit=modelo.fit()
model_fit.summary()
Resultados del modelo ARIMA
Dep. Variável: D. Vendas Não. Observações: 104
Modelo: ARIMA (1, 1, 1) probabilidade logarítmica -951.126
Método: css-mle SD de innovaciones 2227.262
Encontro: Rio Mié, 28 outubro 2020 AIC 1910.251
Clima: 11:49:08 BIC 1920.829
Shows: 02-01-1964 HQIC 1914.536
– 09-01-1972
Coeficiente std err Com P> | Com | [0.025 0.975]
constante 22.7845 12.405 1.837 0.066 -1.529 47.098
ar. L1. Vendas D 0.4343 0,089 4.866 0.000 0,259 0,609
mamã. L1. Vendas D -1,0000 0,026 -38.503 0.000 -1.051 -0,949
Rio Raíces
Verdade Imaginário Módulo Frequência
AR.1 2.3023 + 0,0000j 2.3023 0,0000
MA.1 1,0000 + 0,0000j 1,0000 0,0000
df['previsão']=model_fit.predict(start=90,end=103,dynamic=True)
df[['Vendas','previsão']].enredo(figsize =(12,8))
91974gráfico206-9941815
import statsmodels.api as sm
model=sm.tsa.statespace.SARIMAX(df['Vendas'],ordem=(1, 1, 1),seasonal_order=(1,1,1,12))
resultados=modelo.fit()
df['previsão']=resultados.prever(start=90,end=103,dynamic=True)
df[['Vendas','previsão']].enredo(figsize =(12,8))
13066gráfico207-9194412
from pandas.tseries.offsets import DateOffset
future_dates=[df.index[-1]+ DateOffset(meses=x)para x no alcance(0,24)]
future_datest_df=pd.DataFrame(future_datest_df=pd.DataFrame[1:],colunas = df.columns)

future_datest_df=pd.DataFrame()

future_datest_df=pd.DataFrame([df,future_datest_df=pd.DataFrame])

future_datest_df=pd.DataFrame['previsão'] future_datest_df=pd.DataFrame(start = 104, future_datest_df=pd.DataFrame 120, future_datest_df=pd.DataFrame)
future_datest_df=pd.DataFrame[['Vendas', 'previsão']].enredo(figsize =(12, 8))
77731future_datest_df=pd.DataFrame

conclusão

A previsão de séries temporais é realmente útil quando temos que tomar decisões futuras ou quando temos que fazer análises, podemos fazer isso rapidamente usando ARIMA, existem muitos outros modelos a partir dos quais podemos fazer previsões de séries temporais, mas ARIMA é realmente fácil de entender.

Espero que este artigo o ajude e economize uma boa quantidade de tempo.. Deixe-me saber se você tem alguma sugestão..

CÓDIGO FELIZ.

Prabhat Pathak (Perfil do linkedIn) future_datest_df=pd.DataFrame.

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.