2 votos

Dividir los datos de los eventos en entrenamiento y pruebas con todos los eventos del entrenamiento terminando antes de que empiecen los eventos de las pruebas.

Tengo un conjunto de datos con datos de eventos. Tiene una fecha de inicio y una fecha de finalización variables. Necesito predecir el tiempo restante hasta que finalice un evento. El problema es que no puedo usar eventos en tiempo futuro para predecir eventos antes de esa fecha. Por eso necesito dividir de alguna manera los datos en el conjunto de entrenamiento con sólo los eventos que terminan antes de que empiecen los eventos en el conjunto de datos de prueba y aún así mantener una buena división 75/25 o 80/20. ¿Alguna idea?

Gracias.

Algunas aclaraciones sobre el problema:

Los sucesos son en realidad casos agregados con columnas codificadas de un solo punto de diferentes tipos de sucesos como recuentos de ocurrencia. El problema es predecir el tiempo real que queda hasta el final de un evento. La razón de esta particular división, es que no puedes usar eventos que ocurran en el futuro, para predecir el tiempo restante de los casos (y por lo tanto eventos pertenecientes a este caso). Si haces eso, se asume que son independientes, pero en realidad no lo son.

2voto

Alan Puntos 7273

Depende de los datos y de tu razón para decir que los datos del conjunto de entrenamiento son sólo los eventos que terminan antes de que empiecen los eventos del conjunto de datos de prueba.

Un enfoque podría ser tomar la última fecha que pone $20\%$ de eventos que empiecen más tarde y conviértelos en tu conjunto de pruebas. Déjalo a un lado hasta la prueba final, de la forma habitual

A continuación, se obtiene un conjunto de entrenamiento que contiene una combinación de (a) sucesos que comenzaron y finalizaron antes de la fecha crítica y (b) sucesos que comenzaron antes de la fecha crítica pero finalizaron después. Si es posible, incluya los sucesos de (b) en el entrenamiento, tratándolos como derecha censurada en la fecha crítica

Estos datos censurados podrían complicar el entrenamiento, pero no incluirlos podría sesgar los resultados al hacer que parezca que los eventos del conjunto de entrenamiento tienen intervalos más cortos de media que la distribución de la población subyacente.

0voto

naveena Puntos 25

Como ha señalado Henry, el mundo real es desordenado. Puede que encuentres ejemplos como el de Henry y otros que hagan que tu tarea no sea tan fácil como parece. Además, el problema de negocio puede no ser óptimo dividiendo con test sólo a los eventos más nuevos. Tal vez, en el mundo financiero, quiera probar su modelo con los datos más recientes y con los datos de la recesión cuando ésta se produjo antes del periodo de tiempo de sus datos de entrenamiento. O quizás una fecha crítica como cuando los tipos de interés empezaron a subir.

Sin embargo, suponiendo que todo esté ordenado, puede utilizar una suma acumulada y luego dividir en una fecha en la que la suma sea adecuada.

Aquí hay un poco de código R para la mecánica suponiendo ordenado. Esto asume eventos comienzan y terminan en el mismo mes y sólo puede dividir en un mes.

finish_month <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
num_finish_in_month <- c(5, 10, 5, 10, 5, 10, 5, 10, 5, 10, 5, 10)
total_finish = sum(num_finish_in_month)
cum_sum <- cumsum(num_finish_in_month)
# split close to 80/20 without going over
cut_off <- max(which(cum_sum < (total_finish * 0.8)))
use_month <- finish_month[cut_off]
print(use_month)
#test it
num_finish_before <- sum(num_finish_in_month[1:cut_off])
num_finish_after <- sum(num_finish_in_month[(cut_off+1):length(finish_month)])
print(num_finish_before/total_finish)
print(num_finish_after/total_finish)
print(num_finish_before+num_finish_after)

[1] "Sep"
[1] 0.7222222
[1] 0.2777778
[1] 90

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X