Cálculo de precisión del pronóstico

9

Estamos utilizando STL (implementación R) para pronosticar datos de series temporales.

Todos los días hacemos pronósticos diarios. Nos gustaría comparar los valores de pronóstico con valores reales e identificar la desviación promedio. Por ejemplo, ejecutamos el pronóstico para mañana y obtuvimos puntos de pronóstico, nos gustaría comparar estos puntos de pronóstico con datos reales que obtendremos mañana. Soy consciente de que los valores de los pronósticos y los datos reales pueden no coincidir la mayoría de las veces, esa es una de las razones por las que nos gustaría hacer un seguimiento de la precisión que tenemos cada día.

Ahora estamos tratando de identificar cuál es el mejor enfoque para resolver este problema. Cualquier sugerencia de ayuda sería apreciada.

Miré la pregunta Medición de la precisión del pronóstico , pero parece que está relacionada con la comparación de modelos en lugar de calcular la precisión con valores reales.

Miré la implementación de la función de precisión en R , pero la confundí con dos preguntas:

1) ¿Funcionará con datos reales vs datos de pronóstico, porque la mayoría del tutorial dice como "datos de prueba" vs "datos de pronóstico"

2) Parece que la función de precisión es una matriz de valores en lugar del% de desviación.

kosa
fuente
1
Para obtener una excelente respuesta, debe hacer la pregunta correcta, y eso puede ser frustrante. Todos quieren gobernar el mundo y eso requiere conocimiento previo. Si tuviera un conocimiento perfecto de las acciones del mañana, pero lo tuviera hoy, podría ganar mucho dinero / poder / oportunidad / gloria / etc. Si estuviera analizando su problema, me gustaría ver un histograma (o eCDF) del error predictivo. Me gustaría "fluctuar" las entradas del pronóstico y ver su media y variación, y comparar el error con esos. Debe comprender su error para solucionarlo.
EngrStudent
1
Para los no iniciados, ¿qué es STL?
shadowtalker
@EngrStudent: "Debe comprender su error para solucionarlo" - En esta declaración tenemos dos partes. Estoy tratando de encontrar posibles enfoques para la primera sección en sí. La metodología que elijo me ayudará a elegir estrategias para la parte 2.
kosa
1
La media no es lo mismo que el comportamiento de un sistema. La desviación estándar no es lo mismo que el comportamiento de un sistema. Estas dos medidas son estadísticas resumidas para el comportamiento medido del sistema. El error no es precisión. El error no es incertidumbre. Esas dos medidas son estadísticas resumidas para errores análogos a la media y la desviación estándar. Al igual que hay muchas infinitas medidas de comportamiento del sistema, hay muchas infinitas medidas de comportamiento de error. ¿Cuál es tu rúbrica? ¿Cómo medir una buena manera de pensar sobre el error?
EngrStudent
1
@Nambari: bienvenido al mundo de los "sabios". El comienzo del conocimiento es saber que no sabes nada: ser un estudiante. Trato de estar siempre aprendiéndome a mí mismo, y trato de ser corregible por cualquiera que diga la verdad. Si juega con la herramienta Eureqa y prueba datos de muestra apropiados tanto en cada forma general de "expresión de destino" como en cada "métrica de error", comenzará a conocer esta cosa profunda y profunda. No tengo una buena respuesta. L'Hospital (también conocido como L'Hopital) formuló la primera expresión de mínimos cuadrados en 1696. Un buen comienzo es el caso de uso, donde entra la mente. ¿Qué es eso?
EngrStudent

Respuestas:

13

Hay muchas formas diferentes de medir la precisión del pronóstico, y la accuracy()función del paquete de pronóstico para R genera varias de ellas. Según su comentario sobre el "% de desviación", parece que desea utilizar el error de porcentaje absoluto medio, que es una de las medidas proporcionadas por accuracy(). Las medidas más comunes de precisión del pronóstico se analizan aquí . Es posible que desee pensar si MAPE es la medida más adecuada para su problema, o si una de las otras medidas es mejor.

La accuracy()función funciona en datos reales. Los "datos de prueba" son aquellos datos que no se utilizaron para construir los pronósticos. A veces están disponibles pero no se usan cuando se calculan los pronósticos (la división clásica de datos en conjuntos de entrenamiento y prueba). En otras situaciones, todos los datos disponibles se usan para calcular los pronósticos, y luego debe esperar hasta que haya algunas observaciones futuras disponibles para usar como datos de prueba.

