varias superponer solar será sera próximo proximo lunar luna graficos graficas cuándo cuando statistics prediction

statistics - solar - superponer graficas en r



¿Cómo predecir cuándo ocurrirá el próximo evento en base a eventos previos? (6)

Básicamente, tengo una lista bastante grande (un año de datos) de veces que ocurrió un único evento discreto (para mi proyecto actual, una lista de veces que alguien imprimió algo). En base a esta lista, me gustaría construir un modelo estadístico de algún tipo que prediga el momento más probable para el próximo evento (el próximo trabajo de impresión) dados todos los tiempos del evento anterior.

Ya leí esto , pero las respuestas no ayudan exactamente con lo que tengo en mente para mi proyecto. Hice algunas investigaciones adicionales y descubrí que un Modelo de Markov Oculto probablemente me permitiría hacerlo con precisión, pero no puedo encontrar un enlace sobre cómo generar un Modelo de Markov Oculto usando solo una lista de veces. También encontré que usar un filtro Kalman en la lista puede ser útil, pero básicamente, me gustaría obtener más información al respecto de alguien que realmente los usó y conoce sus limitaciones y requisitos antes de intentar algo y esperar a que funcione.

¡Gracias un montón!

EDITAR : Entonces, por sugerencia de Amit en los comentarios, también publiqué esto en el StackExchange estadístico, CrossValidated . Si sabes lo que debo hacer, publica aquí o allí


Piense en una cadena de markov como un gráfico con un vértice que se conecta entre sí con un peso o distancia. Moverse por este gráfico consumiría la suma de los pesos o la distancia que recorre. Aquí hay un ejemplo con generación de texto: http://phpir.com/text-generation .


Realmente no veo cómo un modelo de Markov sería útil aquí. Los modelos de Markov se emplean normalmente cuando el evento que predice depende de eventos previos. El ejemplo canónico, por supuesto, es el texto, donde un buen modelo de Markov puede hacer un trabajo sorprendentemente bueno adivinando cuál será el siguiente carácter o palabra.

¿Pero hay un patrón para cuando un usuario puede imprimir lo siguiente? Es decir, ¿ves un patrón de tiempo regular entre los trabajos? Si es así, entonces un modelo de Markov funcionará. Si no, entonces el modelo de Markov será una suposición al azar.

En cómo modelarlo, piense en los diferentes períodos de tiempo entre trabajos como letras en un alfabeto. De hecho, podría asignarle a cada período una letra, algo así como:

A - 1 to 2 minutes B - 2 to 5 minutes C - 5 to 10 minutes etc.

Luego, revise los datos y asigne una letra a cada período de tiempo entre los trabajos de impresión. Cuando hayas terminado, tienes una representación de texto de tus datos, y puedes ejecutar cualquiera de los ejemplos de Markov que predicen el texto.



Lo admito, no soy un tipo de estadística. Pero me he encontrado con este tipo de problemas antes. Realmente, de lo que estamos hablando aquí es de que tienes algunos eventos discretos observados y quieres saber qué tan probable es que los veas ocurrir en cualquier momento dado. El problema que tiene es que desea tomar datos discretos y hacer datos continuos a partir de él.

El término que viene a la mente es la estimación de la densidad . Específicamente la estimación de la densidad del grano . Puede obtener algunos de los efectos de la estimación de la densidad del kernel mediante un binning simple (por ejemplo, contar los eventos numéricos en un intervalo de tiempo, como cada cuarto de hora o cada hora). La estimación de la densidad del núcleo tiene algunas propiedades estadísticas más agradables que el simple binning. (Los datos producidos son a menudo "más suaves").

Sin embargo, eso solo soluciona uno de tus problemas. El siguiente problema sigue siendo el más interesante: ¿cómo se toma una línea de tiempo de datos (en este caso, solo datos de impresora) y se produce una predicción a partir de ella? Lo primero es lo primero: la forma en que configuraste el problema puede no ser lo que estás buscando. Si bien la idea milagrosa de tener una fuente limitada de datos y predecir el próximo paso de esa fuente parece atractiva, es mucho más práctico integrar más fuentes de datos para crear una predicción real. (por ejemplo, tal vez las impresoras se golpean duro justo después de que hay mucha actividad telefónica, algo que puede ser muy difícil de predecir en algunas empresas). El desafío de Netflix es un ejemplo bastante potente de este punto.

Por supuesto, el problema con más fuentes de datos es que hay un trabajo extra para configurar los sistemas que recopilan los datos en ese momento.

Honestamente, consideraría este un problema específico del dominio y tomaría dos enfoques: encontrar patrones independientes del tiempo y encontrar patrones dependientes del tiempo.

