Saltar para o conteúdo

Use Case

Validação de moradas para otimizar a taxa de sucesso de entrega

Daniel Azevedo · 17 de março de 2021

Nos últimos anos, a indústria do comércio eletrónico tem crescido significativamente em vários setores como alimentação, retalho e eletrónica. No final de 2020, esse crescimento foi ainda mais expressivo, com uma taxa 3 vezes superior à dos anos anteriores, principalmente devido ao contexto de pandemia que impulsionou o número de compras online.

Com o aumento do comércio eletrónico, a logística das distribuidoras tem enfrentado desafios maiores para manter o sucesso na entrega de um volume superior de encomendas no prazo esperado. Como consequência direta, o número de reclamações relacionadas com encomendas online aumentou significativamente (44% mais reclamações que no ano anterior), sendo o atraso na entrega a razão mais comum.

Existem várias razões que levam a uma entrega falhada, uma delas é uma morada incorreta ou incompleta. Assim, neste artigo, discutem-se diferentes soluções para validar as moradas fornecidas, com o objetivo de maximizar a probabilidade de entregas bem-sucedidas.

Dados históricos a considerar

Para que uma encomenda seja considerada entregue com sucesso, deve chegar no prazo combinado à pessoa correta, utilizando as informações fornecidas pelos clientes no momento da compra. Estas informações, que constituem os dados de entrada, estão exemplificadas na tabela seguinte:

Validação de morada e código postal

Uma forma de melhorar a eficiência da entrega é validar a morada e o código postal fornecidos antes de iniciar o processo de entrega, garantindo que a morada não tem erros ortográficos e que nenhuma informação relevante está em falta.

Validação de morada:

A validação da própria morada pode ser desafiante, uma vez que pode ter um formato mais variável. Por isso, apresentam-se duas abordagens diferentes:

  • Solução supervisionada
  • Solução auto-supervisionada

O primeiro passo, que é útil em ambas as abordagens supervisionada e auto-supervisionada, é extrair características relevantes das moradas fornecidas (e códigos postais), como entrada para os modelos. Essas características são:

  • Nome da rua
  • Número da rua
  • Número da porta (se for um edifício)
  • Nome da localidade
  • Pessoa para receção da encomenda

Um método adequado para extrair este tipo de características de texto de moradas é usar Named Entity Recognition para identificar diferentes entidades, como número de porta, nome de pessoa ou organização. Para formatos mais estruturados (como código postal), expressões regulares também podem ser uma solução viável, onde definimos as regras do formato esperado. Já existem pacotes de software específicos para análise de moradas, como libpostal e pyap.

Com as características extraídas dos dados, podemos aplicar diferentes abordagens para validar as moradas fornecidas.

Solução supervisionada

Nesta primeira abordagem, o objetivo é treinar um modelo capaz de prever se uma determinada morada está correta ou não (devido a informações incompletas ou imprecisas), baseando-se no histórico de sucesso de entregas anteriores. Usando aprendizado supervisionado, podemos seguir duas metodologias diferentes: Machine Learning Tradicional e Deep Learning.

Machine Learning Tradicional

Com uma perspetiva mais tradicional de aprendizado, podemos primeiro fazer a extração de características e alimentar as características resultantes a um modelo de Machine Learning que vai prever a correção de uma determinada morada.

Para além das características da morada, existem outras duas características que podem ser relevantes para determinar o sucesso da entrega: Tipologia do edifício e Tipo de zona

Característica de tipologia do edifício

Esta característica determina se a morada corresponde a uma casa ou a um apartamento, o que pode ser uma informação importante para os modelos.

Uma solução simples e manual seria usar a API do Google Maps para verificar se o número da porta extraído de um nome de rua específico corresponde a um apartamento ou a uma casa.

Outra solução seria analisar o histórico de entregas para a mesma morada (número da porta + nome da rua) e, se o número total de entregas for significativamente superior à média, isso deve indicar um apartamento ou espaço de escritório; se for significativamente inferior, pode apontar para uma casa.