Entonces, si fes un vector de pronósticos y xes un vector de observaciones correspondientes a los mismos tiempos, entonces

accuracy(f,x)

Hará lo que quieras.

Rob Hyndman
fuente
"Las medidas basadas en errores porcentuales tienen la desventaja de ser infinitas o indefinidas si yi = 0 para cualquier i en el período de interés, y tener valores extremos cuando cualquier yi está cerca de cero". Creo que esto será un problema en mi caso, porque muchos casos reales podrían ser CERO. Estoy pensando en calcular MAE y cambiar el número de resultados a "porcentaje". ¿Tiene sentido?
kosa
De alguna manera, mi nota de agradecimiento desapareció, ¡realmente gracias por su tiempo, Dr. Hyndman!
kosa
2

UNACCturunaCy=mi(F)-yPAGrmiCyosyoonorte=Vunar[F-y]

METROSFmi=1norteyo=1norte(Fyo-yyo)2Fyoyyo

Aksakal
fuente
¡Gracias por su respuesta! Sí, no me preocupa la precisión en este momento. Solo quiero saber la precisión, "desviación del pronóstico de los reales". No me preocupa ejecutar algunos modelos, calcular errores de pronóstico y elegir el mejor modelo. Mi único objetivo es descubrir la desviación entre los valores reales y los pronosticados. Nuestro modelo es constante aquí. Independientemente de que nuestro modelo sea bueno o malo para el conjunto de datos, solo necesitamos el número de desviación. Esta pregunta no está relacionada con la selección del modelo de ajuste fino de parámetros (o). Espero que ahora esté claro. Por favor, avíseme si falta algo.
kosa
@Nambari, si necesita el "número de desviaciones", ¿por qué no usa el número de desviaciones? Haga un ciclo sobre las predicciones, compárelas con los valores reales y cuente el número de casos en que las predicciones difieren de los valores reales.
Romano
2

He estado haciendo esto en R, aquí está mi código para mis datos para los datos dentro y fuera de la muestra:

#accuracy testing for out-of-sample sample#

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
N<-head(M,-horiz)
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)

#Run your forecasting method#
##My forecasting method is arima##

N<-#data#
N<-ts(N,deltat=deltaT,start=startY)
N<-tail(N,horiz)
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY) #where Arimab is the ARIMA model and fArimab<-forecast(Arimab, h=horiz*2, simulate= TRUE, fan=TRUE)
N<-log(N)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA out sample")

#Accuracy testing for the in sample

