Contenido del Curso
Procesamiento Previo de Datos
Procesamiento Previo de Datos
Estacionariedad
Uno de los pasos principales es el proceso de convertir una serie temporal no estacionaria en estacionaria eliminando la tendencia, la estacionalidad y otros factores que afectan al cambio de las propiedades estadísticas de la serie a lo largo del tiempo. Una serie temporal estacionaria transformada puede ser más predecible y fácil de analizar que una serie no estacionaria. Existen varios métodos para transformar los datos en estacionarios:
Diferenciación
Diferenciación: cálculo de la diferencia entre el valor actual y el valor anterior de la serie temporal. Pero, ¿cómo elegir el orden de diferenciación? Si las primeras diferencias no giran en torno a una media y una varianza constantes, entonces hallamos la segunda diferenciación utilizando los valores de la primera diferenciación. Esto se puede repetir hasta obtener una serie estacionaria.
También puede representar gráficamente la serie diferenciada y comprobar si hay una media y una varianza constantes para determinar si la serie está suficientemente diferenciada o no.
Descomposición
Descomposición - descomponer la serie temporal en sus componentes de tendencia, estacionalidad y ruido aleatorio.
Transformación Box-Cox
La transformación de Box-Cox es un método que generaliza la transformación del logaritmo natural y convierte los datos no normales en una distribución más normal.
Eliminación de valores atípicos
Eliminación de valores atípicos: método que elimina los valores atípicos de las series temporales no estacionarias, lo que ayuda a mejorar su estacionariedad.
En el siguiente ejemplo, consideraremos cómo implementar la transformación de datos en datos estacionarios utilizando el método de descomposición:
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}')
Puede ver los gráficos a continuación. El primero corresponde al conjunto de datos original y el segundo, a la aplicación del método de diferenciación.
¡Gracias por tus comentarios!