que es el data enrichment
Flecha al alza formada por decenas de datos interconectados.

¿Qué Es El Data Enrichment?

El data enrichment -en español, enriquecimiento de datos- es el proceso de agregar información adicional a datos existentes para hacerlos más útiles y valiosos. Esta información puede ser extraída de diversas fuentes; ya sea mediante bases de datos externas, datos internos de la empresa, técnicas de web scraping, minería de datos, uso de API de terceros, o introducidos manualmente. Este proceso resulta fundamental en diversos campos como el marketing, análisis de datos y ciencia de datos, ya que permite a las organizaciones obtener conocimientos más profundos y tomar decisiones más informadas. En esencia, el enriquecimiento de datos busca transformar conjuntos de datos incompletos en información completa y procesable, mejorando la calidad de los análisis y resultados derivados.

¿Cómo Se Realiza?

El proceso de data enrichment puede implementarse de diversas formas. Por un lado, puede ser realizado manualmente, implicando la tarea de agregar individualmente datos a un conjunto existente. Esta metodología es laboriosa, pero permite un control granular de la información que se añade. En otro sentido, el enriquecimiento también puede venir de fuentes externas. Esto significa que los datos se agregan desde otras bases de datos o hojas de cálculo, expandiendo el volumen de información a partir de recursos previamente existentes.

Por otro lado, una forma indirecta pero igualmente válida de enriquecer los datos es a través de la limpieza de datos. Si no hay información valiosa para agregar, mejorar la calidad del conjunto de datos existente puede pasar por eliminar inconsistencias y errores presentes en los datos. Finalmente, la integración se refiere a la combinación de datos de varias fuentes en un solo conjunto de datos. Este enfoque suele implicar procesos de extracción, transformación y carga, que buscan unificar y enriquecer los datos provenientes de diferentes orígenes. Cada una de estas estrategias tiene como meta final incrementar la utilidad y el valor de los conjuntos de datos existentes.

Para implementar de manera efectiva el enriquecimiento de datos, existen diversas herramientas especializadas. Por ejemplo, Apache Nifi es una popular herramienta de código abierto para la ingesta y transformación de datos que admite el enriquecimiento de datos con varios procesadores y funciones. Entre las mejores prácticas para trabajar con esta herramienta se incluye el uso de procesadores orientados a registros y el aprovechamiento de sus capacidades de transformación. Estas herramientas automatizan gran parte del proceso, haciendo que el enriquecimiento de datos sea más eficiente y menos propenso a errores.

Ejemplo Con Python

Para visualizar mejor el proceso de data enrichment, se presenta este ejemplo reproducible donde mediante a partir del nombre de 50 libros se obtendrán el autor y la descripción de cada uno, utilizando la información de la plataforma Goodreads. Para ello:

I) Instalamos requests, bs4 y pandas:

textpip install requests beautifulsoup4 pandas

II) Importamos las librerías necesarias:

textimport requests
from bs4 import BeautifulSoup
import pandas as pd
import time
import random

III) Establecemos la cabecera de agente de usuario para realizar las peticiones pertinentes:

textHEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}

IV) Definimos la primera función:

textdef get_book_page_url(session, title, retries=5):
    """
    Obtiene la URL de la página de un libro en Goodreads utilizando la sesión de requests y el título del libro proporcionados.
    
    La función intentará hacer la solicitud `retries` veces antes de rendirse. En cada fallo,
    la función esperará un período de tiempo antes de reintentar. Este tiempo de espera aumenta exponencialmente
    con cada intento fallido para prevenir la sobrecarga del servidor.

    Args:
        session (requests.Session): la sesión utilizada para hacer las solicitudes HTTP.
        title (str): el título del libro para el cual se desea obtener la URL de la página.
        retries (int, opcional): el número de veces que la función intentará obtener la URL en caso de fallo. Por defecto es 5.

    Returns:
        str: la URL de la página del libro en el sitio web de Goodreads, o None si no se pudo obtener la URL después de
             `retries` intentos.

    Raises:
        Puede generar varias excepciones si hay problemas de red, si la estructura de la página web cambia, o si el servidor
        rechaza la solicitud HTTP.
    """
    base_url = "https://www.goodreads.com"
    search_url = base_url + "/search?q=" + title.replace(" ", "+") + "&search_type=authors&search_field=title"

    for i in range(retries):
        try:
            response = session.get(search_url, headers=HEADERS, timeout=5)
            response.raise_for_status()
            soup = BeautifulSoup(response.content, "html.parser")
            book_url = soup.find_all("a", class_="bookTitle")[0].get('href')
            return base_url + book_url
        except (requests.HTTPError, requests.ConnectionError, requests.Timeout, IndexError):
            time.sleep(2 ** i + random.random())
            continue

    return None