M<-#data#
deltaT<-#set observations per year,1/4 for quarterly, 1/12 for monthly
horiz<-#set amount of forecasts required
startY<-c(#,#) #set start date
Nu<-log(Nu)
Nu<-ts(Nu,deltat=deltaT,start=startY)
#run your forecasting method#
fitted<-ts(append(fitted(Arimab), fArimab$mean[1]), deltat=deltaT, start = startY)
N<-exp(Nu)
fitted<-exp(fitted)
fitted<-head(fitted,length(N))
error<-N-fitted
percenterror<-100*error/N
plus<-N+fitted
rmse<-function(error)
  sqrt(mean(error^2))
mae<-function(error)
  mean(abs(error))
mape<-function(percenterror)
  mean(abs(percenterror))
smape<-function(error,plus)
  mean(200*abs(error)/(plus))
mse<-function(error)
  mean(error^2)
me<-function(error)
  mean(error)
mpe<-function(percenterror)
  mean(percenterror)
accuracy<-matrix(c("rmse","mae","mape","smape","mse","me","mpe",(round(rmse(error),digits=3)),(round(mae(error),digits=3)),(round(mape(percenterror),digits=3)),(round(smape(error,plus),digits=3)),(round(mse(error),digits=3)),(round(me(error),digits=3)),(round(mpe(percenterror),digits=3))),ncol=2,byrow=FALSE)
View(accuracy,title="Accuracy of ARIMA in sample")

Espero que esto ayude un poco. si quieres mi código completo, solía ejecutar esto, pregunta ya que es muy básico

Summer-Jade Gleek'away
fuente
1

La respuesta corta: para evaluar la calidad de sus predicciones, use exactamente la misma medida que utilizó en el entrenamiento (ajuste) de su modelo.

La respuesta larga:

Para elegir una medida para la precisión de sus pronósticos, su primera necesidad es saber cómo interpreta sus predicciones. En otras palabras, ¿qué es lo que realmente das como "pronóstico"? ¿Es el valor medio? ¿Mediana? ¿El valor más probable? La respuesta a esta pregunta identificará únicamente la medida de la precisión del pronóstico. Si predice la media, debe usar la desviación cuadrática media de la raíz como medida de la precisión del pronóstico. Si predice la mediana, debe usar la desviación absoluta media como medida de precisión.

Voy a elaborar un poco sobre este punto. Supongamos que hace una predicción / pronóstico para mañana. Supongamos también que para cualquier valor que pueda observar mañana tiene una probabilidad correspondiente de ser observado. Por ejemplo, sabe que puede observar 1 con probabilidad 0.03, 2 con probabilidad 0.07, 3 con probabilidad 0.11, y así sucesivamente. Entonces, tiene una distribución de probabilidades sobre diferentes valores. Con esta distribución, puede calcular diferentes propiedades y darlas como sus "predicciones". Puedes calcular la media y darla como la predicción para mañana. Alternativamente, puede usar la mediana como su predicción. También puede encontrar el valor más probable y darlo como su predicción para mañana.

Si utiliza el valor medio como predicción, entonces la pregunta de "cómo medir la precisión de mi predicción" debe ser reemplazada por "cuál es la medida de la precisión de la media" y la respuesta es "desviación cuadrática media entre la raíz valores reales y predicción ". Si usa la mediana como predicciones, debe usar la desviación media absoluta.

Es posible que no sepas si usas la mediana o la media o alguna otra cosa. Para saber qué es lo que realmente usa como predicciones, debe saber qué medida intenta minimizar en el entrenamiento. Si intenta encontrar parámetros del modelo que minimicen la desviación cuadrática media entre las predicciones y los valores objetivo de los datos de entrenamiento, entonces sus predicciones deben tratarse como medias. Si minimiza las desviaciones absolutas, entrena su modelo para proporcionar medianas, etc.

ADICIONAL

Me gustaría enfatizar una cosa. Como he mencionado anteriormente, es importante mantener la misma medida de precisión en "ajuste" y en "predicción". Además de eso, me gustaría decir que usted es absolutamente libre de elegir sus medidas. No hay medidas "mejores" o "peores". La medida debe determinarse por la forma en que usted (o su cliente) utiliza sus predicciones. Por ejemplo, podría ser muy importante (para usted o su cliente) tener una coincidencia exacta y, si no la tiene, no tiene ningún papel si la diferencia entre los valores reales y los pronosticados es grande o pequeña. En otros casos, esta diferencia juega un papel. La diferencia de 1 es mejor que la diferencia de 2. En algunos casos, la diferencia de 2 es 2 veces peor que la diferencia de 1. En otros casos, la diferencia igual a 2 es 100 veces peor que la diferencia igual a 1. También puede imaginar casos exóticos en los que necesita generar un valor que difiera de las observaciones. Por lo tanto, la medida de la calidad de los números que genera puede ser lo que desee, dependiendo de lo que necesite. Lo importante es utilizar la misma medida en el entrenamiento (ajuste) y la evaluación de predicciones.

romano
fuente
(Relacionado con su comentario sobre otra respuesta) En la mayoría de los casos, las predicciones difieren de los valores reales, no creo que en ningún caso podamos obtener un ajuste perfecto. Por lo tanto, el enfoque que sugirió puede no ser ideal, porque obtendremos el 100%. Pero lo que estoy pensando es obtener la diferencia entre la predicción real y la predicción en porcentaje, que no es más que MAPE. El caso que estamos manejando tiene posibilidades muy altas de obtener CERO real con mucha frecuencia, debido a las circunstancias, en cuyo caso MAPE puede no ser la mejor opción porque el porcentaje será INFINITO. Aquí es donde estaba atrapado.
kosa
Sé que MAPE es el que quiero en principio, pero mi conjunto de datos tiene este desafortunado caso en el que los valores REALES en serie pueden ser CERO con mucha frecuencia.
kosa