A acurácia é a última coisa que um modelo em produção conta a você

·12 min de leitura

Em meados de março de 2020, o sistema da Instacart que previa se um dado produto estava disponível numa dada loja começou a piorar. A métrica que a empresa usava para acompanhar com que frequência os itens eram encontrados na loja caiu de 93% para 61%, segundo a reportagem da Fortune de junho daquele ano. Nada no modelo havia mudado. Mudaram os hábitos dos compradores: a demanda disparou, os estoques das lojas oscilavam de hora em hora, e os padrões aprendidos em meses anteriores já não descreviam o presente. Os engenheiros da Instacart retreinaram, passando de várias semanas de dados de "encontrado" e "não encontrado" informados pelos compradores para cerca de dez dias deles, já que o comportamento recente combinava melhor com a nova realidade, e passaram a reavaliar o modelo a cada hora em vez de a cada três.

O episódio ilustra um ponto geral. Um modelo é uma descrição congelada de um período do mundo, e é implantado num mundo que continua se movendo. O que distingue o caso da Instacart é que a equipe conseguia perceber. A métrica dependia de compradores informando, em questão de horas, se um item estava lá. A maioria dos modelos não recebe uma resposta tão rápida. Um modelo de pontuação de crédito pode levar um ano para saber se um empréstimo entrou em inadimplência. Um modelo de churn só descobre quem saiu depois que o período de carência passa. Um modelo de fraude aprende com estornos que podem levar meses para chegar. Para esses, o painel de acurácia é um indicador atrasado por construção, e uma equipe que o espera está navegando pela esteira do barco.

Minha tese neste ensaio é que o monitoramento precisa ser construído em camadas, ajustadas ao que pode ser observado em cada atraso, e que o projeto dos alertas importa tanto quanto a escolha da métrica. A acurácia é a última camada a se manifestar, o que a torna a menos útil para pegar problemas cedo e a mais útil para julgar o tamanho do estrago.

Três tipos de mudança

A palavra deriva abrange vários fenômenos diferentes. João Gama e colegas, em seu levantamento de 2014 sobre adaptação à deriva de conceito, estabeleceram o vocabulário que o campo ainda usa, e as distinções ajudam a decidir o que monitorar.

O deslocamento de covariáveis é uma mudança na distribuição das entradas enquanto a relação entre entradas e desfechos permanece a mesma. Um modelo de crédito vê uma nova composição de solicitantes porque uma campanha de marketing mirou outro segmento. A lógica do modelo pode continuar certa, mas está sendo aplicada a regiões do espaço de entrada que ele viu raramente. O deslocamento de rótulos, também chamado de deslocamento a priori, é uma mudança em quão comuns são os desfechos: a inadimplência sobe numa recessão mesmo que cada tipo de solicitante se comporte como antes. A deriva de conceito é uma mudança na própria relação. A mesma entrada agora implica um desfecho diferente. Em 2020, uma licença remunerada ou suspensão de contrato dizia algo diferente sobre a estabilidade da renda de um trabalhador do que em 2019, e um modelo que tratava o histórico de emprego como sinal estável estava lendo uma língua que mudou.

Os três têm remédios diferentes. O deslocamento de covariáveis é detectado só pelas entradas, sem rótulos. O deslocamento de rótulos pode muitas vezes ser detectado pela distribuição das previsões do modelo. A deriva de conceito costuma ser visível apenas quando os desfechos chegam. Um projeto de monitoramento que observa só as entradas perde a deriva de conceito, e um que espera pelos desfechos encontra as três tarde.

Camada um: integridade dos dados

As falhas mais baratas de causar são também as mais baratas de detectar. Uma equipe a montante renomeia uma coluna, muda uma unidade de reais para centavos, passa a mandar nulos onde antes mandava zeros ou para de enviar um feed. Um modelo mais adiante continua produzindo previsões, que parecem plausíveis só porque o painel não tem como saber que são lixo.

As verificações dessa camada são simples e devem rodar a cada lote ou numa amostra do tráfego real: o esquema confere, as taxas de nulos ficam dentro da faixa histórica, os valores numéricos caem dentro de limites esperados, os campos categóricos contêm só valores conhecidos, o volume de registros está próximo do normal e os dados estão frescos. Essas verificações não precisam de rótulos nem de estatística além de faixas, e podem alertar em minutos. São também o análogo mais próximo do que Sculley e colegas, no artigo de 2015 sobre dívida técnica oculta, chamaram de testar os invariantes de um pipeline de entrada.

Camada dois: deriva, medida pelo tamanho e não pela significância

A segunda camada compara a distribuição das entradas, e das previsões do modelo, com um período de referência, como os dados de treino. A tentação é rodar um teste estatístico em cada atributo e alertar para valores-p pequenos. Em escala, isso dá errado de duas maneiras.