V) Definimos la segunda función:

textdef get_book_info(session, url, retries=5):
    """
    Obtiene información de un libro en Goodreads utilizando la sesión de requests y la URL proporcionada.

    La función intentará hacer la solicitud `retries` veces antes de rendirse. En cada fallo,
    la función esperará un período de tiempo antes de reintentar. Este tiempo de espera aumenta exponencialmente
    con cada intento fallido para prevenir la sobrecarga del servidor.

    Args:
        session (requests.Session): la sesión utilizada para hacer las solicitudes HTTP.
        url (str): la URL de la página del libro en Goodreads.
        retries (int, opcional): el número de veces que la función intentará obtener la información del libro en caso de fallo.
                                  Por defecto es 5.

    Returns:
        tuple: un tuple con el título del libro, el autor y la descripción, o una cadena vacía y un mensaje "No description for this book"
               si no se pudo obtener la información después de `retries` intentos.

    Raises:
        Puede generar varias excepciones si hay problemas de red, si la estructura de la página web cambia, o si el servidor
        rechaza la solicitud HTTP.
    """
    if url is None:
        return "", "", "No description for this book"
        
    for i in range(retries):
        try:
            book_page = session.get(url, headers=HEADERS, timeout=5)
            book_page.raise_for_status()
            soup = BeautifulSoup(book_page.content, "html.parser")
            title = soup.find("h1", {"data-testid": "bookTitle"}).get_text(strip=True)
            author = soup.find("span", {"data-testid": "name"}).get_text(strip=True)
            description = soup.find("span", class_="Formatted").get_text(strip=True)

            if not description:
                description = "No description for this book"

            unwanted_texts = ['An alternative cover for this ASIN can be foundhere', 'For previous cover edition seehere']
            for text in unwanted_texts:
                description = description.replace(text, '')

            return title, author, description
        except (requests.HTTPError, requests.ConnectionError, requests.Timeout, AttributeError):
            time.sleep(2 ** i + random.random())
            continue

    return "", "", "No description for this book"

VI) Definimos la tercera función:

textdef main():
    """
    Lee un archivo CSV que contiene una columna 'title' con títulos de libros, enriquece cada fila con la información del autor
    y la descripción obtenida de Goodreads, y finalmente guarda el DataFrame enriquecido en un nuevo archivo CSV.

    La función utiliza una sesión de requests para hacer múltiples solicitudes HTTP a Goodreads en un solo bloque de conexión TCP,
    lo cual es más eficiente que abrir y cerrar una nueva conexión para cada solicitud.

    Args:
        Ninguno

    Returns:
        Ninguno. Sin embargo, como efecto secundario, la función guarda un nuevo archivo CSV llamado 'goodreads_enriched.csv' con
        la información enriquecida.

    Raises:
        Puede generar varias excepciones si hay problemas de red, si la estructura de la página web cambia, o si el servidor
        rechaza la solicitud HTTP.
    """
    df = pd.read_csv("https://forodatos.com/multimedia/datos/goodreads.csv")

    titles = []
    authors = []
    descriptions = []

    with requests.Session() as session:
        for title in df['title']:
            url = get_book_page_url(session, title)
            retrieved_title, author, description = get_book_info(session, url)
            titles.append(retrieved_title)
            authors.append(author)
            descriptions.append(description)

    df['title'] = titles
    df['author'] = authors
    df['description'] = descriptions

    df.to_csv("goodreads_enriched.csv", index=False)

if __name__ == "__main__":
    main()

La ejecución de este código generará un archivo csv “goodreads_enriched.csv” con los títulos presentes en “goodreads.csv” junto con sus respectivos datos de autor y descripción. Este es un claro ejemplo de cómo se puede implementar el enriquecimiento de datos utilizando técnicas de web scraping para obtener información valiosa de fuentes externas.

En Python, existen otras muchas bibliotecas que facilitan el enriquecimiento de datos. Por ejemplo, la biblioteca NLTK (Natural Language Toolkit) proporciona herramientas para el análisis de texto, incluyendo análisis de sentimiento y reconocimiento de entidades nombradas, lo que permite enriquecer datos textuales con información semántica adicional. Al enriquecer datos utilizando estas bibliotecas, las organizaciones pueden extraer conocimientos más profundos y valiosos de sus conjuntos de datos existentes.

¿Por Qué Es Importante?

