Estás leyendo la publicación: ¿Cómo hacer que una serie de tiempo sea estacionaria?
Los datos que cambian según el tiempo tienen tendencias y estacionalidad que hacen que los datos no sean estacionarios. Para verificar la estacionariedad de los datos, existen ciertos métodos estadísticos para calcular la respuesta hipotética de la pregunta. En este artículo, analizaremos los métodos estadísticos comúnmente utilizados para calcular la estacionariedad de los datos de series temporales y la conversión de series no estacionarias a estacionarias. Los siguientes son los temas a tratar.
Tabla de contenido
- La necesidad de que las series temporales sean estacionarias
- Métodos estáticos para comprobar la estacionariedad.
- Haciendo series de tiempo estacionarias usando python
- Conversión de no estacionario a estacionario
Comencemos con la necesidad de series de tiempo estacionarias.
La necesidad de que las series temporales sean estacionarias
La mayoría de los modelos de series temporales suponen que cada punto es independiente de los demás para pronosticar o predecir el futuro, lo que significa que la media, la varianza y la covarianza no cambian con el tiempo. Cuando el conjunto de datos de casos anteriores es constante, este es el mejor indicador.
Las características estadísticas de un sistema no deben variar con el tiempo para que los datos sean estacionarios. Esto no implica que los valores para cada punto de datos deban ser los mismos, sino que el comportamiento general de los datos debe ser consistente. Los gráficos de tiempo que no indican patrones o estacionalidad pueden denominarse estancados sobre una base estrictamente visual.
Una media constante y una varianza constante son dos elementos numéricos más que apoyan la estacionariedad. Hay dos términos importantes relacionados con los datos de series de tiempo.
- Cuando hay un crecimiento o disminución a largo plazo en los datos, esto se conoce como tendencia.
- Un patrón recurrente con una regularidad definida y predecible que depende de la época del año, la semana o el día se conoce como estacionalidad.
La siguiente representación muestra un claro ejemplo de datos no estacionarios. La cifra exhibe una importante tendencia al alza y estacionalidad. Si bien esto proporciona una gran cantidad de información sobre las cualidades de los datos, no es estacionario y, por lo tanto, no se puede anticipar utilizando modelos típicos de series de tiempo. La dispersión de los datos indica que hay una variación significativa en los datos. Para aplanar la varianza creciente, necesitamos transformar los datos.
¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos, echa un vistazo aquí.
Métodos estáticos para comprobar la estacionariedad.
Hay dos métodos estadísticos comunes que se utilizan para comprobar la estacionariedad de los datos de series temporales.
Prueba de Dickey-Fuller aumentada:
La prueba de Dickey-Fuller aumentada (ADF) es una prueba de raíz unitaria de estacionariedad. La prueba ADF es una versión modificada del examen Dickey Fuller. En el análisis de series de tiempo, las raíces unitarias pueden producir resultados inesperados.
Con la correlación en serie, se puede utilizar la prueba de Dickey-Fuller aumentada. La prueba ADF es más poderosa y puede manejar modelos más complicados que la prueba de Dickey-Fuller. Sin embargo, al igual que con otras pruebas de raíz unitaria, debe usarse con precaución porque tiene una tasa de error Tipo I algo alta.
Las siguientes son las hipótesis de prueba:
- Hipótesis nula (H0): Los datos de la serie temporal no son estacionarios.
- Hipótesis alternativa (H1): La serie temporal es estacionaria (o estacionaria en tendencia).
La prueba ADF amplía la ecuación de prueba de Dickey-Fuller para incluir en el modelo un proceso regresivo de alto orden. Agrega términos de diferenciación adicionales, pero el resto de la ecuación permanece sin cambios. Esto aumenta la minuciosidad de la prueba.
La hipótesis nula, por otro lado, sigue siendo la misma que en la prueba de Dickey-Fuller.
Para rechazar la hipótesis nula, el valor p producido debe ser menor que el nivel de significación (por ejemplo, 0,05). Como resultado, podemos concluir que la serie es estacionaria.
Prueba de Kwiatkowski Phillips Schmidt Shin (KPSS):
La prueba de Kwiatkowski Phillips Schmidt Shin (KPSS) determina si una serie de tiempo es estacionaria alrededor de una tendencia media o lineal, o no estacionaria como resultado de una raíz unitaria. Una serie temporal estacionaria tiene características estadísticas como la media y la varianza que permanecen constantes a lo largo del tiempo.
Las siguientes son las hipótesis de prueba:
- Hipótesis nula (H0): Los datos son estacionarios.
- Hipótesis alternativa (H1): Los datos no son estacionarios.
La regresión lineal sustenta la prueba KPSS. Con la ecuación de regresión, divide una serie en tres partes: una tendencia determinista, una caminata aleatoria y un error estacionario. Si los datos son estacionarios, la intersección tendrá un elemento fijo o la serie será estacionaria alrededor de un nivel fijo.
La prueba utiliza OLS para calcular la ecuación, que varía significativamente dependiendo de si desea probar la estacionariedad de nivel o de tendencia. Para evaluar la estacionariedad del nivel se utiliza una versión reducida que carece del componente de tendencia temporal.
Haciendo series de tiempo estacionarias usando python
Implementando las técnicas mencionadas anteriormente en python usando la biblioteca statsmodel.
Importe las bibliotecas y los datos necesarios para el procesamiento:
importar pandas como pd importar numpy como np importar matplotlib.pyplot como plt importar seaborn como sns importar advertencias advertencias.filterwarnings(“ignorar”) de statsmodels.tsa.stattools importar adfuller de statsmodels.tsa.stattools importar kpss df_new=pd.read_csv( “GlobalLandTemperatures_GlobalLandTemperaturesByMajorCity.csv”) df_utils_new=df_new[[‘dt’,’AverageTemperature’]]df_utils_nuevo[:8]
fig=plt.figure(figsize=(15,6)) sns.lineplot(data=df_utils,x=’dt’,y=’AverageTemperature’) plt.tick_params( axis=”x”, which=”both”, bottom=Falso, top=Falso, labelbottom=Falso) plt.show()
Prueba de Dickey-Fuller aumentada:
result=adfuller (df_use[‘AverageTemperature’]) print(‘Estadística de prueba: %f’ %resultado[0]) print(‘valor-p: %f’ %resultado[1]) print(‘Valores críticos:’) para clave, valor en resultado[4].items(): print(‘\t%s: %.3f’ %(clave, valor))
A medida que el estadístico de prueba es mayor (menos negativo), el valor crítico se convierte en la razón para no rechazar la hipótesis nula. Esto indica que los datos no son estacionarios.
Prueba de Kwiatkowski Phillips Schmidt Shin (KPSS):
result_kpss_ct=kpss(df_use[‘AverageTemperature’],regresión=”ct”) print(‘Estadística de prueba: %f’ %result_kpss_ct[0]) print(‘valor p: %f’ %result_kpss_ct[1]) print(‘Valores críticos:’) para clave, valor en result_kpss_ct[3].items(): print(‘\t%s: %.3f’ %(clave, valor))
Aquí verificando las estadísticas de KPSS sobre la tendencia de los datos, por lo que la regresión es “ct”.
Como el valor de las estadísticas de prueba es mayor que el valor crítico, se rechaza la hipótesis nula. Esto indica que los datos no son estacionarios.
Veamos si los datos no son estacionarios y las formas de transformar los datos en estacionarios.
Conversión de no estacionario a estacionario
Para eliminar la tendencia de los datos de series temporales, se utilizan ciertas técnicas de transformación y se enumeran a continuación.
- Registro de transformación de los datos
- Sacar la raíz cuadrada de los datos
- Sacar la raíz cúbica
- cambio proporcional
Los pasos para la transformación son simples, para este artículo se utiliza la transformación de raíz cuadrada.
- Use la función de raíz cuadrada de NumPy para transformar la columna requerida
- Luego cambie la transformación por uno usando la función de “cambio”.
- Tome la diferencia entre la transformación original y el cambio.
- Los pasos 2 y 3 se pueden realizar simplemente usando la función “diff” de pandas.
Utilice el siguiente código para obtener los pasos mencionados anteriormente.
Transformando los datos
df_log=np.sqrt(df_use[‘AverageTemperature’]) df_diff=df_log.diff().dropna()
Comprobación de la estacionariedad
result=adfuller (df_diff) print(‘Estadística de prueba: %f’ %resultado[0]) print(‘valor-p: %f’ %resultado[1]) print(‘Valores críticos:’) para clave, valor en resultado[4].items(): print(‘\t%s: %.3f’ %(clave, valor))
Como la estática de la prueba ADF es menor (más negativa), el valor crítico se convierte en la razón para rechazar la hipótesis nula. Esto indica que los datos son estacionarios.
result_kpss_ct_log=kpss(df_diff,regression=”ct”) print(‘Estadística de prueba: %f’ % np.round(result_kpss_ct_log[0],2)) print(‘valor p: %f’ %result_kpss_ct_log[1]) print(‘Valores críticos:’) para clave, valor en result_kpss_ct_log[3].items(): print(‘\t%s: %.3f’ %(clave, valor))
Como el valor de las estadísticas de la prueba KPSS es menor que el valor crítico, no se rechaza la hipótesis nula. Esto indica que los datos son estacionarios.
Comparación de las versiones anteriores y posteriores de series temporales
plt.figure(figsize=(15,8)) plt.plot(df_diff,label=”después”) plt.plot(df_compare,label=”antes”) plt.tick_params(axis=”x”, which=”both “, inferior=Falso, superior=Falso, labelbottom=Falso) plt.leyenda() plt.show()
Conclusión
Una serie temporal cuyas propiedades estadísticas, como la media, la varianza, la autocorrelación, etc., son todas constantes en el tiempo se denomina estacionaria. Debido a que una serie estacionaria generalmente es simple de anticipar, puede ser “sin transformar”. Cualquier modificación matemática anterior utilizada para producir predicciones para la serie original podría revertirse. Con este artículo hemos entendido diferentes técnicas para detectar la estacionariedad de datos de series temporales y para transformar datos no estacionarios en series temporales estacionarias.