En este tutorial vemos cómo hacer ingeniería de características temporales en tu dataset en Python para sacarles el máximo de información y vitaminar su poder predictivo 🚀
En muchas ocasiones tendremos marcas temporales en nuestro dataset.
Las marcas temporales son aquellas variables que contienen información sobre la fecha y/o la hora en la que se produce un evento.
En datasets construidos a partir de la captura de eventos, el momento en el que se registra la observación puede tener mucha importancia.
Este tipo de datos con información temporal de fecha y hora suelen estar representados como una variable de tipo datetime
en Python o como una cadena de texto que tendremos que procesar para crear nuevas características más informativas.
Ten en cuenta que una variable de tipo datetime
no se puede utilizar directamente para entrenar un modelo de Machine Learning pero lo que sí podemos hacer es utilizar estas variables para crear nuevas características súper informativas para nuestro modelo de ML o nuestro análisis de datos.
Para ver cómo realizar ingeniería de características temporales vamos a utilizar el dataset Appliances energy prediction, disponible en el repositorio UCI Machine Learning.
El dataset contiene registros a intervalos de 10 minutos de las condiciones de temperatura y humedad de una casa durante aproximadamente 4.5 meses.
Los datos fueron recogidos utilizando una red de sensores inalámbricos ZigBee, con cada nodo transmitiendo datos cada 3.3 minutos.
Estos datos luego se promediaron en periodos de 10 minutos.
Además, se integraron datos meteorológicos del aeropuerto más cercano obtenidos de un conjunto de datos públicos, combinándolos con los datos experimentales mediante la columna de fecha y hora.
Aparte de eso sólo vamos a necesitar un Notebook de Google Colab.
Primero instalamos la librería ucimlrepo
para poder importar el dataset directamente desde el repositorio de Machine Learning de UC Irvine.
!pip install ucimlrepo
import pandas as pd import numpy as np from ucimlrepo import fetch_ucirepo # Recuperamos el dataset desde el repo appliances_energy_prediction = fetch_ucirepo(id=374) # Importamos los datos como un dataframe de pandas data = appliances_energy_prediction.data.original data.head()
En muchas ocasiones (como en este dataset) las marcas temporales no vienen en un formato datetime
sino como una cadena de caracteres (un texto con tipo de datos object
).
Lo primero que debemos hacer es transformarlo en el tipo de datos adecuado.
A partir de aquí, ya estamos ready para crear nuevas características temporales súper informativas 😊
Dependiendo del contexto y del tipo de dataset que estemos trabajando, diferentes componentes temporales como el año, mes, trimestre, día de la semana, y hora del día pueden revelar patrones y tendencias clave sobre nuestros datos.
En esta sección, exploraremos cómo extraer y utilizar estas características temporales para enriquecer nuestro análisis y obtener mejores insights.
Veremos ejemplos prácticos y la forma de implementar estas transformaciones de manera súper sencilla con pandas en Python.
Las características creadas a partir de una marca temporal no solo ofrecen valor individualmente, sino que pueden aportar muchísimo cuando se combinan con otras variables datetime
para derivar insights importantes.
El ejemplo más básico que se me ocurre es calcular la edad a partir de la fecha de nacimiento y la fecha actual pero también hay otros ejemplos súper útiles como saber el tiempo que ha durado la sesión de un usuario en un ecommerce para predecir si va a comprar o no un producto.
Al combinar varias características temporales, podemos derivar el tiempo transcurrido entre ellas que será una característica nueva mucho más significativa.
En el tutorial sobre transformación de características geográficas creamos una característica combinada a partir de la latitud y la longitud.
Es mucho más informativo tener una característica que combine la latitud y la longitud que manejar ambas por separado. La latitud y la longitud están estrechamente relacionadas y al combinarlas, se puede capturar la relación espacial entre ellas de una manera mucho más directa.
De la misma manera, podríamos crear una nueva característica que combinara el día de la semana y la hora del día, por ejemplo.
Al combinar el día de la semana y la hora del día, se pueden capturar patrones temporales más complejos que podrían no ser tan evidentes si consideramos ambas características por separado.
Por ejemplo, ciertos comportamientos pueden variar dependiendo del día de la semana y la hora del día como la actividad en redes sociales, el tráfico y los hábitos de transporte o los hábitos de consumo energético en una casa.
En datasets que registran eventos en el tiempo, especialmente si pretendemos predecir valores futuros, las observaciones recientes suelen ser más relevantes que las que están más alejadas en el tiempo.
Para esto utilizamos ventanas temporales.
Imagina una ventana que se desplaza a lo largo de una serie temporal, capturando datos dentro de intervalos de tiempo específicos.
Usando estas ventanas temporales podemos crear nuevas características que resuman la información dentro de intervalos de tiempo específicos.
Por ejemplo, podrías calcular...
Estas nuevas características pueden proporcionar información muy valiosa sobre cómo cambian los datos con el tiempo y mejorar el rendimiento de tu modelo de Machine Learning.
Una vez hecho esto ya puedes añadir tus nuevas características a tu dataset principal data
y empezar a entrenar tu modelo de Machine Learning o puedes crear otras nuevas siguiendo este mismo método.
¡Imaginación al poder!