algorithm - Predecir la ocurrencia del próximo evento, en base a las ocurrencias pasadas
language-agnostic prediction (8)
Debes googlear Algoritmos de Programación Genética
Ellos (algo así como las redes neuronales mencionadas por Chaos) le permitirán generar soluciones programáticamente, luego hacer que el programa se modifique a sí mismo en función de un criterio, y crear nuevas soluciones que, ojalá, estén más cerca de ser precisas.
Neural Networks tendría que ser entrenado por usted, pero con la programación genética, el programa hará todo el trabajo.
¡Aunque en primer lugar es una tarea ardua conseguirlos correr!
Estoy buscando un algoritmo o material de ejemplo para estudiar para predecir eventos futuros basados en patrones conocidos. Tal vez haya un nombre para esto, y simplemente no lo sé / lo recuerdo. Algo tan general puede no existir, pero no soy un maestro de las matemáticas o los algoritmos, así que estoy aquí preguntando por dirección.
Un ejemplo, como yo lo entiendo, sería algo como esto:
Un evento estático ocurre el 1 de enero, el 1 de febrero, el 3 de marzo y el 4 de abril. Una solución simple sería promediar los días / horas / minutos / algo entre cada ocurrencia, agregar ese número a la última ocurrencia conocida y tener la predicción.
¿Qué estoy pidiendo o qué debería estudiar?
No hay un objetivo particular en mente ni ninguna variable específica para tener en cuenta. Esto es simplemente un pensamiento personal y una oportunidad para que yo aprenda algo nuevo.
Esto podría ser excesivo, pero las cadenas de Markov pueden llevar a algunas cosas muy interesantes de reconocimiento de patrones. Es más adecuado para, bueno, cadenas de eventos: la idea es, basándose en los últimos N pasos en una cadena de eventos, ¿qué sucederá después?
Esto es muy adecuado para el texto: procesa una gran muestra de Shakespeare, ¡y puedes generar párrafos llenos de tonterías de Shakespeare! Desafortunadamente, se necesitan muchos más datos para descubrir eventos escasamente poblados. (La detección de patrones con un período de un mes o más requerirá que rastree una cadena de al menos un mes completo de datos).
En pseudo-python, aquí hay un boceto de una secuencia de comandos de predicción / construcción de cadena de Markov:
n = how_big_a_chain_you_want
def build_map(eventChain):
map = defaultdict(list)
for events in get_all_n_plus_1_item_slices_of(eventChain):
slice = events[:n]
last = events[-1]
map[slice].append(last)
def predict_next_event(whatsHappenedSoFar, map):
slice = whatsHappenedSoFar[-n:]
return random_choice(map[slice])
La única técnica con la que he trabajado para tratar de hacer algo así sería entrenar una red neuronal para predecir el siguiente paso de la serie. Eso implica interpretar el problema como un problema en la clasificación de patrones, que no parece tan bueno; Tengo que sospechar que hay maneras menos confusas de manejarlo.
No existe una única solución enlatada ''mejor'', depende de lo que necesite. Por ejemplo, puede querer promediar los valores como dice, pero utilizando promedios ponderados donde los valores anteriores no contribuyen tanto al resultado como los nuevos. O tal vez intentes suavizar. O puede intentar ver si la distribución de eventos se ajusta a una distribución bien conocida (como normal, Poisson, uniforme).
Si tiene un modelo en mente (como los eventos ocurren regularmente), entonces la aplicación de un filtro de Kalman a los parámetros de ese modelo es una técnica común.
si simplemente desea encontrar la probabilidad de que ocurra un evento después de n días dados los datos anteriores de su frecuencia, querrá ajustar una distribución de probabilidad apropiada, que generalmente requiere saber algo sobre la fuente del evento (tal vez debería ser poisson distribuido, tal vez gaussiano). si desea encontrar la probabilidad de que ocurra un evento dado que ocurrieron eventos anteriores, le conviene consultar las estadísticas bayesianas y cómo construir una cadena de markov a partir de ahí.
Creo que algunos temas que valdría la pena considerar incluyen el análisis numérico , específicamente la interpolación, la extrapolación y la regresión .
La tarea es muy similar a la tarea de modelado de lenguaje donde, dada una secuencia de palabras de historia, el modelo intenta predecir una distribución de probabilidad sobre el vocabulario para la siguiente palabra.
Existen softwares de código abierto como SRILM y NLTK que pueden simplemente obtener sus secuencias como oraciones de entrada (cada event_id es una palabra) y hacer el trabajo.