Desarrollar un modelo de serie temporal adecuado para predecir las ventas en función del registro del mes pasado

12

He estado operando un negocio en línea durante dos años seguidos, así que tengo mis datos de ventas mensuales durante aproximadamente dos años. Mi negocio para cada mes ciertamente se ve afectado por el cambio estacional (funciona mejor en Navidad, etc.) y probablemente por otros factores que no conozco.

Para predecir mejor las ventas futuras, y para medir la efectividad de mi campaña de ventas, o el impacto de nuevos competidores, quiero poder desarrollar un modelo de serie temporal apropiado para extrapolar mis datos de ventas actuales en el futuro. Esto es para que cuando compare el resultado de mi predicción con el resultado real, pueda evaluar cuantitativamente la efectividad de mi campaña de ventas o el impacto de los competidores.

Mi pregunta es, dado que tengo 2 años de datos de ventas, ¿hay alguna forma de formular un modelo predictivo de series de tiempo para esto?

Nota: Me interesan más los conceptos y teorías de fondo, en lugar de las herramientas de recuadro negro. Hablando de herramientas, tengo Mathica, Matlab, R, Excel, Google Spreadsheet ... lo que sea.

Graviton
fuente
¿Qué software usas?
Dimitriy V. Masterov
1
@ DimitriyV.Masterov, tengo Matlab / R / Excel / Mathematica ... lo que sea. En realidad, estoy más interesado en los conceptos en lugar de escribir el código en sí mismo
Graviton

Respuestas:

14

Sí, hay formas de hacer esto. La gente se gana la vida haciendo cosas como esta ;-)

Está buscando pronósticos causales . Mire este libro de texto en línea gratuito sobre pronósticos para aprender sobre la metodología de pronóstico.

Tienes dos problemas clave en tus manos con los que debes lidiar: la estacionalidad (o más generalmente, la estructura de series de tiempo, posiblemente con autorregresión) por un lado, y los efectos causales como las promociones por otro lado. El Capítulo 8 en el libro de texto anterior trata sobre las series temporales en el contexto de ARIMA, mientras que el Capítulo 5 trata sobre los efectos causales.

Afortunadamente, es posible abordar ambos problemas calculando los llamados modelos ARIMAX (la X significa "efectos externos", es decir, ARIMA con efectos externos) o regresiones con errores ARIMA. Consulte la publicación del blog de Rob Hyndman sobre "El embrollo del modelo ARIMAX" para ver la diferencia. La auto.arima()función en el forecastpaquete R se ajustará a una regresión con errores ARIMA. Veamos un ejemplo, donde tomo un conjunto de datos estándar con tendencia fuerte y estacionalidad y agrego "promociones".

library(forecast)
AirPassengers # a built-in dataset
#      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
# 1949 112 118 132 129 121 135 148 148 136 119 104 118
# 1950 115 126 141 135 125 149 170 170 158 133 114 140
# 1951 145 150 178 163 172 178 199 199 184 162 146 166
# 1952 171 180 193 181 183 218 230 242 209 191 172 194
# 1953 196 196 236 235 229 243 264 272 237 211 180 201
# 1954 204 188 235 227 234 264 302 293 259 229 203 229
# 1955 242 233 267 269 270 315 364 347 312 274 237 278
# 1956 284 277 317 313 318 374 413 405 355 306 271 306
# 1957 315 301 356 348 355 422 465 467 404 347 305 336
# 1958 340 318 362 348 363 435 491 505 404 359 310 337
# 1959 360 342 406 396 420 472 548 559 463 407 362 405
# 1960 417 391 419 461 472 535 622 606 508 461 390 432

set.seed(1) # for reproducibility
promos <- rep(0,length(AirPassengers))
promos[sample(seq_along(AirPassengers),10)] <- 1
promos.future <- c(0,1,0,0,1,0,0,1,0,0,1,0)
AP.with.promos <- AirPassengers
AP.with.promos[promos==1] <- AP.with.promos[promos==1]+120

model <- auto.arima(AP.with.promos,xreg=promos)
summary(model) # examine the model - you'll see the estimated promo coefficient
# Series: AP.with.promos 
# ARIMA(0,1,1)(0,1,0)[12]                    

# Coefficients:
#           ma1    promos
#       -0.3099  122.2599
# s.e.   0.0947    2.2999

# sigma^2 estimated as 151.2:  log likelihood=-457.4
# AIC=920.79   AICc=920.98   BIC=929.42

# Training set error measures:
#                     ME     RMSE     MAE        MPE     MAPE      MASE         ACF1
# Training set 0.2682805 11.12974 8.24397 0.06139784 2.867274 0.1860814 0.0008326436

