Estoy impresionado por la R forecast
paquete , así como por ejemplo, el zoo
paquete 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 NA
para eso.
La cuestión es: toda la magia agradable del paquete de pronóstico, como eta()
,auto.arima()
etc., parece esperar ts
objetos 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 NA
valores 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:
- ¿Alguien sugiere una mejor solución?
(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.
fuente
auto.arima
puede manejar valores perdidos.Respuestas:
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:
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.
fuente
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.
fuente
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".fuente