domingo, 8 de septiembre de 2024

Calculando el promedio ponderado de una serie histórica con un único campo

En ocasiones se precisa sumarizar para cada fila de una tabla el valor que ha tenido una variable a lo largo del tiempo. La forma obvia aunque costosa de lograrlo es almacenando individualmente en columnas los últimos n valores del histórico y operar sobre ellos para obtener algún tipo de promediado (media, media ponderada, mediana,...). Vamos a ver una forma mucho más económica de calcular un promedio ponderado por antigüedad de los valores de la serie, solo necesitando el propio campo donde se almacena el dato.

Imaginemos por ejemplo que la variable es el ARPU de nuestros clientes, disponiendo de un nuevo valor cada mes. Para actualizar el promediado de ARPU (ARPUn) realizamos una combinación lineal del dato previo calculado (ARPUn-1) con el valor recién llegado de la serie (ARPULAST) en la forma:


Siendo 0 ≤ α < 1 un parámetro de memoria ajustable. Cuanto menor sea α el sistema resultará más adaptativo, pero mientras no sea 0 siempre incorporará todo el histórico:
  • α = 0: nos quedamos con el último dato llegado (sistema sin memoria)
  • α intermedios: media ponderada adaptativa dando más peso a las muestras recientes
  • α próximos a 1: sistema poco adaptativo tendiendo a una media simple de las muestras de la serie

El resultado en cuanto a ponderación del histórico de valores de ARPU para distintos parámetros α es el siguiente:



Vemos los pesos exponencialmente decrecientes que van ponderando las muestras de mayor antigüedad, pero sin dejar de participar todas ellas en el cálculo.

Así tenemos una forma de sumarizar una serie de datos:
  • Promediando todo su histórico y no solo una ventana móvil
  • Dando más peso a los valores recientes y viceversa
  • Parametrizable para tener más memoria o ser más adaptativo
  • Sin necesidad de almacenar ningún dato intermedio

~~~

Este cálculo en Procesado de Señal es una forma simple de Filtro Paso Bajo: reducimos varianza (ruido) de la serie y ante entradas todas iguales la salida mantiene el valor. Concretamente un FPB de tipo IIR (Infinite Impulse Response) dado que el sistema se realimenta con salidas previas:


2 comentarios:

  1. Esa es la versión más simple del llamado "suavizado exponencial": https://otexts.com/fpp3/ses.html

    ResponderEliminar
    Respuestas
    1. Buenísimo Carlos, si también llama α al parámetro! Nunca se me habría ocurrido esto para hacer forecasts, un poco optimista ese uso no?

      Eliminar

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.