Parabéns! Você implantou o modelo unicórnio. O modelo precisa ser executado 24 horas por dia, 7 dias por semana, sem problemas. Para garantir isso, é necessário monitorar seu pipeline de machine learning (ML).
Escrever um esquema de dados para validar dados brutos
Para monitorar seus dados, verifique-os continuamente em relação aos valores estatísticos esperados, escrevendo regras que os dados precisam atender. Essa coleção de regras é chamada de esquema de dados. Para definir um esquema de dados, siga estas etapas:
Entenda o alcance e a distribuição dos seus recursos. Para recursos categóricos, entenda o conjunto de valores possíveis.
Codifique seu entendimento no esquema de dados. Confira a seguir alguns exemplos de regras:
- Verifique se as notas enviadas pelo usuário estão sempre no intervalo de 1 a 5.
- Verifique se a palavra the ocorre com mais frequência (para um recurso de texto em inglês).
- Verifique se cada atributo categórico está definido como um valor de um conjunto fixo de valores possíveis.
Teste seus dados em relação ao esquema de dados. Seu esquema precisa detectar erros de dados, como:
- Anomalias
- Valores inesperados de variáveis categóricas
- Distribuições de dados inesperadas
Criar testes de unidade para validar a engenharia de atributos
Embora seus dados brutos possam passar pelo esquema de dados, o modelo não é treinado com dados brutos. Em vez disso, o modelo é treinado com dados que foram projetados. Por exemplo, o modelo é treinado com atributos numéricos normalizados, não com dados numéricos brutos. Como os dados gerados por engenharia de recursos podem ser muito diferentes dos dados de entrada brutos, é necessário verificar os dados gerados por engenharia de recursos separadamente das verificações nos dados de entrada brutos.
Crie testes de unidade com base no seu entendimento dos dados de engenharia de atributos. Por exemplo, é possível programar testes de unidade para verificar condições como estas:
- Todos os atributos numéricos são dimensionados, por exemplo, entre 0 e 1.
- Os vetores codificados one-hot contêm apenas um único 1 e N-1 zeros.
- As distribuições de dados após a transformação estão de acordo com as expectativas. Por exemplo, se você tiver normalizado usando escores Z, a média dos escores Z vai ser 0.
- Os valores discrepantes são processados, por exemplo, por dimensionamento ou corte.
Verificar importantes frações de dados das métricas
Um conjunto bem-sucedido às vezes oculta um subconjunto sem sucesso. Em outras palavras, um modelo com métricas gerais excelentes ainda pode fazer previsões ruins para determinadas situações. Exemplo:
O modelo de unicórnio tem um bom desempenho geral, mas tem um desempenho ruim ao fazer previsões para o deserto do Saara.
Se você é o tipo de engenheiro satisfeito com um AUC geral ótimo, talvez não perceba os problemas do modelo no deserto do Saara. Se for importante fazer boas previsões para todas as regiões, você precisará acompanhar a performance de cada uma delas. Os subconjuntos de dados, como o que corresponde ao deserto do Saara, são chamados de fatias de dados.
Identifique os recortes de dados de interesse. Em seguida, compare as métricas do modelo para essas fatias de dados com as métricas de todo o conjunto de dados. Verificar se o modelo tem bom desempenho em todas as fatias de dados ajuda a remover a viés. Consulte Imparcialidade: como avaliar vieses para mais informações.
Usar métricas reais
As métricas do modelo não medem necessariamente o impacto real do modelo. Por exemplo, a alteração de um hiperparâmetro pode aumentar a AUC de um modelo, mas como a mudança afetou a experiência do usuário? Para medir o impacto real, você precisa definir métricas separadas. Por exemplo, você pode pesquisar os usuários do seu modelo para confirmar se eles realmente viram um unicórnio quando o modelo previu isso.
Verificar desvios de treinamento/disponibilização
Desvio entre treinamento e disponibilização significa que os dados de entrada durante o treinamento são diferentes dos dados de entrada na disponibilização. A tabela a seguir descreve os dois tipos importantes de distorção:
Tipo | Definição | Exemplo | Solução |
---|---|---|---|
Desvio de esquema | Os dados de treinamento e de disponibilização não estão em conformidade com o mesmo esquema. | O formato ou a distribuição dos dados de veiculação mudam enquanto o modelo continua sendo treinado com dados antigos. | Use o mesmo esquema para validar os dados de treinamento e exibição. Verifique separadamente se há estatísticas não verificadas pelo esquema, como a fração de valores ausentes. |
Distorção do recurso | Os dados gerados são diferentes entre o treinamento e a disponibilização. | O código de engenharia de atributos é diferente entre o treinamento e a disponibilização, produzindo dados de engenharia diferentes. | Assim como no desvio de esquema, aplique as mesmas regras estatísticas ao treinamento e à disponibilização de dados. Acompanhe o número de recursos distorcidos detectados e a proporção de exemplos distorcidos por recurso. |
As causas dos desvios de treinamento/disponibilização podem ser sutis. Sempre considere quais dados estão disponíveis para o modelo no momento da previsão. Durante o treinamento, use apenas os recursos que vão estar disponíveis durante a veiculação.
Exercício: testar seu conhecimento
Suponha que você tenha uma loja on-line e queira prever quanto dinheiro vai ganhar em um determinado dia. Seu objetivo de ML é prever a receita diária usando o número de clientes como um recurso.
Resposta:o problema é que você não sabe o número de clientes na hora da previsão, antes que as vendas do dia sejam concluídas. Portanto, esse recurso não é útil, mesmo que seja altamente preditivo da sua receita diária. Da mesma forma, quando você treina um modelo e recebe métricas de avaliação incríveis (como 0,99 AUC), procure esses tipos de recursos que podem aparecer no rótulo.
Verificar vazamento de rótulos
Vazamento de rótulos significa que os rótulos de informações empíricas que você está tentando prever foram inseridos acidentalmente nos recursos de treinamento. Às vezes, é muito difícil detectar vazamentos de rótulo.
Exercício: testar seu conhecimento
Suponha que você crie um modelo de classificação binária para prever se um novo paciente do hospital tem ou não câncer. O modelo usa recursos como estes:
- Idade do paciente
- Gênero do paciente
- Condições médicas anteriores
- Nome do hospital
- Sinais vitais
- Resultados do teste
- Hereditariedade
O rótulo é o seguinte:
- Booleano: o paciente tem câncer?
Você particiona os dados com cuidado, garantindo que o conjunto de treinamento esteja bem isolado do conjunto de validação e de teste. O modelo tem um desempenho muito bom no conjunto de validação e de teste. As métricas são fantásticas. Infelizmente, o modelo tem um desempenho péssimo com novos pacientes no mundo real.
Resposta:um dos recursos do modelo é o nome do hospital. Alguns hospitais são especializados no tratamento do câncer. Durante o treinamento, o modelo aprendeu rapidamente que os pacientes alocados a determinados hospitais provavelmente tinham câncer. Assim, o nome do hospital se tornou um atributo com peso alto.
Na hora da inferência, a maioria dos pacientes ainda não tinha sido atribuída a um hospital. Afinal, o objetivo do modelo era diagnosticar a presença ou a ausência de câncer e usar esse diagnóstico para atribuir o paciente a um hospital adequado. Consequentemente, durante a inferência, o recurso de nome do hospital ainda não estava disponível, e o modelo foi forçado a depender de outros recursos.
Monitorar a idade do modelo em todo o pipeline
Se os dados de veiculação evoluírem com o tempo, mas o modelo não for treinado novamente regularmente, a qualidade do modelo vai diminuir. Acompanhe o tempo desde que o modelo foi retrainado com novos dados e defina uma idade limite para alertas. Além de monitorar a idade do modelo na veiculação, você precisa monitorar a idade do modelo em todo o pipeline para detectar interrupções.
Testar se os pesos e as saídas do modelo são numericamente estáveis
Durante o treinamento do modelo, as saídas de pesos e camadas não podem ser NaN (não é um número) ou Inf (infinito). Crie testes para verificar valores NaN e Inf dos pesos e das saídas de camada. Além disso, teste se mais da metade das saídas de uma camada não são zero.
Monitorar a performance do modelo
O seu modelo de previsão de aparência de unicórnio fez mais sucesso do que o esperado. Você está recebendo muitas solicitações de previsão e ainda mais dados de treinamento. Você pensa que isso é ótimo até perceber que o modelo está consumindo cada vez mais memória e tempo para treinar. Você decide monitorar o desempenho do modelo seguindo estas etapas:
- Acompanhe a performance do modelo por versões de código, modelo e dados. Esse tipo de rastreamento permite identificar a causa exata de qualquer degradação de desempenho.
- Teste as etapas de treinamento por segundo de uma nova versão do modelo em comparação com a versão anterior e com um limite fixo.
- Detecte vazamentos de memória definindo um limite para o uso de memória.
- Monitore os tempos de resposta da API e acompanhe os percentis dela. Embora os tempos de resposta da API possam estar fora do seu controle, respostas lentas podem causar métricas ruins no mundo real.
- Monitore o número de consultas respondidas por segundo.
Testar a qualidade do modelo em tempo real nos dados veiculados
Você validou seu modelo. Mas e se cenários reais, como o comportamento de unicórnios, mudarem depois de gravar seus dados de validação? A qualidade do modelo veiculado vai diminuir. No entanto, testar a qualidade na veiculação é difícil porque os dados do mundo real nem sempre são rotulados. Se os dados de veiculação não estiverem rotulados, considere estes testes:
Investigue modelos que mostram viés estatístico significativo nas previsões. Consulte Classificação: viés de predição.
Acompanhe as métricas reais do seu modelo. Por exemplo, se você estiver classificando spam, compare suas previsões com spam relatado pelo usuário.
Mitigue a possível divergência entre os dados de treinamento e de veiculação apresentando uma nova versão do modelo em uma fração das suas consultas. À medida que você valida seu novo modelo de veiculação, mude gradualmente todas as consultas para a nova versão.
Ao usar esses testes, monitore a degradação repentina e lenta na qualidade da previsão.
Randomização
Torne o pipeline de geração de dados reproduzível. Digamos que você queira adicionar um recurso para conferir como ele afeta a qualidade do modelo. Para um experimento justo, seus conjuntos de dados precisam ser idênticos, exceto por esse novo recurso. Nesse sentido, verifique se qualquer randomização na geração de dados pode ser determinística:
- Defina a semente dos geradores de números aleatórios (RNGs). A geração de dados iniciais garante que o RNG produza os mesmos valores na mesma ordem sempre que for executado, recria seu conjunto de dados.
- Usar chaves de hash invariáveis. Hash é uma maneira comum de dividir ou extrair dados. Você pode gerar um hash de cada exemplo e usar o número inteiro resultante para decidir em qual divisão colocar o exemplo. As entradas da função hash não podem mudar sempre que você executa o programa de geração de dados. Não use o horário atual ou um número aleatório no hash, por exemplo, se você quiser recriar os hashes sob demanda.
As abordagens anteriores se aplicam à amostragem e à divisão dos dados.
Considerações sobre hash
Imagine que você está coletando consultas de pesquisa e usando hash para incluir ou excluir consultas. Se a chave de hash usou apenas a consulta, em vários dias de dados, você sempre vai incluir essa consulta ou sempre vai excluí-la. Sempre incluir ou excluir uma consulta é ruim porque:
- O conjunto de treinamento vai ter um conjunto de consultas menos diversificado.
- Seus conjuntos de avaliação serão artificialmente difíceis, porque não se sobrepõem aos dados de treinamento. Na realidade, no momento da veiculação, você terá visto parte do tráfego em tempo real nos dados de treinamento. Portanto, sua avaliação precisa refletir isso.
Em vez disso, você pode gerar um hash na consulta + data, o que resultaria em um hash diferente a cada dia.