¿Cómo hacer pronósticos basados ​​en datos agregados en intervalos irregulares?

10

Estoy tratando de pronosticar las ventas de productos en máquinas expendedoras. El problema es que la máquina se llena a intervalos irregulares y en cada llenado solo podemos registrar las ventas agregadas desde el último llenado de la máquina (es decir, no tenemos datos de ventas diarias). Básicamente, tenemos datos para ventas agregadas a intervalos irregulares. Los intervalos generalmente son entre 2 días y 3 semanas. Aquí hay datos de ejemplo para una máquina expendedora y un producto:

27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2

Nuestro algoritmo ingenuo actual es calcular el promedio de ventas por día dividiendo la cantidad total vendida durante los últimos 90 días por 90.

¿Tienes alguna idea de cómo mejorar el pronóstico de las ventas por día? Necesito pronosticar lo que se venderá en la próxima visita de la máquina. ¿Es posible utilizar algún tipo de algoritmo de suavizado exponencial dada la naturaleza de nuestros datos?

¡Gracias por adelantado!

ACTUALIZACIÓN: Muchas gracias por todas las respuestas y comentarios. Permítanme tratar de dar un poco más de contexto (el caso de negocios detrás de la pregunta, muy simplificado, por supuesto). Tenemos cientos de máquinas expendedoras. Todos los días tenemos que decidir qué 20 de ellos visitar para recargar. Para hacerlo, estamos tratando de predecir cuál es el estado actual de las máquinas y seleccionar las 20 máquinas "más vacías". Para cada máquina y producto, estamos calculando el promedio de ventas por día (SPD) usando el algoritmo ingenuo descrito anteriormente. Luego multiplicamos el SPD por el número de días desde el último llenado de la máquina y el resultado es la cantidad pronosticada vendida.

Ivan Dimitrov
fuente
Creo que es una pregunta interesante. Mi respuesta a su pregunta y conjunto de datos exactos es: ¿importa? y: obtener más datos. Además, creo que es útil saber cuál es la capacidad de la máquina expendedora.
Adam
@ Adam La capacidad de este producto es de 50 botellas. Quizás mi descripción del problema no sea lo suficientemente clara. Intentaré editarlo un poco para dar más contexto. Básicamente estoy buscando ideas sobre cómo resolver el problema general y estoy muy agradecido por todos los comentarios hasta ahora. El conjunto de datos específico se da solo como ejemplo de cómo se ven los datos. Para otras máquinas expendedoras, puedo proporcionar datos durante un período mucho más largo.
Ivan Dimitrov
@IvanDimitrov: ¿Qué es exactamente la columna dos en sus datos?
Kyle Brandt
@KyleBrandt La columna dos es la cantidad de botellas vendidas desde la última visita a la máquina expendedora. Entonces, el número 48 en la fila superior significa que se vendieron 48 botellas entre el 17/02 y el 27/02
Ivan Dimitrov

Respuestas:

11

Centrémonos en el problema comercial, desarrollemos una estrategia para abordarlo y comencemos a implementar esa estrategia de una manera simple. Más tarde, se puede mejorar si el esfuerzo lo amerita.

El problema empresarial es maximizar las ganancias, por supuesto. Esto se hace aquí al equilibrar los costos de las máquinas de rellenado con los costos de las ventas perdidas. En su formulación actual, los costos de rellenar las máquinas son fijos: se pueden rellenar 20 por día. El costo de las ventas perdidas, por lo tanto, depende de la frecuencia con que las máquinas estén vacías.

Se puede obtener un modelo estadístico conceptual para este problema ideando alguna forma de estimar los costos para cada una de las máquinas, en base a datos previos. Lo esperadoel costo de no dar servicio a una máquina hoy es aproximadamente igual a la posibilidad de que se haya agotado por la velocidad a la que se usa. Por ejemplo, si una máquina tiene un 25% de posibilidades de estar vacía hoy y, en promedio, vende 4 botellas por día, su costo esperado es igual al 25% * 4 = 1 botella en ventas perdidas. (Convierta eso en dólares como lo desee, sin olvidar que una venta perdida conlleva costos intangibles: las personas ven una máquina vacía, aprenden a no confiar en ella, etc. Incluso puede ajustar este costo de acuerdo con la ubicación de la máquina; tener algo oscuro las máquinas que funcionan vacías por un tiempo pueden incurrir en pocos costos intangibles.) Es justo suponer que rellenar una máquina restablecerá inmediatamente esa pérdida esperada a cero; debería ser raro que una máquina se vacíe todos los días (no lo desee. ..). Como pasa el tiempo,

θXθX

X=(7 7,7 7,7 7,13,11,9 9,8,7 7,8,10)y=(4 4,14,4 4,dieciséis,dieciséis,12,7 7,dieciséis,24,48)θ^=1.8506

Real vs ajuste

Los puntos rojos muestran la secuencia de ventas; los puntos azules son estimaciones basadas en la estimación de máxima probabilidad de la tasa de ventas típica.

t

Pérdida con el tiempo

50/ /1,85=27