A primeira é que amostras grandes tornam significativas diferenças triviais. Considere um atributo que se deslocou em um centésimo de desvio padrão, uma quantia com que nenhum negócio se importaria. Com um milhão de linhas em cada uma das amostras de referência e atual, a estatística de Kolmogorov-Smirnov de duas amostras para esse deslocamento é de cerca de 0,004. O valor crítico a 5% para amostras desse tamanho é de cerca de 0,0019, então o teste rejeita com folga. Um teste de significância responde se existe uma diferença, e com dados suficientes a resposta é sempre sim. O que um monitor precisa saber é quão grande é a diferença.

O segundo problema é a multiplicidade. Um modelo com 200 atributos de entrada testados diariamente a 5% levantará cerca de dez alarmes falsos por verificação em dados perfeitamente estáveis, já que 200 × 0,05 = 10. Uma equipe que recebe dez alertas por dia aprende a ignorar todos.

O remédio é uma métrica de tamanho de efeito e limites definidos a partir da experiência. O Índice de Estabilidade da População (PSI), usado há muito tempo em pontuação de crédito, divide um atributo em faixas e soma, sobre as faixas, a diferença entre a participação atual e a de referência multiplicada pelo logaritmo da razão entre elas. Tome um atributo dividido em cinco faixas de renda, com participações de referência de 20%, 30%, 25%, 15% e 10%. Se a produção mostra 14%, 26%, 27%, 19% e 14%, o PSI é de cerca de 0,05. Se mostra 8%, 20%, 27%, 25% e 20%, o PSI é de cerca de 0,27. A leitura convencional em risco de crédito é que valores abaixo de 0,1 indicam estabilidade, valores entre 0,1 e 0,25 merecem atenção e valores acima de 0,25 indicam um deslocamento significativo. Esses limites são uma convenção do setor e não uma lei estatística, e cada equipe deve calibrar os seus olhando quais valores passados precederam problemas reais.

Para modelos com muitos atributos, testes por atributo são um modo ruidoso de detectar que algo mudou. Stephan Rabanser, Stephan Günnemann e Zachary Lipton compararam métodos de detecção em "Failing Loudly" (NeurIPS 2019) e constataram que um teste de duas amostras aplicado depois de reduzir a dimensionalidade com um classificador pré-treinado teve o melhor desempenho nos deslocamentos estudados, e que abordagens que discriminam domínios eram úteis para caracterizar um deslocamento e julgar se era prejudicial. Na prática isso significa monitorar algumas grandezas-resumo, como a distribuição das próprias pontuações do modelo ou de suas representações internas, além das colunas individuais.

A distribuição das previsões é a série individual mais útil. Desenhe a fração de previsões acima do limiar de decisão, por dia. Um modelo que aprovou 31% das solicitações no mês passado e hoje aprova 22% mudou de comportamento, seja qual for a causa, e quem está de plantão precisa saber antes mesmo de alguém conseguir dizer se a mudança é boa ou ruim.

Camada três: desfechos, e o que fazer enquanto se espera

Os rótulos acabam chegando, e quando chegam, o desempenho deve ser acompanhado por coorte, além do agregado. Um modelo cuja acurácia agregada é estável pode estar se deteriorando num segmento que cresce. A calibração merece seu próprio painel: se o modelo diz 20% e ocorrem 12% desses casos, o número deixou de ser uma probabilidade, e todo limiar construído sobre ele está errado.

Quantos rótulos são necessários para notar uma queda? Suponha que a acurácia de referência do modelo seja 90%. Com 100 casos rotulados numa janela de monitoramento, o erro-padrão é de 3 pontos, e um teste unilateral a 5% com 80% de poder só consegue detectar uma queda de cerca de 7,5 pontos ou mais. Com 400 rótulos, a queda detectável é de cerca de 3,7 pontos, e com 1.000, de cerca de 2,4. Comparar dois grupos de rótulos entre si, como ao conferir um desafiante contra o campeão, exige mais: detectar uma queda de 90% para 87% pede cerca de 1.800 casos rotulados em cada grupo. Uma amostra semanal de cem casos revisados vale a pena, porque pega colapsos e dá às pessoas uma noção das falhas, mas não substitui os indicadores indiretos e as camadas de deriva para as mudanças menores que se somam.

Enquanto os rótulos estão atrasados, há modos de obter sinais antecipados dos desfechos. Indicadores de curto prazo ajudam, como a inadimplência na primeira parcela como indicador antecipado de um modelo de inadimplência em doze meses, ou um chamado reaberto em uma semana para um classificador de suporte. Amostrar e rotular à mão dá uma estimativa direta: um revisor que rotula cem previsões aleatórias por semana produz uma série temporal de acurácia com um intervalo largo, porém honesto. A implantação em sombra, em que um modelo novo roda no tráfego real sem agir, coleta comparações antes de qualquer mudança ser exposta aos clientes.

