Métodos de Suavizamiento Promedio movil - Series de Tiempo

La teoría de los métodos de suavizamiento se refiere a un conjunto de técnicas estadísticas utilizadas para reducir la variabilidad o "ruido" en los datos, con el objetivo de resaltar patrones o tendencias importantes. Estos métodos son ampliamente utilizados en análisis de series temporales, procesamiento de señales, y en varios campos de la ciencia de datos. Algunos de los métodos de suavizamiento más comunes incluyen:

Promedio Móvil (Moving Average): Calcula el promedio de un número específico de valores consecutivos a lo largo de la serie de tiempo. Esto suaviza las fluctuaciones a corto plazo y resalta las tendencias a largo plazo.

Suavizado Exponencial (Exponential Smoothing): Asigna pesos decrecientes a los datos más antiguos. Hay varias variantes de este método, como el suavizado exponencial simple, doble y triple, cada uno añadiendo más complejidad para capturar tendencias y patrones estacionales.

Filtros de Suavizamiento: Como los filtros de media móvil y los filtros de Gauss, que aplican una función matemática (por ejemplo, una distribución gaussiana) para ponderar los valores de los datos al calcular el promedio.

Regresión de Mínimos Cuadrados Locales (Locally Weighted Scatterplot Smoothing - LOWESS): Utiliza regresiones lineales ponderadas localmente para suavizar los datos, proporcionando un ajuste más flexible que puede adaptarse a cambios en la tendencia de los datos.

Suavizado de Splines: Implica el uso de funciones matemáticas denominadas splines para crear una función suave que se aproxima a los datos. Los splines pueden ser lineales, cuadráticos, cúbicos, etc., y permiten un alto grado de flexibilidad.

Se realizaran ejemplos relacionados al método de promedio móvil con código python:

Promedio móvil.- 

Un promedio móvil es calculado como el promedio de un número específico de valores pasados. Por ejemplo, un promedio móvil de 3 períodos en el tiempo $t$ sería el promedio de los datos en los tiempos $t-1$, $t-2$, $t-3$.

Tipos de Promedios Móviles:

Simple (SMA): Calcula el promedio aritmético de un número determinado de valores.

Ponderado (WMA): Asigna diferentes pesos a los valores en la ventana, generalmente dando más importancia a los datos más recientes.

Exponencial (EMA): Similar al WMA, pero con una fórmula que asigna pesos de manera exponencial, dando aún más énfasis a los valores más recientes.

Ejemplo

import pandas as pd

# Datos de ejemplo: precios diarios de una acción
precios = [22, 24, 25, 27, 26, 28, 29, 30, 31, 33, 32, 31]

# Convertir la lista de precios a un DataFrame de Pandas
df = pd.DataFrame(precios, columns=['Precio'])

# Calcular el promedio móvil con una ventana de 5 días
df['SMA_5'] = df['Precio'].rolling(window=5).mean()

print(df)

Cuya salida es:

Precio SMA_5 0 22 NaN 1 24 NaN 2 25 NaN 3 27 NaN 4 26 24.8 5 28 26.0 6 29 27.0 7 30 28.0 8 31 28.8 9 33 30.2 10 32 31.0 11 31 31.4


Ejemplo Nro 2.-

Se genera datos Simulados: Utilizamos numpy para crear 100 puntos de datos que siguen una distribución normal y los acumulamos para simular una serie temporal con cierta tendencia y variabilidad.

Convertimos los Datos a un DataFrame de Pandas: Esto nos permite utilizar las funciones de Pandas para el cálculo del promedio móvil.

Calculamos el Promedio Móvil Simple (SMA): Calculamos dos SMA con diferentes tamaños de ventana: uno con una ventana de 5 periodos (SMA_5) y otro con una ventana de 10 periodos (SMA_10).

Visualizamos los Resultados: Creamos un gráfico para visualizar los datos originales junto con los valores del SMA de 5 y 10 periodos.

Resultados del DataFrame: Las primeras filas del DataFrame muestran los valores originales y los valores de SMA. Los valores NaN indican que no hay suficientes datos para calcular el SMA en esos puntos (por ejemplo, no se puede calcular un SMA de 5 periodos hasta que tengamos al menos 5 datos).

Ejemplo python:

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

# Crear datos simulados: 100 puntos de datos con alguna variabilidad aleatoria
np.random.seed(0)
datos_simulados = np.random.normal(0, 1, 100).cumsum()

# Convertir a DataFrame
df = pd.DataFrame(datos_simulados, columns=['Valor'])

# Calcular el Promedio Móvil Simple (SMA) con una ventana de 5
df['SMA_5'] = df['Valor'].rolling(window=5).mean()

# Calcular el Promedio Móvil Simple (SMA) con una ventana de 10
df['SMA_10'] = df['Valor'].rolling(window=10).mean()

# Gráfico para visualizar los datos
plt.figure(figsize=(12, 6))
plt.plot(df['Valor'], label='Datos Originales')
plt.plot(df['SMA_5'], label='SMA 5 periodos')
plt.plot(df['SMA_10'], label='SMA 10 periodos')
plt.title('Promedio Móvil Simple con Datos Simulados')
plt.xlabel('Tiempo')
plt.ylabel('Valor')
plt.legend()
plt.show()


Como se observa los datos simulados se observan en color azul, tambien se obsera el cálculo del méotodo de suavizamiento promedio móvil con 5 y 10 periodos, que se observan en color anaranjado y verde.

Observando el data frame las primeras 15 filas se observa el procedimientos que para los primero 5 y 10 observaciones se tienen Valores perdidos tal como se indico en la parte teórica.

df.head(15)  # Muestra las primeras 15 filas del DataFrame para ver los resultados


ValorSMA_5SMA_10
01.764052NaNNaN
12.164210NaNNaN
23.142948NaNNaN
35.383841NaNNaN
47.2513993.941290NaN
56.2741214.843303NaN
67.2242095.855303NaN
77.0728526.641284NaN
86.9696336.958443NaN
97.3802326.9842095.462750
107.5242757.2342406.038772
118.9785497.5851086.720206
129.7395878.1184557.379870
139.8612628.6967817.827612
1410.3051259.2817598.132984

Conclusión.-


El Promedio Móvil Simple es una herramienta esencial en el análisis de series temporales, proporcionando una forma sencilla y efectiva de suavizar los datos y resaltar tendencias. Con Python, aplicar el SMA es un proceso directo y puede ser una excelente primera aproximación para entender la naturaleza de tus datos temporales.

Comentarios

Entradas populares de este blog

Utilizando Gráficas Multivariantes con Python