Dada una tabla como esta para cada máquina (de las cuales parece que hay un par de cientos), puede identificar fácilmente las 20 máquinas que actualmente experimentan la mayor pérdida esperada: darles servicio es la decisión comercial óptima. (Tenga en cuenta que cada máquina tendrá su propia tasa estimada y estará en su propio punto a lo largo de su curva, dependiendo de cuándo recibió el último servicio). En realidad, nadie tiene que mirar estos cuadros: identificar las máquinas para dar servicio de esta manera es fácil automatizado con un programa simple o incluso con una hoja de cálculo.

Este es solo el comienzo. Con el tiempo, los datos adicionales pueden sugerir modificaciones a este modelo simple: puede tener en cuenta los fines de semana y días festivos u otras influencias anticipadas en las ventas; puede haber un ciclo semanal u otros ciclos estacionales; Puede haber tendencias a largo plazo para incluir en las previsiones. Es posible que desee realizar un seguimiento de los valores periféricos que representan ejecuciones inesperadas en las máquinas e incorporar esta posibilidad en las estimaciones de pérdidas, etc. Sin embargo, dudo que sea necesario preocuparse mucho por la correlación en serie de las ventas: es difícil pensar de cualquier mecanismo para causar tal cosa.

θ^=1,871.8506

1-POISSON(50, Theta * A2, TRUE)

para Excel ( A2es una celda que contiene el tiempo transcurrido desde la última recarga y Thetaes la tasa de ventas diaria estimada) y

1 - ppois(50, lambda = (x * theta))

para R.)

Los modelos más elegantes (que incorporan tendencias, ciclos, etc.) deberán utilizar la regresión de Poisson para sus estimaciones.

θ

whuber
fuente
1
Para mí, la suposición de que las ventas / eventos son independientes entre sí parece ilógico, ya que estas son medidas tomadas con el tiempo en la misma máquina. ¿Cómo abordaría su enfoque los datos de ventas auto correlacionados que podrían haber tenido un cambio de nivel? Sólo curioso ?
IrishStat
1
Creo que he esbozado una ruta para evaluar y tratar las posibles formas de "autocorrelación". No se manifestarían como tales en un análisis tradicional de series de tiempo, incluso si hubiera datos espaciados regularmente disponibles. La correlación temporal resultaría de la correlación en factores externos, como los ciclos semanales o estacionales. Se produciría una forma interesante por la agrupación temporal de compras (por ejemplo, justo después del almuerzo o los fines de semana). Los "cambios netos de nivel" se pueden manejar ajustando la tendencia, si es necesario, pero simplemente usando una media continua se resolvería automáticamente.
whuber
4

Creo que generalmente tendrá el primer paso para convertir a una serie de tiempo regular. Dijiste que tomas el promedio de 90 días. Dado que tiene datos que son más frecuentes que eso, creo que tiene más sentido usar la mayor parte de lo que tiene al tomar los días entre cada observación y dividirlos por la cantidad de artículos vendidos para ese período (suponiendo que eso sea lo que segunda columna es).

Como descargo de responsabilidad, soy un completo aficionado, por lo que desea seguir el consejo de un experto como IrishStat sobre el siguiente código (por ejemplo, dijo que ETS es un mal modelo, así que solo trate esto como un ejemplo de juguete), pero con la esperanza que esto te ahorra algo de tiempo, aquí hay un código R con el que puedes jugar:

library("xts")
library("forecast")

