Español

Desbloquea el poder de los datos de series temporales con las funciones de ventana. Esta guía cubre conceptos esenciales, ejemplos prácticos y técnicas avanzadas.

Análisis de Series Temporales: Dominando las Funciones de Ventana para Obtener Información de los Datos

Los datos de series temporales, caracterizados por su naturaleza secuencial y dependiente del tiempo, son ubicuos en todas las industrias. Desde el seguimiento de los precios de las acciones y la supervisión del tráfico del sitio web hasta el análisis de las lecturas de los sensores y la predicción de las tendencias de ventas, la capacidad de extraer información significativa de los datos de series temporales es crucial para la toma de decisiones informadas. Las funciones de ventana proporcionan un conjunto de herramientas potente y flexible para realizar cálculos en un conjunto de filas que están relacionadas con la fila actual en una tabla o marco de datos, lo que las hace indispensables para el análisis de series temporales.

Comprensión de los Datos de Series Temporales

Los datos de series temporales son una secuencia de puntos de datos indexados en orden cronológico. Los puntos de datos pueden representar varias métricas, como:

El análisis de datos de series temporales implica la identificación de patrones, tendencias y estacionalidad, que se pueden utilizar para pronosticar valores futuros, detectar anomalías y optimizar los procesos empresariales.

Introducción a las Funciones de Ventana

Las funciones de ventana, también conocidas como agregados de ventana o funciones analíticas, le permiten realizar cálculos en un conjunto de filas relacionadas con la fila actual, sin agrupar las filas en un solo conjunto de resultados como las funciones agregadas tradicionales (por ejemplo, SUM, AVG, COUNT). Esta capacidad es particularmente útil para el análisis de series temporales, donde a menudo necesita calcular promedios móviles, sumas acumulativas y otras métricas basadas en el tiempo.

Una función de ventana normalmente consta de los siguientes componentes:

  1. Función: El cálculo que se va a realizar (por ejemplo, AVG, SUM, RANK, LAG).
  2. Cláusula OVER: Define la ventana de filas utilizada para el cálculo.
  3. Cláusula PARTITION BY (opcional): Divide los datos en particiones, y la función de ventana se aplica a cada partición de forma independiente.
  4. Cláusula ORDER BY (opcional): Especifica el orden de las filas dentro de cada partición.
  5. Cláusula ROWS/RANGE (opcional): Define el marco de la ventana, que es el conjunto de filas relativas a la fila actual utilizada para el cálculo.

Conceptos Clave y Sintaxis

1. La Cláusula OVER()

La cláusula OVER() es el corazón de una función de ventana. Define la ventana de filas sobre la que operará la función. Una cláusula OVER() simple sin argumentos considerará todo el conjunto de resultados como la ventana. Por ejemplo:

Ejemplo de SQL:

SELECT
 date,
 sales,
 AVG(sales) OVER()
FROM
 sales_data;

Esta consulta calcula el promedio de ventas en todas las fechas de la tabla sales_data.

2. PARTITION BY

La cláusula PARTITION BY divide los datos en particiones, y la función de ventana se aplica por separado a cada partición. Esto es útil cuando desea calcular métricas para diferentes grupos dentro de sus datos.

Ejemplo de SQL:

SELECT
 date,
 product_id,
 sales,
 AVG(sales) OVER (PARTITION BY product_id)
FROM
 sales_data;

Esta consulta calcula el promedio de ventas para cada producto por separado.

3. ORDER BY

La cláusula ORDER BY especifica el orden de las filas dentro de cada partición. Esto es esencial para calcular totales acumulados, promedios móviles y otras métricas basadas en el tiempo.

Ejemplo de SQL:

SELECT
 date,
 sales,
 SUM(sales) OVER (ORDER BY date)
FROM
 sales_data;

Esta consulta calcula la suma acumulativa de las ventas a lo largo del tiempo.

4. ROWS/RANGE

Las cláusulas ROWS y RANGE definen el marco de la ventana, que es el conjunto de filas relativas a la fila actual utilizada para el cálculo. La cláusula ROWS especifica el marco de la ventana basado en el número de fila físico, mientras que la cláusula RANGE especifica el marco de la ventana basado en los valores de la columna ORDER BY.

