{"id":25899,"date":"2023-06-27T19:55:33","date_gmt":"2023-06-27T19:55:33","guid":{"rendered":"https:\/\/building.nubank.com\/dealing-with-train-serve-skew-in-real-time-ml-models-a-short-guide\/"},"modified":"2024-03-05T17:55:40","modified_gmt":"2024-03-05T17:55:40","slug":"como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia","status":"publish","type":"post","link":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/","title":{"rendered":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia"},"content":{"rendered":"\n<p>Escrito por <a href=\"https:\/\/building.nubank.com\/authors\/felipe-almeida-data-scientist\/\">Felipe Almeida<br><\/a>Revisado por <a href=\"https:\/\/building.nubank.com\/authors\/tiagomagalhaes\/\">Tiago Magalh\u00e3es<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<p>Nesta postagem explicaremos <em>o que \u00e9<\/em> &#8220;treinamento e exibi\u00e7\u00e3o&#8221; e <em>por que<\/em> precisamos entender isso quando trabalhamos com modelos de aprendizado de m\u00e1quina em tempo real.&nbsp;<\/p>\n\n\n\n<p>Daremos exemplos de como monitorar e depurar incompatibilidades de treinamento e exibi\u00e7\u00e3o, al\u00e9m das li\u00e7\u00f5es que aprendemos ao longo dos anos aplicando aprendizado de m\u00e1quina (ML) em tempo real a problemas corporativos no Nubank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O que \u00e9 distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o?<\/h2>\n\n\n\n<p>Para entender a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o \u00e9 preciso lembrar que modelos de aprendizado de m\u00e1quina (ML) em tempo real s\u00e3o treinados em um <em>ambiente diferente<\/em> daquele no qual s\u00e3o usados (exibidos). Al\u00e9m disso, esses modelos normalmente s\u00e3o treinados e produzidos por pessoas diferentes.<\/p>\n\n\n\n<p>Normalmente, o treino \u00e9 feito em um ambiente <em>anal\u00edtico<\/em> (cadernos interativos ou <em>datalakes<\/em>, por exemplo), mas a exibi\u00e7\u00e3o acontece no ambiente de produ\u00e7\u00e3o (microsservi\u00e7os, dispositivos perif\u00e9ricos etc.). Isso \u00e9 mostrado na Figura 1 abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/k4wkqKxFdaggw1wvroNO3fS5eaNHjR-rlF1H2fu1qC0LMxmUhk8z-_RzoKjC0E1oy9c9vpD7kfMdePTrp_rrU_X3m3e9GJnUVtbT1yEZpvQ70ip0EYuhRoVdbTQe2SdJA13rqrTDpTHyeuhqsOLGDQ\" alt=\"Diagrama\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 1: <\/em><\/strong><em>O treinamento de modelos de aprendizado de m\u00e1quina (ML) normalmente acontece em um ambiente anal\u00edtico (tabelas de bases de dados, cadernos etc.), enquanto o uso de modelos ocorre no ambiente de produ\u00e7\u00e3o (servi\u00e7os em tempo real, dispositivos perif\u00e9ricos, APIs etc.). Diferen\u00e7as inesperadas entre eles causam a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o.<\/em><\/p>\n\n\n\n<p>Tudo no Aprendizado de M\u00e1quina (ML) depende de uma premissa muito importante: o treinamento definido precisa refletir os dados reais que o modelo <em>pontuar\u00e1<\/em> na hora da exibi\u00e7\u00e3o.<\/p>\n\n\n\n<p><strong>Distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o<\/strong> refere-se \u00e0 situa\u00e7\u00e3o em que a <em>simetria<\/em> entre os ambientes de treinamento e exibi\u00e7\u00e3o est\u00e1 quebrada devido a problemas operacionais ou a uma l\u00f3gica incorreta. Em outras palavras, temos <em>distor\u00e7\u00e3o<\/em> quando h\u00e1 diferen\u00e7as entre o jeito com que o modelo foi <em>treinado<\/em> e o jeito com que ele \u00e9 <em>exibido<\/em>.&nbsp;<\/p>\n\n\n\n<p>Distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o refere-se \u00e0s diferen\u00e7as entre o ambiente em que um modelo \u00e9 treinado e onde \u00e9 exibido (ou usado).<\/p>\n\n\n\n<p>Alguns exemplos de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o s\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Filtros de data diferentes: <\/strong>um cientista de dados codificou um recurso que conta a quantidade de compras que um cliente fez nos \u00faltimos 30 dias. A implementa\u00e7\u00e3o do tempo de exibi\u00e7\u00e3o foi codificado incorretamente: apenas os \u00faltimos 15 dias est\u00e3o sendo contados.<\/li>\n\n\n\n<li><strong>Null x Zeros: <\/strong>na hora do treinamento, escolhemos usar NULL para representar quando um recurso est\u00e1 ausente para algum cliente. Entretanto, os sistemas em tempo real usam 0 (zero) para sinalizar dados ausentes.<\/li>\n\n\n\n<li><strong>Fontes de dados diferentes:<\/strong> na hora do treinamento, montamos um recurso categ\u00f3rico usando dados de imagem instant\u00e2nea est\u00e1tica obtidos de um fornecedor de dados terceirizado. Na hora da exibi\u00e7\u00e3o, recuperamos valores do recurso de um API e notamos que n\u00e3o s\u00e3o exatamente iguais.<\/li>\n<\/ul>\n\n\n\n<p>\u00c9 poss\u00edvel acessar mais exemplos na se\u00e7\u00e3o &#8220;<a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#understand-the-type-of-mismatch\"><strong>Entenda o tipo de incompatibilidade<\/strong><\/a>&#8221; deste artigo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que se importar com a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o?<\/h2>\n\n\n\n<p>Precisamos consertar (ou ao menos estar cientes) da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o porque isso pode ter impactos <em>severos<\/em> nas previs\u00f5es de um modelo e, consequentemente, nos processos corporativos que dependem delas.<\/p>\n\n\n\n<p>Um exemplo claro est\u00e1 na concess\u00e3o de cr\u00e9dito: os bancos normalmente usam modelos de risco de cr\u00e9dito em tempo real para decidir quem pode receber um empr\u00e9stimo. Distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o n\u00e3o detectadas podem fazer com que clientes de alto risco recebam empr\u00e9stimos quando n\u00e3o deveriam, causando perdas financeiras aos bancos, sem falar na poss\u00edvel falha sist\u00eamica do sistema do banco.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Por que acontecem distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o?<\/h2>\n\n\n\n<p>O principal motivo da ocorr\u00eancia de distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o \u00e9 <strong>falha de comunica\u00e7\u00e3o<\/strong> durante a fase de pr\u00e9-instala\u00e7\u00e3o de um modelo.&nbsp;<\/p>\n\n\n\n<p>Modelos em tempo real normalmente s\u00e3o treinados e instalados por <em>pessoas diferentes<\/em> (cientistas de dados e engenheiros de aprendizado de m\u00e1quina, respectivamente), ent\u00e3o erros de comunica\u00e7\u00e3o s\u00e3o frequentes, e o que \u00e9 implementado, ou <em>exibido<\/em>, n\u00e3o \u00e9 o mesmo que foi treinado.<\/p>\n\n\n\n<p><em>A distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o \u00e9 causada por falha de comunica\u00e7\u00e3o entre as equipes de modelagem e engenharia ou por mudan\u00e7as inesperadas em servi\u00e7os usados para buscar recursos.<\/em><\/p>\n\n\n\n<p>Por\u00e9m, mesmo <em>ap\u00f3s<\/em> um modelo estar em opera\u00e7\u00e3o h\u00e1 algum tempo, novas incompatibilidades de treinamento e exibi\u00e7\u00e3o podem aparecer. Isso se deve a mudan\u00e7as ou erros nas fases iniciais quando buscar recursos em tempo real.&nbsp;<\/p>\n\n\n\n<p>Empresas modernas operam em uma <em>arquitetura de microsservi\u00e7os<\/em>, ent\u00e3o modelos de tempo real precisam de informa\u00e7\u00f5es de outros servi\u00e7os, possu\u00eddos por outras equipes, e esses servi\u00e7os podem mudar ou quebrar sem aviso, afetando os recursos usados no modelo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quais tipos de distor\u00e7\u00e3o existem?<\/h2>\n\n\n\n<p>Na nossa experi\u00eancia, h\u00e1 dois tipos diferentes de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, dependendo do est\u00e1gio do ciclo de vida em que acontecem.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Distor\u00e7\u00f5es <strong>pr\u00e9-instala\u00e7\u00e3o<\/strong> acontecem quando h\u00e1 erros assim que o modelo \u00e9 enviado para a produ\u00e7\u00e3o;<\/li>\n\n\n\n<li>Distor\u00e7\u00f5es <strong>p\u00f3s-instala\u00e7\u00e3o<\/strong> podem ocorrer a qualquer momento durante a opera\u00e7\u00e3o do modelo devido a mudan\u00e7as inesperadas ou defeitos em servi\u00e7os nas fases iniciais onde os recursos s\u00e3o buscados.<\/li>\n<\/ul>\n\n\n\n<p>Isso pode ser visto abaixo, na Figura 2:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/2vH9aWx0ekfZNabquCitk5XeXAaZtpr4ZsjXFe_rB87oOkgs62gkxXmIHY8xyCs3BVl9SCGMEp_wq0fUVbgFhuUfPzKCjkaCWbupMtTqGLgsVM9efgauR9-ETDoAdKgM0HkY8LZvKusnFeaBtaYQHA\" alt=\"Diagrama\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 2: Ciclo de vida do Modelo de Aprendizado de M\u00e1quina (ML) Simplificado<\/em><\/strong><em> A primeira instala\u00e7\u00e3o precisa de uma verifica\u00e7\u00e3o de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o para garantir que os recursos do modelo estejam implementados corretamente. Ap\u00f3s ser devidamente instalado, <\/em><strong><em>ainda<\/em><\/strong><em> precisamos monitorar, detectar e possivelmente consertar quaisquer incompatibilidades \u00e0 medida que aparecerem.<\/em><\/p>\n\n\n\n<p>Nas se\u00e7\u00f5es a seguir, veremos algumas estrat\u00e9gias para evitar ou minimizar os efeitos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o nos nossos modelos em tempo real no Nubank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Evitando e minimizando distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o<\/h2>\n\n\n\n<p>A distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o nunca ser\u00e1 totalmente eliminada. Sempre haver\u00e1 casos em que um recurso em tempo real quebrar\u00e1 devido a defeitos tempor\u00e1rios em servi\u00e7os de apoio, por exemplo. Alguns casos de recursos ruins aqui e ali n\u00e3o devem causar problemas, especialmente se voc\u00ea usar classificadores robustos como modelos baseados em \u00e1rvore.<\/p>\n\n\n\n<p>Os casos dos quais queremos nos proteger s\u00e3o aqueles em que <em>grande parte<\/em> das previs\u00f5es do modelo \u00e9 afetada por recursos ruins, pois eles podem ter impactos <em>severos<\/em> em processos corporativos que usem previs\u00f5es de modelos.<\/p>\n\n\n\n<p>Para evitar ou minimizar a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, voc\u00ea precisa primeiramente coletar dados de recurso de ambos os trajetos de dados (treinamento e exibi\u00e7\u00e3o). Cobrimos este artigo em <a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#prerequisites-datacollection\"><strong>Pr\u00e9-requisitos: Coleta de dados<\/strong>.<\/a><\/p>\n\n\n\n<p>Quando os dados de recurso estiverem sendo coletados em ambos os trajetos de dados, a tarefa de resolver a distor\u00e7\u00e3o \u00e9 reduzida a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>comparar e monitorar valores do recurso;<\/li>\n\n\n\n<li>detectar incompatibilidades;&nbsp;<\/li>\n\n\n\n<li>depurar e resolver problemas quando necess\u00e1rio.<\/li>\n<\/ul>\n\n\n\n<p>Em uma arquitetura de <em>microsservi\u00e7os<\/em>, modelos em tempo real s\u00e3o apenas mais um servi\u00e7o. Os modelos dependem de servi\u00e7os de etapas iniciais para dados de recurso, mas \u00e9 imposs\u00edvel controlar o que as outras equipes far\u00e3o, <em>e nem dever\u00edamos<\/em>, pois isso prejudicaria a autonomia e agilidade delas.&nbsp;<\/p>\n\n\n\n<p>\u00c9 por isso que acreditamos que <em>monitorar \u00e9 o \u00fanico jeito dimension\u00e1vel de se defender<\/em> contra distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o para que voc\u00ea possa detectar e reagir aos problemas sem virar um gargalo para as outras equipes.<\/p>\n\n\n\n<p><em>Usar um armazenamento de recursos tamb\u00e9m ajuda a evitar distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o. Armazenamentos de recursos costumam ser operados por uma equipe centralizada, liberando a equipe de modelagem de precisar cuidar do problema. <\/em><a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#If-you-can-use-a-feature-store\"><em>Se puder, <\/em><strong><em>use um armazenamento de recursos.<\/em><\/strong><\/a><\/p>\n\n\n\n<p>Nas pr\u00f3ximas subse\u00e7\u00f5es, veremos a abordagem completa de como lidar com distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o no Nubank: falaremos sobre os <a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#prerequisites-datacollection\"><strong>pr\u00e9-requisitos<\/strong><\/a> (certificando-nos de que voc\u00ea esteja coletando os dados necess\u00e1rios), e ent\u00e3o cobriremos o que e como <a href=\"http:\/\/monitoring-train-serve-mismatches\"><strong>monitorar<\/strong><\/a> a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, como interpret\u00e1-la para detectar incompatibilidades e, por fim, cobriremos algumas estrat\u00e9gias para de fato <a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#debugging-and-fixing-problems\"><strong>depurar e consertar<\/strong><\/a> os problemas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9-requisitos: coleta de dados<\/h2>\n\n\n\n<p>Para comparar dados dos dois trajetos de dados diferentes, primeiro voc\u00ea precisa se certificar de que est\u00e1 <em>coletando<\/em> aqueles dados.<\/p>\n\n\n\n<p>Isso significa que voc\u00ea precisa de <strong>(a)<\/strong> uma forma program\u00e1tica de gerar dados de treinamento sob demanda e <strong>(b)<\/strong> gravar ou registrar recursos usados para cada execu\u00e7\u00e3o em tempo real do modelo.<\/p>\n\n\n\n<p>Para resolver a quest\u00e3o <strong>(a)<\/strong>, voc\u00ea precisa de uma forma program\u00e1tica de gerar dados de treinamento para datas arbitr\u00e1rias que seja poss\u00edvel repetir. Voc\u00ea precisa de algum tipo de fun\u00e7\u00e3o ou rotina que pegue um par de dados e produza os dados de treinamento para aquele per\u00edodo. Veja a Figura 3 para ter um exemplo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/YJ9UlD1NsLYnBlvZn7cEWqxNohl8TdUJ5-VLA82Wxs834s5Cyz3Gh9_arzqT-W9DJ4Udp773lUf56SaZOkCs_5roz5HZ718_HGZHqPIsw_OuGDeuYe2eYQBklCM4mbHq09i-vJdZIGGVc9J8k9E7cw\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 3:<\/em><\/strong><em> <\/em><strong>Gera\u00e7\u00e3o de dados de treinamento program\u00e1ticos<\/strong> para um determinado per\u00edodo \u00e9 essencial para conseguir lidar com a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, por que <em>\u00e9 a eles que compararemos<\/em> os dados de exibi\u00e7\u00e3o. Observe que n\u00e3o precisamos incluir a vari\u00e1vel-alvo nos dados, apenas os recursos.<\/p>\n\n\n\n<p>Na quest\u00e3o <strong>(b)<\/strong> (gravar dados de recurso da execu\u00e7\u00e3o em tempo real), voc\u00ea precisa de algum jeito de registrar o identificador de pontua\u00e7\u00e3o (ID) e os recursos usados no momento da exibi\u00e7\u00e3o. Isso pode ser feito facilmente salvando dados de recurso em uma base de dados ou a um servi\u00e7o de registro como o Splunk.<\/p>\n\n\n\n<p>Quando as quest\u00f5es (a) e (b) tiverem resolvidas, detectar a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o \u00e9 muito mais f\u00e1cil, basta usar <em>join<\/em> nos recursos para uma determinada inst\u00e2ncia e compar\u00e1-los. Isso \u00e9 mostrado na Figura 4, na pr\u00f3xima se\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitorando incompatibilidades de treinamento e exibi\u00e7\u00e3o<\/h2>\n\n\n\n<p>Conforme explicado acima, voc\u00ea precisa tanto de dados de treinamento quanto de exibi\u00e7\u00e3o para monitorar distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o. Quando voc\u00ea tiver uma forma robusta de ger\u00e1-los continuamente, \u00e9 uma simples quest\u00e3o de usar qualquer ferramenta de painel para visualizar os dados.<\/p>\n\n\n\n<p>O monitoramento pode ser usado tanto no est\u00e1gio de pr\u00e9-instala\u00e7\u00e3o quanto de p\u00f3s-instala\u00e7\u00e3o. \u00c9 poss\u00edvel monitorar um modelo antes de ser usado tendo uma instala\u00e7\u00e3o do chamado <em>modo sombra<\/em>: instalar um modelo em tempo real, mas ignorar suas previs\u00f5es.<\/p>\n\n\n\n<p><em>\u00c9 poss\u00edvel monitorar recursos em uso por um modelo em tempo real antes mesmo da produ\u00e7\u00e3o: instalar o modelo no <\/em><strong><em>modo sombra<\/em><\/strong><em> \u00e9 um padr\u00e3o comum.<\/em><\/p>\n\n\n\n<p>Voc\u00ea pode gerar dados de monitoramento assim: pegue dados do momento do treinamento e do momento de exibi\u00e7\u00e3o e aplique <em>join<\/em>, usando o ID da inst\u00e2ncia como a chave do <em>join<\/em>. Isso \u00e9 mostrado abaixo na Figura 4:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Ir3Wla_jEDDSloXwd9XxO9K79pdBskGQmbl3Ss1OkAPC3Ki11DzlDcsRwb2mo2-EsZrN9rS8IbXHP5BKQFjuWjHqK7oI_kMDkRwvQbtHR6IsHACmGTEzvMRcByxtTGlD7TqyLdMsMKu-VDRVNaO0HQ\" alt=\"Diagrama, Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 4:<\/em><\/strong><em> <\/em><strong><em>Montando um conjunto de dados de monitoramento a partir de dados de treinamento e exibi\u00e7\u00e3o<\/em><\/strong><em>: quando tiver dados de ambos os trajetos, voc\u00ea pode simplesmente agrup\u00e1-los e montar um conjunto de dados tempor\u00e1rio com ambos os valores para cada recurso. No exemplo mostrado, temos uma <\/em><strong><em>incompatibilidade para o recurso x<\/em><\/strong><em>: seu valor deveria ser 5.0, mas recebemos 10.0.<\/em><\/p>\n\n\n\n<p>Quando tiver um conjunto de dados de monitoramento como o mostrado na Figura 4, voc\u00ea pode avan\u00e7ar para o monitoramento de fato, como explicamos abaixo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos de monitoramento de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o<\/h2>\n\n\n\n<p>S\u00f3 precisamos do chamado &#8220;conjunto de dados de monitoramento&#8221; para gerar todos os mapas de monitoramento mostrados nas pr\u00f3ximas se\u00e7\u00f5es.<\/p>\n\n\n\n<p>Apesar de poder haver outras formas de visualizar a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, cobriremos as que achamos mais importantes e usamos no nosso trabalho cotidiano.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Porcentagem de correspond\u00eancias exatas;<\/li>\n\n\n\n<li>diferen\u00e7as m\u00e9dias em valores de recursos;<\/li>\n\n\n\n<li>diferen\u00e7as percentuais em valores de recursos.<\/li>\n<\/ul>\n\n\n\n<p>Cada um desses itens cumpre uma fun\u00e7\u00e3o em ajudar os profissionais a manterem os sistemas de aprendizado de m\u00e1quina (ML) saud\u00e1veis. Explicaremos cada um deles em detalhes nas pr\u00f3ximas subse\u00e7\u00f5es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Porcentagem de correspond\u00eancias exatas por dia e por recurso<\/h2>\n\n\n\n<p>Voc\u00ea pode monitorar a distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o mapeando a porcentagem de correspond\u00eancias exatas, por recurso e ao longo do tempo.<\/p>\n\n\n\n<p>Na Figura 5 abaixo, podemos ver um desses mapas para o &#8220;Recurso X&#8221;. No eixo Y, temos as porcentagens de correspond\u00eancias exatas, e, no eixo X, a data.&nbsp;<\/p>\n\n\n\n<p>\u00c9 f\u00e1cil ver que t\u00ednhamos cerca de 90% de taxa de correspond\u00eancia no dia 2 de janeiro de 2022 e cerca de 60% no dia 5 de janeiro de 2022. Isso significa que 10% e 40%, respectivamente, das inst\u00e2ncias pontuadas tinham valores errados para o Recurso X no momento da exibi\u00e7\u00e3o.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/lY4rXTEKdXdI7nUIwteXLZ_cpJJY8WZL2cRCG46nR4kdoG1ao9Na38bOZ99iPa-t_ntTFEZw8PcqtLcb19IzrMhReXyGs777srzbPBAcyDMntls6Wh4BG6eOSQxQc81j1acYjPoBgWv4mF8TfVRiig\" alt=\"Diagrama\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 5:<\/em><\/strong><em> <\/em><strong><em>Mapeando a porcentagem de correspond\u00eancias exatas para um recurso por dia<\/em><\/strong><em>. \u00c9 muito f\u00e1cil ver que havia um pequeno problema em 02\/01\/2022 e um <\/em><strong><em>grande<\/em><\/strong><em> problema em 5\/1\/2022. Um painel de monitoramento deve incluir diversos mapas como este, um para cada recurso em um modelo.<\/em><\/p>\n\n\n\n<p>Repare que este mapa n\u00e3o d\u00e1 informa\u00e7\u00f5es sobre a <em>magnitude<\/em> das diferen\u00e7as. Continue lendo para saber o que fazer em seguida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Diferen\u00e7a m\u00e9dia entre treinamento e exibi\u00e7\u00e3o por recurso<\/h2>\n\n\n\n<p>Monitorar a porcentagem de correspond\u00eancias exatas (como acima) \u00e9 um bom come\u00e7o, mas n\u00e3o \u00e9 suficiente. Voc\u00ea precisa entender a magnitude da incompatibilidade para saber a seriedade dela e se precisa investigar mais.<\/p>\n\n\n\n<p>Voc\u00ea pode mapear a diferen\u00e7a entre os valores dos recursos no momento do treinamento e no momento da exibi\u00e7\u00e3o, como \u00e9 poss\u00edvel ver no exemplo abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/qtCJ9uWu46ayJf-G7BapszpbU73z5xFV9Q9es5M4y2cA1TV_3-uSihaHQwnr_RFKOge7_ZfL4CCQDbQRAsRz-8P5_fkYViu_9xQTcVSQx3z-aCeEjhfguje_Vwc7Fcw1WLQqfcA42pQ_fCkD_z09rw\" alt=\"Gr\u00e1fico, Gr\u00e1fico de linhas\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 6:<\/em><\/strong><em> <\/em><strong><em>Mapear a diferen\u00e7a m\u00e9dia num\u00e9rica entre os valores no momento do treinamento e no momento de exibi\u00e7\u00e3o para um determinado recurso<\/em><\/strong><em>. Podemos ver que a magnitude da distor\u00e7\u00e3o no dia 2\/1\/2022 \u00e9 muito maior que no dia 5\/1\/2022. A magnitude da distor\u00e7\u00e3o (junto da porcentagem de correspond\u00eancia exata, conforme visto na Figura 5) informar\u00e1 voc\u00ea sobre a urg\u00eancia do problema.<\/em><\/p>\n\n\n\n<p>Olhar as m\u00e9dias das diferen\u00e7as, em vez das porcentagens de correspond\u00eancia simples, \u00e9 um grande passo adiante, mas as m\u00e9dias podem enganar e levar voc\u00ea a conclus\u00f5es equivocadas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Percentuais das diferen\u00e7as entre treinamento e exibi\u00e7\u00e3o por recurso<\/h2>\n\n\n\n<p>Se j\u00e1 estiver monitorando a taxa de correspond\u00eancias exatas e a magnitude m\u00e9dia, voc\u00ea tem um bom n\u00edvel de prote\u00e7\u00e3o contra distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o. Mas <em>discrep\u00e2ncias<\/em> e outros valores extremos podem ter enganado voc\u00ea, j\u00e1 que possuem um grande impacto nas m\u00e9dias: uma ou duas discrep\u00e2ncias podem afetar muito o valor m\u00e9dio.<\/p>\n\n\n\n<p>Entender o comportamento dos recursos nos extremos (P99) \u00e9 importante para casos em que h\u00e1 interesse apenas nos maiores valores das previs\u00f5es, como em concess\u00f5es de cr\u00e9dito, detec\u00e7\u00e3o de fraudes etc.<\/p>\n\n\n\n<p>Como prote\u00e7\u00e3o contra as discrep\u00e2ncias, podemos monitorar as diferen\u00e7as percentuais entre valores de recurso no momento do treinamento e no momento de exibi\u00e7\u00e3o, como visto na Figura 7 abaixo. A distor\u00e7\u00e3o no dia 2\/1\/2022 parece ter sido unicamente nos percentuais maiores: dificilmente teve impacto em percentuais menores. A distor\u00e7\u00e3o no dia 5\/1\/2022 afetou todos os percentuais de modo relativamente igual.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/OsCz8UeemP41ZGcZzzjH57DpGtPqBf0tIWEXMFDvvr2yG_SLyjPQ5Gyrr9xN3AyRVK9hC2xB6eqUFdiOJuLi0uv7Ce3gBQ3Pe085wAR6rDPDk4-NLO0sjk3vpoxtV0MWBRXZBF96AdufU8baTX6nzA\" alt=\"Gr\u00e1fico, Gr\u00e1fico de linhas\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 7:<\/em><\/strong><em> <\/em><strong><em>Mapeando os percentuais das diferen\u00e7as num\u00e9ricas entre os valores no momento do treinamento e no momento de exibi\u00e7\u00e3o para um determinado recurso<\/em><\/strong><em>. Incompatibilidades afetando apenas os maiores percentuais (como em 2\/1\/2022) podem indicar algumas pontua\u00e7\u00f5es ruins devido a problemas tempor\u00e1rios, mas n\u00e3o problemas propagados. Incompatibilidades que afetam todos os percentuais (como em 5\/1\/2022) normalmente indicam distor\u00e7\u00e3o baseada em l\u00f3gica e podem ser mais s\u00e9rias.<\/em><\/p>\n\n\n\n<p>Vimos como <em>monitorar<\/em> adequadamente as incompatibilidades de recurso; agora veremos como <em>interpretar<\/em> esses mapas para detectar quando tivermos distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Detectando quando a distor\u00e7\u00e3o ocorre<\/h2>\n\n\n\n<p>Na nossa experi\u00eancia, a maioria das incompatibilidades p\u00f3s-instala\u00e7\u00e3o acontecem devido a mudan\u00e7as nos est\u00e1gios iniciais de servi\u00e7os dos quais buscamos recursos em tempo real. Isso presume que voc\u00ea esteja trabalhando em uma arquitetura de microsservi\u00e7os.<\/p>\n\n\n\n<p>A distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o p\u00f3s-instala\u00e7\u00e3o normalmente aparece como uma mudan\u00e7a <em>s\u00fabita<\/em> e <em>constante<\/em> nos mapas de monitoramento. Veja um exemplo na Figura 8.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/NVdUDbq0Zvk3HDLdxUONMcPHz5OMUN6Yi2uQ0tE0fAc0j_ln-l09qmX_jWaf2iGgtukM-zy6UpwUKklVeep-CZmMxa87g-NH0I7ZYY-qFJ9sLlS7INj7VdNSbgwYjxqiXxIgHwwaGlATMG-XKzamjg\" alt=\"Gr\u00e1fico, Gr\u00e1fico de linhas\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 8:<\/em><\/strong><em> Mapa de amostragem mostrando um recurso &#8220;quebrado&#8221;. Uma queda s\u00fabita que n\u00e3o volta aos n\u00edveis normais \u00e9 um sinal claro de que algo fundamental mudou.<\/em><\/p>\n\n\n\n<p>E como detectamos distor\u00e7\u00e3o pr\u00e9-instala\u00e7\u00e3o? Precisamos monitorar apenas os dados de uma instala\u00e7\u00e3o em modo sombra, conforme explicado na se\u00e7\u00e3o<a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#monitoring-train-serve-mismatches\"> <strong>Monitorando incompatibilidades de treinamento e exibi\u00e7\u00e3o.<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entenda a magnitude da incompatibilidade<\/h2>\n\n\n\n<p>Para saber a seriedade das incompatibilidades, temos que ver os mapas que mostram as <em>diferen\u00e7as<\/em> nos valores do recurso. Voc\u00ea provavelmente n\u00e3o se dar\u00e1 ao trabalho de investigar cada incompatibilidade, especialmente quando a magnitude for pequena, j\u00e1 que provavelmente teria pouco impacto na previs\u00e3o do modelo e, por extens\u00e3o, no neg\u00f3cio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Considere o impacto da incompatibilidade do recurso no neg\u00f3cio<\/h2>\n\n\n\n<p>Mesmo se voc\u00ea tiver um recurso com muita distor\u00e7\u00e3o, h\u00e1 casos em que voc\u00ea preferir\u00e1 n\u00e3o investig\u00e1-la se o impacto no neg\u00f3cio for pequeno. Isso pode acontecer, por exemplo, em casos em que a distor\u00e7\u00e3o est\u00e1 presente em um <em>recurso pouco importante<\/em>, ent\u00e3o n\u00e3o est\u00e1 causando nenhum impacto real no neg\u00f3cio.<\/p>\n\n\n\n<p>Podemos pensar em duas formas de medir o impacto de recursos distorcidos no neg\u00f3cio:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Monitorar a distor\u00e7\u00e3o tamb\u00e9m na <strong>previs\u00e3o<\/strong>, para ver se as distor\u00e7\u00f5es de recurso tamb\u00e9m causaram uma distor\u00e7\u00e3o na previs\u00e3o do modelo. Por exemplo: as distor\u00e7\u00f5es de recurso deixam a previs\u00e3o do modelo equivocadamente <em>maior<\/em> ou <em>menor<\/em> do que deveria ser?<\/li>\n\n\n\n<li>Monitore <strong>decis\u00f5es corporativas<\/strong> tomadas usando o modelo. Isso \u00e9 o que chamamos de <a href=\"https:\/\/building.nubank.com\/pt-br\/machine-learning-model-monitoring-9-tips-from-the-trenches\/#policy-decision-layers-require-additional-monitoring\">monitoramento da camada de decis\u00e3o<\/a>. Se isso indicar um problema nos mesmos dias em que voc\u00ea teve distor\u00e7\u00e3o, \u00e9 prov\u00e1vel que a distor\u00e7\u00e3o esteja impactando decis\u00f5es corporativas em est\u00e1gios posteriores, ent\u00e3o \u00e9 mais s\u00e9ria.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Depurando e resolvendo problemas<\/h2>\n\n\n\n<p>Ent\u00e3o voc\u00ea <em>detectou<\/em> que seu modelo realmente est\u00e1 sofrendo de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o, entendeu a <em>magnitude<\/em> da incompatibilidade e viu que est\u00e1 tendo um impacto no neg\u00f3cio suficiente para justificar o foco nisso. Agora voc\u00ea precisa depurar e consertar a incompatibilidade.<\/p>\n\n\n\n<p><em>A detec\u00e7\u00e3o de distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o pode ser feita olhando pain\u00e9is e mapas. Entretanto, quando depurar, voc\u00ea <\/em><strong><em>precisa<\/em><\/strong><em> acessar os dados de compara\u00e7\u00e3o brutos para entender a <\/em><strong><em>natureza<\/em><\/strong><em> da distor\u00e7\u00e3o.<\/em><\/p>\n\n\n\n<p>Depurar e consertar incompatibilidades de treinamento e exibi\u00e7\u00e3o envolve comparar valores de recurso usados nos momentos de treinamento e exibi\u00e7\u00e3o para inst\u00e2ncias individuais, por isso <a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#monitoring-train-serve-mismatches\">sugerimos<\/a> que voc\u00ea crie um <strong>conjunto de dados de monitoramento<\/strong> onde possa ver os valores de recurso para ambos os trajetos de dados.<\/p>\n\n\n\n<p>Como mencionado anteriormente,<a href=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#prerequisites-datacollection\"> coletar dados<\/a> \u00e9 um pr\u00e9-requisito para lidar com distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o: se voc\u00ea n\u00e3o coletar dados de treinamento e exibi\u00e7\u00e3o, n\u00e3o ser\u00e1 poss\u00edvel monitorar ou consertar incompatibilidades de treinamento e exibi\u00e7\u00e3o.<\/p>\n\n\n\n<p>Na Figura 9 \u00e9 poss\u00edvel ver outro exemplo de como um &#8220;conjunto de dados de monitoramento&#8221; deve ser para um modelo em tempo real com 3 recursos: &#8220;A&#8221;, &#8220;B&#8221; e &#8220;C&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/obMiaqhZ34tVHNuOHVUSBSAUhfMAj59dUS-Jg7fhn8OZb9qr4WgqoecOtA5-7oVcWlLb5crzoVnr-WxL_h7ziy6TTFOumC_SP6m4SzSqbrrV912115RohMZRrTZC1C9CE4FmCdHNoHwla00ypDjXhA\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 9:<\/em><\/strong><em> A depura\u00e7\u00e3o de incompatibilidades de treinamento e exibi\u00e7\u00e3o normalmente exige que voc\u00ea analise o &#8220;conjunto de dados de monitoramento&#8221; bruto e compare valores de recurso de ambos os trajetos de dados. O conjunto de dados de monitoramento \u00e9 apenas um agrupamento de dados de recurso nos momentos de treinamento e exibi\u00e7\u00e3o.&nbsp;<\/em><\/p>\n\n\n\n<p>Agora veremos como priorizar as investiga\u00e7\u00f5es e exemplos de tipos comuns de incompatibilidades.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Concentre-se primeiro em recursos de alta import\u00e2ncia<\/h2>\n\n\n\n<p>Se voc\u00ea tiver que lidar com incompatibilidades em muitos recursos,&nbsp; precisar\u00e1 escolher em quais se concentrar primeiro, especialmente quando se trata de distor\u00e7\u00e3o pr\u00e9-instala\u00e7\u00e3o. \u00c9 comum ter diversos recursos distorcidos quando instala seu modelo em tempo real (de prefer\u00eancia, no modo sombra para que n\u00e3o haja danos!).<\/p>\n\n\n\n<p>Use a import\u00e2ncia de recurso (por exemplo, valores SHAP) para decidir quais recursos investigar primeiro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Entenda o tipo de incompatibilidade\u00a0<\/h2>\n\n\n\n<p>Agora listaremos os tipos comuns de incompatibilidades, al\u00e9m dos motivos e reparos mais comuns.<\/p>\n\n\n\n<p>Eles est\u00e3o explicados nas pr\u00f3ximas subse\u00e7\u00f5es e resumidos na tabela abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Tipo de incompatibilidade<\/strong><\/td><td><strong>Quando costuma ocorrer<\/strong><\/td><td><strong>Poss\u00edveis reparos<\/strong><\/td><\/tr><tr><td>Valores Null no momento de exibi\u00e7\u00e3o<\/td><td>Pr\u00e9-instala\u00e7\u00e3o e p\u00f3s-instala\u00e7\u00e3o<\/td><td>Depende do motivo. Pode precisar de reparo ou novo treinamento do modelo se for devido a vazamento de dados.<\/td><\/tr><tr><td>Null x Valores 0<\/td><td>Normalmente pr\u00e9-instala\u00e7\u00e3o<\/td><td>Depura\u00e7\u00e3o e reparo da l\u00f3gica de recurso no momento de exibi\u00e7\u00e3o (normalmente adicionando um <em>fillna(0)<\/em>)<\/td><\/tr><tr><td>O valor no momento de exibi\u00e7\u00e3o normalmente \u00e9 maior<\/td><td>Pr\u00e9-instala\u00e7\u00e3o e p\u00f3s-instala\u00e7\u00e3o<\/td><td>Depura\u00e7\u00e3o e reparo da l\u00f3gica de recurso no momento de exibi\u00e7\u00e3o<\/td><\/tr><tr><td>O valor no momento de exibi\u00e7\u00e3o normalmente \u00e9 menor<\/td><td>Pr\u00e9-instala\u00e7\u00e3o e p\u00f3s-instala\u00e7\u00e3o<\/td><td>Depura\u00e7\u00e3o e reparo da l\u00f3gica de recurso no momento de exibi\u00e7\u00e3o<\/td><\/tr><tr><td>Exemplos n\u00e3o sendo pontuados no momento de exibi\u00e7\u00e3o<\/td><td>Pr\u00e9-instala\u00e7\u00e3o e p\u00f3s-instala\u00e7\u00e3o<\/td><td>Depende do motivo<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Valores Null no momento de exibi\u00e7\u00e3o<\/h2>\n\n\n\n<p>Voc\u00ea presumiu (no momento de treinamento) que alguma informa\u00e7\u00e3o estaria dispon\u00edvel no momento da conclus\u00e3o, mas quando instalou o modelo em tempo real, todos os valores de recurso est\u00e3o NULL.&nbsp;<\/p>\n\n\n\n<p>Isso pode ser uma forma de vazamento de dados: voc\u00ea usou informa\u00e7\u00f5es futuras para montar recursos. Se isso acontecer, voc\u00ea ver\u00e1 valores NULL no momento da conclus\u00e3o, embora tivesse valores que n\u00e3o eram null durante o treinamento. Pode ser necess\u00e1rio remover esses recursos e treinar o modelo novamente. Veja um exemplo abaixo na Figura 10:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/GUuDQKiQyf2NIpDuGGDsIKIgLhBZZRa84xWw2BfaQjin7Mk9KYiA6UTxij3vyqKC8Ms_nwOyocn0Zcd4MGdHbbtTP9gpzrjoWRLWs65-506CIV8Pf6OtY6rYl23Iul7Y2nuQufU1JoRdoRAQX51l3A\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 10:<\/em><\/strong><em> Se voc\u00ea tiver <\/em><strong><em>apenas<\/em><\/strong><em> valores NULL para um recurso no momento de exibi\u00e7\u00e3o, isso pode significar que houve vazamento de dados durante o treinamento. Se for o caso, pode ser necess\u00e1rio abandonar esse recurso e treinar o modelo novamente.<\/em><\/p>\n\n\n\n<p>Voc\u00ea s\u00f3 deve suspeitar de vazamento de dados se todos os valores para um recurso forem NULL no momento de exibi\u00e7\u00e3o; se apenas alguns valores forem NULL, o problema pode ser causado por exce\u00e7\u00f5es no tempo de execu\u00e7\u00e3o ou esgotamentos de tempo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Null x Valores 0<\/h2>\n\n\n\n<p>\u00c9 comum que valores NULL sejam misturados com 0 (zero) durante a implementa\u00e7\u00e3o do recurso. Isso acontece com recursos baseados em contagens, somas e m\u00e9dias. Um reparo comum \u00e9 usar fillna(0) para substituir NULLs por zeros.<\/p>\n\n\n\n<p><strong>Exemplo:<\/strong> O modelo foi criado com um pacote R, que representa os tamanhos das listas vazias como NULL. Mas no momento de exibi\u00e7\u00e3o, os recursos s\u00e3o buscados com c\u00f3digo Java, e as sem\u00e2nticas podem ser diferentes: contagens de listas vazias s\u00e3o representadas como 0 (zero) em vez de NULL. Veja a Figura 11 abaixo:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/cwfx6XZDgbLkMpr3ADwX5vTd0LOGoyDclpNaidDrZFY8isQT5NN3rTyvWIaUvPWAu9QQGjMQ_gbSws2Sjf1053r-XUxNXFkR0OUhF21a6h0AjZrMSbPrlZbbsmn0eYRFg1IlkQCCAjPy-LAHdG6EzQ\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 11:<\/em><\/strong><em> Este \u00e9 um exemplo cl\u00e1ssico de distor\u00e7\u00e3o de Null x 0; repare que s\u00f3 temos incompatibilidades nos exemplos onde o valor real do recurso \u00e9 0. N\u00e3o houve incompatibilidades de treinamento e exibi\u00e7\u00e3o nos outros casos.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O valor no momento de exibi\u00e7\u00e3o normalmente \u00e9 maior<\/h2>\n\n\n\n<p>Quando os valores para um recurso s\u00e3o consistentemente maiores do que deveriam, provavelmente temos um erro nos filtros e\/ou nas faixas de datas usados no momento de exibi\u00e7\u00e3o. Veja a Figura 12 abaixo.<\/p>\n\n\n\n<p><strong>Exemplo:<\/strong> Um dos recursos em um modelo de fraude \u00e9 a quantidade de compras em cart\u00e3o de cr\u00e9dito <em>liquidadas<\/em> que um cliente fez no m\u00eas anterior. Entretanto, o recurso foi implementado erroneamente no momento de exibi\u00e7\u00e3o: em vez disso, ele est\u00e1 usando todas as compras (liquidadas ou de outra forma), ent\u00e3o os n\u00fameros \u00e0s vezes est\u00e3o maiores do que deveriam.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/zZIhQidf3jdmAT7qvHZSkWeZnFyL90yrOSwaKz04yalyled4ATJOytcF64Nn4o60qv1qDRs6cVQ3hHrMf31XaNOyei2FBfPJf2fHJJXVgZbV34NFWELftM19tMwAwxBxO7sFk83hbdhDh79KlnphHA\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 12:<\/em><\/strong><em> Quando valores de recurso est\u00e3o consistentemente maiores do que deveriam, isso pode indicar que a implementa\u00e7\u00e3o de recurso no momento de exibi\u00e7\u00e3o est\u00e1 usando filtros excessivamente vagos e incluindo mais informa\u00e7\u00f5es do que deveria.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O valor no momento de exibi\u00e7\u00e3o normalmente \u00e9 menor<\/h2>\n\n\n\n<p>Isso \u00e9 an\u00e1logo ao tipo de incompatibilidade anterior, com valores menores que o esperado, em vez de maiores. Veja a Figura 13 abaixo para saber como seria.<\/p>\n\n\n\n<p><strong>Exemplo<\/strong>: Um modelo de pontua\u00e7\u00e3o de cr\u00e9dito em tempo real tem um recurso chamado &#8220;<em>num_transfers_last_day<\/em>&#8220;, que cont\u00e9m a quantidade de transfer\u00eancias que um cliente fez nas \u00faltimas 24 horas. Entretanto, o engenheiro encarregado de implement\u00e1-lo no momento de exibi\u00e7\u00e3o achou que isso significava a quantidade de transfer\u00eancias no <em>dia atual<\/em> (isto \u00e9, come\u00e7ando \u00e0 0h at\u00e9 o presente momento).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/IQQOGo4gfOVND7mGT5nJ4PZxf4_Np2O9hfO86fJe3rcHIjbRfRMp_7dVybgAwieEqHyeMfbS-vMQvZpzusySE3Gy8HzVpawU3dCAQLTYbu3D1TrqCmdUv3r6bMrNtBfdIxyFkYt1kbFg9bQnMxooEA\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 13:<\/em><\/strong><em> Neste caso, vemos que muitas inst\u00e2ncias possuem valores inferiores aos que deveriam. Novamente, isso pode ser devido a um filtro implementado equivocadamente, erros com diferen\u00e7a de um etc.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Exemplos n\u00e3o sendo pontuados no momento de exibi\u00e7\u00e3o<\/h2>\n\n\n\n<p>\u00c0s vezes, modelos em tempo real acabam pontuando distribui\u00e7\u00f5es de evento que n\u00e3o existiam nos dados de treinamento. Isso \u00e9 perigoso porque n\u00e3o podemos confiar nas previs\u00f5es dadas para amostras de inst\u00e2ncias de uma distribui\u00e7\u00e3o diferente daquela com a qual o modelo foi treinado.<\/p>\n\n\n\n<p><strong>Exemplo 1: <\/strong>Um banco treinou um modelo para pontuar o risco de cr\u00e9dito padr\u00e3o para o primeiro empr\u00e9stimo na vida de um cliente. Entretanto, os engenheiros equivocadamente instalaram o modelo para pontuar <em>tamb\u00e9m<\/em> empr\u00e9stimos subsequentes.<\/p>\n\n\n\n<p><strong>Exemplo 2: <\/strong>Um modelo de fraude foi treinado para detectar tentativas de fraude nas compras em cart\u00e3o de cr\u00e9dito feitas on-line. Entretanto, uma equipe de engenharia equivocadamente instalou o modelo para pontuar tamb\u00e9m compras <em>em pessoa<\/em>.<\/p>\n\n\n\n<p>Este tipo de distor\u00e7\u00e3o \u00e9 diferente das anteriores porque n\u00e3o se refere a incompatibilidades de recurso, mas a casos em que o <em>exemplo inteiro<\/em> n\u00e3o devia ter sido pontuado. Na Figura 14, vemos como esse tipo de problema apareceria nos conjuntos de dados de monitoramento: todos os valores de recurso do trajeto de dados de treinamento ser\u00e3o NULL.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/cUIs0kSSEP6Trv1Z6-Q5mMhM_VJWCN2RCid12Wc8UYENYbRsGtlS6ZfIdJK6TApgunMyRBt5vZxJUSWQLneftgCXTkrCGgkzR4I3ZnPuJaR8O-FqkzDTuLZX7aOsG1BITO5gQ1tTBxeW005WU4XCrQ\" alt=\"Tabela\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 14:<\/em><\/strong><em> Aqui vemos um caso em que dois exemplos (IDs 0004 e 0005) foram pontuados pelo modelo em tempo real, mas n\u00e3o apareceram no conjunto de dados de treinamento gerado programaticamente. \u00c9 muito importante usar um OUTER join para agrupar ambos os conjuntos de dados para que os exemplos em qualquer trajeto de dados apare\u00e7am no conjunto de dados de monitoramento.<\/em><\/p>\n\n\n\n<p>Observe que isso \u00e9 diferente de <em>desvio de dados<\/em> (data drift): a distribui\u00e7\u00e3o n\u00e3o mudou apenas pela passagem do tempo, mas devido a diferen\u00e7as na maneira como o modelo \u00e9 usado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dicas gerais<\/h2>\n\n\n\n<p>Aqui est\u00e3o algumas outras dicas e sugest\u00f5es gerais que podem ajudar voc\u00ea a lidar com distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Se puder, use um armazenamento de recursos<\/h2>\n\n\n\n<p>Com um armazenamento de recursos, a tarefa de calcular recursos \u00e9 delegada para um sistema especializado.<\/p>\n\n\n\n<p>Armazenamentos de recursos modernos suportam c\u00e1lculos de lote e em tempo real, evidenciando a necessidade de se preocupar com distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o. Tais sistemas normalmente suportam sem\u00e2ntica de &#8220;<em>escrita uma vez<\/em>&#8221; (write-once) para que os recursos sejam definidos em uma camada de abstra\u00e7\u00e3o superior, em vez de serem recodificados em sistemas de produ\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Diferen\u00e7as na precis\u00e3o do ponto de flutua\u00e7\u00e3o<\/h2>\n\n\n\n<p>\u00c0s vezes os dados de treinamento e exibi\u00e7\u00e3o s\u00e3o diferentes por apenas algumas casas decimais.<\/p>\n\n\n\n<p>Uma das situa\u00e7\u00f5es em que isso acontece \u00e9 quando voc\u00ea usa tecnologias diferentes (por exemplo, Python e Java) para criar recursos de momento de treinamento e momento de exibi\u00e7\u00e3o. Pode acontecer de a precis\u00e3o de flutua\u00e7\u00e3o ser diferente em ambos, e voc\u00ea acabar\u00e1 com incompatibilidades como as mostradas abaixo na Figura 15:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/qtZ7AKAPRikWhWPeYIvhMU3KJbEANUQFnewJ0vE_0BBosBbOCfclwE---w_CbBXr2mlPn5ao8_8BxLeK0kqY_nIrUx2F93qcSncaxttK_81KxWyjd5CKyJk7kWREHYcBaKvYydap6lWT0ZcydnPKUw\" alt=\"Diagrama\n\nDescri\u00e7\u00e3o gerada automaticamente\"\/><\/figure>\n\n\n\n<p><strong><em>Figura 15:<\/em><\/strong><em> <\/em><strong><em>Diferen\u00e7as na precis\u00e3o do ponto de flutua\u00e7\u00e3o <\/em><\/strong><em>como as mostradas normalmente n\u00e3o s\u00e3o indicativas de um problema real: elas refletem como diferentes tecnologias lidam com n\u00fameros do ponto de flutua\u00e7\u00e3o<\/em><\/p>\n\n\n\n<p>Essas pequenas diferen\u00e7as normalmente n\u00e3o contam como incompatibilidades reais, pois normalmente n\u00e3o afetam os resultados do modelo. Aplique uma margem de folga quando comparar valores do ponto de flutua\u00e7\u00e3o para evitar perder tempo com isso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nomeie os recursos com precis\u00e3o<\/h2>\n\n\n\n<p>Nomes de recursos bem escritos ajudam a evitar desentendimentos entre as equipes de modelagem e engenharia. A tabela abaixo mostra exemplos de nomes de recurso bons e ruins.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>BOM<\/strong><\/td><td><strong>RUIM<\/strong><\/td><td><strong>Motivo<\/strong><\/td><\/tr><tr><td>num_transf_ult_24h<\/td><td>num_transf_ult_dia<\/td><td>ult_dia \u00e9 amb\u00edguo: significa as \u00faltimas 24 horas? Ou o dia atual (0h at\u00e9 agora)?<\/td><\/tr><tr><td>num_comp_liqui_120d<\/td><td>num_comp_120d<\/td><td>Se o recurso s\u00f3 incluir compras liquidadas, isso deve estar claro no nome do recurso.&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Comunica\u00e7\u00e3o constante entre cientistas de dados e engenheiros de aprendizado de m\u00e1quina<\/h2>\n\n\n\n<p>Como mencionamos antes, <a href=\"https:\/\/building.nubank.com\/pt-br\/data-scientist-x-machine-learning-engineer-roles-how-are-they-different-how-are-they-alike\/\">cientistas de dados e engenheiros de aprendizado de m\u00e1quina<\/a> s\u00e3o essenciais para levar um modelo de aprendizado de m\u00e1quina \u00e0 produ\u00e7\u00e3o, cuidar da modelagem e da implementa\u00e7\u00e3o em tempo real, respectivamente.<\/p>\n\n\n\n<p>Eles devem ser parte de uma \u00fanica equipe, como um esquadr\u00e3o. Se equipes diferentes forem respons\u00e1veis por modelar e implementar os modelos, h\u00e1 grandes chances de haver um desentendimento que cause distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Voc\u00ea provavelmente pode usar dados de amostragem para monitorar<\/h2>\n\n\n\n<p>O monitoramento de modelos de aprendizado de m\u00e1quina (ML) \u00e9 demorado e <em>caro<\/em>. Voc\u00ea n\u00e3o precisa usar todos os dados para monitorar distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o.<\/p>\n\n\n\n<p>Se voc\u00ea usar dados de amostragem, certifique-se de que sejam de uma amostra determin\u00edstica para que amostras em ambos os trajetos de dados (treinamento e exibi\u00e7\u00e3o) estejam inclu\u00eddas. Amostragem baseada em hash \u00e9 um jeito de fazer isso.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instala\u00e7\u00f5es em modo sombra<\/h2>\n\n\n\n<p>Instala\u00e7\u00e3o em <em>modo sombra<\/em> refere-se a instalar completamente um modelo em tempo real, <em>mas<\/em> usando suas previs\u00f5es para tomar decis\u00f5es de fato. Isso pode ser feito com uma <em>altern\u00e2ncia de recursos<\/em> (ou um simples <em>if-statement<\/em>)<\/p>\n\n\n\n<p>Voc\u00ea pode usar instala\u00e7\u00f5es em modo sombra para testar incompatibilidades de treinamento e exibi\u00e7\u00e3o sem causar danos ao neg\u00f3cio, pois as previs\u00f5es n\u00e3o ser\u00e3o usadas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n\n\n\n<p>Em resumo, a distor\u00e7\u00e3o de treinamento e exibi\u00e7\u00e3o \u00e9 um problema consider\u00e1vel em modelos de aprendizado de m\u00e1quina em tempo real, que surge das diferen\u00e7as entre os ambientes de treinamento e de exibi\u00e7\u00e3o. Isso pode ser devido a uma falha de comunica\u00e7\u00e3o entre as equipes ou mudan\u00e7as inesperadas nas fontes de dados.<\/p>\n\n\n\n<p>Para minimizar isso, \u00e9 crucial monitorar e depurar incompatibilidades, com foco em recursos de alta import\u00e2ncia. Isso envolve coletar e comparar dados de recursos tanto do trajeto de treinamento quanto de exibi\u00e7\u00e3o e resolver os problemas assim que surgirem.<\/p>\n\n\n\n<p>Usar um armazenamento de recursos pode simplificar esse processo terceirizando o c\u00e1lculo de recurso para outras equipas. Al\u00e9m disso, manter uma boa comunica\u00e7\u00e3o entre cientistas de dados e engenheiros de aprendizado de m\u00e1quina pode prevenir desentendimentos que levem a distor\u00e7\u00f5es.<\/p>\n\n\n\n<p>Instalar modelos em modo sombra, onde as previs\u00f5es n\u00e3o s\u00e3o usadas para tomar decis\u00f5es, pode ajudar a testar incompatibilidades sem afetar os neg\u00f3cios. Resolvendo distor\u00e7\u00f5es entre treinamento e exibi\u00e7\u00e3o, as empresas podem garantir que seus modelos de aprendizado de m\u00e1quina (ML) em tempo real sejam mais precisos e confi\u00e1veis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real. <\/p>\n","protected":false},"author":178110136,"featured_media":25154,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2503,2502],"tags":[2504,2540],"ppma_author":[2366],"class_list":["post-25899","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-analytics","category-data-science-machine-learning-pt-br","tag-ciencia-de-dados","tag-machine-learning-pt-br"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank<\/title>\n<meta name=\"description\" content=\"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.\" \/>\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.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank\" \/>\n<meta property=\"og:description\" content=\"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Nubank\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-27T19:55:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-05T17:55:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR-1024x683.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Felipe Almeida - Machine Learning Engineer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@queirozfcom\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Felipe Almeida - Machine Learning Engineer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/\"},\"author\":{\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"headline\":\"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia\",\"datePublished\":\"2023-06-27T19:55:33+00:00\",\"dateModified\":\"2024-03-05T17:55:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/\"},\"wordCount\":5295,\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1\",\"keywords\":[\"ci\u00eancia de dados\",\"machine learning\"],\"articleSection\":[\"Data &amp; Analytics\",\"Data science &amp; Machine Learning\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/\",\"name\":\"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1\",\"datePublished\":\"2023-06-27T19:55:33+00:00\",\"dateModified\":\"2024-03-05T17:55:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\"},\"description\":\"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2023\\\/06\\\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1\",\"width\":6240,\"height\":4160},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/#website\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/\",\"name\":\"Building Nubank\",\"description\":\"We make the extraordinary happen\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/building.nubank.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.nubank.com\\\/pt-br\\\/#\\\/schema\\\/person\\\/2bce0340e6a654811bb0aea0e58092c5\",\"name\":\"Felipe Almeida - Machine Learning Engineer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-26-at-14.06.59.png1dcbca3b60d19e8fb28ae3829d8da80a\",\"url\":\"https:\\\/\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-26-at-14.06.59.png\",\"contentUrl\":\"https:\\\/\\\/building.nubank.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/Screenshot-2024-03-26-at-14.06.59.png\",\"caption\":\"Felipe Almeida - Machine Learning Engineer\"},\"description\":\"Felipe Almeida is responsible for engineering and managing Data Science &amp; Machine Learning projects at Nubank. He has a Bachelor's degree in Computer Science and a Master's degree in Computer Engineering, both from UFRJ. Felipe has experience working with e-commerce, credit and fraud. Before joining Nubank in 2019, he worked in companies such as Ita\u00fa-Unibanco and VTEX. In his spare time, he likes to exercise and learn foreign languages. He is active on twitter and he blogs at https:\\\/\\\/queirozf.com\",\"sameAs\":[\"http:\\\/\\\/queirozf.com\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/felipeqbalmeida\",\"https:\\\/\\\/x.com\\\/queirozfcom\"],\"url\":\"https:\\\/\\\/building.nubank.com\\\/pt-br\\\/author\\\/felipe-almeida-data-scientist\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank","description":"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.","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.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/","og_locale":"pt_BR","og_type":"article","og_title":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank","og_description":"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.","og_url":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/","og_site_name":"Building Nubank","article_published_time":"2023-06-27T19:55:33+00:00","article_modified_time":"2024-03-05T17:55:40+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR-1024x683.jpg","type":"image\/jpeg"}],"author":"Felipe Almeida - Machine Learning Engineer","twitter_card":"summary_large_image","twitter_creator":"@queirozfcom","twitter_misc":{"Escrito por":"Felipe Almeida - Machine Learning Engineer","Est. tempo de leitura":"30 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#article","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/"},"author":{"name":"Felipe Almeida - Machine Learning Engineer","@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"headline":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia","datePublished":"2023-06-27T19:55:33+00:00","dateModified":"2024-03-05T17:55:40+00:00","mainEntityOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/"},"wordCount":5295,"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1","keywords":["ci\u00eancia de dados","machine learning"],"articleSection":["Data &amp; Analytics","Data science &amp; Machine Learning"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/","url":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/","name":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia - Building Nubank","isPartOf":{"@id":"https:\/\/building.nubank.com\/pt-br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#primaryimage"},"image":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1","datePublished":"2023-06-27T19:55:33+00:00","dateModified":"2024-03-05T17:55:40+00:00","author":{"@id":"https:\/\/building.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5"},"description":"Um breve guia explicando como evitar e minimizar os impactos da distor\u00e7\u00e3o entre treinamento e exibi\u00e7\u00e3o em modelos de aprendizado de m\u00e1quina (ML) em tempo real.","breadcrumb":{"@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#primaryimage","url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1","contentUrl":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1","width":6240,"height":4160},{"@type":"BreadcrumbList","@id":"https:\/\/building.nubank.com\/pt-br\/como-lidar-com-distorcao-entre-treinamento-e-exibicao-em-modelos-de-aprendizado-de-maquina-ml-em-tempo-real-um-breve-guia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/building.nubank.com\/pt-br\/"},{"@type":"ListItem","position":2,"name":"Como lidar com Distor\u00e7\u00e3o entre Treinamento e Exibi\u00e7\u00e3o em Modelos de Aprendizado de M\u00e1quina (ML) em tempo real: Um Breve Guia"}]},{"@type":"WebSite","@id":"https:\/\/building.nubank.com\/pt-br\/#website","url":"https:\/\/building.nubank.com\/pt-br\/","name":"Building Nubank","description":"We make the extraordinary happen","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/building.nubank.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.nubank.com\/pt-br\/#\/schema\/person\/2bce0340e6a654811bb0aea0e58092c5","name":"Felipe Almeida - Machine Learning Engineer","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-26-at-14.06.59.png1dcbca3b60d19e8fb28ae3829d8da80a","url":"https:\/\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-26-at-14.06.59.png","contentUrl":"https:\/\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-26-at-14.06.59.png","caption":"Felipe Almeida - Machine Learning Engineer"},"description":"Felipe Almeida is responsible for engineering and managing Data Science &amp; Machine Learning projects at Nubank. He has a Bachelor's degree in Computer Science and a Master's degree in Computer Engineering, both from UFRJ. Felipe has experience working with e-commerce, credit and fraud. Before joining Nubank in 2019, he worked in companies such as Ita\u00fa-Unibanco and VTEX. In his spare time, he likes to exercise and learn foreign languages. He is active on twitter and he blogs at https:\/\/queirozf.com","sameAs":["http:\/\/queirozf.com\/","https:\/\/www.linkedin.com\/in\/felipeqbalmeida","https:\/\/x.com\/queirozfcom"],"url":"https:\/\/building.nubank.com\/pt-br\/author\/felipe-almeida-data-scientist\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/building.nubank.com\/wp-content\/uploads\/2023\/06\/1120-www.victoriaholguin.com-Victoria-Holguin-_DSF0634-Mejorado-NR.jpg?fit=6240%2C4160&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pbKBB5-6JJ","jetpack_sharing_enabled":true,"authors":[{"term_id":2366,"user_id":178110136,"is_guest":0,"slug":"felipe-almeida-data-scientist","display_name":"Felipe Almeida - Machine Learning Engineer","avatar_url":{"url":"https:\/\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-26-at-14.06.59.png","url2x":"https:\/\/building.nubank.com\/wp-content\/uploads\/2024\/03\/Screenshot-2024-03-26-at-14.06.59.png"},"0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/25899","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/users\/178110136"}],"replies":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/comments?post=25899"}],"version-history":[{"count":7,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/25899\/revisions"}],"predecessor-version":[{"id":28552,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/posts\/25899\/revisions\/28552"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media\/25154"}],"wp:attachment":[{"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/media?parent=25899"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/categories?post=25899"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/tags?post=25899"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/building.nubank.com\/pt-br\/wp-json\/wp\/v2\/ppma_author?post=25899"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}