(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Feature Store ligero en Microsoft Fabric para scoring en tiempo real
Inteligência Artificial

Feature Store ligero en Microsoft Fabric para scoring en tiempo real

João Barros 25/08/2026 8 min

Un feature store no tiene que ser un producto pesado: bien diseñado en Microsoft Fabric, reduce la latencia de scoring, la duplicación de trabajo y los costes operativos —sin grandes inversiones iniciales.

Por qué un Feature Store ligero es esencial para scoring en tiempo real

Los equipos de datos e IA enfrentan un dilema práctico: sin un punto único de la verdad para features, reproducir preprocesamientos entre entrenamiento y producción se convierte en un trabajo manual y propenso a errores. Cada nuevo equipo tiende a reimplementar transformaciones similares, lo que genera divergencia en los cálculos y reclamaciones de los equipos de producto cuando los modelos empiezan a degradarse. La ausencia de consistencia se traduce en deriva del modelo, latencias elevadas y solicitudes constantes de soporte por parte de los equipos de negocio —costes difíciles de cuantificar, pero reales: equipos que dedican el 20% del tiempo a corregir discrepancias de features no están optimizando el valor del modelo.

Feature Store ligero en Microsoft Fabric para scoring en tiempo real

Un feature store ligero resuelve esto sin imponer una nueva plataforma pesada. Al centralizar la lógica de features en tablas Delta en el Lakehouse de Microsoft Fabric y materializar versiones optimizadas para lectura, conseguimos garantizar consistencia entre entrenamiento y producción, acelerar la inferencia y reducir costes operativos. En organizaciones típicas, esto puede reducir el esfuerzo duplicado en featurización en un 40–60% y la duración de incidentes relacionados con inconsistencias en un 70%.

Importa subrayar que ligero no significa primitivo. Significa optar por componentes nativos del Fabric y por patrones de ingeniería simples: tablas canónicas, pipelines programados, materializaciones optimizadas para serving y políticas claras de fallback. Este enfoque permite comenzar con un prototipo en 4 semanas y escalar de forma controlada conforme se demuestre su uso.

Arquitectura práctica con Microsoft Fabric

Una propuesta de arquitectura minimalista y pragmática se basa en los componentes nativos del Fabric: Lakehouse para almacenamiento de features canónicas, Spark Notebooks para computación y actualización, Warehouses SQL para consultas de baja latencia y Pipelines para orquestación. Mantenemos la simplicidad: no introducimos servicios externos hasta que sea necesario.

Flujo típico: ingestión de events/raw -> transformación batch/stream -> escritura en tablas Delta en el Lakehouse (features canónicas) -> jobs de materialización (tablas optimizadas para lectura) -> endpoints SQL del Warehouse o caches para servicio de inferencia. Esta arquitectura aprovecha OneLake como capa de almacenamiento unificada y el motor Spark para procesamientos pesados. Opcionalmente, para actualizaciones muy rápidas, podemos integrar un KV store ligero (por ejemplo Redis) como cache de última milla, pero esto queda como complemento y no sustituye al Lakehouse.

Desde el punto de vista operativo, la arquitectura tiene tres zonas claras: zona de ingestión (raw events, CDF activado para detectar cambios), zona de featurización canónica (tablas Delta con historial y metadatos) y zona de serving (tablas materializadas y caches optimizados para lectura). Cada zona tiene SLAs definidos —por ejemplo, ingestión con 1–2 minutos de retraso aceptable, materialización batch con 30–60 minutos de cadencia para features agregadas, y latencia de consulta del Warehouse inferior a 100 ms para queries por clave.

Diseño de features: batch, incremental y online

No todas las features son iguales. Clasificar features por frecuencia de actualización y coste de cálculo es crucial. Propongo tres categorías prácticas: 1) features estáticas (atributos del usuario), 2) features agregadas en batch (sums, counts diarios) y 3) features de baja latencia/online (contadores en minutos, última interacción).

Para cada categoría definimos reglas claras: esquema, ventana temporal, tolerancia a la latencia y política de actualización. Por ejemplo, una feature de tipo 2 puede recalcularse cada 4 horas con tolerancia de 30 minutos; una feature tipo 3 puede exigir actualización every 60s y tener fallback a la última ventana calculada.