x = read.table(text="27/02/2012 48
17/02/2012 24
09/02/2012 16
02/02/2012 7
25/01/2012 12
16/01/2012 16
05/01/2012 16
23/12/2011 4
16/12/2011 14
09/12/2011 4
02/12/2011 2")

#Convert the data into an XTS object which works with irregular time series 
x.xts = xts(x[,2], as.POSIXct(x[,1], format="%d/%m/%Y"))

#Conver to a daily rate by taking the observed data and dividing it by 
#the number of days between observations
daily_rate <- lag(x.xts) / diff(index(x.xts))

#Generate a daily time series for the dates
dummy_dates <- seq(from=index(x.xts)[1], to=tail(index(x.xts), 1), by="day")

#Combine daily series with observered daily rate
m.xts <- merge(daily_rate, dummy_dates)

#Interpolate the daily sales -- kind of evil because we "invent" data
m.xts.interpolate <- na.approx(m.xts)

#Convert to regular time series
m.ts <- ts(m.xts.interpolate, freq=365, start=c(2011, 336))
#Clean up dimnames in case of stl forecast (just an R thing when converting from dataframes)
dim(m.ts) <- NULL

#Fit TS to an ETS model (Rudely ignoring IrishStat's advice that it is a bad model, but this is just an example)
fit <- ets(m.ts)

#Forecast and Plot
plot(forecast(fit, h=30))

La trama resultante es:

ingrese la descripción de la imagen aquí

Kyle Brandt
fuente
¿Leyó mi respuesta "Hemos resuelto esto convirtiendo la demanda a una tasa dividiendo la demanda real por el número de días en el intervalo entre el servicio". En lugar de asumir un modelo como eres, identifiqué un modelo útil. Sus pronósticos son explosivos ya que creen las recientes "tasas anómalas" en lugar de ajustarse a ellas.
IrishStat
2
@IrishStat: Sí, incluso tengo un comentario en mi código que señala el hecho de que dijiste que era un mal modelo, solo pensé que algún código R podría ayudar a las personas al proporcionar una base para experimentar.
Kyle Brandt
1

Lo que tienes es un "problema de demanda intermitente". Hemos resuelto esto convirtiendo la demanda en una tasa dividiendo la demanda real por el número de días en el intervalo entre el servicio. Esta tasa se puede modelar como una función de transferencia para predecir una tasa dada la predicción del intervalo. Esta tasa prevista se puede convertir a una demanda. Se debe tener cuidado para detectar cambios estructurales en la tasa a través de la detección de intervención. Intente buscar en Google "enfoque de modelado de demanda intermitente utilizando una metodología de función de transferencia". Tenga muy claro el modelo de enfoques presuntivos de Croston o suavizado exponencial ya que son bastante deficientes.

ANÁLISIS ADICIONAL

Cuando modelé Rate en función del intervalo, obtuve lo siguiente. El uso de una predicción de INTERVALO que haya pasado esta ecuación puede predecir la tasa, que puede usarse para predecir la demanda. Este tipo de modelo permite que se incorpore la estructura autorregresiva en la frecuencia, así como también permite las pulsaciones, los cambios de nivel y / o las tendencias de tiempo local en la frecuencia.

      MODEL COMPONENT       LAG    COEFF     STANDARD      P       T        

# (BOP) VALOR DE ERROR VALOR

 Differencing                  1                                            
1CONSTANT                          .295       .840E-01   .0246     3.51

INTERVALO DE ENTRADA SERIE X1

 Differencing                  1                                            
2Omega (input) -Factor #  1    0   .685E-01   .346E-01   .1193     1.98

ENTRADA SERIE X2 I ~ P00002 03/12/11 PULSO

 Differencing                  1                                            
3Omega (input) -Factor #  2    0   1.43       .168       .0010     8.52

ENTRADA SERIE X3 I ~ P00007 08/12/11 PULSO

 Differencing                  1                                            
4Omega (input) -Factor #  3    0  -.935       .168       .0051    -5.57

ENTRADA SERIE X4 I ~ P00010 11/12/11 PULSO

 Differencing                  1                                            
5Omega (input) -Factor #  4    0   1.37       .260       .0062     5.27
IrishStat
fuente
1
Creo que esto malinterpreta ligeramente la pregunta: no tiene una demanda intermitente, ha observado una demanda intermitente , y aparentemente está feliz de asumir una demanda subyacente constante por día. De hecho, el enfoque de la función de transferencia parece ser el que está intentando aquí, aunque con un supuesto de linealidad, una ventana de 90 días y sin covariables. FWIW regresa la demanda contra los días (exógenos) desde la última lectura da alrededor de 2.2 artículos demandados por día, pero una alta incertidumbre en torno a esa estimación.
conjugateprior
@ConjugatePrior No puede observar la demanda real por día y las muestras a intervalos poco frecuentes, por lo tanto, es de facto equivalente a un problema de demanda intermitente. Su "tasa" se puede caracterizar como una caminata aleatoria con 3 excepciones (pulsos) en 12/16; 2 / 02; 2/27. Nuestra idea aquí es modelar la tasa en función del intervalo, luego predecir el intervalo y luego predecir la demanda. Parece haber modelado la demanda en función del intervalo obteniendo la tasa promedio simple que en este caso es severamente / adversamente efectuado por los 3 puntos de datos anómalos y no refleja la estructura autorregresiva.
IrishStat
2
Seguramente no puede ser una caminata aleatoria porque las ventas solo pueden aumentar o permanecer igual (de manera equivalente, las existencias solo pueden disminuir o permanecer en el mismo nivel), algo más como un proceso de renovación. Además, no estoy seguro de cómo descubriste que exactamente 3 puntos son valores atípicos. (Por cierto, el 'análisis' Sugerí sólo es una versión generalizada de su propia, con la suposición de linealidad insostenible, así que personalmente no estaría contento con ella.)
conjugateprior
@ConjugatePrior La tasa en función del intervalo mostró que la tasa dependía en gran medida de las tasas anteriores y también se veía afectada por tres "tasas inusuales". No se identificaron cambios de nivel. Lo que debería haber dicho era que la tasa era una caminata aleatoria sin una constante, por lo tanto no hay una tendencia discernible.
IrishStat
1
@IrishStat Muchas gracias por la respuesta. Leeré sobre la demanda intermitente utilizando una función de transferencia. Una pequeña corrección: no tenemos que predecir el INTERVALO. Tenemos que decidir cuándo visitar la máquina en función de la predicción de la tasa. Por ejemplo, una regla comercial podría ser "visitar la máquina cuando esté 60% vacía"
Ivan Dimitrov