fcast <- forecast(model,xreg=promos.future,h=length(promos.future))
fcast
#          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
# Jan 1961       447.1516 431.3951 462.9081 423.0542 471.2490
# Feb 1961       543.4115 524.2670 562.5559 514.1326 572.6904
# Mar 1961       449.1516 427.1345 471.1687 415.4793 482.8239
# Apr 1961       491.1516 466.5956 515.7076 453.5964 528.7068
# May 1961       624.4115 597.5556 651.2674 583.3389 665.4841
# Jun 1961       565.1516 536.1777 594.1255 520.8399 609.4633
# Jul 1961       652.1516 621.2044 683.0988 604.8220 699.4812
# Aug 1961       758.4115 725.6095 791.2135 708.2452 808.5778
# Sep 1961       538.1516 503.5942 572.7090 485.3006 591.0026
# Oct 1961       491.1516 454.9237 527.3795 435.7459 546.5573
# Nov 1961       542.4115 504.5869 580.2361 484.5637 600.2593
# Dec 1961       462.1516 422.7950 501.5082 401.9608 522.3424
promos.ts <- ts(c(AP.with.promos,fcast$mean),
                  start=start(AirPassengers),frequency=frequency(AirPassengers))
promos.ts[c(promos,promos.future)==0] <- NA

plot(fcast)
points(promos.ts,pch=19,col="red")

ARIMAX

Los puntos rojos son las promociones. Por defecto, obtendrá intervalos de predicción trazados en gris. Puede alimentar múltiples regresores en su modelo a través del xregparámetro, lo que debe hacer si tiene diferentes tipos de promociones con diferentes efectos. Experimenta un poco.

Recomendaría buscar más datos detallados que mensualmente si los tiene, por ejemplo, semanalmente. Especialmente, por supuesto, si sus promociones no duran meses completos. Puede hacer esto por separado por producto, especialmente si promociona productos específicos o en categorías completas.

Una alternativa sería, dado que está más interesado en los conceptos que en el código, mirar el suavizado exponencial y cambiarlo para satisfacer sus necesidades, agregando componentes promocionales a los componentes estándar de tres niveles, temporada y tendencia. Puede hacer mucho más usted mismo con el suavizado exponencial que con el intento de estimar la máxima probabilidad de un modelo ARIMAX, pero el suavizado puede convertirse en una pesadilla de contabilidad si tiene varios tipos de promoción.

Stephan Kolassa
fuente
1
Los modelos ARIMA con covariables se analizan en la Sección 9 del libro: www.otexts.org/fpp/9/1
Rob Hyndman
Gracias Rob. Realmente necesito revisar el libro con más frecuencia ...
Stephan Kolassa
Gracias @StephanKolassa! una pregunta al margen, ¿puedo obtener el libro que mencionas en la publicación anterior, en formato mobi o epub?
Graviton
1
@ Graviton: buena pregunta. Lo mejor es preguntarle a los autores. Uno de ellos es Rob Hyndman, quien comentó anteriormente.
Stephan Kolassa
1
@Graviton. Trabajando en ello. Ver robjhyndman.com/hyndsight/fpp-amazon
Rob Hyndman
4

primero, no tienes muchos datos para jugar, solo 24 observaciones. En su caso, significa que apenas tiene un par de parámetros para estimar de manera confiable. La forma más sistemática en el pronóstico es proponer un proceso de generación de datos (DGP). usted asume cuál es el verdadero proceso para sus ventas, luego intenta estimar sus parámetros.

xt=ϕxt1+c

(1L)(1L12)xt=cxt=c+ϕ1xt1+ϕ12xt12ϕ1ϕ12xr13. esto agrega un parámetro más para estimar, por lo que baja a 6 observaciones por parámetro, un tramo real.

en Matlab este modelo se especifica como arima('ARLags',1,'SARLags',12)

Esto supone que sus ventas son estables, es decir, generalmente no crecen.

Si cree que sus ventas están creciendo, entonces tiene dos opciones: caminata aleatoria (RW) y una tendencia temporal.

en Matlab RW se especifica con arima('D',1,'SARLags',12)

obviamente, estos son solo ejemplos de diferentes DGP. Hagas lo que hagas, ten en cuenta la cantidad de parámetros a estimar. con 24 observaciones, su modelo debe ser muy simple, 4 parámetros como máximo (incluidas las variaciones).

Aksakal
fuente
0

Esto es lo que debe hacer Hacer dos gráficos:

  • Ventas versus tiempo para los 24 meses completos
  • Ventas versus tiempo con el segundo año trazado en la parte superior del primer año

Míralos. Anote las fechas de cualquier promoción especial o actividad competitiva conocida. "Diciembre" generalmente es bastante obvio, pero agregue una nota si lo ayuda a llamarlo.

Siga adelante y ajuste un modelo de serie temporal: cualquier modelo (hay cientos). El modelo puede darle un pronóstico ligeramente mejor para el próximo período (t + 1) que su criterio. Al menos, desafiará tu juicio. Más allá del próximo período (t + n, n> 1), cualquier modelo de serie temporal es una mierda. † Olvídese de evaluar cuantitativamente la efectividad de las campañas de ventas o los efectos de los competidores. Si compara las ventas reales con las predicciones, encontrará que las predicciones son basura. Predecir el futuro es difícil, y ningún método cambia ese hecho básico.

Encontrará sus dos gráficos más útiles. Estudie esos durante un tiempo, luego pase el resto de su tiempo ideando ideas sobre cómo aumentar las ventas; este será un uso mucho más rentable de su tiempo que tratar de adaptarse a un modelo de serie temporal.

† Tiene más esperanza si puede crear un modelo predictivo basado en los indicadores principales , es decir, las ventas de viviendas para el mes anterior pueden ser útiles para predecir las ventas de persianas en el mes actual.

blackeneth
fuente