Ejemplos concretos:

  • Feature estática: user_age_bucket. Actualizada solo cuando el usuario edita el perfil; tolerancia de 24 horas. Simplicidad y determinismo son esenciales.
  • Feature agregada: purchases_30d_count. Ventana móvil de 30 días recalculada cada 30 minutos. Para 6M usuarios activos mensuales, una tarea horaria que agrega eventos en batch puede procesar 20M eventos/día en 40–60 minutos en un cluster Spark medio (8–16 cores), generando una tabla con ~6M filas.
  • Feature online: last_click_timestamp_seconds. Debe reflejar la última interacción en minutos; actualización en sub-1s mediante un write-through a Redis y escritura eventual a la tabla Delta para consistencia a medio plazo.

Al definir estas categorías, también se definen indicadores de uso que orientan decisiones de materialización: si una columna se consulta en menos del 5% de las predicciones, quizá no valga la pena materializarla permanentemente; se prefiere calcularla bajo demanda o mantenerla en cold storage.

Implementación: del Lakehouse a las consultas de baja latencia

Paso 1 — Tablas canónicas: crear un conjunto de tablas Delta en el Lakehouse para cada entidad (usuario, producto, sesión). Estas tablas contienen raw events y columnas de clave natural (ex: user_id, timestamp) y campos normalizados para features. Use partición por fecha para ingestión masiva y partición por hash de user_id en las tablas materializadas para servir. Para 100M de registros, una estrategia de 256 particiones por user_id hash suele equilibrar I/O y paralelismo.

Paso 2 — Jobs de featurización: notebooks Spark que ejecutan transformaciones y escriben resultados en tablas de features. Utilice checkpoints y un idempotency token para garantizar que re-ejecuciones no dupliquen resultados. Escriba con MERGE para actualizaciones incrementales y aproveche el Change Data Feed del Delta para procesar solo nuevos eventos. Ejemplo práctico: un job que consume 20M eventos/día usando 16 cores y 64 GB de RAM puede completar agregaciones horarias en 25–45 minutos, consumiendo alrededor de 8–12 horas de CPU por día, dependiendo de la optimización.

Paso 3 — Materialización para serving: cree tablas optimizadas para lectura en el Warehouse. Por ejemplo, generar una tabla daily_features_user con 100M filas particionada por user_id hash y con z-ordering en las columnas más consultadas. Configure permisos y caching en el Warehouse para reducir latencia de queries. El cache del Warehouse típicamente mejora latencia de 200–400 ms a menos de 50 ms para consultas clave-valor muy selectivas; ajuste el tamaño del cache para reflejar los patrones de acceso (por ejemplo, 10–20% del working set en memoria).

Paso 4 — Estrategias de lectura para la inferencia: para modelos en batch, leer directamente las tablas materializadas. Para inferencia en tiempo real, combine una consulta al Warehouse (cache rápido, objetivo de <100 ms para selecciones por clave) con un fallback a features calculadas en memoria o en el servicio de aplicación cuando no estén disponibles. Un enfoque común es la siguiente cadena: 1) consulta al cache in-memory (hit target 85–95%), 2) si miss, consulta al Warehouse (≤100 ms), 3) si aún miss, cálculo en línea o uso de feature default. Este modelo garantiza que la latencia de scoring se mantiene predecible y limitada por SLOs.

Operaciones, versiones y reproducibilidad

Rastrear versiones de features es vital. Incluya un manifiesto de featurización con hash del notebook, esquema de salida y versión del pipeline. Cada tabla de features debe incluir metadatos: feature_version, generated_at, source_job_id. Así, un entrenamiento reproducible apunta explícitamente a feature_version X. Utilice el time travel del Delta como mecanismo de emergencia para recuperar estados anteriores en caso de escritura indebida —por ejemplo, deshacer una materialización errónea en las últimas 24 horas.

Alertas operacionales: implemente checks de calidad simples (por ejemplo, recuento de nulos, distribución por cuantiles) que se ejecuten tras cada materialización. Reglas prácticas:

  • Alerta si el porcentaje de nulos para una feature crítica excede el 2%.
  • Alerta si la cardinalidad de una clave primaria varía más del 5% entre ventanas consecutivas.
  • Alerta si el tiempo de ejecución del job supera 2x la media histórica para esa ventana.
Cuando un check falla, el pipeline puede hacer rollback de la escritura materializada y señalizar para revisión. También recomiendo implementar un dashboard con SLI/SLO: latencia de serving, tasa de hits en el cache y número de regresiones por semana. Estas métricas transforman la operación reactiva en una gestión basada en indicadores.

Mini-caso práctico: scoring en tiempo real en una empresa de comercio electrónico

Contexto: empresa de comercio electrónico con 120 empleados, 2 aplicaciones web y un motor de recomendaciones que hace scoring en cada visita para personalizar el carrusel. Volumen: 20M de eventos por día; 6M usuarios activos mensuales; modelo de ranking con 75 features.

