{"id":37024,"date":"2026-06-18T09:09:16","date_gmt":"2026-06-18T12:09:16","guid":{"rendered":"https:\/\/building.nu.com\/?p=37024"},"modified":"2026-07-01T11:44:43","modified_gmt":"2026-07-01T14:44:43","slug":"feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao","status":"publish","type":"post","link":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/","title":{"rendered":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Escrito por: <a href=\"https:\/\/www.linkedin.com\/in\/felipeqbalmeida\/\">Felipe Almeida<\/a>, com contribui\u00e7\u00f5es de <a href=\"https:\/\/www.linkedin.com\/in\/lzfelix\/\">Luiz Felix<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><br><em>Esta \u00e9 a <\/em><strong><em>parte 2<\/em><\/strong><em> de uma s\u00e9rie de 3 partes sobre Feature Stores para ML em tempo real. Na <\/em><strong><em>parte 1<\/em><\/strong><em> falamos sobre a Introdu\u00e7\u00e3o e tamb\u00e9m sobre Pr\u00f3s e Contras. Na <\/em><strong><em>parte 3<\/em><\/strong><em> conclu\u00edmos com configura\u00e7\u00f5es de arquitetura do mundo real de ponta a ponta da Nubank.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Uma r\u00e1pida recapitula\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Na <a href=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-por-que-e-quando-centralizar-a-logica-de-features\/\">parte 1<\/a>, exploramos o que s\u00e3o os feature stores e o papel que desempenham nos sistemas de machine learning em tempo real. Discutimos como eles ajudam a mitigar problemas cruciais como o training-serving skew e por que, apesar dos custos de ado\u00e7\u00e3o, s\u00e3o um investimento valioso para organiza\u00e7\u00f5es que operam ML em escala.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nos \u00faltimos anos, usamos feature stores em uma ampla gama de aplica\u00e7\u00f5es de ML em tempo real na Nubank, incluindo an\u00e1lise de cr\u00e9dito, detec\u00e7\u00e3o de fraudes e atendimento ao cliente. Ao longo do caminho, vimos surgir padr\u00f5es recorrentes, enfrentamos desafios inesperados e reunimos li\u00e7\u00f5es pr\u00e1ticas que nos ajudaram a evitar armadilhas comuns enquanto maximiz\u00e1vamos o valor entregue pela plataforma.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Neste artigo<\/strong>, abordaremos algumas que consideramos especialmente importantes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Construir vs comprar \u00e9 um espectro&nbsp;<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 comum nos referirmos ao trade-off de \u201cconstruir vs comprar\u201d ao discutir plataformas complexas como os feature stores. Algumas organiza\u00e7\u00f5es podem querer construir tudo internamente, enquanto outras podem querer transferir parte da complexidade para feature stores mais \u201ccompletos\u201d como <a href=\"https:\/\/chalk.ai\/\">Chalk<\/a> ou <a href=\"https:\/\/feast.dev\/\">Feast<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Em nossa opini\u00e3o, voc\u00ea n\u00e3o precisa <em>escolher<\/em> entre construir <em>tudo<\/em> ou comprar <em>tudo<\/em>. Em vez disso, voc\u00ea pode ter um feature store <em>h\u00edbrido<\/em>: voc\u00ea constr\u00f3i algumas partes, usa ferramentas open-source em outras e delega a provedores de servi\u00e7os terceirizados quando necess\u00e1rio. <a href=\"https:\/\/building.nu.com\/pt-br\/dominando-dados-em-streaming-em-tempo-real\/\">Isso \u00e9 semelhante \u00e0 abordagem que seguimos atualmente na Nubank<\/a>.<\/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\"><em>Construir vs comprar n\u00e3o \u00e9 uma escolha bin\u00e1ria: voc\u00ea pode optar por \u201ccomprar\u201d alguns componentes e construir outros voc\u00ea mesmo.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Figura 1 abaixo mostra uma vis\u00e3o de alto n\u00edvel de um feature store em tempo real e alguns dos componentes que podem existir em cada camada. Cada um desses componentes pode ser \u201cconstru\u00eddo\u201d ou \u201ccomprado\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"511\" data-attachment-id=\"37035\" data-permalink=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/image-70\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?fit=1722%2C860&amp;ssl=1\" data-orig-size=\"1722,860\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?fit=1024%2C511&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=1024%2C511&#038;ssl=1\" alt=\"\" class=\"wp-image-37035\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=1024%2C511&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=768%2C384&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=1536%2C767&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?resize=1200%2C599&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-39.png?w=1722&amp;ssl=1 1722w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><strong>Figura 1: <\/strong>Um feature store em tempo real tem muitos componentes e muitos deles poderiam, em teoria, ser constru\u00eddos internamente ou comprados como um produto \u201cpronto para uso\u201d. Curiosamente, muitos projetos open-source na verdade deram origem a empresas que fornecem vers\u00f5es gerenciadas deles (p. ex. Kafka\/Confluent, Spark\/Databricks, Cassandra\/Datastax).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na Nubank, usamos ferramentas open-source como Kubernetes, Kafka, Pinot, Spark e Flink para as partes centrais da arquitetura, onde nossos casos de uso n\u00e3o se distanciam <em>demais<\/em> daquilo para o qual as ferramentas foram pensadas. Tamb\u00e9m usamos servi\u00e7os totalmente gerenciados dos nossos provedores de nuvem, enquanto outros componentes (como nossa infraestrutura de monitoramento) s\u00e3o constru\u00eddos internamente.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A chave para decidir quais partes s\u00e3o \u201cconstru\u00eddas\u201d vs \u201ccompradas\u201d est\u00e1 no n\u00edvel de controle que voc\u00ea tem e em onde os padr\u00f5es de fluxo de trabalho da sua organiza\u00e7\u00e3o s\u00e3o diferentes demais dos casos de uso padr\u00e3o para os quais as ferramentas foram pensadas: nesses casos, voc\u00ea pode n\u00e3o ter outra op\u00e7\u00e3o a n\u00e3o ser construir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Os feature stores s\u00e3o <\/strong><strong><em>produtos <\/em><\/strong><strong>e devem ser gerenciados como tais&nbsp;<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Al\u00e9m de serem <em>sistemas<\/em>, os feature stores tamb\u00e9m s\u00e3o <em>produtos<\/em>. E produtos s\u00e3o entidades vivas que precisam ser<em> gerenciadas<\/em>, idealmente por um Product Manager (PM) dedicado. Tudo relacionado \u00e0 gest\u00e3o de produtos internos se aplica aqui.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muitas das pr\u00e1ticas comumente associadas \u00e0 gest\u00e3o de produtos internos se aplicam diretamente aos feature stores, como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Roadmap e prioriza\u00e7\u00e3o de tarefas:<\/strong> Quais tarefas e melhorias devem ser constru\u00eddas primeiro? Quais solicita\u00e7\u00f5es est\u00e3o fora do escopo da plataforma e por qu\u00ea?<\/li>\n\n\n\n<li><strong>Canais de suporte:<\/strong> Como os usu\u00e1rios obter\u00e3o ajuda quando encontrarem problemas ou tiverem d\u00favidas? Haver\u00e1 um rod\u00edzio de engenheiros para fornecer suporte? Como a equipe acompanhar\u00e1 o tempo que leva para responder \u00e0s perguntas?<\/li>\n\n\n\n<li><strong>Entrevistas\/pesquisas com usu\u00e1rios:<\/strong> Como a equipe de FS avaliar\u00e1 o qu\u00e3o satisfeitos os usu\u00e1rios est\u00e3o com o produto?&nbsp;<\/li>\n\n\n\n<li><strong>Gest\u00e3o de stakeholders:<\/strong> Como os stakeholders-chave se manter\u00e3o informados sobre as melhorias do produto? Quem deve estar envolvido na defini\u00e7\u00e3o do roadmap para que as prioridades da empresa sejam atendidas?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Observe que os feature stores diferem de outros produtos internos por naturalmente abrangerem m\u00faltiplas disciplinas. Resolver um problema de training-serving skew, por exemplo, frequentemente requer colabora\u00e7\u00e3o entre engenheiros de software, engenheiros de dados, cientistas de dados e especialistas de dom\u00ednio. Como resultado, operar um feature store com sucesso envolve coordenar a expertise de v\u00e1rias \u00e1reas da organiza\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Defina uma conven\u00e7\u00e3o de nomenclatura para as features<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Estabele\u00e7a uma conven\u00e7\u00e3o de nomenclatura para as features no feature store. As conven\u00e7\u00f5es de nomenclatura t\u00eam muito pouca desvantagem (especialmente quando s\u00e3o leves o suficiente para acomodar muitos casos de uso).<\/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\"><em>Use uma conven\u00e7\u00e3o de nomenclatura para as features: isso ajuda humanos e ferramentas de IA a navegar pelo c\u00f3digo.<\/em><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">As conven\u00e7\u00f5es de nomenclatura t\u00eam v\u00e1rias vantagens (assim como a <em>padroniza\u00e7\u00e3o<\/em> de modo geral):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Menor chance de erro humano:<\/strong> Nomes padronizados tornam tarefas como revis\u00f5es de c\u00f3digo, copiar e colar e edi\u00e7\u00f5es em massa mais seguras e f\u00e1ceis.<\/li>\n\n\n\n<li><strong>Menor carga cognitiva:<\/strong> Os usu\u00e1rios conseguem inferir o que uma feature representa sem precisar de documenta\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Maior descoberta de features:<\/strong> Os usu\u00e1rios s\u00e3o naturalmente expostos a outros itens do mesmo grupo ao explorar features.<\/li>\n\n\n\n<li><strong>Monitoramento e depura\u00e7\u00e3o mais simples:<\/strong> A maioria dos problemas de features (p. ex. drift, skew) afeta grupos inteiros de features, tornando os problemas mais f\u00e1ceis de identificar quando essas rela\u00e7\u00f5es est\u00e3o vis\u00edveis.<\/li>\n\n\n\n<li><strong>Refatora\u00e7\u00e3o e organiza\u00e7\u00e3o mais f\u00e1ceis: <\/strong>Os nomes dos grupos de features servem como namespaces naturais que podem ser reutilizados em pastas, dashboards e outros recursos de monitoramento.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Na verdade, n\u00e3o importa <em>qual<\/em> conven\u00e7\u00e3o de nomenclatura voc\u00ea escolha, desde que seja vers\u00e1til e permita alguma personaliza\u00e7\u00e3o. Se as regras se tornarem restritivas demais, os usu\u00e1rios ter\u00e3o que <em>dobrar<\/em> e <em>burlar <\/em>a conven\u00e7\u00e3o de nomenclatura at\u00e9 que ela n\u00e3o sirva mais a nenhum prop\u00f3sito.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alguns exemplos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>customer_cc_transaction_24h_count<\/li>\n\n\n\n<li>customer_app_behavior_2h_logins<\/li>\n\n\n\n<li>savings_account_5d_balance_daily_avg<\/li>\n\n\n\n<li>savings_account__current_balance (o bloco TIME_FRAME \u00e9 omitido, pois \u00e9 o saldo da conta poupan\u00e7a em um determinado momento).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Algumas recomenda\u00e7\u00f5es adicionais:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Evite usar m para representar meses, ou pode ser confundido com <em>minutos<\/em>. Se uma feature cobre os \u00faltimos 2 meses, prefira 60d.<\/li>\n\n\n\n<li>Use nomes \u00e0 prova de futuro que n\u00e3o dependam da estrutura da equipe, mas de conceitos de neg\u00f3cio. Os nomes das equipes refletem a estrutura organizacional e mudam com muita frequ\u00eancia, enquanto os conceitos de neg\u00f3cio tendem a permanecer est\u00e1veis ao longo do tempo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Versionar features \u00e9 dif\u00edcil<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Suponha que uma equipe precise de uma pequena varia\u00e7\u00e3o de uma feature em tempo real existente no Feature Store. A equipe de FS n\u00e3o pode simplesmente mudar a implementa\u00e7\u00e3o da feature, pois isso causaria training-serving skew para os modelos treinados na vers\u00e3o atual da feature. (Eles podem n\u00e3o querer retreinar seus modelos com a vers\u00e3o mais nova).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Portanto, \u00e9 preciso criar uma feature completamente nova ou uma nova <em>vers\u00e3o <\/em>de uma feature existente. A maioria dos feature stores suporta o <em>versionamento<\/em> de features mas, na pr\u00e1tica, isso significa que os clientes devem fornecer a <em>vers\u00e3o<\/em> da feature que desejam, al\u00e9m de seu nome.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No entanto, n\u00e3o \u00e9 t\u00e3o f\u00e1cil saber quais mudan\u00e7as s\u00e3o melhor descritas como uma nova vers\u00e3o de uma feature existente ou como uma feature completamente nova por si s\u00f3. \u00c9 preciso aplicar bom senso para decidir qual a\u00e7\u00e3o tomar em cada caso.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por exemplo: voc\u00ea tem uma feature chamada customer_cc_purchases__5d__count. Intuitivamente, \u00e9 o n\u00famero de compras com cart\u00e3o de cr\u00e9dito feitas por um determinado cliente nos \u00faltimos 5 dias. Agora vejamos alguns cen\u00e1rios do que pode acontecer em uma situa\u00e7\u00e3o do mundo real, na Figura 2:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"530\" data-attachment-id=\"37032\" data-permalink=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/image-69\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?fit=1726%2C894&amp;ssl=1\" data-orig-size=\"1726,894\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?fit=1024%2C530&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=1024%2C530&#038;ssl=1\" alt=\"\" class=\"wp-image-37032\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=1024%2C530&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=300%2C155&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=768%2C398&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=1536%2C796&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?resize=1200%2C622&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-38.png?w=1726&amp;ssl=1 1726w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><strong><em>Figura 2: <\/em><\/strong><em>Exemplos de situa\u00e7\u00f5es em que as equipes podem precisar criar uma nova vers\u00e3o de uma feature existente, criar uma totalmente diferente (dependendo da sem\u00e2ntica da mudan\u00e7a) ou, em alguns casos, n\u00e3o fazer nada.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">O desafio \u00e9 que o versionamento pode se tornar rapidamente dif\u00edcil de gerenciar. \u00c9 f\u00e1cil acabar com dezenas de vers\u00f5es de uma feature, o que significa um conjunto de features complexo e bagun\u00e7ado (diferentes equipes t\u00eam diferentes cronogramas de retreinamento e sempre h\u00e1 modelos que ainda est\u00e3o presos a vers\u00f5es anteriores de features e n\u00e3o podem ser retreinados no momento).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma poss\u00edvel sa\u00edda desse \u201cinferno de versionamento\u201d \u00e9 a equipe do feature store<em> assumir para si<\/em> a tarefa de migrar os modelos que usam vers\u00f5es antigas de features para que usem as novas. A situa\u00e7\u00e3o \u00e9 semelhante ao trabalho de atualizar aplica\u00e7\u00f5es para remover bibliotecas e depend\u00eancias antigas e sem suporte em favor de vers\u00f5es mais novas.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Os data contracts <\/strong>tamb\u00e9m podem ser usados para mitigar problemas de versionamento: os produtores de features definem as expectativas e os consumidores s\u00e3o avisados quando ocorrem mudan\u00e7as de esquema e sem\u00e2nticas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Use uma arquitetura de streaming quando puder e chamadas diretas quando precisar<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Como discutido na Parte 1, h\u00e1 duas formas principais de recuperar features para infer\u00eancia em tempo real. A primeira depende de chamadas diretas aos sistemas que det\u00eam os dados de origem, enquanto a segunda depende de uma plataforma de streaming intermedi\u00e1ria que recebe e processa eventos continuamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Essas abordagens podem ser resumidas como:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Features de \u201cchamada direta\u201d<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">As features s\u00e3o recuperadas por meio de chamadas HTTP aos microsservi\u00e7os que det\u00eam os bancos de dados transacionais \u201cfonte da verdade\u201d. Dependendo do caso de uso, isso pode incluir m\u00faltiplas chamadas e joins.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Features baseadas em streaming<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Em vez disso, as features s\u00e3o recuperadas de um store intermedi\u00e1rio: geralmente um banco de dados de curto prazo que escuta eventos de um barramento de eventos como o Kafka.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Como regra geral,<strong> recomendamos favorecer as features baseadas em streaming sempre que poss\u00edvel. <\/strong>H\u00e1 v\u00e1rias raz\u00f5es para isso:<strong>&nbsp;<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Melhor escalabilidade<\/strong>: As features de streaming escalam melhor, porque a ingest\u00e3o de dados \u00e9 desacoplada do consumo de dados. Um aumento na taxa de consumo de eventos n\u00e3o exige que os produtores tamb\u00e9m escalem.<\/li>\n\n\n\n<li><strong>Melhor isolamento de falhas e menor raio de impacto em caso de quedas:<\/strong> As arquiteturas ass\u00edncronas fornecem um \u201cisolamento de ambientes\u201d natural que reduz as falhas em cascata. Se o produtor ou o consumidor cair, isso n\u00e3o causa uma falha na outra ponta.<\/li>\n\n\n\n<li><strong>Menor carga nos servi\u00e7os transacionais<\/strong>: Em uma arquitetura de streaming, o feature store n\u00e3o consulta os servi\u00e7os \u201cfonte\u201d para buscar informa\u00e7\u00f5es. Esses servi\u00e7os geralmente t\u00eam outras responsabilidades al\u00e9m de fornecer dados para cargas de trabalho de ML, ent\u00e3o n\u00e3o se quer sobrecarreg\u00e1-los a ponto de derrub\u00e1-los, o que poderia causar interrup\u00e7\u00f5es de neg\u00f3cio em fluxos n\u00e3o relacionados.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 verdade que usar features de streaming requer uma \u201cplataforma\u201d de streaming, que \u00e9 a infraestrutura de mais baixo n\u00edvel que permite que os servi\u00e7os de origem transmitam eventos para um barramento de eventos ass\u00edncrono (geralmente o Apache Kafka). Essa \u00e9 uma plataforma complexa e cara por si s\u00f3, e \u00e9 um pr\u00e9-requisito para as features de streaming.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: A recupera\u00e7\u00e3o de features por chamada direta e por streaming tem diferentes modos de falha<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A recupera\u00e7\u00e3o de features falhar\u00e1 de tempos em tempos, seja usando estrat\u00e9gias de \u201cchamada direta\u201d ou baseadas em streaming. Alguns modos de falha s\u00e3o \u201cexpl\u00edcitos\u201d (ou seja, exce\u00e7\u00f5es e interrup\u00e7\u00f5es de fluxo), enquanto outros s\u00e3o \u201csilenciosos\u201d. Isso acontece porque eles apenas mudam a distribui\u00e7\u00e3o da feature, mas n\u00e3o disparam exce\u00e7\u00f5es expl\u00edcitas. (As falhas silenciosas s\u00e3o muito perigosas porque voc\u00ea corre o risco de tomar decis\u00f5es ruins por dias ou semanas antes que algu\u00e9m detecte que h\u00e1 um problema.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada estrat\u00e9gia falha de maneiras diferentes, e a natureza ass\u00edncrona da estrat\u00e9gia de streaming introduz alguns modos de falha diferentes aos quais voc\u00ea pode n\u00e3o estar acostumado. Voc\u00ea precisa entender como cada uma falha e quais s\u00e3o as implica\u00e7\u00f5es para o seu neg\u00f3cio.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>As features de \u201cchamada direta\u201d<\/strong> <strong>falham explicitamente se o microsservi\u00e7o propriet\u00e1rio estiver indispon\u00edvel por qualquer motivo:<\/strong> Isso inclui timeouts, quedas de servi\u00e7o e at\u00e9 sobrecarga do servi\u00e7o causada pela pr\u00f3pria busca da feature<em>.<\/em><\/li>\n\n\n\n<li><strong>As features de \u201cchamada direta\u201d falham silenciosamente se alguma l\u00f3gica for alterada no servi\u00e7o de origem:<\/strong> Muito frequentemente, os engenheiros que det\u00eam os servi\u00e7os n\u00e3o sabem que alguns endpoints s\u00e3o usados para \u201calimentar\u201d modelos em tempo real. \u00c0s vezes, eles fazem mudan\u00e7as para suportar algum caso de neg\u00f3cio e, sem perceber, mudam a distribui\u00e7\u00e3o dos dados solicitados, o que causa um problema de training-serving skew.<\/li>\n\n\n\n<li><strong>As features de streaming falham silenciosamente se os atrasos se tornarem grandes demais:<\/strong> Embora certo n\u00edvel de atraso seja esperado nas features de streaming, \u00e0s vezes esse atraso atinge n\u00edveis inaceit\u00e1veis devido a uma s\u00e9rie de fatores estruturais e tempor\u00e1rios. Isso significa que o modelo em tempo real consumir\u00e1 informa\u00e7\u00f5es desatualizadas, levando a training-serving skew e a uma degrada\u00e7\u00e3o de desempenho.<\/li>\n\n\n\n<li><strong>As features de streaming falham silenciosamente se os eventos chegarem fora de ordem:<\/strong> Dependendo do barramento de eventos usado para processar as features ingeridas, alguns eventos podem chegar fora de ordem, o que causar\u00e1 training-serving skew e degrada\u00e7\u00e3o de desempenho nos modelos.<\/li>\n\n\n\n<li><strong>As features de streaming falham silenciosamente se n\u00e3o houver paridade estrita entre a ingest\u00e3o por batch e por streaming:<\/strong> Muito frequentemente, os engenheiros fazem mudan\u00e7as na l\u00f3gica de ingest\u00e3o por batch mas esquecem de replicar as mudan\u00e7as na l\u00f3gica de ingest\u00e3o por streaming. Nesses casos, os dados de streaming \u201csair\u00e3o de sincronia\u201d com os dados de batch, o que causar\u00e1 training-serving skew. Deve haver testes de integra\u00e7\u00e3o para garantir que tudo o que \u00e9 ingerido em batch tamb\u00e9m seja ingerido na camada de streaming.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: O monitoramento do training-serving skew ainda \u00e9 necess\u00e1rio<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">O training-serving skew refere-se a diferen\u00e7as indesejadas entre como as features s\u00e3o geradas durante o tempo de <em>treinamento<\/em> e como s\u00e3o recuperadas no tempo de infer\u00eancia ou <em>serving<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na parte 1, argumentamos que os feature stores ajudam a mitigar esse problema, porque ambos os \u201ccaminhos\u201d de dados (batch e tempo real) s\u00e3o definidos em um \u00fanico lugar. Isso reduz a chance de tais desvios passarem despercebidos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No entanto, os feature stores n\u00e3o <strong>eliminam<\/strong> o problema. Ainda \u00e9 necess\u00e1rio <strong>monitorar<\/strong> o training-serving skew, pois ainda h\u00e1 muitas formas de os dados de batch e de tempo real sa\u00edrem de sincronia mesmo quando ambos os caminhos s\u00e3o definidos dentro da plataforma do feature store. Dois exemplos: (1) Os servi\u00e7os upstream podem mudar a sem\u00e2ntica de um campo no caminho de tempo real sem atualizar o equivalente em batch. (2) Pode haver alguns atrasos sistem\u00e1ticos no barramento de eventos, fazendo com que as features de streaming em tempo real <em>sempre<\/em> cheguem atrasadas em compara\u00e7\u00e3o com o instante em que deveriam ter estado dispon\u00edveis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mas como \u00e9, na pr\u00e1tica, o monitoramento do training-serving skew?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel detectar o training-serving skew gerando programaticamente a l\u00f3gica de extra\u00e7\u00e3o de features do tempo de treinamento (sem o target) para aqueles exemplos que foram pontuados em tempo real no passado recente e, em seguida, comparando-os com os valores reais usados no tempo de infer\u00eancia (obtidos dos logs de produ\u00e7\u00e3o). Uma representa\u00e7\u00e3o visual pode ser vista na Figura 3 abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"548\" data-attachment-id=\"37028\" data-permalink=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/image-68\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?fit=1718%2C920&amp;ssl=1\" data-orig-size=\"1718,920\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?fit=1024%2C548&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=1024%2C548&#038;ssl=1\" alt=\"\" class=\"wp-image-37028\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=1024%2C548&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=300%2C161&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=768%2C411&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=1536%2C823&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?resize=1200%2C643&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-37.png?w=1718&amp;ssl=1 1718w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><strong><em>Figura 3: <\/em><\/strong><em>Uma estrat\u00e9gia poss\u00edvel para monitorar o training-serving skew \u00e9 extrair features usando a l\u00f3gica de batch para inst\u00e2ncias pontuadas em tempo real e, em seguida, comparar os valores obtidos em cada \u201ccaminho\u201d e ver se eles coincidem. Isso pode ser executado de forma ad-hoc ou como um job di\u00e1rio recorrente.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Uma ressalva importante se aplica aqui: Esta estrat\u00e9gia de monitoramento pressup\u00f5e que as equipes sejam capazes de gerar <em>programaticamente<\/em> conjuntos de dados de treinamento para os modelos, a serem usados como refer\u00eancia de compara\u00e7\u00e3o em rela\u00e7\u00e3o aos logs em tempo real. Isso n\u00e3o apenas habilita o monitoramento do training-serving skew, mas \u00e9 <strong>crucial<\/strong> para garantir a reprodutibilidade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Li\u00e7\u00e3o: Projetos piloto s\u00e3o uma das formas mais eficazes de impulsionar a ado\u00e7\u00e3o<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ao introduzir um feature store em uma organiza\u00e7\u00e3o, pode ser que nem todas as equipes <em>queiram<\/em> us\u00e1-lo de imediato, pois <em>podem<\/em> perder alguma autonomia e controle sobre as features, perder poder relativo na organiza\u00e7\u00e3o, ter que despriorizar outros projetos, etc. Os fatores habituais que contribuem para a resist\u00eancia aos esfor\u00e7os de plataformiza\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>O melhor argumento para adotar um feature store \u00e9 uma vis\u00e3o clara dos benef\u00edcios. Mas se ainda houver resist\u00eancia das equipes cliente, projetos piloto a cargo da equipe de FS s\u00e3o um bom caminho a seguir.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A ado\u00e7\u00e3o do feature store deve ser incentivada com cenouras, n\u00e3o com chicotes (p. ex. <em>mandatos<\/em> de cima para baixo). No fim das contas, os benef\u00edcios de usar um feature store (maior impacto, mais robustez, menor TTM, etc.) devem estar claros para incentivar a ado\u00e7\u00e3o. Figura 4 resume v\u00e1rias raz\u00f5es comuns pelas quais as equipes hesitam em adotar feature stores, junto com poss\u00edveis estrat\u00e9gias de mitiga\u00e7\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"523\" data-attachment-id=\"37025\" data-permalink=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/image-67\/\" data-orig-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?fit=1722%2C880&amp;ssl=1\" data-orig-size=\"1722,880\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"image\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?fit=1024%2C523&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=1024%2C523&#038;ssl=1\" alt=\"\" class=\"wp-image-37025\" srcset=\"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=1024%2C523&amp;ssl=1 1024w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=300%2C153&amp;ssl=1 300w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=768%2C392&amp;ssl=1 768w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=1536%2C785&amp;ssl=1 1536w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?resize=1200%2C613&amp;ssl=1 1200w, https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/image-36.png?w=1722&amp;ssl=1 1722w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"has-text-align-center has-small-font-size wp-block-paragraph\"><strong><em>Figura 4: <\/em><\/strong><em>H\u00e1 muitas raz\u00f5es pelas quais as equipes resistem a adotar feature stores. A maioria delas pode ser mitigada se a equipe do Feature Store compartilhar parte da carga de integra\u00e7\u00e3o (ou seja, projetos piloto) e se houver documenta\u00e7\u00e3o clara e bons canais de suporte.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na Figura 4, vemos que uma \u00f3tima estrat\u00e9gia geral de mitiga\u00e7\u00e3o \u00e9 a equipe de FS criar as primeiras integra\u00e7\u00f5es para as equipes cliente, como <strong>projetos piloto<\/strong>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esses projetos reduzem enormemente o custo de ado\u00e7\u00e3o (do ponto de vista das equipes cliente) e \u00e9 uma estrat\u00e9gia &#8220;win-win\u201d: a equipe cliente recebe features constru\u00eddas \u201cde gra\u00e7a\u201d e a equipe de FS tem um projeto piloto para submeter a plataforma a testes de estresse e servir como exemplo do qual outras equipes podem aprender.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Conclus\u00e3o<\/strong><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Como afirmamos na parte 1, os feature stores exigem um investimento significativo em engenharia de plataforma, maturidade operacional e alinhamento organizacional. Mas para empresas que executam sistemas de ML em tempo real em escala, esse investimento desbloqueia benef\u00edcios substanciais de longo prazo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nossa experi\u00eancia na Nubank mostrou que a ado\u00e7\u00e3o bem-sucedida de um feature store n\u00e3o se trata apenas de escolhas tecnol\u00f3gicas. Tamb\u00e9m depende de pensamento de produto, de pr\u00e1ticas operacionais s\u00f3lidas e de uma compreens\u00e3o profunda de como os sistemas de ML do mundo real evoluem ao longo do tempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ao longo do caminho, algumas li\u00e7\u00f5es se destacam de forma consistente:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00c9 poss\u00edvel combinar v\u00e1rios tipos de componentes (open-source, de fornecedores, feitos em casa) para adaptar sua configura\u00e7\u00e3o \u00e0s suas necessidades espec\u00edficas.&nbsp;<\/li>\n\n\n\n<li>Os feature stores s\u00e3o produtos e devem ser gerenciados como tais.<\/li>\n\n\n\n<li>Definir e <em>fazer cumprir<\/em> uma conven\u00e7\u00e3o de nomenclatura reduz a carga cognitiva e facilita o versionamento.<\/li>\n\n\n\n<li>As features baseadas em streaming escalam melhor. Os feature stores tamb\u00e9m devem suportar a chamada direta para casos extremos.<\/li>\n\n\n\n<li>Os fluxos de trabalho s\u00edncronos e ass\u00edncronos s\u00e3o muito diferentes e falham de maneiras diferentes. Entenda como cada um falha e como afetam o seu neg\u00f3cio.<\/li>\n\n\n\n<li>Usar feature stores mitiga, mas nunca elimina completamente o training-serving skew. O monitoramento ainda \u00e9 necess\u00e1rio.<\/li>\n\n\n\n<li>Os projetos piloto s\u00e3o uma excelente t\u00e1tica geral para ajudar a <em>comprovar<\/em> o benef\u00edcio de iniciativas do tipo plataforma. Os feature stores n\u00e3o s\u00e3o exce\u00e7\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Esta \u00e9 a Parte 2 da nossa s\u00e9rie sobre Feature Stores para ML em Tempo Real na Nubank. Na Parte 3, reuniremos esses conceitos e exploraremos arquiteturas do mundo real que usamos na pr\u00e1tica.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ap\u00f3s anos operando feature stores em diversos fluxos de trabalho, aqui est\u00e3o algumas li\u00e7\u00f5es que moldaram nossa abordagem.<\/p>\n","protected":false},"author":178110103,"featured_media":37062,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_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_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[2502],"tags":[],"class_list":["post-37024","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-science-machine-learning-pt-br"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - 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\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Ap\u00f3s anos operando feature stores em diversos fluxos de trabalho, aqui est\u00e3o algumas li\u00e7\u00f5es que moldaram nossa abordagem.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-18T12:09:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-01T14:44:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1-1024x681.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"681\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\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=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/\"},\"author\":{\"name\":\"Nubank Editorial\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\"},\"headline\":\"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o\",\"datePublished\":\"2026-06-18T12:09:16+00:00\",\"dateModified\":\"2026-07-01T14:44:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/\"},\"wordCount\":3475,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1\",\"articleSection\":[\"Data science &amp; Machine Learning\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/\",\"url\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/\",\"name\":\"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1\",\"datePublished\":\"2026-06-18T12:09:16+00:00\",\"dateModified\":\"2026-07-01T14:44:43+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nu.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1\",\"width\":9023,\"height\":6005},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/building.nu.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/462f4f5a8d4ec3ccbc3d661dde00f0a4\",\"name\":\"Nubank Editorial\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\\\/pt-br\\\/author\\\/editorial\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - 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\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/","og_locale":"pt_BR","og_type":"article","og_title":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - Building Nubank","og_description":"Ap\u00f3s anos operando feature stores em diversos fluxos de trabalho, aqui est\u00e3o algumas li\u00e7\u00f5es que moldaram nossa abordagem.","og_url":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/","og_site_name":"Building Nubank","article_published_time":"2026-06-18T12:09:16+00:00","article_modified_time":"2026-07-01T14:44:43+00:00","og_image":[{"width":1024,"height":681,"url":"https:\/\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1-1024x681.jpg","type":"image\/jpeg"}],"author":"Nubank Editorial","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Nubank Editorial","Est. tempo de leitura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#article","isPartOf":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/"},"author":{"name":"Nubank Editorial","@id":"https:\/\/building.nu.com\/pt-br\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4"},"headline":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o","datePublished":"2026-06-18T12:09:16+00:00","dateModified":"2026-07-01T14:44:43+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/"},"wordCount":3475,"commentCount":0,"image":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1","articleSection":["Data science &amp; Machine Learning"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/","url":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/","name":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o - Building Nubank","isPartOf":{"@id":"https:\/\/building.nu.com\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#primaryimage"},"image":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1","datePublished":"2026-06-18T12:09:16+00:00","dateModified":"2026-07-01T14:44:43+00:00","author":{"@id":"https:\/\/building.nu.com\/pt-br\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4"},"breadcrumb":{"@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1","width":9023,"height":6005},{"@type":"BreadcrumbList","@id":"https:\/\/building.nu.com\/pt-br\/feature-stores-para-ml-em-tempo-real-parte-2-licoes-aprendidas-em-producao\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nu.com\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Feature stores para ML em tempo real: Parte 2 \u2013 Li\u00e7\u00f5es aprendidas em produ\u00e7\u00e3o"}]},{"@type":"WebSite","@id":"https:\/\/building.nu.com\/pt-br\/#website","url":"https:\/\/building.nu.com\/pt-br\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nu.com\/pt-br\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/building.nu.com\/pt-br\/#\/schema\/person\/462f4f5a8d4ec3ccbc3d661dde00f0a4","name":"Nubank Editorial","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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\/pt-br\/author\/editorial\/"}]}},"jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-9Da","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nu.com\/wp-content\/uploads\/2026\/06\/Nubank_Photoshoot_Brasil_-Fotografia_Edu-Vieira-21-1.jpg?fit=9023%2C6005&ssl=1","_links":{"self":[{"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/posts\/37024","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/users\/178110103"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/comments?post=37024"}],"version-history":[{"count":24,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/posts\/37024\/revisions"}],"predecessor-version":[{"id":37358,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/posts\/37024\/revisions\/37358"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/media\/37062"}],"wp:attachment":[{"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/media?parent=37024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/categories?post=37024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nu.com\/pt-br\/wp-json\/wp\/v2\/tags?post=37024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}