{"id":38305,"date":"2026-10-14T11:36:17","date_gmt":"2026-10-14T14:36:17","guid":{"rendered":"https:\/\/building.nu.com\/?p=38305"},"modified":"2026-10-14T14:11:26","modified_gmt":"2026-10-14T17:11:26","slug":"feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank","status":"publish","type":"post","link":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/","title":{"rendered":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Escrito por: <a href=\"mailto:felipe.almeida@nubank.com.br\">Felipe Almeida<\/a>, con contribuciones de <a href=\"mailto:luiz.felix@nubank.com.br\">Luiz Felix<\/a>, <a href=\"mailto:vivian.miranda@nubank.com.br\">V\u00edvian Miranda<\/a>, <a href=\"mailto:lucas.nolasco@nubank.com.br\">Lucas Nolasco<\/a> y <a href=\"mailto:caroline.custodio@nubank.com.br\">Caroline Custodio<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Esta es la parte 3 de una serie de 3 partes sobre Feature Stores para ML en tiempo real. Consulta la<\/strong> <a href=\"https:\/\/building.nu.com\/feature-stores-for-real-time-ml-why-and-when-to-centralize-feature-logic\/\"><strong>parte 1<\/strong><\/a> <strong>y la<\/strong> <a href=\"http:\/\/building.nubank.com\/feature-stores-for-real-time-ml-part-2-lessons-learned-from-production\/\"><strong>parte 2<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Breve resumen e introducci\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En la <a href=\"https:\/\/building.nu.com\/feature-stores-for-real-time-ml-why-and-when-to-centralize-feature-logic\/\">parte 1<\/a> de esta serie describimos qu\u00e9 son las feature stores y por qu\u00e9 tienen sentido cuando una organizaci\u00f3n orientada a datos alcanza cierto nivel de madurez, especialmente al usar sistemas en tiempo real habilitados por ML. En la <a href=\"https:\/\/building.nu.com\/feature-stores-for-real-time-ml-part-2-lessons-learned-from-production\/\">parte 2<\/a>, enumeramos las lecciones que aprendimos al aplicar conceptos de feature store a problemas reales en Nubank.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En las siguientes secciones repasaremos algunos patrones arquitect\u00f3nicos concretos que hemos implementado. Algunos de ellos son lo que podr\u00edamos llamar una feature store completa (con definiciones de features comunes para los caminos de entrenamiento y de serving, por ejemplo), mientras que otros se enfocan en resolver solo un problema particular.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Features precalculadas a partir de datos batch, materializadas en una capa de serving clave-valor<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En esta variante producimos un dataset <strong>totalmente desnormalizado<\/strong> (con todas las features de cada entidad combinadas en una sola fila) como parte de nuestros jobs nocturnos de <em><\/em>ETL\/ELT y lo ponemos a disposici\u00f3n en una \u201ccapa de serving\u201d (por ejemplo, DynamoDB), indexado por el ID, para usarlo en tiempo de inferencia. Esto se puede ver en la Figura 1:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" data-attachment-id=\"38306\" data-permalink=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/image-91\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?fit=2048%2C1165&amp;ssl=1\" data-orig-size=\"2048,1165\" data-comments-opened=\"1\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?fit=1024%2C583&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?resize=1024%2C583&#038;ssl=1\" alt=\"\" class=\"wp-image-38306\" style=\"aspect-ratio:1.75793991416309;width:2048px;height:auto\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?resize=1024%2C583&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?resize=768%2C437&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?resize=1536%2C874&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-4.png?w=2048&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong><em>Figura 1:<\/em><\/strong> <em>En esta estrategia se agrega un paso extra a los jobs nocturnos de ETL\/ELT: producir un dataset, indexado por el ID de la entidad (por ejemplo, ID de cliente, ID de cuenta), donde cada columna es el valor de una feature para esa entidad. Luego, ese snapshot se env\u00eda a un almac\u00e9n clave-valor (KV) de baja latencia como DynamoDB o Redis. En tiempo de serving, el modelo de ML en tiempo real&nbsp; recuperar\u00e1 una sola fila de ese almac\u00e9n, ya que est\u00e1 totalmente desnormalizado. Esto es r\u00e1pido y f\u00e1cil.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este suele ser el primer \u201cpatr\u00f3n\u201d de feature store al que convergen muchas empresas, a menudo sin saber que se trata de una feature store. Se basa en la <a href=\"https:\/\/en.wikipedia.org\/wiki\/Lambda_architecture\"><em>arquitectura lambda<\/em><\/a> (sin la speed layer).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es un caso de uso simple, pero bastante poderoso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Es barato y f\u00e1cil:<\/strong> No se necesitan habilidades especializadas de ingenier\u00eda de machine learning para usarlo en producci\u00f3n; quien construy\u00f3 el dataset de entrenamiento (por ejemplo, los cient\u00edficos de datos) puede construir el dataset de la capa de serving, mientras que los ingenieros que despliegan el modelo solo necesitan una \u00fanica solicitud para obtener varias features a la vez.&nbsp;<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No habr\u00e1 <strong>training-serving skew \u201cinducido por l\u00f3gica\u201d<\/strong> si el entrenamiento y el serving reutilizan la misma l\u00f3gica de c\u00e1lculo de features del data lake, pero a\u00fan puede haber skew debido a retrasos o fallas en las ejecuciones de ETL.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>La latencia de recuperaci\u00f3n es muy baja<\/strong> porque es una simple b\u00fasqueda por clave que devuelve una sola fila.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La principal desventaja es que los <strong>valores de las features servidos en tiempo de inferencia estar\u00e1n desactualizados<\/strong>, ya que son un snapshot de la \u00faltima vez que se ejecutaron los jobs de ETL\/ELT (no una representaci\u00f3n del mundo tal como es <em>ahora<\/em>). Por lo tanto, hay que tener en cuenta cu\u00e1ndo cada snapshot habr\u00eda estado realmente disponible al construir el dataset de entrenamiento, para evitar fuga de datos (los snapshots no est\u00e1n disponibles instant\u00e1neamente; pueden tardar horas y a veces fallan).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como ocurre con todas las estrategias de implementaci\u00f3n de features \u201cshift-left\u201d, esto puede volverse costoso porque se precalculan features para <em>todas<\/em> las entidades (por ejemplo, clientes, cuentas), aunque solo una minor\u00eda de ellas necesite ser evaluada en un d\u00eda determinado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Features tabulares on-demand con Flink y Pinot<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Las features on-demand se calculan en tiempo de serving, en lugar de precalcularse con antelaci\u00f3n. Esto es \u00fatil cuando los modelos necesitan la informaci\u00f3n m\u00e1s actualizada y precalcular features para entidades que quiz\u00e1 nunca las usen ser\u00eda un desperdicio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pueden aumentar la latencia si no tomamos precauciones, pero tienen ventajas claras:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Son lo m\u00e1s cercano que podemos llegar a features realmente online cuando necesitamos calcular agregaciones en tiempo de inferencia<\/li>\n\n\n\n<li>Solo se calculan cuando realmente se usan (a diferencia de las features precalculadas, que se materializan para toda la base de clientes por si acaso llegan a necesitarse)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una de las estrategias que usamos para features on-demand es la de <em>escritura dual (dual-write)<\/em>, en la que los microservicios transaccionales escriben eventos tanto en el camino offline (archivos Parquet en S3) como en el camino online (una app de Apache Flink y luego Pinot), como podemos ver en la Figura 2 a continuaci\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" data-attachment-id=\"38310\" data-permalink=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/image-92\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?fit=2048%2C1165&amp;ssl=1\" data-orig-size=\"2048,1165\" data-comments-opened=\"1\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?fit=1024%2C583&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?resize=1024%2C583&#038;ssl=1\" alt=\"\" class=\"wp-image-38310\" style=\"aspect-ratio:1.75793991416309;width:2048px;height:auto\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?resize=1024%2C583&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?resize=768%2C437&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?resize=1536%2C874&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-5.png?w=2048&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong><em>Figura 2:<\/em><\/strong> <em>Cada evento de comportamiento se enruta al camino offline y al camino online. Esto ayuda a reducir el training-serving skew en este caso, pero la l\u00f3gica de agregaci\u00f3n sigue siendo diferente en el camino offline (normalmente jobs de Spark) y en el camino online (queries SQL en Pinot).<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En el <strong>camino de escritura<\/strong>, la estrategia de escritura dual anterior busca enviar los mismos eventos a los almacenes offline y online. Esto es importante para reducir el <a href=\"https:\/\/building.nubank.com\/dealing-with-train-serve-skew-in-real-time-ml-models-a-short-guide\/\">training-serving skew<\/a> (pero no para eliminarlo, porque a\u00fan puede haber retrasos y eventos faltantes). Adem\u00e1s, la l\u00f3gica de agregaci\u00f3n batch (usada en el entrenamiento) y las queries usadas en tiempo de serving son artefactos diferentes. Por esta raz\u00f3n, el monitoreo del skew sigue siendo necesario.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El <strong>camino de lectura<\/strong> consume los datos producidos por el camino de escritura (Figura 2). Tiene dos ramas: una para entrenamiento y otra para serving.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La l\u00f3gica de tiempo de entrenamiento suele escribirse como jobs de procesamiento batch, ya que implica joins y agregaciones pesadas sobre horizontes de tiempo largos. La l\u00f3gica de tiempo de serving es una query SQL ejecutada en tiempo real sobre una base de datos de procesamiento anal\u00edtico en l\u00ednea (OLAP) en tiempo real como Apache Pinot, como se puede ver en la Figura 3 a continuaci\u00f3n. Esto forma parte de nuestro stack \u201cAvalanche\u201d, sobre el cual escribimos en <a href=\"https:\/\/building.nu.com\/avalanche-stack-and-real-time-streaming-applications-at-nu\/\">este post del blog<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" data-attachment-id=\"38315\" data-permalink=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/image-93\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?fit=2048%2C1165&amp;ssl=1\" data-orig-size=\"2048,1165\" data-comments-opened=\"1\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?fit=1024%2C583&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?resize=1024%2C583&#038;ssl=1\" alt=\"\" class=\"wp-image-38315\" style=\"aspect-ratio:1.75793991416309;width:2048px;height:auto\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?resize=1024%2C583&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?resize=768%2C437&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?resize=1536%2C874&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-7.png?w=2048&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong><em>Figura 3:<\/em><\/strong> <em>En tiempo de entrenamiento, construimos el dataset de entrenamiento a partir de un spine (un dataset con IDs de entidades y timestamps de referencia) y el event store, mediante un job de Spark. En tiempo de serving, ejecutamos la agregaci\u00f3n en tiempo real, con una query SQL normal, sobre un backend de base de datos Pinot.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La query SQL enviada a Pinot es una query de agregaci\u00f3n. Este es un ejemplo de la query que usar\u00edamos para obtener la cantidad de veces que un cliente determinado abri\u00f3 su app en las \u00faltimas 2 horas:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">SELECT<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;customer_identifier,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;count(DISTINCT event_timestamp) AS app_opened__last_2h__count<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">FROM clickstream_table<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WHERE type = &#8216;app_opened&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;AND customer_identifier = &#8216;{{customer_identifier}}&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;AND event_timestamp &gt;= AGO(&#8216;PT2H&#8217;)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">GROUP BY customer_identifier<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Algunos puntos para que esto funcione a nuestra escala:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sin joins:<\/strong> Normalmente no hacemos ning\u00fan join en tiempo de serving (solo agregaciones group-by sobre la misma tabla). Si necesitamos m\u00e1s datos en la tabla, por lo general los enriquecemos en la capa de Flink (para no necesitar joins costosos en tiempo de query)<\/li>\n\n\n\n<li><strong>TTL agresivo:<\/strong> Debido a nuestra escala, aplicamos un time to live (TTL) a los eventos en Pinot, para que el tama\u00f1o de la base de datos no crezca demasiado.\n<ul class=\"wp-block-list\">\n<li>Por lo tanto, solo obtenemos datos de muy corto plazo (por ejemplo, los \u00faltimos d\u00edas) de Pinot. Si necesitamos features de m\u00e1s largo plazo (por ejemplo, agregaciones del \u00faltimo a\u00f1o), las precalculamos a partir de datos batch, ya que es m\u00e1s f\u00e1cil, r\u00e1pido y barato obtenerlas de un snapshot con retraso calculado diariamente.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Evitar cambios de schema:<\/strong> Los cambios de schema son un problema. Una soluci\u00f3n es tener campos string con contenido JSON, ya que la estructura del JSON puede evolucionar sin cambiar el schema de la tabla (los cambios a\u00fan deben ser retrocompatibles para los consumidores existentes).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Una ventaja secundaria de este enfoque es que cualquier otro equipo puede usar los eventos que guarda un equipo: toda la l\u00f3gica de la feature est\u00e1 contenida en la query, as\u00ed que varios equipos pueden compartir la base de datos Pinot y ejecutar queries diferentes sobre ella.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Esta no es una feature store completa;<\/strong> solo usamos esta configuraci\u00f3n para soportar el camino de serving de features online. El c\u00f3digo de entrenamiento est\u00e1 en un camino completamente distinto, y por eso debemos seguir monitoreando el training-serving skew.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Uso de una arquitectura de materializaci\u00f3n y serving en dos etapas basada en Flink<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En esta estrategia, los eventos de comportamiento fluyen por dos apps de Flink, una tras otra (Flink app #1 y Flink app #2, como se puede ver en la Figura 4 a continuaci\u00f3n). Esto es \u00fatil cuando los modelos necesitan features actualizadas, pero calcularlas en tiempo de serving a\u00f1adir\u00eda demasiada latencia:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"583\" data-attachment-id=\"38308\" data-permalink=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/image-92\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?fit=2048%2C1165&amp;ssl=1\" data-orig-size=\"2048,1165\" data-comments-opened=\"1\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?fit=1024%2C583&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?resize=1024%2C583&#038;ssl=1\" alt=\"\" class=\"wp-image-38308\" style=\"aspect-ratio:1.75793991416309;width:2048px;height:auto\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?resize=1024%2C583&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?resize=768%2C437&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?resize=1536%2C874&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/image-6.png?w=2048&amp;ssl=1 2048w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\"><strong><em>Figura 4:<\/em><\/strong> <em>En este ejemplo, cada nuevo evento \u201cpurchase-requested\u201d se transmite a trav\u00e9s de Flink app #1, y un conteo continuo de las \u00faltimas 24 horas para cada cliente se mantiene en Flink app #2 y luego se env\u00eda mediante upsert a DynamoDB. Cada vez que cualquier modelo en tiempo real necesita esta informaci\u00f3n, solo tiene que llamar a DynamoDB pasando el ID del cliente y el nombre del feature set para obtener el conteo materializado m\u00e1s reciente de ese cliente.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Flink app #1<\/strong> escucha eventos de comportamiento (logs de CDC de bases de datos transaccionales y eventos crudos de Kafka), combina datos de m\u00faltiples shards en un solo stream, filtra los eventos no deseados y normaliza nombres y schemas. En esta primera app no se mantiene ning\u00fan estado.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Flink app #2<\/strong> escucha los eventos de la primera app y mantiene <em>cierto<\/em> estado, guardando todos los eventos de cada cliente, con un TTL de 24 horas. Cuando un nuevo evento entra en la app #2, todas las features relacionadas se recalculan y se env\u00eda mediante upsert una nueva fila a una tabla de DynamoDB (indexada por un ID de entidad, como el ID de cliente).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta estrategia depende del prec\u00e1lculo de features, por lo que su latencia en tiempo de serving es muy baja (ya que es una simple b\u00fasqueda). Al igual que en el primer ejemplo de este art\u00edculo, el trade-off es que la mayor\u00eda de las features se calcular\u00e1n para clientes que nunca las necesitar\u00e1n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como en el ejemplo anterior, esta configuraci\u00f3n solo cubre el camino de serving, as\u00ed que no es una feature store completa. El c\u00f3digo de entrenamiento corre en Spark, por lo que puede haber skew inducido por l\u00f3gica, que debe monitorearse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pr\u00f3ximos pasos<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s de mejorar constantemente nuestra configuraci\u00f3n y aprender nuevas lecciones, hay al menos otras dos l\u00edneas que estamos explorando actualmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pipelines de Feldera:<\/strong> Recientemente hemos estado experimentando con una herramienta llamada <a href=\"https:\/\/github.com\/feldera\/feldera\">Feldera<\/a>. Los pipelines de Feldera soportan mantenimiento incremental de vistas, lo que significa que las features basadas en agregaciones (sum, count, avg, etc.) se actualizan en tiempo real a medida que llegan nuevos eventos, sin recalcular toda la agregaci\u00f3n desde cero cada vez).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, Feldera podr\u00eda permitirnos unificar la l\u00f3gica de features para entrenamiento y serving, reduciendo los problemas de training-serving skew y acercando a Nubank a una feature store en tiempo real completa y para toda la empresa.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Features secuenciales:<\/strong> Aunque la mayor\u00eda de los ejemplos de esta serie involucran features tabulares, tambi\u00e9n hemos estado usando features secuenciales en <a href=\"https:\/\/building.nu.com\/presenting-precog-nubanks-real-time-event-ai\/\">varios<\/a> <a href=\"https:\/\/building.nu.com\/behavior-modeling-with-sequential-architectures-exploring-lstms-in-machine-learning\/\">casos<\/a> <a href=\"https:\/\/building.nu.com\/unlocking-financial-insights-how-nubank-powers-personalized-experiences-with-foundation-models\/\">de uso<\/a>, desde 2023.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Las features secuenciales generan mucho valor, particularmente en redes neuronales, pero tambi\u00e9n introducen complejidad adicional y nuevos modos de falla; descubrir c\u00f3mo integrarlas en nuestras plataformas de features <strong>en tiempo real<\/strong> es un desaf\u00edo en curso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusi\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">En este post repasamos algunos patrones arquitect\u00f3nicos que usamos en Nubank para poner features a disposici\u00f3n de modelos de ML en tiempo real.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Las features batch<\/strong> son simples y baratas y no deben pasarse por alto, incluso cuando eso signifique que el modelo en tiempo real usar\u00e1 informaci\u00f3n ligeramente desactualizada.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Decidir si <strong>precalcular<\/strong> las features o calcularlas <strong>on-demand<\/strong> es uno de los principales trade-offs al pensar en feature stores. Distintos casos de uso requieren distintos enfoques. Una buena feature store deber\u00eda soportar ambos.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Unificar los <strong>caminos de definici\u00f3n de features de entrenamiento y de serving<\/strong> es dif\u00edcil y, aunque no resuelve por completo el training-serving skew, s\u00ed lo mitiga sustancialmente.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto cerramos nuestra serie de 3 partes sobre feature stores para ML en tiempo real en Nubank. No dejes de leer las partes <a href=\"https:\/\/building.nu.com\/feature-stores-for-real-time-ml-why-and-when-to-centralize-feature-logic\/\">1<\/a> y <a href=\"https:\/\/building.nu.com\/feature-stores-for-real-time-ml-part-2-lessons-learned-from-production\/\">2<\/a>&nbsp; y mantente atento a otros posts sobre este tema, \u00a1ya que es algo en lo que estamos trabajando activamente!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Escrito por: Felipe Almeida, con contribuciones de Luiz Felix, V\u00edvian Miranda, Lucas Nolasco y Caroline Custodio. Esta es la parte 3 de una serie de 3 partes sobre Feature Stores para ML en tiempo real. Consulta la parte 1 y la parte 2. Breve resumen e introducci\u00f3n En la parte 1 de esta serie describimos [&hellip;]<\/p>\n","protected":false},"author":178110103,"featured_media":38303,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_eb_attr":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2508],"tags":[],"class_list":["post-38305","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science-machine-learning-es"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Escrito por: Felipe Almeida, con contribuciones de Luiz Felix, V\u00edvian Miranda, Lucas Nolasco y Caroline Custodio. Esta es la parte 3 de una serie de 3 partes sobre Feature Stores para ML en tiempo real. Consulta la parte 1 y la parte 2. Breve resumen e introducci\u00f3n En la parte 1 de esta serie describimos [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-14T14:36:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-14T17:11:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1726\" \/>\n\t<meta property=\"og:image:height\" content=\"742\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nubank Editorial\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nubank Editorial\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/\"},\"author\":{\"name\":\"Nubank Editorial\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\"},\"headline\":\"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank\",\"datePublished\":\"2026-10-14T14:36:17+00:00\",\"dateModified\":\"2026-10-14T17:11:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/\"},\"wordCount\":2175,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1\",\"articleSection\":[\"Data Science &amp; Machine Learning\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/\",\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/\",\"name\":\"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1\",\"datePublished\":\"2026-10-14T14:36:17+00:00\",\"dateModified\":\"2026-10-14T17:11:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1\",\"width\":1726,\"height\":742},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nu.com\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#website\",\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nu.com\\\/es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/es\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\",\"name\":\"Nubank Editorial\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g\",\"caption\":\"Nubank Editorial\"},\"url\":\"https:\\\/\\\/building.nu.com\\\/es\\\/author\\\/editorial\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/","og_locale":"es_ES","og_type":"article","og_title":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank","og_description":"Escrito por: Felipe Almeida, con contribuciones de Luiz Felix, V\u00edvian Miranda, Lucas Nolasco y Caroline Custodio. Esta es la parte 3 de una serie de 3 partes sobre Feature Stores para ML en tiempo real. Consulta la parte 1 y la parte 2. Breve resumen e introducci\u00f3n En la parte 1 de esta serie describimos [&hellip;]","og_url":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/","og_site_name":"Building Nubank","article_published_time":"2026-10-14T14:36:17+00:00","article_modified_time":"2026-10-14T17:11:26+00:00","og_image":[{"width":1726,"height":742,"url":"https:\/\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png","type":"image\/png"}],"author":"Nubank Editorial","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Nubank Editorial","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#article","isPartOf":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/"},"author":{"name":"Nubank Editorial","@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4"},"headline":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank","datePublished":"2026-10-14T14:36:17+00:00","dateModified":"2026-10-14T17:11:26+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/"},"wordCount":2175,"commentCount":0,"image":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1","articleSection":["Data Science &amp; Machine Learning"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/","url":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/","name":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank - Building Nubank","isPartOf":{"@id":"https:\/\/building.nu.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#primaryimage"},"image":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1","datePublished":"2026-10-14T14:36:17+00:00","dateModified":"2026-10-14T17:11:26+00:00","author":{"@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4"},"breadcrumb":{"@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1","width":1726,"height":742},{"@type":"BreadcrumbList","@id":"https:\/\/building.nu.com\/es\/feature-stores-en-ml-en-tiempo-real-parte-3-ejemplos-de-nubank\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nu.com\/es\/"},{"@type":"ListItem","position":2,"name":"Feature stores en ML en tiempo real, parte 3:\u00a0 Ejemplos de Nubank"}]},{"@type":"WebSite","@id":"https:\/\/building.nu.com\/es\/#website","url":"https:\/\/building.nu.com\/es\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nu.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/building.nu.com\/es\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4","name":"Nubank Editorial","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8c056170dc75ffd365b306a0ac7bea4e51d1cdab52a0c84e6ba0a42f7e2f4633?s=96&d=identicon&r=g","caption":"Nubank Editorial"},"url":"https:\/\/building.nu.com\/es\/author\/editorial\/"}]}},"jetpack_likes_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-9XP","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/10\/Captura-de-Tela-2026-10-14-as-11.33.39.png?fit=1726%2C742&ssl=1","_links":{"self":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/38305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/users\/178110103"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/comments?post=38305"}],"version-history":[{"count":5,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/38305\/revisions"}],"predecessor-version":[{"id":38356,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/posts\/38305\/revisions\/38356"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/media\/38303"}],"wp:attachment":[{"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/media?parent=38305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/categories?post=38305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nu.com\/es\/wp-json\/wp\/v2\/tags?post=38305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}