Desafío: la latencia de scoring original era ~420 ms por petición (consulta a múltiples APIs y cálculo ad-hoc de features), lo que degradaba la experiencia y aumentaba la tasa de rebote en las páginas con carruseles dinámicos. Implementamos un feature store ligero en Fabric con estas medidas:

  • Construcción de tablas canónicas: ingestión de eventos al Lakehouse (20M/día), particionado por día y por user_id hash para servir.
  • Featurización batch: agregados diarios y horarios generados con Spark, actualizados cada 30 minutos usando Change Data Feed para procesar solo nuevos eventos.
  • Materialización low-latency: tabla particionada por user_id con z-ordering y cache en el Warehouse para consultas clave-valor frecuentes.
  • Fallback online: contador de sesión en Redis para actualizaciones sub-1s cuando es necesario y write-through hacia la Delta para persistencia eventual.

Resultados tras 8 semanas:

  • Latencia media de scoring reducida de 420 ms a 85 ms (incluyendo llamada al Warehouse y pre-fetch de las 75 features). En picos, latencias quedaron por debajo de 150 ms, comparadas con picos anteriores de >1s.
  • Tasa de error de producción relacionada con inconsistencias de features cayó un 78%. El número de incidentes mensuales pasó de 9 a 2, con reducción del tiempo medio de resolución de 4h a 1h30m.
  • Coste operativo (compute para featurización) redujo un 35% por la eliminación de jobs duplicados y mejor compartición de resultados entre entrenamiento y producción. Estimamos un ahorro anual directo de ~€45k en consumos de computación y horas de ingeniería evitadas.

Este ejemplo muestra que con elecciones pragmáticas (materialización correcta, caching y fallback sencillo), es posible obtener ganancias sustanciales sin un proyecto monolítico o costes iniciales elevados. El ROI se hizo evidente en 2 meses, justificando la expansión a otras pipelines de features.

Centralizar la lógica de features es menos sobre tecnología y más sobre reducir la fricción entre equipos: menos duplicación, menos incidentes, más confianza en los modelos.

Buenas prácticas y trampas a evitar

Buena práctica 1: mantenga las transformaciones determinísticas y versionadas. Si un notebook depende de fecha/hora, registre la ventana claramente para no crear resultados no determinísticos entre entrenamiento y producción. Use seeds constantes para operaciones aleatorias y documente ventanas temporales en las versiones de feature.

Buena práctica 2: empiece pequeño. Identifique las 10 features de mayor valor para el negocio e implémentelas primero. Pruebe latencia y costes antes de materializar cientos de columnas. Un piloto típico con 10 features permite validar beneficios con inversión reducida —por ejemplo, un prototipo que procese 2M eventos/día y sirva 100k requests/día ofrece una imagen clara del impacto sin gran exposición financiera.

Trampa a evitar: intentar materializarlo todo por defecto. Features raramente usadas pueden incrementar costes de almacenamiento y degradar rendimiento. Use métricas de uso para decidir qué materializar. Otra trampa es no tener una política de retención clara: sin limpieza, las tablas Delta pueden crecer indefinidamente; defina retenciones y ejecute vacuum controlado para gestionar el coste de almacenamiento.

En resumen

  • Construya un feature store ligero en el Lakehouse de Microsoft Fabric usando tablas Delta, Spark notebooks y Warehouses SQL para servir features de baja latencia.
  • Categorice features en batch, incremental y online; implemente materializaciones y fallback para combinar consistencia y rendimiento.
  • Versione transformaciones e incluya checks de calidad automáticos para garantizar reproducibilidad y reducir regresiones.
  • Comience con un conjunto pequeño de features de mayor impacto y mida latencia y costes antes de escalar.

Próximos pasos prácticos: identifique las 10 features críticas en su negocio, implémentelas como tablas Delta canónicas en OneLake, y cree un notebook Spark idempotente para la primera materialización. Medir antes y después (latencia, coste, número de incidentes) convierte hipótesis en resultados mensurables.

¿Quiere explorar un plan de implementación ajustado a su realidad —número de usuarios, ventanas de latencia y presupuesto operativo— y validar ganancias anticipadas con un prototipo de 4 semanas?

← Volver a Insights
¿Hablamos?

¿Listo para transformar sus datos?

Reserve una reunión gratuita de 30 minutos y descubra cómo podemos ayudar a su equipo a tomar mejores decisiones.

Agendar Reunión Gratuita
bConcepts