Ingeniería de características temporales

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 🚀

Fechas y series temporales

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.

  • Datasets con información transaccional que registran actividades que implican una operación. Estos eventos se capturan en tiempo real y cada registro en el dataset corresponde a una transacción individual. Por ejemplo:
    • Análisis del comportamienot de clientes.
    • Gestión de inventarios.
    • Optimización de precios.
    • Detección de fraude.
  • Datasets con series temporales que son secuencias de datos ordenados en el tiempo, generalmente a intervalos regulares. Las series temporales representan la evolución de una variable a lo largo del tiempo. Por ejemplo:
    • Lecturas de sensores y el momento en el que se produce la medida.
    • Precios de las acciones en la Bolsa.

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.

Ejemplo de ingeniería de características temporales

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()
dataset con marcas temporales

Creación de características temporales

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.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

A partir de aquí, ya estamos ready para crear nuevas características temporales súper informativas 😊

Extracción de información de una variable temporal

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.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Tiempo transcurrido

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.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Características cruzadas

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.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

Creación de características con Ventanas temporales

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...

  • Promedios móviles de una característica interesante como la temperatura durante los últimos 30 días.
  • El valor máximo de otra característica como el importe máximo gastado en tu ecommerce los últimos 7 días.
  • El número de visitas recibidas la semana pasada.

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.

Membresía requerida

Este contenido está disponible únicamente para suscriptores.

Puedes apuntarte a la plataforma en este enlace

¿Ya eres un ninja? logeate aquí

    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!

    Accede a todo el contenido premium

    Ya no necesitas pagar cientos de euros por un Bootcamp para convertirte en ninja de los datos. Por solo 17€/mes (o menos 🤯), obtén acceso al podcast premium, a todos los tutoriales y a los resúmenes de los libros más top sobre Machine Learning y Ciencia de datos y aprende a tu ritmo.
    ¡Empieza ahora!
    Copyright © 2024  · Datos 🥷 · Todos los derechos reservados