Característica de tipo de zona

Determinar se a entrega é para uma zona residencial ou uma zona comercial/industrial também pode influenciar o sucesso da entrega. Esta informação deve ser outra característica dos dados de entrada. Por exemplo, se for uma morada de escritório, então a informação sobre a pessoa que vai receber a encomenda pode ser mais relevante.

Uma abordagem de vizinho mais próximo seria adequada para extrair esta informação, uma vez que, logicamente, se os edifícios vizinhos corresponderem a casas residenciais, há uma alta probabilidade de a morada em questão também ser residencial.

Portanto, baseando-nos no nome da rua e número da porta, podemos identificar os vizinhos mais próximos, e se a maioria deles for comercial/industrial então estamos a referir-nos a uma morada comercial/industrial; caso contrário, assumir-se-ia que é uma morada residencial.

Variável dependente

Como o nosso modelo tem como objetivo prever se uma determinada morada está correta ou não, apenas as entregas bem-sucedidas e as entregas falhadas devido a moradas não encontradas são relevantes; as outras entregas devem ser filtradas (com base no campo Delivery Status do nosso conjunto de dados original).

Portanto, com base nas diferentes características consideradas, os nossos dados de entrada poderiam ser representados como se segue:

Número da porta*: Se for None ou vazio, significa que é uma casa, caso contrário está num bloco de apartamentos.

Para a parte de modelação, devemos usar um modelo de Classificação (por exemplo, Logistic Regression ou SVM), uma vez que temos uma saída binária.

Deep Learning

Em vez de usar um modelo tradicional de Machine Learning, podemos optar por explorar uma abordagem de Deep Learning para prever se uma determinada morada está correta ou não.

Neste caso, não há um passo de extração de características. Alimentamos diretamente as moradas de entregas anteriores a uma Recurrent Neural Network (ao nível do carácter) e ela aprenderá a representar internamente cada morada (sequência de caracteres), mapeando-a para o respetivo resultado.

Embora estas duas perspetivas, Machine Learning tradicional e Deep Learning, tenham sido apresentadas separadamente, podem sempre ser combinadas usando métodos ensemble (como model stacking ou averaging).

Solução auto-supervisionada

Nesta segunda abordagem, usa-se uma solução auto-supervisionada, onde a ideia é, dado um conjunto de moradas da base de dados, realizar técnicas de aumento de dados para texto e usar essa informação como variável dependente, de forma a que um modelo supervisionado consiga aprender a diferenciar moradas válidas de moradas incorretas.

Em particular, podemos aplicar as seguintes técnicas de aumento de dados de texto:

  • Inserção aleatória: Adição de novas palavras às moradas. Estas podem ser selecionadas aleatoriamente ou podem ser partes de outras moradas válidas.
  • Permutação aleatória: Troca aleatória de caracteres de texto, isto pode ser feito ao nível do carácter ou da palavra. Além disso, a permutação pode ser feita dentro da mesma morada ou combinando diferentes moradas válidas.
  • Eliminação aleatória: Eliminação aleatória de caracteres ou palavras de uma determinada morada.
  • Inserção de duplicados: Adicionar palavras duplicadas às moradas, aumentando o seu ruído.
  • Substituição de sinónimos: Substituir algumas palavras pelos seus sinónimos. Um exemplo seria substituir Street por Road.

Usámos estas técnicas num projeto anterior aqui.

Para garantir que estamos a aumentar moradas válidas, apenas as moradas que resultaram em entregas bem-sucedidas devem ser usadas como entrada para a etapa de aumento de dados.

A figura abaixo ilustra um exemplo de aumento de dados para a geração do conjunto de dados:

Após auto-gerar a variável dependente, podemos treinar um modelo supervisionado (classificação binária) para detetar se uma determinada morada está correta ou não, onde a entrada seria semelhante à tabela apresentada anteriormente.