Podemos considerar las siguientes razones:

  • Mejores decisiones: los datos enriquecidos contienen información extraordinariamente precisa y completa, cualidades que se pueden aprovechar para tomar mejores decisiones. En un mundo donde los datos son abundantes pero a menudo incompletos, el enriquecimiento mejora significativamente la calidad de los conocimientos que se derivan de ellos.
  • Análisis mejorados: ayuda a realizar análisis con un mayor nivel de precisión y detalle; lo que nos permite comprender de mejor manera los patrones, tendencias y relaciones que presentan los datos a tratar. Esto es especialmente relevante en el actual entorno empresarial, donde la competitividad depende cada vez más de la capacidad para extraer conocimientos valiosos de los datos.
  • Mayor productividad: al automatizar el proceso de data enrichment, podemos ahorrar tiempo a la vez que aprovechamos las ventajas de esta técnica. El ahorro de tiempo y costes son recursos vitales dentro de una empresa, y el data enhancement permite optimizar estos recursos mediante la automatización de tareas repetitivas.
  • Calidad del servicio: al tener datos enriquecidos, las empresas entienden mejor a sus clientes y pueden adaptar los productos-servicios según las necesidades que estos presenten. Por ejemplo, una empresa puede tener información básica sobre los clientes, pero al enriquecer estos datos con información demográfica, geográfica o conductual, puede crear una visión más completa, lo que lleva a una mejor segmentación, un mayor compromiso y, finalmente, mayores tasas de conversión.
  • Evolución de la segmentación de clientes y perfiles: Con datos precisos, completos y actualizados, las marcas pueden personalizar el contenido por perfil de usuario en cada una de sus campañas de marketing, haciéndolas más efectivas y optimizando también el presupuesto destinado. Este enfoque permite impactar directamente a posibles consumidores con diferentes niveles de interacción con la marca, adaptando la comunicación a su posición específica en el journey del cliente.

Tipos De Data Enrichment

Destacamos 5 tipos de data enrichment, cada uno con su propio propósito y aplicaciones específicas:

  • Enriquecimiento demográfico: al conjunto de datos se le añade información como la edad, renta, sexo y ubicación geográfica. Este tipo de enriquecimiento es particularmente útil en la segmentación de mercados, permitiendo a las empresas adaptar sus estrategias de marketing a grupos demográficos específicos.
  • Enriquecimiento firmográfico: agrega información como la industria, facturación y cantidad de empleados de una empresa. Esto es vital para la generación de leads B2B, permitiendo a las empresas identificar prospectos con características específicas.
  • Enriquecimiento tecnológico: se añade información sobre el stack tecnológico de la empresa, incluyendo el software y hardware empleado. Este tipo de data enrichment ayuda a las empresas tecnológicas a entender mejor las necesidades y limitaciones de sus clientes.
  • Enriquecimiento contextual: se agrega el contexto donde se produjo una actividad o evento relacionado con el dataset existente. De gran valor en industrias donde el contexto influye en la interpretación de los datos, como en análisis de redes sociales o estudios de comportamiento del consumidor.
  • Enriquecimiento preferencial: se añaden datos relacionados con el comportamiento en línea del usuario, como sitios webs visitados o resultados de encuestas. Lo que mejora la personalización y la eficacia de las estrategias de marketing digital.

Estos diversos tipos de enriquecimiento pueden aplicarse de forma independiente o combinada, según las necesidades específicas de cada organización y el valor que se espera extraer de los datos. La selección del tipo adecuado dependerá de los objetivos empresariales, el sector de actividad y las características de los datos existentes.

Utilidad Del Proceso

El data enrichment se emplea en diferentes industrias, como:

  • Publicidad: al enriquecer los datos de los clientes con información sobre su comportamiento y preferencias, las empresas pueden crear campañas de marketing optimizadas para un target concreto. Esto permite que su marca sea relevante para sus distintas audiencias, personalizando la comunicación y el contenido en cada etapa del funnel de conversión.
  • Atención médica: al añadir -y mantener una rigurosa- información sobre el paciente como preferencias, alergias e historial de ingresos; el personal médico podría brindar una atención más cercana y efectiva. Esta información adicional puede ser crucial para el diagnóstico y tratamiento adecuado de los pacientes.
  • Retail: los minoristas utilizan el data enrichment para comprender mejor las preferencias de compra de sus clientes y ajustar su inventario y estrategias de marketing en consecuencia. Esto les permite ofrecer productos y servicios más alineados con las expectativas y necesidades de sus clientes.
  • Finanzas: los analistas financieros toman decisiones más sensatas gracias a tener información adicional sobre el desempeño de la empresa y las tendencias de la industria. El enriquecimiento de datos en este sector ayuda a identificar riesgos, detectar fraudes y optimizar las inversiones.
  • E-Commerce: las tiendas en línea enriquecen sus datos con información demográfica y preferencial para personalizar las experiencias de los usuarios, mejorar las recomendaciones de productos y optimizar sus campañas de marketing digital. Esto fortalece la relación de la marca con sus clientes al sentir que realmente comprende sus necesidades y se adapta hasta en el tono y el canal donde es contactado.
  • Investigación científica: en el ámbito académico y de investigación, el enriquecimiento de datos está facilitando avances significativos mediante la integración de información complementaria que permite descubrir patrones y relaciones previamente ocultos. Los modelos de aprendizaje automático e inteligencia artificial se benefician enormemente del data enrichment, que les proporciona conjuntos de datos más completos y representativos para su entrenamiento.
  • Construcción y gestión de edificios: en sectores como la construcción, el enriquecimiento semántico de datos no gráficos en modelos BIM (Building Information Modeling) está permitiendo una gestión más eficiente de las instalaciones, mejorando los niveles de detalle tanto geométricos como de información asociada a los elementos constructivos.