Ejemplo de ROWS:

SELECT
 date,
 sales,
 AVG(sales) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW)
FROM
 sales_data;

Esta consulta calcula el promedio móvil de las ventas de los últimos 3 días (incluido el día actual).

Ejemplo de RANGE:

SELECT
 date,
 sales,
 AVG(sales) OVER (ORDER BY date RANGE BETWEEN INTERVAL '2' DAY PRECEDING AND CURRENT ROW)
FROM
 sales_data;

Esta consulta calcula el promedio móvil de las ventas de los últimos 2 días (incluido el día actual). Tenga en cuenta que RANGE requiere una columna ordenada que sea de un tipo de datos numérico o de fecha/hora.

Funciones de Ventana Comunes para el Análisis de Series Temporales

1. Promedio Rodante/Móvil

El promedio rodante, también conocido como promedio móvil, es una técnica ampliamente utilizada para suavizar las fluctuaciones a corto plazo en los datos de series temporales y resaltar las tendencias a largo plazo. Se calcula promediando los valores durante un período de tiempo especificado.

Ejemplo de SQL:

SELECT
 date,
 sales,
 AVG(sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_7_days
FROM
 sales_data;

Esta consulta calcula el promedio móvil de ventas de 7 días.

Ejemplo de Python (usando Pandas):

import pandas as pd

# Suponiendo que tiene un DataFrame de Pandas llamado 'sales_df' con columnas 'date' y 'sales'

sales_df['moving_average_7_days'] = sales_df['sales'].rolling(window=7).mean()

Ejemplo de Aplicación Global: Un minorista multinacional podría usar un promedio móvil de 30 días para suavizar las fluctuaciones diarias de las ventas e identificar las tendencias de ventas subyacentes en diferentes regiones.

2. Suma Acumulativa

La suma acumulativa, también conocida como total acumulado, calcula la suma de los valores hasta la fila actual. Es útil para rastrear el valor total acumulado a lo largo del tiempo.

Ejemplo de SQL:

SELECT
 date,
 sales,
 SUM(sales) OVER (ORDER BY date) AS cumulative_sales
FROM
 sales_data;

Esta consulta calcula la suma acumulativa de las ventas a lo largo del tiempo.

Ejemplo de Python (usando Pandas):

import pandas as pd

# Suponiendo que tiene un DataFrame de Pandas llamado 'sales_df' con columnas 'date' y 'sales'

sales_df['cumulative_sales'] = sales_df['sales'].cumsum()

Ejemplo de Aplicación Global: Una empresa internacional de comercio electrónico puede utilizar las ventas acumulativas para realizar un seguimiento de los ingresos totales generados por el lanzamiento de un nuevo producto en diferentes mercados.

3. Adelanto y Retraso

Las funciones LEAD y LAG le permiten acceder a datos de filas subsiguientes o precedentes, respectivamente. Son útiles para calcular los cambios de un período a otro, identificar tendencias y comparar valores entre diferentes períodos de tiempo.

Ejemplo de SQL:

SELECT
 date,
 sales,
 LAG(sales, 1, 0) OVER (ORDER BY date) AS previous_day_sales,
 sales - LAG(sales, 1, 0) OVER (ORDER BY date) AS sales_difference
FROM
 sales_data;

Esta consulta calcula la diferencia de ventas en comparación con el día anterior. La función LAG(sales, 1, 0) recupera el valor de ventas de la fila anterior (desplazamiento 1), y si no hay una fila anterior (por ejemplo, la primera fila), devuelve 0 (el valor predeterminado).

Ejemplo de Python (usando Pandas):

import pandas as pd

# Suponiendo que tiene un DataFrame de Pandas llamado 'sales_df' con columnas 'date' y 'sales'

sales_df['previous_day_sales'] = sales_df['sales'].shift(1)
sales_df['sales_difference'] = sales_df['sales'] - sales_df['previous_day_sales'].fillna(0)

Ejemplo de Aplicación Global: Una aerolínea global puede utilizar funciones de adelanto y retraso para comparar las ventas de billetes para la misma ruta en diferentes semanas e identificar posibles fluctuaciones de la demanda.

4. Rango y Rango Denso

Las funciones RANK() y DENSE_RANK() asignan un rango a cada fila dentro de una partición en función de la ordenación especificada. RANK() asigna rangos con espacios (por ejemplo, 1, 2, 2, 4), mientras que DENSE_RANK() asigna rangos sin espacios (por ejemplo, 1, 2, 2, 3).

Ejemplo de SQL:

SELECT
 date,
 sales,
 RANK() OVER (ORDER BY sales DESC) AS sales_rank,
 DENSE_RANK() OVER (ORDER BY sales DESC) AS sales_dense_rank
FROM
 sales_data;

Esta consulta clasifica los valores de ventas en orden descendente.

Ejemplo de Aplicación Global: Un mercado en línea global puede utilizar funciones de clasificación para identificar los productos más vendidos en cada país o región.

Técnicas y Aplicaciones Avanzadas

1. Combinación de Funciones de Ventana

Las funciones de ventana se pueden combinar para realizar cálculos más complejos. Por ejemplo, puede calcular el promedio móvil de la suma acumulativa.

Ejemplo de SQL:

SELECT
 date,
 sales,
 AVG(cumulative_sales) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_cumulative_sales
FROM
 (
 SELECT
 date,
 sales,
 SUM(sales) OVER (ORDER BY date) AS cumulative_sales
 FROM
 sales_data
 ) AS subquery;

2. Uso de Funciones de Ventana con Agregación Condicional

Puede usar funciones de ventana junto con la agregación condicional (por ejemplo, usando sentencias CASE) para realizar cálculos basados en condiciones específicas.

Ejemplo de SQL:

SELECT
 date,
 sales,
 AVG(CASE WHEN sales > 100 THEN sales ELSE NULL END) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_average_high_sales
FROM
 sales_data;

Esta consulta calcula el promedio móvil de ventas solo para los días en que las ventas son superiores a 100.

3. Descomposición de Series Temporales

Las funciones de ventana se pueden utilizar para descomponer una serie temporal en sus componentes de tendencia, estacional y residual. Esto implica calcular promedios móviles para estimar la tendencia, identificar patrones estacionales y luego restar los componentes de tendencia y estacional para obtener los residuos.

4. Detección de Anomalías

Las funciones de ventana se pueden utilizar para detectar anomalías en los datos de series temporales calculando promedios móviles y desviaciones estándar. Los puntos de datos que se encuentran fuera de un cierto rango (por ejemplo, +/- 3 desviaciones estándar del promedio móvil) se pueden marcar como anomalías.

Ejemplos Prácticos en Todas las Industrias

1. Finanzas

2. Venta al por Menor

3. Fabricación

4. Atención Médica

Elegir la Herramienta Adecuada

Las funciones de ventana están disponibles en varias herramientas de procesamiento de datos y lenguajes de programación, incluyendo:

La elección de la herramienta depende de sus necesidades específicas y experiencia técnica. SQL es adecuado para los datos almacenados en bases de datos relacionales, mientras que Python y Spark son más flexibles para procesar grandes conjuntos de datos y realizar análisis complejos.

Mejores Prácticas

Conclusión

Las funciones de ventana son una herramienta poderosa para el análisis de series temporales, que le permite calcular promedios móviles, sumas acumulativas, valores de adelanto/retraso y otras métricas basadas en el tiempo. Al dominar las funciones de ventana, puede desbloquear información valiosa de sus datos de series temporales y tomar decisiones más informadas. Ya sea que esté analizando datos financieros, datos de ventas, datos de sensores o datos de tráfico web, las funciones de ventana pueden ayudarlo a identificar patrones, tendencias y anomalías que serían difíciles de detectar utilizando técnicas de agregación tradicionales. Al comprender los conceptos clave y la sintaxis de las funciones de ventana y seguir las mejores prácticas, puede aprovecharlas de manera efectiva para resolver una amplia gama de problemas del mundo real en diversas industrias.

Análisis de Series Temporales: Dominando las Funciones de Ventana para Obtener Información de los Datos | MLOG