Alertas precisam de severidade e de um dono

Nem todo sinal deve acordar alguém. Um esquema viável tem três níveis. Um acionamento imediato, reservado a condições em que o modelo provavelmente está produzindo saídas erradas agora: uma falha de integridade dos dados, uma distribuição de previsões que saltou bem para fora da faixa, um limite de ação atingido. Um chamado, para movimentos mais lentos que alguém deve examinar em dias: um PSI se aproximando do limite de atenção, uma lacuna de calibração que se abriu, uma coorte cujos desfechos pioraram. E um relatório semanal, para tendências sem ação imediata, mantido para que a mudança gradual possa ser vista ao longo de meses. Cada alerta nomeia um responsável, uma pessoa e não um alias de equipe, porque um alerta que pertence a todos não é lido por ninguém.

Ajuda revisar os próprios alertas a cada trimestre. Liste os que dispararam, marque quais levaram a uma ação e aposente ou reajuste os que nunca levaram. Um sistema de alertas que nunca é podado decai em ruído.

O que fazer quando um alerta dispara

Um runbook escrito de antemão poupa a primeira hora. O primeiro passo é conferir a integridade dos dados, já que falhas de pipeline são uma causa comum de deriva aparente. O segundo é fatiar: quais atributos, quais segmentos, qual janela de tempo? O terceiro é decidir entre quatro respostas. Ignorar, se o deslocamento é pequeno e inofensivo. Reverter ou recorrer a uma regra mais simples, se o modelo está claramente falhando e o custo dos erros é alto. Retreinar com dados recentes, se o mundo mudou e há rótulos recentes. Ou escalar para revisão humana, se a mudança é algo para o qual o modelo nunca foi feito.

O retreino pede cautela porque é a resposta a que as pessoas recorrem primeiro e a que pode esconder um problema. Se as próprias decisões de um modelo influenciam os rótulos com que ele aprende, como em crédito ou fraude, em que só solicitações aprovadas geram desfechos, então retreinar com dados recentes reforça as escolhas anteriores do modelo. A escolha da Instacart por uma janela de treino mais curta reflete uma troca que toda equipe enfrenta: dados mais frescos adaptam mais rápido, mas são mais ruidosos, e a janela certa depende de quão depressa o mundo se move e de quantos rótulos chegam por dia. O retreino automático sem uma barreira de validação é um jeito de lançar um modelo pior em horário marcado. Um pipeline sensato retreina, avalia o candidato contra o modelo atual num conjunto reservado recente e só o promove se ele vencer.

Sculley e colegas recomendaram limites de ação, tetos para o que um modelo pode fazer no mundo, como um máximo de aprovações por hora. Eles complementam o monitoramento ao limitar o dano no intervalo entre uma mudança e sua detecção.

Uma especificação de uma página para cada modelo

Cada modelo em produção precisa de um documento curto de monitoramento com o nome de um responsável. Ele deve listar de cinco a dez verificações de integridade dos dados e seus limites; as duas ou três métricas de deriva, incluindo a distribuição das previsões, com os limites que acionam alguém; quanto tempo os rótulos levam para chegar e quais indicadores indiretos ou amostras manuais os substituem; o gatilho de retreino e a barreira de validação; e o procedimento de reversão, incluindo quem pode invocá-lo. Um modelo que não consegue preencher essa página não está pronto para produção, e um modelo que já roda sem ela pode ter a página escrita esta semana, começando pelo modelo cujos erros custam mais.

Fontes

  1. Vanian, J. (9 de junho de 2020). Reportagem da Fortune sobre a Instacart e o efeito da pandemia sobre seus modelos de aprendizado de máquina. fortune.com/2020/06/09/instacart-coronavirus-artificial-intelligence.
  2. Gama, J., Žliobaitė, I., Bifet, A., Pechenizkiy, M., Bouchachia, A. (2014). A survey on concept drift adaptation. ACM Computing Surveys 46(4).
  3. Sculley, D., Holt, G., Golovin, D., et al. (2015). Hidden Technical Debt in Machine Learning Systems. NeurIPS 2015.
  4. Rabanser, S., Günnemann, S., Lipton, Z. C. (2019). Failing Loudly: An Empirical Study of Methods for Detecting Dataset Shift. NeurIPS 2019. arXiv:1810.11953.
  5. Instacart Engineering (2020). How Instacart's item availability evolved over the pandemic. tech.instacart.com.
  6. Smirnov, N. (1948). Table for estimating the goodness of fit of empirical distributions. Annals of Mathematical Statistics 19(2).