En esta sección: |
Puede calcular tendencias en los datos numéricos y predecir valores más allá del intervalo de los que están almacenados en el origen de datos usando la función FORECAST . Se puede utilizar FORECAST en una solicitud de informe o de gráfico.
Los cálculos que realice para identificar tendencias y valores de pronóstico son:
A la hora de predecir valores y calcular tendencias, FORECAST continúa realizando los mismos cálculos más allá de los puntos de datos, usando los valores de tendencia generados como nuevos puntos de datos. En la técnica de regresión lineal, la ecuación calculada se utiliza para obtener valores de tendencias y valores pronosticados.
FORECAST realiza los cálculos en base a los datos proporcionados, pero las decisiones sobre su uso y fiabilidad son responsabilidad del usuario. Por tanto, las predicciones de FORECAST no son siempre acertadas. Existen muchos factores que determinan la precisión de un pronóstico.
Cómo: Referencia: |
Para invocar procesamiento FORECAST, incluya FORECAST en un comando RECAP. En este comando, especifique los parámetros necesarios para generar valores estimados, incluyendo el campo que hay que usar para realizar los cálculos, el tipo de cálculo que se va a utilizar y el número de pronósticos que se va a generar. El campo RECAP que contiene el resultado de FORECAST puede ser un campo nuevo (no recursivo) o el mismo campo usado en los cálculos de FORECAST (recursivo):
FORECAST actúa sobre el último campo ACROSS de la solicitud. Si la solicitud no contiene ningún campo ACROSS , actúa sobre el último campo BY. Los cálculos de FORECAST empiezan de nuevo cuando cambia el valor del campo de clasificación de más alto nivel. En una solicitud con múltiples comandos de visualización, FORECAST actúa sobre el último campo ACROSS (o si no hay ningún campo ACROSS, el último campo By) del último comando de visualización. Cuando se usa un campo ACROSS con FORECAST, el comando de visualización debe ser SUM o COUNT.
Nota: Aunque pase parámetros a FORECAST mediante una lista de argumentos entre paréntesis, FORECAST no es una función. Puede coexistir con una función del mismo nombre, siempre y cuando la función no esté especificada en un comando RECAP.
Cálculo MOVAVE
ON sortfield RECAP result_field[/fmt] = FORECAST(infield, interval, npredict, 'MOVAVE',npoint1)sendstyle
Cálculo EXPAVE
ON sortfield RECAP result_field[/fmt] = FORECAST(infield, interval, npredict, 'EXPAVE',npoint1);
Cálculo DOUBLEXP
ON sortfield RECAP fld1[/fmt] = FORECAST(infield, interval, npredict, 'DOUBLEXP',npoint1, npoint2);
Cálculo SEASONAL
ON sortfield RECAP fld1[/fmt] = FORECAST(infield, interval, npredict, 'SEASONAL', nperiod, npoint1, npoint2, npoint3);
Cálculo REGRESS
ON sortfield RECAP result_field[/fmt] = FORECAST(infield, interval, npredict, 'REGRESS');
donde:
Nota: La palabra FORECAST y los paréntesis iniciales deben estar en la misma línea que la sintaxis sortfield=.
Para campos de fecha, el componente mínimo en el formato determina cómo se interpreta el número. Por ejemplo, si el formato es YMD, MDY o DMY, un valor de intervalo de 2 se interpreta como dos días. Si el formato es YM, el valor de intervalo de 2 se interpreta como dos meses.
nperiod * npredict
k=2/(1+npoint1)
g=2/(1+npoint2)
p=2/(1+npoint3)
ON TABLE SET STYLE *TYPE=DATA,COLUMN=MYFORECASTSORTFIELD,WHEN=FORECAST,COLOR=RED, $ENDSTYLE
Un promedio móvil simple es una serie de medios aritméticos calculados con un número de valores de un campo especificado. Cada nueva media en la serie se calcula omitiendo el primer valor utilizado en el cálculo anterior y sumando el próximo valor de datos al cálculo.
Los promedios móviles simples se usan a veces para analizar las tendencias que con el tiempo desarrollan los precios de las acciones. En esta situación, se calcula el promedio usando un número específico de periodos de precios de acciones. Una desventaja de este indicador es que, dado que omite los valores más antiguos del cálculo en la medida que avanza, pierde su memoria con el tiempo. Además, los valores medios se distorsionan con altos y bajos extremos, toda vez que este método les da el mismo peso a cada punto.
Los valores pronosticados más allá del rango de los valores de datos se calculan usando un promedio móvil que maneja los valores de tendencias calculados como si fueran nuevos puntos de datos.
El primer promedio móvil completo ocurre en el nº punto de datos porque el cálculo necesita n valores. Esto se conoce como el retardo. Los valores del promedio móvil para las filas finales se calculan como sigue: el primer valor en la columna del promedio móvil es igual al primer valor de datos, el segundo valor en la columna es el promedio de los dos valores de datos, y así sucesivamente hasta la nª fila, momento en el cual ya habrá suficientes valores para calcular el promedio móvil con el número de valores especificado.
Esta solicitud define un valor de número entero llamado PERIOD que se usa como una variable independiente para el promedio móvil. Pronostica tres periodos de valores más allá del rango de datos recuperados.
DEFINE FILE GGSALES SDATE/YYM = DATE; SYEAR/Y = SDATE; SMONTH/M = SDATE; PERIOD/I2 = SMONTH; END TABLE FILE GGSALES SUM UNITS DOLLARS BY CATEGORY BY PERIOD WHERE SYEAR EQ 97 AND CATEGORY NE 'Gifts' ON PERIOD RECAP MOVAVE/D10.1= FORECAST(DOLLARS,1,3,'MOVAVE',3); END
La salida es:
En el informe, el número de valores que hay que utilizar en el promedio es 3 y no hay valores de UNITS o DOLLARS para los valores de PERIOD generados.
Cada promedio (valor MOVAVE) se calcula con valores DOLLARS allí donde existen. El cálculo del promedio móvil comienza del siguiente modo:
En los valores pronosticados más allá de los valores provistos, se usan los valores MOVAVE calculados como nuevos puntos de datos para continuar el promedio móvil. Los valores MOVAVE (empezando con 694,975.6 para el periodo 13) se calculan a partir de los valores MOVAVE anteriores como nuevos puntos de datos. Por ejemplo, el primer valor pronosticado (694,975.6) es el promedio de los puntos de datos de los periodos 11 y 12 (620,264 y762,328) y el promedio móvil para el periodo 12 (702,334.7). El cálculo es: 694,975 = (620,264 + 762,328 + 702,334.7)/3.
Esta solicitud define un valor de número entero llamado PERIOD que se usa como una variable independiente para el promedio móvil. Pronostica tres periodos de valores más allá del rango de datos recuperados. Usa el mismo nombre para el campo RECAP y como primer argumento de la lista de parámetro FORECAST. Los valores de tendencia no se muestran en el informe. A los valores de datos reales para DOLLARS siguen los valores pronosticados en la columna de informe.
DEFINE FILE GGSALES SDATE/YYM = DATE; SYEAR/Y = SDATE; SMONTH/M = SDATE; PERIOD/I2 = SMONTH; END TABLE FILE GGSALES SUM UNITS DOLLARS BY CATEGORY BY PERIOD WHERE SYEAR EQ 97 AND CATEGORY NE 'Gifts' ON PERIOD RECAP DOLLARS/D10.1 = FORECAST(DOLLARS,1,3,'MOVAVE',3); END
La salida es:
El método de una sola columna exponencial suavizada calcula un promedio que le permite elegir pesos que aplicar a valores nuevos y viejos.
La siguiente fórmula determina el peso dado al valor más nuevo.
k = 2/(1+n)
donde:
El próximo cálculo del valor del promedio móvil exponencial (EMA) proviene de la fórmula siguiente:
EMA = (EMA * (1-k)) + (datavalue * k)
Eso significa que el valor más actual del origen de datos se multiplica por el factor k y el promedio móvil actual se multiplica por el factor (1-k). Estas cantidades se suman para generar el nuevo EMA.
Nota: Cuando se han agotado los valores de datos, se utiliza el último valor de datos en el grupo de clasificación como el próximo valor de datos.
Lo que sigue define un valor de número entero llamado PERIOD para utilizarlo como la variable independiente del promedio móvil. Pronostica tres periodos de valores más allá del rango de datos recuperados.
DEFINE FILE GGSALES SDATE/YYM = DATE; SYEAR/Y = SDATE; SMONTH/M = SDATE; PERIOD/I2 = SMONTH; END TABLE FILE GGSALES SUM UNITS DOLLARS BY CATEGORY BY PERIOD WHERE SYEAR EQ 97 AND CATEGORY NE 'Gifts' ON PERIOD RECAP EXPAVE/D10.1= FORECAST(DOLLARS,1,3,'EXPAVE',3); END
La salida es:
En el informe, los tres valores pronosticados de EXPAVE se calculan en cada valor de CATEGORY. Para valores que estén fuera del rango de datos, los nuevos valores PERIOD se generan añadiendo el valor interno (1) al valor anterior de PERIOD.
Cada promedio (valor EXPAVE) se calcula con valores DOLLARS, cuando existan. El cálculo del promedio móvil comienza del siguiente modo:
n=3 (number used to calculate weights)
k = 2/(1+n) = 2/4 = 0.5
EXPAVE = (EXPAVE*(1-k))+(new-DOLLARS*k) = (801123*0.5) + (682340*0.50) = 400561.5 + 341170 = 741731.5
EXPAVE = (EXPAVE*(1-k))+(new-DOLLARS*k) = (741731.5*0.5)+(765078*0.50) = 370865.75 + 382539 = 753404.75
Para los valores pronosticados más allá de los provistos, el último valor EXPAVE se utiliza como el nuevo punto de datos en el cálculo exponencial suavizado. Los valores EXPAVE pronosticados (empezando por 706,741.6) se calculan con el promedio anterior y el nuevo punto de datos. Dado que el promedio anterior también se utiliza como nuevo punto de datos, los valores pronosticados son siempre iguales al último valor de la tendencia. Por ejemplo, el promedio anterior para el periodo 13 es 706,741.6, lo cual se usa también como el próximo punto de datos. Por lo tanto, el promedio se calcula de la manera siguiente: (706,741.6 * 0.5) + (706,741.6 * 0.5) = 706,741.6
EXPAVE = (EXPAVE * (1-k)) + (new-DOLLARS * k) = (706741.6*0.5) + (706741.6*0.50) = 353370.8 + 353370.8 = 706741.6
El suavizado exponencial doble produce un promedio móvil exponencial que toma en cuenta la tendencia de los datos para aumentarlos o disminuirlos con el paso del tiempo sin que se repitan. Esto se logra usando dos ecuaciones con dos constantes.
DOUBLEXP(t) = k * datavalue(t) + (1-k) * ((DOUBLEXP(t-1) + b(t-1))
b(t) = g * (DOUBLEXP(t)-DOUBLEXP(t-1)) + (1 - g) * (b(t-1))
Ambas ecuaciones se resuelven para producir el promedio suavizado. El primer promedio suavizado se establece al primer valor de datos. El primer componente de tendencia se establece en cero. Para elegir las dos constantes, los mejores resultados se suelen obtener minimizando el error de media cuadrado (MSE) entre los valores de datos y los promedios calculados. Podría necesitar técnicas de optimización no lineal para hallar las constantes óptimas.
La ecuación utilizada para pronosticar más allá de los puntos de datos con suavizado de doble exponente es
forecast(t+m) = DOUBLEXP(t) + m * b(t)
donde:
Lo que sigue define un valor de número entero llamado PERIOD para utilizarlo como la variable independiente del promedio móvil. El método de suavizado exponencial doble pronostica la tendencia de los puntos de datos mejor que el método de suavizado único:
SET HISTOGRAM = OFF TABLE FILE CENTSTMT SUM ACTUAL_YTD BY PERIOD ON PERIOD RECAP EXP/D15.1 = FORECAST(ACTUAL_YTD,1,0,'EXPAVE',3); ON PERIOD RECAP DOUBLEXP/D15.1 = FORECAST(ACTUAL_YTD,1,0, 'DOUBLEXP',3,3); WHERE GL_ACCOUNT LIKE '3%%%' END
La salida es:
El suavizado exponencial triple produce un promedio móvil exponencial que toma en cuenta la tendencia de datos que se repite en intervalos con el paso del tiempo. Por ejemplo, los datos de venta que aumentan y en los que el 25% de las ventas ocurre durante diciembre contienen tanto tendencias como estacionalidad. La toma en cuenta tanto la tendencia como la estacionalidad mediante el uso de tres ecuaciones con tres constantes.
Para realizar el suavizado exponencial triple debe conocer el número de puntos de datos en cada periodo de tiempo (designado como L en las siguientes ecuaciones). Se calcula el índice estacional para que represente la estacionalidad. Los datos se dividen por el índice de la estación anterior y a continuación, se utilizan en el cálculo del promedio suavizado.
SEASONAL(t) = k * (datavalue(t)/I(t-L)) + (1-k) * (SEASONAL(t-1) + b(t-1))
b(t) = g * (SEASONAL(t)-SEASONAL(t-1)) + (1-g) * (b(t-1))
I(t) = p * (datavalue(t)/SEASONAL(t)) + (1 - p) * I(t-L)
Estas ecuaciones se resuelven para producir el promedio suavizado de triple exponente. El primer promedio suavizado se establece al primer valor de datos. Los valores iniciales para los valores estacionales se calculan a partir del número máximo de periodos de datos completos en el origen de datos, en tanto que la tendencia inicial se calcula a partir de dos periodos de datos. Estos valores se calculan siguiendo los siguientes pasos:
b(0) = (1/L) ((y(L+1)-y(1))/L + (y(L+2)-y(2))/L + ... + (y(2L) - y(L))/L )
A(j) = ( y((j-1)L+1) + y((j-1)L+2) + ... + y(jL) ) / L
I(n) = ( y(n)/A(1) + y(L+n)/A(2) + ... + y((N-1)L+n)/A(N) ) / N
Se deben escoger cuidadosamente las tres constantes. Los mejores resultados se suelen obtener eligiendo las constantes para minimizar el error de media cuadrado (MSE) entre los valores de datos y los promedios calculados. Cambiar los valores de npoint1 y npoint2 afecta los resultados y puede que haya algunos valores que generen una mejor aproximación. Para buscar una mejor aproximación, tal vez quiera buscar valores que minimicen el MSE.
La ecuación utilizada para pronosticar más allá del último punto de datos con suavizado exponencial triple es:
forecast(t+m) = (SEASONAL(t) + m * b(t)) / I(t-L+MOD(m/L))
donde:
Lo que sigue contiene datos con estacionalidad pero sin tendencia. Por lo tanto, npoint se establece en un número elevado (1000) para que el factor de tendencia resulte insignificante en el cálculo:
SET HISTOGRAM = OFF TABLE FILE VIDEOTRK SUM TRANSTOT BY TRANSDATE ON TRANSDATE RECAP SEASONAL/D10.1 = FORECAST(TRANSTOT,1,3,'SEASONAL', 3,3,1000,1); WHERE TRANSDATE NE '19910617' END
En la salida, npredict es 3. De allí que se generen tres periodos (nueve puntos, nperiod* npredict).
La ecuación de regresión lineal estima valores al asumir que la variable dependiente (los nuevos valores calculados) y la variable independiente (los valores del campo de clasificación) están relacionados por una función que representa una línea recta:
y = mx + b
donde:
REGRESS utiliza la técnica de mínimos cuadrados ordinarios para calcular valores de m y b que reducen la suma de las diferencias cuadradas entre los datos y la línea resultante.
Las siguientes fórmulas muestran cómo se calculan m y b.
donde:
Al igual que los valores pronosticados, los valores de tendencia se calculan mediante una ecuación de línea de regresión.
TABLE FILE CAR PRINT MPG BY DEALER_COST WHERE MPG NE 0.0 ON DEALER_COST RECAP FORMPG=FORECAST(MPG,1000,3,'REGRESS'); END
La salida es:
DEALER_COST MPG FORMPG 2,886 27 25.51 4,292 25 23.65 4,631 21 23.20 4,915 21 22.82 5,063 23 22.63 5,660 21 21.83 21 21.83 5,800 24 21.65 6,000 24 21.38 7,427 16 19.49 8,300 18 18.33 8,400 18 18.20 10,000 18 16.08 11,000 18 14.75 11,194 9 14.50 14,940 11 9.53 15,940 0 8.21 16,940 0 6.88 17,940 0 5.55
Nota:
DEALER_COST es la variable independiente (x) y MPG es la variable dependiente (y). La ecuación se utiliza para calcular la tendencia MPGFORECAST y los datos pronosticados.
En este caso, la ecuación es aproximadamente como se muestra a continuación:
FORMPG = (-0.001323 * DEALER_COST) + 29.32
Los valores pronosticados son (a causa del redondeo, los valores no son exactamente como los ha calculado FORECAST, pero muestran el proceso de cálculo).
DEALER_COST | Cálculo | FORMPG |
---|---|---|
15,940 | (-0.001323 * 15,940) + 29.32 | 8.23 |
16,940 | (-0.001323 * 16,940) + 29.32 | 6.91 |
17,940 | (-0.001323 * 17,940) + 29.32 | 5.59 |
Puede utilizar FORECAST varias veces en una solicitud. Ahora bien, todas las solicitudes de FORECAST deben especificar el mismo campo de clasificación, intervalo y número de predicciones. Lo único que puede cambiar son el campo RECAP, el método, el campo usado para calcular los valores FORECAST y el número de puntos para el promedio. Si cambia cualquiera de los otros parámetros, se ignoran los nuevos.
Si desea mover una columna de FORECAST en la salida del informe, utilice un comando COMPUTE vacío para el campo FORECAST como un marcador de posición. El tipo de datos (I, F, P, D) debe ser el mismo en el comando COMPUTE y el comando RECAP.
Para facilitar la interpretación de la salida de informe, cree un campo que indique si el valor de FORECAST en cada fila es un valor pronosticado. Para lograr esto, defina un campo virtual cuyo valor sea una constante que no sea cero. Las filas en la salida de informe que representen registros reales en el origen de datos aparecerán con esta constante. En las filas que representen valores pronosticados aparecerá cero. También puede propagar este campo a un archivo HOLD.
Este ejemplo calcula los promedios móviles y exponenciales para los campos DOLLARS y BUDDOLLARS en el origen de datos GGSALES. El campo de clasificación, el intervalo y el número de pronósticos son iguales para todos los cálculos.
DEFINE FILE GGSALES SDATE/YYM = DATE; SYEAR/Y = SDATE; SMONTH/M = SDATE; PERIOD/I2 = SMONTH; END TABLE FILE GGSALES SUM DOLLARS AS 'DOLLARS' BUDDOLLARS AS 'BUDGET' BY CATEGORY NOPRINT BY PERIOD AS 'PER' WHERE SYEAR EQ 97 AND CATEGORY EQ 'Coffee' ON PERIOD RECAP DOLMOVAVE/D10.1= FORECAST(DOLLARS,1,0,'MOVAVE',3); ON PERIOD RECAP DOLEXPAVE/D10.1= FORECAST(DOLLARS,1,0,'EXPAVE',4); ON PERIOD RECAP BUDMOVAVE/D10.1 = FORECAST(BUDDOLLARS,1,0,'MOVAVE',3); ON PERIOD RECAP BUDEXPAVE/D10.1 = FORECAST(BUDDOLLARS,1,0,'EXPAVE',4); END
La salida se muestra en la siguiente imagen.
El ejemplo que aparece a continuación coloca el campo DOLLARS después del campo MOVAVE usando un comando COMPUTE vacío como marcador de posición para el campo MOVAVE. Los comandos COMPUTE y RECAP especifican formatos para MOVAVE (del mismo tipo de datos), pero el formato del comando RECAP toma precedencia.
DEFINE FILE GGSALES SDATE/YYM = DATE; SYEAR/Y = SDATE; SMONTH/M = SDATE; PERIOD/I2 = SMONTH; END TABLE FILE GGSALES SUM UNITS COMPUTE MOVAVE/D10.2 = ; DOLLARS BY CATEGORY BY PERIOD WHERE SYEAR EQ 97 AND CATEGORY EQ 'Coffee' ON PERIOD RECAP MOVAVE/D10.1= FORECAST(DOLLARS,1,3,'MOVAVE',3); END
La salida se muestra en la siguiente imagen.
Category PERIOD Unit Sales MOVAVE Dollar SalesCoffee 1 61666 801,123.0 801123 2 54870 741,731.5 682340 3 61608 749,513.7 765078 4 57050 712,897.3 691274 5 59229 725,598.7 720444 6 58466 718,058.3 742457 7 60771 736,718.0 747253 8 54633 715,202.0 655896 9 57829 711,155.3 730317 10 57012 703,541.7 724412 11 51110 691,664.3 620264 12 58981 702,334.7 762328 13 0 694,975.6 0 14 0 719,879.4 0 15 0 705,729.9 0
En el ejemplo que aparece a continuación, el campo virtual DATA_ROW tiene el valor 1 para cada fila en el origen de datos. Para las filas pronosticadas tiene un valor de cero. El campo PREDICT se calcula como YES para filas pronosticadas y como NO para filas que contengan datos.
DEFINE FILE CAR DATA_ROW/I1 = 1; END TABLE FILE CAR PRINT DATA_ROW COMPUTE PREDICT/A3 = IF DATA_ROW EQ 1 THEN 'NO' ELSE 'YES' ; MPG BY DEALER_COST WHERE MPG GE 20 ON DEALER_COST RECAP FORMPG/D12.2=FORECAST(MPG,1000,3,'REGRESS'); ON DEALER_COST RECAP MPG =FORECAST(MPG,1000,3,'REGRESS'); END
La salida es:
DEALER_COST DATA_ROW PREDICT MPG FORMPG 2,886 1 NO 27.00 25.65 4,292 1 NO 25.00 23.91 4,631 1 NO 21.00 23.49 4,915 1 NO 21.00 23.14 5,063 1 NO 23.00 22.95 5,660 1 NO 21.00 22.21 1 NO 21.00 22.21 5,800 1 NO 24.20 22.04 6,000 1 NO 24.20 21.79 7,000 0 YES 20.56 20.56 8,000 0 YES 19.32 19.32 9,000 0 YES 18.08 18.08
WebFOCUS |