Usando el paquete de pronóstico R con valores faltantes y / o series temporales irregulares

16

Estoy impresionado por la R forecast paquete , así como por ejemplo, el zoopaquete para series temporales irregulares y la interpolación de valores perdidos.

Mi aplicación se encuentra en el área de pronóstico de tráfico del centro de llamadas, por lo que los datos de los fines de semana (casi) siempre faltan, lo que puede ser manejado de manera agradable por zoo . Además, pueden faltar algunos puntos discretos, solo uso R NApara eso.

La cuestión es: toda la magia agradable del paquete de pronóstico, como eta(),auto.arima() etc., parece esperar tsobjetos simples , es decir, series de tiempo equiespaciadas que no contienen datos faltantes. Creo que las aplicaciones en el mundo real para series de tiempo solo espaciadas son definitivamente existentes, pero, en mi opinión, muy limitadas.

El problema de unos pocos NAvalores discretos se puede resolver fácilmente utilizando cualquiera de las funciones de interpolación ofrecidas zoo, así como también mediante forecast::interp. Después de eso, ejecuto el pronóstico.

Mis preguntas:

  1. ¿Alguien sugiere una mejor solución?
  2. (mi pregunta principal) Al menos en el dominio de mi aplicación, el pronóstico del tráfico del centro de llamadas (y hasta donde puedo imaginar la mayoría de los otros dominios problemáticos), las series de tiempo no son equiespaciadas. Al menos tenemos un esquema recurrente de "días hábiles" o algo así. ¿Cuál es la mejor manera de manejar eso y aún usar toda la magia genial del paquete de pronóstico?

    ¿Debería simplemente "comprimir" la serie de tiempo para llenar los fines de semana, hacer el pronóstico y luego "inflar" los datos nuevamente para volver a insertar los valores de NA en los fines de semana? (Eso sería una pena, creo?)

    ¿Hay algún plan para hacer que el paquete de pronóstico sea totalmente compatible con los paquetes de series temporales irregulares como el zoológico o sus? En caso afirmativo, cuándo y si no, ¿por qué no?

Soy bastante nuevo en el pronóstico (y las estadísticas en general), por lo que podría pasar por alto algo importante.

entreprogreur
fuente
¡Bienvenido al sitio y al pronóstico! Las aplicaciones del mundo real para series de tiempo equiespaciadas definitivamente no son muy limitadas. Sé que conozco un poco el pronóstico que entra en su supermercado con suficiente producto a mano para hacer frente a la demanda promocional, y créanme, esas millones de series de tiempo (20,000 SKU en 1,000 tiendas son muy comunes) son realmente muy poco espaciadas. (Lo siento, pero me lo pediste ...) Pero intentaré llegar a algo más útil en un minuto.
Stephan Kolassa
2
¿Podría ser más explícito sobre por qué los datos del centro de llamadas no están equiespaciados? (Tal vez estoy malinterpretando lo que quiere decir con "equiespaciado"). Los métodos de pronóstico del centro de llamadas que he visto generalmente agrupan las llamadas entrantes en intervalos de 15 minutos, lo que cumple con mi definición de "equiespaciado". Luego tenemos que lidiar con la estacionalidad compleja (intra-diaria, intra-semanal, anual), para qué tema esto puede ayudarlo: stats.stackexchange.com/questions/44704/… ¿Responde esto a su pregunta? Si no, solo dinos qué más necesitas.
Stephan Kolassa
55
auto.arimapuede manejar valores perdidos.
Rob Hyndman
1
¡Gracias por todos los comentarios constructivos! Stephan, mis datos no están equisparados de dos maneras: 1. Muchos centros de atención telefónica están cerrados los sábados y domingos. Algunos están cerrados solo los domingos. Por lo tanto, el espacio "normal" entre dos puntos de datos adyacentes es de un día, excepto de viernes a lunes, que son tres días. Por lo tanto, el espacio no es igual, es decir, no es equiespaciado. En segundo lugar, puede haber datos faltantes al azar en algún lugar porque olvidaron encender su dispositivo de medición ese día o lo que sea. Espero que eso aclare mi punto.
entreprogreur
1
Solo un pensamiento (provocativo). Si dice que los centros de atención telefónica están cerrados los fines de semana. Entonces no tienes datos faltantes. Su serie temporal abarca de lunes a viernes. 5 dias. bastante equidistante Interpolar los fines de semana me parece formalmente incorrecto, ya que sabe que no se producen llamadas y que la información que imputa es falsa. Yo diría que nunca se puede mejorar una estimación inventando datos ...
significado para el

Respuestas:

1