Un ejemplo de patrón dependiente del tiempo sería que todos los días a las 4:30, Suzy imprima su informe de fin de día. Esto sucede a horas específicas todos los días de la semana. Este tipo de cosas es fácil de detectar con intervalos fijos. (Todos los días, todos los días de la semana, todos los fines de semana, todos los martes, cada 1er mes, etc.). Esto es extremadamente fácil de detectar con intervalos predeterminados; solo cree una curva de la función de densidad de probabilidad estimada que es una semana de largo y retroceder en el tiempo y promediar las curvas (posiblemente un promedio ponderado a través de una función de ventana para mejores predicciones).

Si desea obtener más sofisticado, encuentre una manera de automatizar la detección de dichos intervalos. (Probablemente los datos no serían tan abrumadores que podría simplemente forzar esto).

Un ejemplo de patrón independiente del tiempo es que cada vez que Mike en contabilidad imprime una hoja de lista de facturas, se dirige a Johnathan quien imprime un lote bastante grande de informes completos de facturas unas horas más tarde. Este tipo de cosas es más difícil de detectar porque es de forma más libre. Recomiendo observar varios intervalos de tiempo (por ejemplo, 30 segundos, 40 segundos, 50 segundos, 1 minuto, 1.2 minutos, 1.5 minutos, 1.7 minutos, 2 minutos, 3 minutos, .... 1 hora, 2 horas, 3 horas, ....) y submuestrearlos a través de una buena manera (por ejemplo, remuestreo de Lanczos ) para crear un vector. Luego use un algoritmo de estilo de cuantificación vectorial para categorizar los patrones "interesantes". Sin embargo, tendrá que pensar cuidadosamente sobre cómo manejará la certeza de las categorías; si su categoría resultante tiene muy pocos datos, probablemente no sea confiable. (Algunos algoritmos de cuantificación de vectores son mejores en esto que otros).

Luego, para crear una predicción sobre la probabilidad de imprimir algo en el futuro, busque los intervalos de actividad más recientes (30 segundos, 40 segundos, 50 segundos, 1 minuto y todos los demás) a través de la cuantificación vectorial y pondere los resultados. basado en su certeza para crear un promedio ponderado de predicciones.

Querrá encontrar una buena forma de medir la certeza de los resultados dependientes del tiempo y del tiempo para crear una estimación final.

Este tipo de cosas es típico de los esquemas de compresión de datos predictivos. Te recomiendo que eches un vistazo a PAQ ya que contiene muchos de los conceptos que he analizado aquí y puede brindarte una perspectiva muy interesante. El código fuente está incluso disponible junto con una excelente documentación sobre los algoritmos utilizados.

Es posible que desee tomar un enfoque completamente diferente de la cuantificación vectorial y discretizar los datos y usar algo más como un esquema PPM . Puede ser mucho más simple de implementar y aún efectivo.

No sé cuál es el marco de tiempo o el alcance de este proyecto, pero este tipo de cosas siempre se pueden llevar al N-ésimo grado. Si tiene una fecha límite, me gustaría enfatizar que te preocupas de que algo funcione primero y luego hacerlo funcionar bien. Algo no óptimo es mejor que nada.

Este tipo de proyecto es genial . Este tipo de proyecto puede conseguirte un trabajo si lo terminas bien. Te recomiendo que te tomes tu tiempo, lo hagas bien y lo publiques como una función, código abierto, software útil. Recomiendo ampliamente el código abierto, ya que querrá crear una comunidad que pueda aportar proveedores de fuentes de datos en más entornos a los que tenga acceso, soporte o tiempo de soporte.

¡La mejor de las suertes!


Se usa un filtro de Kalman para rastrear un vector de estado, generalmente con dinámicas continuas (o al menos discretizadas continuas). Esto es una especie de polo opuesto a los eventos esporádicos y discretos, por lo tanto, a menos que tenga un modelo subyacente que incluya este tipo de vector de estado (y sea lineal o casi lineal), probablemente no desee un filtro de Kalman.

Parece que no tiene un modelo subyacente, y está buscando uno: tiene un clavo, y está pasando por la caja de herramientas probando archivos, destornilladores y cintas métricas 8 ^)

Mi mejor consejo: primero, usa lo que sabes sobre el problema para construir el modelo; luego averigua cómo resolver el problema, según el modelo.


Si tiene un modelo real que cree que podría ser relevante para el dominio del problema, debe aplicarlo. Por ejemplo, es probable que haya patrones relacionados con el día de la semana, la hora del día y, posiblemente, la fecha (probablemente, las vacaciones mostrarían un uso menor).

La mayoría de las técnicas de modelado estadístico en bruto basadas en el examen (por ejemplo) del tiempo entre eventos adyacentes tendrían dificultades para capturar estas influencias subyacentes.

Construiría un modelo estadístico para cada uno de esos eventos conocidos (día de la semana, etc.) y lo usaría para predecir futuras ocurrencias.