SMOOTHING SERIES / SUAVIZADO DE LA SERIE

English (Español a continuación)

When a historical series is to be projected, a problem that can present, and can negatively affect the quality of the projection, is the noise that the historical series can show (that is, anomalous values ​​that make the series present some erraticity) .

Essbase offers different functions that allow to correct this erraticity and smooth the series, making a smoother curve that allows a finer projection.

We will analyze 3 functions:

  • @SPLINE
  • @MOVMED
  • @MOVAVG

I.- @SPLINE

This function allows to smooth the historical series. This function seeks a balance between two factors:

  • Difference between the new smoothed curve and the original curve; try to minimize the differences between both curves.
  • Smoothness of the path, eliminating the erraticity of the series (its curvature).

They are two opposing objectives:

  • The more the new curve fits the old curve, the smaller the differences between the two curves but the less erraticity it corrects.
  • The more the series is smoothed, the greater erraticity is eliminated, but the greater are  the differences between the two series.

There is a parameter in the function, which we will see next, that determines the priority given to each of these opposing objectives.

The structure of this function consists of 4 parts:

  • @SPLINE (“A”, “B”, “C”, “D”);

Part “A”: Variable to which the data series corresponds (for example, “Sales”).

Part “B”: is the parameter that determines the priority given to each of the two objectives.

  • It can take values> = 0.
  • The higher its value, the smoother the curve.
  • The lower its value, the more the new curve fits the original curve (if “s” = 0 it replicates the values ​​of the original curve).

Part “C”: is optional; refers to the moment in time to which each historical data corresponds. If it is not reported, it is considered that the first data corresponds to the 1st moment (for example, Jan / 16), the second to the 2nd moment (Feb / 16) and so on.

  • We will use this element if, for example, we do not have a complete time series (for example, Jan / 16, Mar / 16 …) so we will have to indicate Essbase to which time each data corresponds (1,3 …).
  • If this element is reported, a value must be assigned to each data in the historical series.
  • In the example we will see, we are not going to report this element (we will consider that the historical data correspond to complete time series).

Part “D”: It is optional; indicates the original series to be smoothed.

It can be defined as:

  • List of members: @LIST (Jan, Feb, Mar, Apr, May, Jun…)
  • List of multidimensional members: @LIST (“2016” -> Jan, “2016” -> Feb, “2016” -> Mar…)
  • Function type @XRANGE

If not reported, Essbase takes the levels 0 of the “time” dimension.

Let’s see an example: considering the following sales data:

With the graphic representation:

We are going to smooth this series using the function @SPLINE with 3 different parameters “s”:

“S” = 1:

  • Spl_sales(
    • @SPLINE (Sales, 1 ,, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

“S” = 10:

  • Spl_sales(
    • @SPLINE (Sales, 10 ,, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

“S” = 100:

  • Spl_sales(
    • @SPLINE (Sales, 100 ,, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

Let’s see the graphical representation:

  • Blue line: Sales
  • Green line: Spline “s” = 1
  • Brown line: Spline “s” = 10
  • Yellow line: Spline “s” = 100

We can see when the value of “s” increases, the series becomes smoother.

We will use the smoothed series (“s” = 10) to carry out the projection:

  • Spl_sales(
    • @TREND (@LIST (“2016” -> Jan, “2018” -> Dec) ,,,,, @ LIST (“2019” -> Jan, “2021” -> Dec), DES, 0.5,0.5) ;
  • )

Obtaining the following results:

In the following graph you can compare the projection obtained from the initial data and from the smoothed data:

  • Blue line: Sales
  • Brown line: Spline “s” = 10

II.- @MOVMED

This function allows to calculate the moving median of a data series (value that leaves 50% of the values above and below).

  • Moving: the range in which the median is calculated moves as we move through the series (for example, for each month it calculates the median of the previous “n” months, including the month itself).

The structure of this function consists of 3 parts:

  • @MOVMED (“A”, “B”, “C”);

Part “A”: Variable from which the median is calculated (for example, “Sales”).

Part “B”: is optional; is a parameter “n” that indicates the number of periods that includes the range in which the median is calculated.

  • For example, suppose a monthly series, if “n” is 3, for each month it calculates the median of the last 3 months (including itself). If the month is, for example, April, the median is calculated with the values ​​of February, March and April.
    • In this case, for January and February, as there are no 3 previous values ​​(including the month itself) to calculate the median, it repeats the value of these months.
  • If this parameter is not reported, it takes by default the value 3.

Part “C”: It is optional; indicates the series for which the moving median is to be calculated.

It can be defined as:

  • List of members: @LIST (Jan, Feb, Mar, Apr, May, Jun…)
  • List of multidimensional members: @LIST (“2016” -> Jan, “2016” -> Feb, “2016” -> Mar…)
  • Function type @XRANGE

If not reported, Essbase takes the levels 0 of the “time” dimension.

Let’s see an example: considering the data from the previous example, we are going to smooth the series using the function @MOVMED with 2 different values ​​for the parameter “n”:

“n” = 3:

  • Med_sales(
    • @MOVMED (Sales, 3, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

“n” = 6:

  • Med_sales(
    • @MOVMED (Sales, 6, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

Let’s see the graphical representation:

  • Blue line: Sales
  • Green line: Movmed “n” = 3
  • Brown line: Movmed “n” = 6

It can be seen when the value of “n” increases, the series becomes smoother.

We will use the smoothed series (“n” = 6) to carry out the projection:

  • Med_sales(
    • @TREND (@LIST (“2016” -> Jan, “2018” -> Dec) ,,,,, @ LIST (“2019” -> Jan, “2021” -> Dec), DES, 0.5,0.5) ;
  • )

Obtaining the following results:

In the following graph you can compare the projection obtained from the initial data and the smoothed data:

  • Blue line: Sales
  • Brown line: Movmed “n” = 6

III.- @MOVAVG

This function allows to calculate the moving average value of a data series.

  • Moving: the range for which the average value is calculated moves as we move through the series (for example, for each month it calculates the average value of the previous “n” months, including itself).

The structure of this function consists of 3 parts:

  • @MOVAVG (“A”, “B”, “C”);

Part “A”: Variable from which the average value is calculated (for example, “Sales”).

Part “B”: is optional; is a parameter “n” that indicates the number of periods that includes the range for which the average is calculated.

  • For example, suppose a monthly series, if “n” is 4 for each month calculate the average value of the last 4 months (including the same). If the month is, for example, June, the average value is calculated with the values ​​of March, April, May and June.
    • In this case, for January, February and March, as there are no 4 previous values ​​(including the month itself) to calculate the average value, it repeats the value of each month.
  • If this parameter is not reported, it takes by default the value 3.

Part “C”: It is optional; indicates the series for which the average value is to be calculated.

It can be defined as:

  • List of members: @LIST (Jan, Feb, Mar, Apr, May, Jun…)
  • List of multidimensional members: @LIST (“2016” -> Jan, “2016” -> Feb, “2016” -> Mar…)
  • Function type @XRANGE

If not reported, Essbase takes the levels 0 of the “time” dimension.

Let’s see an example: We will smooth the series using the function @MOVAVG with 2 different values ​​for the parameter “n”:

“n” = 3:

  • Avg_sales(
    • @MOVAVG (Sales, 3, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

“n” = 6:

  • Avg_sales(
    • @MOVAVG (Sales, 6, @ LIST (“2016” -> Jan, “2018” -> Dec));
  • )

Obtaining the following results:

Let’s see the graphical representation:

  • Blue line: Sales
  • Green line: Movavg “n” = 3
  • Brown line: Movavg “n” = 6

It can be seen when the value of “n” increases, the series becomes smoother.

We can use the smoothed series (“n” = 6) to carry out the projection:

  • Avg_sales(
    • @TREND (@LIST (“2016” -> Jan, “2018” -> Dec) ,,,,, @ LIST (“2019” -> Jan, “2021” -> Dec), DES, 0.5,0.5) ;
  • )

Obtaining the following results:

In the following graph you can compare the projection obtained from the initial data and the smoothed data:

  • Blue line: Sales
  • Brown line: Movavg “n” = 6

Español

Cuando se va a proyectar una serie histórica, un problema que puede presentar y que puede afectar negativamente a la calidad de la proyección, es el ruido que puede mostrar la serie histórica (es decir, valores anómalos que hacen que la serie muestre cierta erraticidad).

Essbase ofrece distintas funciones que permiten corregir esta erraticidad y suavizar la serie, haciendo una curva más suave que permite una proyección más fina.

Vamos a analizar 3 funciones:

  • @SPLINE
  • @MOVMED
  • @MOVAVG

I.- @SPLINE

Esta función permite suavizar la serie temporal. Esta función busca un equilibrio entre dos factores:

  • Diferencia entre la nueva curva suavizada y la curva original; trata de minimizar las diferencias entre ambas curvas.
  • Suavidad de la senda, eliminando la erraticidad de la serie (su curvatura).

Son dos objetivos opuestos:

  • Mientras más se ajuste la nueva curva a la antigua curva, menores son las diferencias entre ambas curvas pero menor erraticidad corrige.
  • Mientras más se suavice la serie, mayor erraticidad se elimina pero mayores son las diferencias entre ambas series.

Hay un parámetro en la función, que veremos a continuación, que es el que determina la prioridad que se le da a cada uno de estos objetivos opuestos.

La estructura de esta función consta de 4 partes:

  • @SPLINE(“A”,”B”,”C”,”D”);

Parte “A”: Variable a la que corresponde la serie de datos (por ejemplo, “Ventas”).

Parte “B”: es el parámetro que determina la prioridad que se da a cada uno de estos dos objetivos.

  • Puede tomar valores >= 0.
  • Mientras mayor sea su valor más suave es la curva.
  • Mientras menor sea su valor más se ajusta la nueva curva a la curva original (si “s” = 0 replica los valores de la curva original).

Parte “C”: es opcional; hace referencia al momento temporal al que corresponde cada uno de los datos históricos. Si no se informa se considera que el primer dato corresponde al momento 1º (por ejemplo, Ene/16), el segundo al momento 2º (Feb/16) y así sucesivamente.

  • Utilizaremos este elemento si, por ejemplo, no tenemos una serie temporal completa (por ejemplo, ene/16, mar/16…) por lo que tendremos que indicarle a Essbase a qué momento corresponde cada dato (1,3…).
  • Si se informa este elemento hay que asignar un valor a cada dato de la serie histórica.
  • En los ejemplos que vamos a ver no vamos a informar este elemento (vamos a considerar que los datos históricos corresponden a series temporales completas).

Parte “D”: Es opcional; indica la serie original que se va a suavizar.

Puede venir definida como:

  • Lista de miembros: @LIST(Ene,Feb,Mar,Abr,May,Jun…)
  • Lista de miembros complejos: @LIST(“2016”->Ene, “2016”->Feb, “2016”->Mar…)
  • Función tipo @XRANGE

Si no se informa, Essbase toma como serie los niveles 0 de la dimensión con la propiedad “tiempo”.

Veamos un ejemplo: partimos de los siguientes datos de venta:

Con la siguiente representación gráfica:

Vamos a suavizar la serie utilizando la función @SPLINE y vamos a probar 3 valores para el parámetro “s”:

“s” = 1:

  • Spl_ventas(
    • @SPLINE(Ventas,1,,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

“s” = 10:

  • Spl_ventas(
    • @SPLINE(Ventas,10,,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

“s” = 100:

  • Spl_ventas(
    • @SPLINE(Ventas,100,,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

Veamos la representación gráfica:

  • Línea azul: Ventas
  • Línea verde: Spline “s” = 1
  • Línea marrón: Spline “s” = 10
  • Línea amarilla: Spline “s” = 100

Podemos ver como a medida que aumenta el valor de “s” la serie se va suavizando.

Vamos a utilizar la serie suavizada (“s” = 10) para realizar la proyección:

  • Spl_ventas (
    • @TREND(@LIST(“2016”->Ene,“2018”->Dic),,,,,@LIST(“2019”->Ene,“2021”->Dic),DES,0.5,0.5);
  • )

Obteniendo los siguientes resultados:

En la siguiente gráfica se puede comparar la proyección obtenida a partir de los datos iniciales y de los datos suavizados:

  • Línea azul: Ventas
  • Línea marrón: Spline “s” = 10

II.- @MOVMED

Esta función permite calcular la mediana (valor que deja por arriba y por debajo el 50% de los valores de una serie) móvil de una serie de datos.

  • Móvil: el rango en el que calcula la mediana se va moviendo a medida que avanzamos por la serie (por ejemplo, para cada mes calcula la mediana de los 6 meses previos, incluido el propio mes).

La estructura de esta función consta de 3 partes:

  • @MOVMED(“A”,”B”,”C”);

Parte “A”: Variable de la que se calcula la mediana (por ejemplo, “Ventas”).

Parte “B”: es opcional; es un parámetro “n” que indica el número de periodos que incluye el rango en el que se calcula la mediana.

  • Por ejemplo, supongamos una serie mensual, si “n” es 3, para cada mes calcula la mediana de los 3 últimos meses (incluyendo el mismo). Si el mes es, por ejemplo, abril, la mediana se calcula con los valores de febrero, marzo y abril.
    • En este caso, para enero y febrero, como no hay 3 valores previos (incluido el propio mes) para calcular la mediana, repite el valor de estos meses.
  • Si no se informa este parámetro, por defecto toma el valor 3.

Parte “C”: Es opcional; indica la serie para la cual se va a calcular la mediana móvil.

Puede venir definida como:

  • Lista de miembros: @LIST(Ene,Feb,Mar,Abr,May,Jun…)
  • Lista de miembros complejos: @LIST(“2016”->Ene, “2016”->Feb, “2016”->Mar…)
  • Función tipo @XRANGE

Si no se informa Essbase toma como serie los niveles 0 de la dimensión con la propiedad “tiempo”.

Veamos un ejemplo: partiendo de los datos del ejemplo anterior, vamos a suavizar la serie de “Ventas” utilizando la función @MOVMED y vamos a probar 2 valores para el parámetro “n”:

“n” = 3:

  • Med_ventas(
    • @MOVMED(Ventas,3,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

“n” = 6:

  • Med_ventas(
    • @MOVMED(Ventas,6,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

Veamos la representación gráfica:

  • Línea azul: Ventas
  • Línea verde: Movmed “n” = 3
  • Línea marrón: Movmed “n” = 6

Se puede observar como a medida que aumenta el valor de “n” la serie se va suavizando.

Vamos a utilizar la serie suavizada (“n” = 6) para realizar la proyección:

  • Med_ventas(
    • @TREND(@LIST(“2016”->Ene,“2018”->Dic),,,,,@LIST(“2019”->Ene,“2021”->Dic),DES,0.5,0.5);
  • )

Obteniendo los siguientes resultados:

En la siguiente gráfica se puede comparar la proyección obtenida a partir de los datos iniciales y de los datos suavizados:

  • Línea azul: Ventas
  • Línea marrón: Movmed “n” = 6

III.- @MOVAVG

Esta función permite calcular el valor medio móvil de una serie de datos.

  • Móvil: el rango para el que se calcula el valor medio se va moviendo a medida que avanzamos por la serie (por ejemplo, para cada mes calcula el valor medio de los 6 meses previos, incluido el mismo).

La estructura de esta función consta de 3 partes:

  • @MOVAVG(“A”,”B”,”C”);

Parte “A”: Variable de la que se calcula el valor medio (por ejemplo, “Ventas”).

Parte “B”: es opcional; es un parámetro “n” que indica el número de periodos que incluye el rango para el que se calcula el valor medio.

  • Por ejemplo, supongamos una serie mensual, si “n” es 4 para cada mes calcula el valor medio de los 4 últimos meses (incluyendo el mismo). Si el mes es, por ejemplo, junio, el valor medio lo calcula a partir de los valores de marzo, abril, mayo y junio.
    • En este caso, para enero, febrero y marzo, como no hay 4 valores previos (incluido el propio mes) para calcular el valor medio, repite el valor de cada mes.
  • Si no se informa este parámetro, por defecto toma el valor 3.

Parte “C”: Es opcional; indica la serie para la cual se va a calcular el valor medio.

Puede venir definida como:

  • Lista de miembros: @LIST(Ene,Feb,Mar,Abr,May,Jun…)
  • Lista de miembros complejos: @LIST(“2016”->Ene, “2016”->Feb, “2016”->Mar…)
  • Función tipo @XRANGE

Si no se informa, Essbase toma como serie los niveles 0 de la dimensión con la propiedad “tiempo”.

Veamos un ejemplo: Vamos a suavizar la serie utilizando la función @MOVAVG y vamos a probar 2 valores para el parámetro “n”:

“n” = 3:

  • Avg_ventas(
    • @MOVAVG(Ventas,3,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

“n” = 6:

  • Avg_ventas(
    • @MOVAVG(Ventas,6,@LIST(“2016”->Ene,“2018”->Dic));
  • )

Obteniendo los siguientes resultados:

Veamos la representación gráfica:

  • Línea azul: Ventas
  • Línea verde: Movavg “n” = 3
  • Línea marrón: Movavg “n” = 6

Podemos ver como a medida que aumenta el valor de “n” la serie se va suavizando.

Podemos utilizar la serie suavizada (“n” = 6) para realizar la proyección:

  • Avg_ventas(
    • @TREND(@LIST(“2016”->Ene,“2018”->Dic),,,,,@LIST(“2019”->Ene,“2021”->Dic),DES,0.5,0.5);
  • )

Obteniendo los siguientes resultados:

En la siguiente gráfica se puede comparar la proyección obtenida a partir de los datos iniciales y de los datos suavizados:

  • Línea azul: Ventas
  • Línea marrón: Movavg “n” = 6