Desafíos & Mejores Prácticas

Hay varios aspectos a tener en cuenta a la hora de poner en práctica el data enrichment:

  • Calidad: es crucial que los datos que se agregan sean precisos y actualizados, esto se logra mediante el uso de fuentes confiables y una limpieza periódica de los datos. La gestión de grandes volúmenes de datos de diversas fuentes representa una complejidad significativa, ya que cada fuente puede tener formatos diferentes y normas de calidad variadas, requiriendo una integración sin interrupciones en los sistemas existentes.
  • Privacidad: hay que tener en cuenta las leyes de protección de datos al realizar el proceso de data enrichment. Asegurándose de que se haya dado el consentimiento necesario y de que los datos estén protegidos. Esto requiere una familiarización con reglamentos como la LOPD y la CCPA, entre otros, que dictan normas estrictas sobre cómo se deben manejar los datos personales.
  • Integración: al combinar datos de diferentes fuentes, debemos asegurarnos de que los datos sean compatibles entre sí. Esto requiere la estandarización de formatos de datos e incluso el uso de software especializado en integración de datos. Las empresas deben implementar soluciones de integración de datos que automaticen los procesos de extracción, transformación y carga (ETL) para garantizar una incorporación fluida de los datos enriquecidos.
  • Gobernanza: ser claro en las pautas y procesos necesarios para el data enrichment ayuda a garantizar el uso adecuado de los datos y que se mantengan fiables con el transcurso del tiempo. En el actual panorama de datos, las empresas deben contar con una plataforma de datos e inteligencia artificial en la nube que tenga en sus cimientos características como gobernanza, seguridad y cumplimiento de la regulación.
  • Seguridad: es muy importante garantizar la seguridad de los datos, para evitar posibles filtraciones de datos. En un entorno donde la presión por innovar con tecnologías como la inteligencia artificial coexiste con la demanda de requisitos más estrictos en materia de seguridad de datos, las empresas deben equilibrar ambas necesidades para mantener la confianza de sus clientes.
  • Experiencia técnica: muchas organizaciones enfrentan una falta de experticia interna necesaria para la gestión, el análisis y la obtención de conocimientos de forma eficaz, especialmente cuando se abordan grandes conjuntos de datos complejos. Para superar este desafío, es prudente considerar la asociación con empresas o proveedores especializados, la subcontratación de servicios de implementación o actualización, e invertir en programas de formación interna y asociaciones con instituciones educativas.
  • Cumplimiento regulatorio: el aumento de los requisitos normativos obliga a las empresas a centrarse en la legislación a la hora de diseñar su estrategia de negocio basada en datos. Esto afecta tanto a empresas que operan en una única zona geográfica como a las que tienen operaciones globales en diferentes zonas geográficas y sectores.

Entre las mejores prácticas para implementar el data enrichment se encuentran:

  • Establecer metas claras para el proceso de enriquecimiento, definiendo qué tipo de información se necesita y cómo se utilizará
  • Automatizar los flujos de trabajo siempre que sea posible, utilizando herramientas y tecnologías especializadas
  • Asegurar la calidad de los datos antes y después del enriquecimiento, implementando procesos de validación y limpieza
  • Entrenar a los equipos en las técnicas y herramientas utilizadas para el enriquecimiento de datos
  • Revisar y actualizar regularmente los datos enriquecidos para mantener su relevancia y precisión

Conclusión

El data enrichment es una técnica muy útil que ayuda a mejorar la precisión y utilidad de los conjuntos de datos, transformando información básica en conjuntos de datos completos y accionables que permiten tomar decisiones más informadas y estratégicas. Al incorporar información adicional, las empresas y organizaciones pueden realizar análisis más detallados, comprender mejor a sus clientes y adaptar sus productos y servicios a necesidades específicas, lo que en última instancia se traduce en ventajas competitivas significativas en el mercado actual impulsado por los datos.