Não faça modelos arrogantes | R-bloggers

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


A arrogância não é de boa qualidade para seus modelos.

É um fato raramente reconhecido que os modelos que os cientistas produzem geralmente não são suficientemente robustos ou tolerantes a falhas para realmente serem colocados em produção. Claro, você pode confiar em suas previsões quando os dados de entrada forem semelhantes aos dados de treinamento e validação. Qualquer cientista de dados pode criar um objeto de modelo, transmitir dados no mesmo formato que os dados de treinamento e obter previsões aparentemente confiáveis.

No mundo real, as coisas são sempre mais confusas do que você espera. Quando os cientistas de dados lançam modelos por cima do muro, os engenheiros da ML ou o departamento de TI geralmente precisam reconstruir os modelos com grades de proteção para garantir que sejam úteis na produção. Como cientistas de dados, devemos fazer melhor – e acabar com a arrogância de supor que nossos modelos funcionem como pretendemos em todos os cenários de produção. Nunca devemos dizer: “Aqui está o meu caderno Jupyter; meu trabalho está feito! ” No mínimo, devemos começar documentando o comportamento esperado das variáveis ​​recebidas para ajudar os engenheiros de ML a escrever testes de tempo de execução mais facilmente. Ainda melhor, recomendo adicionar uma camada de teste de unidade para ajustar as previsões do modelo.

Neste artigo, mostrarei um exemplo simples de tratamento de erros usando R com condições lógicas envolvendo a função de previsão de um modelo. Usuários de Python provavelmente estão familiarizados com assert, try except e os operadores lógicos usuais para realizar muitas das mesmas coisas abordadas neste artigo. Este artigo usa R como exemplo, porque muitos cientistas de dados que usam R não expõem seus modelos como pontos finais de produção, o que significa que esses aspectos de “humildade” do modelo podem ser novos para eles.

No final, o objetivo é adicionar uma camada de proteção ao seu modelo para impor os comportamentos esperados, para que ele possa suportar discrepâncias, ser tolerante a falhas e, em alguns casos, substituir uma previsão por um valor seguro.
Esses testes de tempo de execução e proteções codificadas ajudam a tornar os modelos tão seguros para produção quanto uma solicitação POST em um servidor opencpu. A inclusão desses comportamentos de previsão adicionais em sua função de modelo criará confiança entre as partes interessadas de que seu modelo não está se comportando de maneira arrogante e agregará valor, apesar de contribuições outlier ou inesperadas.

Leia Também  Mesas agradáveis ​​em r | R-bloggers

Exemplo de configuração

Neste exemplo, você usará este pequeno conjunto de dados de amostra para criar um modelo de propensão ao cliente. Esses dados falsos têm os resultados de uma campanha de marketing para uma oferta de empréstimo de carro. As variáveis ​​de entrada incluem a marca atual do carro e o saldo recente da conta poupança. Nosso modelo de classificação aprenderá quais carros fazem e os saldos das contas contribuem para aceitar a oferta de marketing. Obviamente, no mundo real, você teria mais dados e seguiria práticas mais rigorosas de ciência de dados, como particionamento, mas neste exemplo, usaremos alguns atalhos, pois estamos focando na camada de previsão.

o [rpart] library é usada para particionamento recursivo para construir nossa árvore de decisão. Da mesma forma, o rpart.plot A biblioteca nos ajudará a construir rapidamente um visual de aparência decente da nossa árvore. Em seguida, usamos yardstick para obter facilmente métricas de modelo e ggplot2 construir um enredo em mosaico. O código abaixo simplesmente carrega os dados com read.csv() e examina as seis primeiras linhas com head() para você ter uma noção das entradas.

# Libs
library(rpart)
library(rpart.plot)
library(yardstick)
library(ggplot2)

# Read in the data
fakeCustomers 

Vamos construir uma árvore de decisão simples

Agora aplicamos o rpart() função para construir nossa árvore de decisão. Como você está aceitando todos os parâmetros padrão do modelo, você só precisa passar a fórmula do modelo Y_AcceptedOffer ~. e os dados para fazer a árvore. No entanto, usando o período (Y_AcceptedOffer~.,) na fórmula do modelo adiciona risco ao comportamento do seu modelo. Suponha posteriormente que os dados de treinamento subjacentes sejam alterados para incluir colunas adicionais. Usando o período, o modelo simplesmente herdará todas as colunas não definidas como a variável Y. Portanto, se você reconstruir o modelo fornecendo esse código com dados que foram alterados sem declarar explicitamente as variáveis ​​x, convide o vazamento de destino ou o ajuste excessivo, mesmo sem saber. Portanto, geralmente é uma boa ideia declarar variáveis ​​x explicitamente na fórmula. No final, a resultante fit O objeto é um modelo que não queremos simplesmente passar para o departamento de TI. Vamos definir também uma resposta de modelo segura quando o ajuste obtiver um valor desconhecido!

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
# Fit the model
fit 

Faça algumas previsões

