¿Cómo codificar la fecha como entrada en la red neuronal?

12

Estoy usando redes neuronales para predecir una serie temporal. La pregunta que estoy enfrentando ahora es cómo codifico la fecha / hora / número de serie. de cada conjunto de entrada como entrada a la red neuronal?

¿Debo usar 1 de la codificación C (utilizada para codificar categorías) como se describe aquí ?

¿O debería darle de comer el tiempo (en milisegundos desde el 1-1-1970)?

¿O es innecesario alimentar el tiempo siempre que le proporcione el resto de los datos cronológicamente?

Shayan RC
fuente
No estoy seguro de por qué piensas que es innecesario alimentar el tiempo si estás utilizando redes neuronales para predecir una serie temporal .
scaaahu
Hay muchas formas de codificar fechas / horas. Sería útil conocer la naturaleza de la serie temporal. no es a priori algo descartar o descartar.
vzn
@vzn Estoy tratando de predecir una serie temporal financiera en general. Si eso es útil.
Shayan RC

Respuestas:

17

Las redes neuronales no son mágicas. Si los trata como son y simplemente les arroja datos sin pensar que lo pasará muy mal.

Debes detenerte y preguntarte "¿Los milisegundos desde 1970 van a predecir el evento que me interesa?" La respuesta a la que debe llegar de inmediato es no. ¿Por qué? Para cada instancia que realmente le interese (eventos en el futuro, el pasado ya sucedió), la variable de tiempo tomará un valor que es mayor que cualquier valor que la variable de tiempo tomará en sus datos de entrenamiento. Tal variable es muy poco probable que ayude. Peor aún, es probable que cause un sobreajuste (un problema grave para los modelos no lineales potentes como las redes neuronales) si no tiene cuidado.

Ahora, lo que podría tener sentido es una variable como la semana del año o el mes que podría ayudarlo a modelar efectos estacionales o anuales. He trabajado en la predicción de enfermedades agrícolas, donde el día juliano terminó siendo una variable muy importante. Basado en esta experiencia, sospecho que sería mejor codificar este tipo de variable como una variable categórica en lugar de ordinal, su experiencia puede ser muy diferente. Tenga en cuenta que el mes o la semana del año son eventos repetibles que es probable que se vean muchas veces en sus datos de capacitación y es posible explicar por qué dicha variable podría afectar un resultado financiero. Compare esto con milisegundos desde 1970, que es un valor monotónicamente creciente.

Por último, de su afirmación "¿O es que alimentar el tiempo es innecesario siempre que le proporcione el resto de los datos cronológicamente?" Parece que es posible que no entiendas muy bien cómo funcionan las redes neuronales. Con una red neuronal de alimentación directa estándar, el orden en que alimente la red con sus datos no tendrá impacto en las predicciones. El orden puede afectar el entrenamiento si está usando el descenso de gradiente estocástico o mini-lote, pero esto es solo un artefacto del método de entrenamiento iterativo (en oposición al lote). Si desea modelar la dependencia temporal con una red neuronal, deberá usar algo como una ventana deslizante o una red neuronal recurrente.

Alto
fuente
2

Usted declara en los comentarios que está trabajando en la predicción de series de tiempo financieras. si incluir el tiempo o no en las entradas es algo dependiente del dominio. en general es relevante si tiene algún tipo de componente de tiempo "cíclico" en sus datos. por ejemplo, tal vez haya algún efecto semanal en sus datos si se ejecuta durante semanas, o algún efecto intradía si abarca un solo día. luego, si tiene muchos ciclos, incluya una entrada que refleje la posición en el ciclo, por ejemplo, desde o o diga .[1,1][0,1]sin(t)

si encuentra que hay una tendencia constante, por ejemplo, ya sea aumentando o disminuyendo con el tiempo, digamos es más apropiado extraer eso de las entradas antes de alimentar las entradas a través de lo que se denomina "tendencia descendente". en otras palabras, resta la fórmula para esa tendencia subyacente y predice la tendencia más la diferencia pero el NN se enfoca solo en la diferencia , no en la tendencia .f(t)f(t)dt=ft+gtgtft

vzn
fuente