No soy un experto en R, así que tal vez haya una forma más simple, pero me he encontrado con esto antes. Lo que hice antes es implementar una función que mide la distancia (en unidades de tiempo) entre las fechas reales y la guarda en una nueva columna en la serie de tiempo existente. Entonces tenemos algo como:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

De esta manera, si su serie temporal aún no está asociada con una serie real de puntos en el tiempo (o formato incorrecto o lo que sea), aún puede trabajar con ella.

Luego, escribe una función que crea una nueva serie de tiempo para usted, así:

Primero, calcula cuántas unidades de tiempo tendría la serie temporal entre las fechas de su elección y crea esa línea de tiempo en el zoológico o ts o lo que sea la opción con valores vacíos.

En segundo lugar, toma su matriz de series de tiempo incompletas y, usando un bucle, llena los valores en la línea de tiempo correcta, de acuerdo con los límites que elija. Cuando se encuentra con una fila donde la unidad de distancia no es una (faltan días (unidades)), completa los valores interpolados.

Ahora, dado que esta es su función, en realidad puede elegir cómo interpolar. Por ejemplo, decide que si la distancia es inferior a dos unidades, utiliza una interpolación lineal estándar. Si falta una semana, haces otra cosa y si se alcanza un cierto umbral de fechas faltantes, emites una advertencia sobre los datos, realmente lo que quieras imaginar.

Si el ciclo llega a la fecha de finalización, devuelve sus nuevos ts.

La ventaja de esta función es que puede usar diferentes interpolaciones o procedimientos de manejo dependiendo de la longitud del espacio y devolver una serie limpia en el formato que elija. Una vez escrito, le permite obtener datos limpios y agradables de cualquier tipo de datos tabulares. Espero que esto te ayude de alguna manera.

IMA
fuente
Gracias, IMA, por la útil respuesta. Entonces, lo que estoy haciendo ahora: para valores faltantes discretos, uso la interpolación (así como los "ajustes" proporcionados por el usuario) para completar los datos faltantes. IMA, su respuesta para mejorar aún más es muy útil. Para datos faltantes "regulares" como el fin de semana, transformo mis datos en un segundo, "pseudo" ts solo para fines de pronóstico, y luego transformo el resultado nuevamente a la serie temporal "correcta", de modo que también el pronóstico tendrá valores faltantes en los fines de semana. Todavía estaría agradecido por una sugerencia más elegante sobre cómo manejar las "brechas" regulares los fines de semana.
entreprogreur
@entreprogreur, no respondí, IMA sí. IMA obtiene el crédito completo aquí. Acabo de ajustar el formato para que se vea bien.
gung - Restablece a Monica
1

Debe tener mucho cuidado cuando aplique la interpolación antes de un tratamiento estadístico adicional. La elección que haga para su interpolación introduce un sesgo en sus datos. Esto es algo que definitivamente desea evitar, ya que podría alterar la calidad de sus predicciones. En mi opinión, para valores perdidos como los que mencionó, que están regularmente espaciados en el tiempo y que corresponden a una parada en las actividades, podría ser más correcto dejar estos días fuera de su modelo. En el pequeño mundo de su centro de llamadas (el modelo que está creando sobre él), podría ser mejor considerar que el tiempo simplemente se detuvo cuando está cerrado en lugar de inventar mediciones de una actividad no existente. Por otro lado, el modelo ARIMA se ha construido estadísticamente suponiendo que los datos están igualmente espaciados. Que yo sepa, no hay una adaptación de ARIMA a su caso. Si solo le faltan algunas mediciones en días hábiles reales, es posible que se vea obligado a utilizar la interpolación.

Remi D
fuente
0

No interpolaría los datos antes de estimar el modelo en estos datos, como señaló @Remi. Es una mala idea. Un ejemplo extremo: imagine que tiene dos puntos de datos en enero de 2013 y enero de 2014. Ahora interpole 10 puntos mensuales entre: de febrero a diciembre de 2013, y ejecute la regresión en la fecha mensual. En realidad, no va a ser tan malo, pero es la misma idea: en el mejor de los casos, estará inflando sus estadísticas.

El camino a seguir es utilizar métodos de series de tiempo que manejen datos faltantes. Por ejemplo, métodos de espacio de estado. Echa un vistazo al paquete astsa R. Viene con un excelente libro sobre análisis de series de tiempo. Esto manejará los datos faltantes muy bien. Matlab ahora tiene una funcionalidad similar en el paquete ssm . Tienes que aprender a convertir tus modelos en forma de espacio de estado, pero debes aprender esto de todos modos si quieres alejarte de la auto.arima"magia".

Aksakal
fuente