Curso

The Machine Learning Spectrum

Saiba mais sobre diferentes tipos de aprendizado.

Saiba Mais

Validação de código postal

O código postal pode ser facilmente validado uma vez que tem um formato predefinido (por exemplo, 1234 – 567). Por isso, podemos pesquisar uma base de dados com todos os códigos postais conhecidos e procurar uma correspondência que valide o código postal fornecido.

Se nenhuma correspondência for encontrada, podemos comparar cada código postal conhecido com o fornecido e avaliar a sua semelhança usando critérios específicos como a distância de Levenshtein ou a semelhança do cosseno de N-gramas ou word embeddings. O que for mais semelhante ao código postal fornecido é o candidato mais forte para o código postal correto.

Em seguida, é fornecido um exemplo onde um código postal escrito incorretamente (W) é corrigido utilizando a distância entre word embeddings de 4 outros códigos postais válidos. A figura abaixo ilustra cada código postal como um vetor de duas dimensões, obtido através do word embedding (após redução de dimensionalidade):

Como se pode ver na figura, o código postal inválido (ponto vermelho) está mais próximo de P4 do que de qualquer outro ponto de dados, o que indica que P4 deve ser o código postal correto.

Otimização

Validar as moradas antes de realizar as entregas deve ajudar a otimizar a taxa de sucesso de entrega, no entanto, há alguns critérios a considerar ao analisar o resultado das validações de morada, nomeadamente:

  • Custo de realizar a entrega, baseado na distância e no tempo.
  • Custo de confirmar, através de uma chamada telefónica, que a morada está correta. Além disso, existe também uma probabilidade de fazer a chamada e não conseguir confirmar a morada (por exemplo, chamada não atendida).
  • Confiança da previsão de validação da morada.

Neste caso, a confiança da previsão ajuda a medir a necessidade de uma chamada de confirmação, baseando-se na distância para a morada de entrega. Se a confiança da validação da morada for elevada, então o custo de uma chamada de confirmação pode ser evitado, independentemente da distância para o destino. Mas se a confiança da previsão for baixa, deve existir um equilíbrio entre o custo da entrega e o custo da chamada de confirmação. Quanto maior for a distância para o destino da entrega, maior é a relevância e o valor de fazer uma chamada de confirmação, mesmo tendo a possibilidade de não conseguir confirmação.

O objetivo desta etapa é minimizar o custo global associado a uma determinada ação, considerando a necessidade de uma chamada de confirmação com base na respetiva probabilidade de confirmação, distância e confiança da validação da morada.

Quer discutir esta ideia com mais detalhe?

Marque uma reunião com Pedro Serrano

Conheça o Pedro Saiba Mais

Conclusão

O objetivo deste artigo foi discutir uma solução para validar moradas de entrega, a fim de maximizar a probabilidade de uma entrega bem-sucedida.

Começámos por analisar os dados de entrada mais adequados para este contexto e quais características podem ser relevantes. Depois, explorámos diferentes técnicas para validar moradas e códigos postais fornecidos pelos clientes ao preencher formulários de encomenda.

Para a validação de moradas, descrevemos duas abordagens diferentes: uma abordagem supervisionada em que apresentamos duas perspetivas diferentes para detetar se uma determinada morada é válida ou não: Machine Learning tradicional e Deep Learning. A segunda abordagem foi um modelo auto-supervisionado, onde o aumento de dados permitiu a autoclassificação dos dados, a fim de prever se uma determinada morada é válida ou não. No que diz respeito à validação de códigos postais, apresentámos uma técnica simples baseada em semelhança utilizando word embeddings de moradas para comparar a afinidade entre diferentes códigos postais.

Finalmente, discutimos a análise da relevância da validação de morada para minimizar os custos globais envolvidos.

Se tiver outras ideias sobre como validar moradas, não hesite em contactar-nos!