Conteúdo do Curso
Pré-processamento de Dados
Pré-processamento de Dados
Estacionaridade
Um dos principais passos é o processo de conversão de uma série temporal não estacionária em uma estacionária, eliminando a tendência, sazonalidade e outros fatores que afetam a mudança nas propriedades estatísticas da série ao longo do tempo. Uma série temporal estacionária transformada pode ser mais previsível e mais fácil de analisar do que uma série não estacionária. Existem vários métodos de transformação de dados em estacionários:
Diferenciação
Diferenciação - calcular a diferença entre o valor atual e o valor anterior da série temporal. Mas como escolher a ordem da diferenciação? Se as primeiras diferenças não se estabilizarem em torno de uma média e variância constantes, então encontramos a segunda diferenciação usando os valores da primeira diferenciação. Você pode repetir isso até obter uma série estacionária.
Você também pode plotar a série diferenciada e verificar se há uma média e variância constantes para determinar se a série está suficientemente diferenciada.
Decomposição
Decomposição - decompor a série temporal nos seus componentes de tendência, sazonalidade e ruído aleatório.
Transformação Box-Cox
A transformação Box-Cox é um método que generaliza a transforma em logaritmo natural e converte dados não normais em uma distribuição mais normal.
Remoção de Outliers
Remoção de outliers - um método que remove os outliers da série temporal não estacionária, o que ajuda a melhorar sua estacionariedade.
No exemplo abaixo, vamos considerar como implementar a transformação de dados em dados estacionários usando o método de decomposição:
import pandas as pd import numpy as np from statsmodels.tsa.seasonal import seasonal_decompose from statsmodels.tsa.stattools import adfuller # Read the dataset dataset = pd.read_csv('https://codefinity-content-media.s3.eu-west-1.amazonaws.com/9c23bf60-276c-4989-a9d7-3091716b4507/datasets/df_diamond_data.csv', index_col=0, parse_dates=True) # Time series decomposition result = seasonal_decompose(dataset['diamond price'], model='additive', period=365) # Dickey-Fuller test result = adfuller(result.resid.dropna()) print(f'ADF Statistic: {result[0]:.3f}') print(f'p-value: {result[1]:.3f}') # Differencing dataset_diff = dataset['diamond price'].diff().dropna() # Dickey-Fuller test result = adfuller(dataset_diff) print(f'ADF Statistic: {result[0]:.3f}') print(f'p-value: {result[1]:.3f}')
Você pode observar os gráficos abaixo. O primeiro é o conjunto de dados original, e o segundo é após a aplicação do método de diferenciação.
Obrigado pelo seu feedback!