Vamos garantir que nosso modelo funcione conforme o esperado com entradas perfeitas. Neste ponto do seu fluxo de trabalho, você deve avaliar o desempenho do modelo em relação a um conjunto de treinamento e validação. Aqui usamos predict() nos dados originais, examine uma parte dele com tail(), então construa uma matriz de confusão simples. Por fim, você cria uma matriz de confusão com table() e depois aninhar yardstickÉ conf_mat() dentro summary() para obter 13 métricas de modelo, incluindo precisão. Lembre-se de que os profissionais de marketing não têm orçamentos ilimitados; portanto, você deve se preocupar mais com a precisão nos 1% ou 5% dos possíveis clientes em potencial, e não apenas na precisão.

# Get predictions
pred 
# Simple Confusion Matrix
(confMat 
# Obtain model metrics
summary(conf_mat(confMat))

Inspeção visual

Além do KPI numérico, você pode inspecionar a matriz de confusão visualmente com um gráfico de mosaico. Neste exemplo, um gráfico de mosaico terá retângulos representando cada seção da matriz de confusão, como positivos verdadeiros e falsos positivos. A área de cada retângulo corresponde ao valor da matriz de confusão. Essa visualização permite que você entenda facilmente o equilíbrio entre as tarefas de sua turma e as reais. O código abaixo aninha a matriz de confusão original na função aut_ plot do conf_mat e do ggplot2 para criar um gráfico de mosaico básico.

autoplot(conf_mat(confMat))

Um benefício do uso de um modelo simples é que você pode interrogar o comportamento do modelo. Para árvores de decisão, você pode usar a função rpart.plot () para visualizar o resultado. Esse gráfico permitirá que você entenda os valores de divisão e a importância das variáveis ​​em cada nó.

rpart.plot(fit, roundint = F)

Tudo bem, certo? Não tão rápido.

Não envie esse código de modelo para a TI e espere uma resposta calorosa! Claro, funciona bem com essas perspectivas falsas – porque são exatamente como os dados de treinamento. Mesmo na construção de modelo normal, você geralmente passa em uma partição com distribuições semelhantes e certamente os mesmos níveis de fator. Mas, na realidade, a integridade dos dados e outros fatores podem ser problemas com os dados reais recebidos,e eles podem quebrar seu modelo.

fakeNew 

Adicione uma camada de proteção para suas previsões.

Nesta seção, você explora o que acontece quando a marca de um carro é alterada de Lexus para lexus. Erros de entrada de dados e chaves incorretas acontecem o tempo todo porque as pessoas estão envolvidas. Fatores de digitação incorreta e entradas numéricas de transposição geralmente interrompem os modelos na produção, como você verá se executar a previsão (ajuste, falsoRecord) abaixo.

Leia Também  Notícias manchetes análise de texto

Erro: factor carMake tem novo nível lexus

# Entry Form Error
fakeRecord 

Adicionando uma camada humilde ao seu modelo

Vamos adicionar uma camada protetora de previsão, verificando se todas as entradas fazem sentido e, se for o caso, chame prever (). Nesse código, você escreve uma função de invólucro chamada humblePredict () que aceita as novas observações a serem pontuadas. Dentro de um loop for, a função verifica:

  1. Que cada linha faz parte de um quadro de dados usando is.data.frame
  2. Que as colunas do quadro de dados correspondem à fórmula de treinamento do modelo usando a correspondência %in% operador.
  3. Que o valor da observação no carMake A coluna é um nível esperado dos dados de treinamento do modelo. Esta é outra chamada do operador de correspondência com %in%
  4. Finalmente, que o 'RecentBalance' coluna é um valor numérico usando o is.numeric função.

Se todas essas quatro condições lógicas forem atendidas, a instrução if chama simplesmente predict() como sempre. No entanto, as condições lógicas ocorrem dentro de uma instrução if-else. Portanto, se alguma dessas condições retornar um FALSE, o bloco de código falso será executado. Neste exemplo, a resposta padrão é a resposta do modelo “seguro” de “DidNotAccept”. Esse nível é seguro porque significa que a empresa não gastaria dinheiro em marketing para esse cliente em potencial. Obviamente, em seu próprio trabalho, você pode ter um erro mais explícito, usar um modelo diferente ou simplesmente retornar o valor médio de Y do seu conjunto de treinamento. O ponto é que você tem controle completo do comportamento do código falso e deve garantir que seu modelo tenha guardrails correspondentes à necessidade do negócio. Esse tipo de agrupamento de funções ajuda a ditar como o seu modelo deve se comportar com entradas incorretas. Deseja um erro, um valor seguro, NA ou outra saída quando um modelo é confrontado com entradas incorretas?

humblePredict 

Esta é apenas a ponta do iceberg para tornar os modelos mais robustos na produção. Você pode escrever o código no humblePredict para alterar entradas numéricas externas ou alterar os níveis dos fatores para os mais frequentes se um nível for desconhecido. Se você quiser saber mais, comece com os dois testthat() e assertive() bibliotecas para teste de unidade e teste de tempo de execução, respectivamente. Nenhum modelo deve ser enviado à TI sem asserções ou pelo menos documentação para comportamentos seguros.

Leia Também  Exploração interativa das estratégias de saída COVID-19

Descubra como criar IA em que você pode confiar com o DataRobot.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: e-mail, twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br