Como o aprendizado de máquina pode reduzir o custo de pesquisa para encontrar melhores caminhadas

Perry Johnson em Rumo à Ciência dos Dados Seguir no dia 9 de julho · 9 min ler

Eu fui recentemente em um acampamento de fim de semana em The Enchantments , que fica a pouco mais de duas horas de carro de onde eu moro em Seattle, WA. Para planejar a viagem, contamos com a Washington Trails Association (WTA) e alguns outros recursos para nos certificarmos de que tivéssemos as melhores rotas de trilha e pontos de acampamento para cada dia. Muitos desses recursos de aventuras ao ar livre podem ajudar as pessoas a planejar acampamentos de vários dias, descobrir onde fazer uma caminhada com os pais ou percorrer Aasgard Pass corretamente, um ganho de elevação de 2300 pés em menos de 1,6 km. Mas ainda há algo faltando.

A única coisa que eu realmente gostaria que todos esses recursos de caminhadas tivessem era sugestões de caminhadas personalizadas com base em caminhadas que eu gostei no passado (ou seja, se eu gostasse de caminhar X, eu gostaria de caminhar porque tem características semelhantes) ou com base em como eu avaliei caminhadas no passado (ou seja, recomendações de livros personalizados da Goodreads com base nos seus comentários).

Muitos desses aplicativos de aventura ao ar livre oferecem aos usuários a capacidade de pesquisar por meio de filtragem personalizada de atributos específicos de trilhas (distância, ganho de elevação, dificuldade etc.), mas não possuem algoritmos inteligentes de recomendação que reduzam os custos de pesquisa usuários realmente gostam .

Eu me propus a fazer as seguintes perguntas:

1. Que tipos de recomendações inteligentes seriam úteis para um ávido caminhante?

2. Posso criar um mecanismo de recomendação personalizado que aproveite as avaliações de trilhas?

3. Posso criar uma fórmula do Power Ratings que combine o número total de resenhas e a classificação média de um determinado aumento?

Para responder a essas perguntas, analiso como criar um aplicativo da Web de aprendizado de máquina de pilha completa, que forneceria recomendações inteligentes de trilhas com base em atributos de trilha de caminhada e comentários de usuários. Isso ajudaria os caminhantes ávidos a encontrar trilhas melhores.

Por que não apenas construir este aplicativo de aprendizado de máquina?

Na verdade, já construí e implantei este aplicativo de aprendizado de máquina, mas é uma violação dos Termos de Serviço de muitas empresas raspar e usar seus dados para que eu o coloque offline juntamente com o blog correspondente e o repositório do GitHub. Eu certamente era ingênuo e, na época, não compreendi completamente as convenções em torno da raspagem.

Eu me sinto muito mal com isso, pois não estava familiarizado com o modo como os dados de raspagem eram vistos. Eu fiquei profundamente interessado em resolver este problema e queria adicionar um recurso inteligente em cima de um aplicativo que eu realmente amo, para que meus amigos e eu pudéssemos encontrar melhores caminhadas. Eu esperava que isso gerasse ainda mais tráfego para o aplicativo subjacente como resultado.

Infelizmente, as coisas não funcionaram assim – e a empresa educadamente me pediu para derrubar o aplicativo que eu criei. Então, para o restante deste post, compartilharei uma visão de alto nível de como eu criaria um aplicativo hipotético de recomendações de trilhas. Evitarei entrar em detalhes sobre como extrair ou extrair dados e focar no pipeline.

Coleta de Dados e Pipeline de Aprendizado de Máquina

Pipeline de dados completos hipotéticos

Dados

Em um mundo perfeito, eu estaria retirando dados diretamente de um banco de dados interno. Em um mundo hipotético, eu escreveria um script de scraping da Web em Python para pegar o atributo de trilha de caminhada e os dados de revisão de caminhada do usuário. Para o estado de Washington, isso me deixaria dados de ~ 3.500 aumentos e ~ 200.000 comentários de usuários que eu gostaria de armazenar em um banco de dados MongoDB que eu conectei localmente.

Recursos da trilha de caminhada

Esses são os recursos da trilha de caminhada que eu gostaria de usar para criar um algoritmo de caminhada semelhante e um algoritmo de personalização com base nas classificações do usuário.

Recursos de trilha de caminhada gerados sinteticamente

As características numéricas seriam distância total (em milhas), ganho de elevação (em pés) e a gravidade da elevação. Os recursos restantes seriam categoricamente marcados com um valor de 0 para "Não" ou 1 para "Sim", dependendo se o recurso descreveu uma determinada caminhada. A maioria desses recursos pode ser criada diretamente da limpeza dos dados brutos armazenados no MongoDB. Eu também gostaria de projetar alguns recursos adicionais. Eu incluiria:

· Severidade de Elevação : Elevação em pés ganhos por milha de distância de caminhada

· Tráfego de pedestres: Eu analisava um parágrafo de resumo da trilha e as análises de usuários para uma linguagem que descrevia o tráfego de pedestres típico para uma determinada trilha. Estes seriam categorizados como Pesado, Moderado, Leve e Desconhecido

Sistemas de recomendação

Para construir os modelos de aprendizado de máquina, eu aproveitaria a biblioteca de aprendizado de máquina de código aberto da Apple, Turi Create , já que é incrivelmente flexível desenvolver modelos de recomendação personalizados.

Semelhança do Conteúdo do Item

Esta recomendação apenas leva em conta os atributos da trilha de caminhada. Ele analisa cada par distinto de caminhadas e calcula o quão semelhantes eles são baseados nos recursos da trilha de caminhada. Essa pontuação de similaridade é calculada calculando primeiro a similaridade entre cada característica e, em seguida, leva uma média ponderada dessas para obter a similaridade final. Isso é útil porque um usuário pode especificar uma caminhada que eles sabem que eles gostam e este recomendador fornecerá caminhadas que são mais semelhantes a isso.

Exemplo: “Se você gosta da Trilha do Monte Si, aqui estão as caminhadas que têm os atributos de caminhada mais similares para a Trilha do Monte Si.”

Modelo Eficácia Heurística

Antes de construir o modelo, eu teria alguns exemplos de trilhas específicas onde eu poderia testar o algoritmo para a qualidade de suas recomendações. Estes são alguns exemplos que eu conheço com base em minha própria experiência:

Pike Place Market ? provavelmente deve receber recomendações para. outros passeios urbanos de curta distância e baixo ganho de elevação

Lake Serene Trail ? deve provavelmente obter uma recomendação Colchuck Lake, pois ambos são o tráfego elevado de pé, caminhadas desafiadoras de distância semelhante com um lago alpino

Mock Design de como testar a eficácia do algoritmo de caminhada semelhante em relação à expectativa estabelecida

No exemplo acima, ambos os casos de teste conferem como deveriam, com o Pike Place Market retornando outros passeios urbanos curtos e o Lake Serene Trail retornando o Lago Colchuck como sua segunda caminhada mais similar.

Fatoração de Ranking

Se tivéssemos as classificações reais de subida dadas pelos usuários, a escolha do modelo ideal dependeria se quiséssemos prever a classificação que um usuário daria para uma determinada subida, ou se queríamos que o modelo recomendasse aumentos que acredita que o usuário avaliaria altamente . Provavelmente, nos preocupamos mais com o desempenho do ranking , já que gostaríamos de recomendar aumentos que os usuários provavelmente dariam uma alta taxa.

O RankingFactorizationRecommender recomenda aumentos semelhantes aos aumentos em um conjunto de dados de observações analisadas do usuário e aqueles que seriam altamente avaliados pelo usuário. A intuição por trás dessa recomendação é que deve haver alguns recursos latentes que determinam como um usuário avalia uma caminhada.

Construindo um Sistema de Recomendação de Caminhadas com Fatoração de Matriz

Exemplo: “Para Perry, um usuário que classificou alguns aumentos, aqui estão os aumentos que Perry provavelmente classificaria muito bem.”

Construindo este modelo

Na maioria dos aplicativos externos, os usuários avaliam explicitamente as caminhadas com o número de estrelas (0 = não gostar forte, 5 = gostar forte). Se tivéssemos ~ 200.000 destas avaliações (registros dizendo que o usuário A caminhada avaliado X com Y estrelas) do passado, então poderíamos construir o recommender Factorization Ranking. Eu usaria uma técnica chamada validação de divisão: onde tomamos apenas um subconjunto (80%) dessas classificações (chamado de conjunto de treinamento) para treinar o modelo e, em seguida, pedimos ao modelo para prever as classificações dos 20% que possuímos. oculto (o conjunto de teste).

Por exemplo, pode acontecer que um usuário de teste avalie alguma caminhada com 4 estrelas, mas seu modelo prevê 3,5, portanto, ele tem um erro de 0,5 nessa classificação. Em seguida, calculamos a média dos erros de todo o conjunto de testes usando a fórmula de raiz quadrada do erro médio (RMSE) para obter um resultado final. Isso é como quantificar o desempenho de previsão deste sistema de recomendação. Eu iria iterar através de alguns valores de hiper-parâmetros diferentes para este modelo para minimizar o RMSE nos dados do conjunto de treinamento antes de implementá-lo no aplicativo.

Popularidade

Os recomendadores baseados em popularidade não são inteligentes, mas são um produto de dados útil e uma solução potencial para o problema de partida a frio se um usuário não tiver caminhado em uma área específica antes (ou nunca tenha caminhado antes!). Estes são geralmente divertidos e uma linha de base útil na busca de caminhadas.

Número de avaliações

Isso recomendaria as caminhadas mais populares com base no número de comentários.

Estrelas Médias (Especifique um Número Mínimo de Comentários para Qualificar)

Isso recomendaria as caminhadas mais populares com base nas classificações. Eu começaria analisando a distribuição do número de resenhas para ter uma ideia de onde estão as resenhas. Neste conjunto de dados gerados sinteticamente, fica claro que as altas de 5 estrelas (pontuação perfeita) são dominadas por um número baixo de avaliações. Portanto, eu determinaria que uma caminhada precisava ter um mínimo de 100 comentários para contar com esse recomendador. Por exemplo, eu gostaria de garantir que uma caminhada com ~ 6 comentários com uma pontuação de 5 estrelas não fosse incluída nisso.

Gerado Synthetically: 5 avaliações de estrelas dominadas pelo número baixo de caminhadas comentadas

Classificações de energia

Eu criaria uma pontuação personalizada de Power Ratings variando de zero a 100 que mesclasse o número de resenhas e a classificação média na mesma pontuação. Uma caminhada avaliado como 4,9 estrelas com apenas 10 avaliações provavelmente não deve ser classificado como altamente como uma caminhada classificada como 4,6 estrelas com 1000 comentários.

Gerado Sinteticamente: Distribuição dos Ratings de Caminhada antes da mistura no Número de Revisões

Primeiro passo: a fórmula

Potência nominal = (Número de avaliações / (Número de avaliações + Número de avaliações em 90% quantile) * Classificação) + ((Número de avaliações em 90% quantile / (Número de avaliações em 90% quantile + Número de avaliações) * Média Classificação em todas as caminhadas)

Gerado Sinteticamente: Distribuição dos Ratings de Caminhada após aplicar a fórmula para mesclar o número de resenhas e classificações

Etapa dois: MinMaxScaler

O MinMaxScaler dimensiona e transforma os dados de forma que eles estejam em um intervalo entre zero e um, com base em uma fórmula, usando os valores mínimo e máximo dos dados especificados. Eu então multiplicaria cada valor por 100 para dimensionar a Pontuação de Classificações de Energia para um intervalo entre zero e 100.

Sinteticamente gerados: Distribuição de classificações de potência, uma vez escalonados para valores entre 0 e 100

A aplicação

Assim que tivermos modelos de aprendizado de máquina viáveis para recomendações de trilhas, eu criaria o aplicativo usando o framework da Web Flask escrito em Python. Depois de gastar cerca de duas semanas escrevendo código para desenvolver a funcionalidade principal do aplicativo Web com suporte a arquivos HTML, CSS e JavaScript, eu seria capaz de enviá-lo como um aplicativo da Web de várias páginas na plataforma de nuvem da Heroku.

Encontre uma caminhada parecida com a que você já gostou

Para obter aumentos semelhantes aos que você tenha gostado, um usuário poderia simplesmente especificar uma caminhada que eles gostaram e, em seguida, uma lista do n caminhadas mais semelhantes com informações trilha, juntamente com um link incorporado de volta para o respectivo perfil seria fornecido.

Encontre caminhadas personalizadas com base nas suas classificações

Idealmente, teríamos integração com os dados de login e perfil de usuário de uma empresa de aventura ao ar livre, mas se isso não fosse possível, eu poderia criar uma ID de usuário exclusiva que mapeasse o nome completo de um usuário.

Para obter análises personalizadas, um usuário digita o nome completo associado à conta, no meu caso: Perry Johnson. Em seguida, uma lista dos top n provável caminhadas que eu realmente gostaria com base nos comentários seria fornecido juntamente com informações trilha e um link incorporado de volta para o respectivo perfil de caminhada.

Conclusão

Ao construir esse novo produto de dados, aproveitando os atributos da trilha de caminhada e as avaliações dos usuários, nós forneceríamos recomendações mais inteligentes de caminhadas para os caminhantes ávidos. Esse seria o primeiro conjunto de algoritmos de aprendizado de máquina que personalizaria a experiência do usuário e diminuiria o custo da pesquisa para encontrar trilhas melhores.

Comentários ou Perguntas? Por favor, envie um email para: perryrjohnson7@gmail.com

Você pode conferir alguns dos meus outros trabalhos:

Como o aprendizado de máquina pode ajudar você a carregar seus e-scooters

Engenharia Reversa do Algoritmo de Partida

Texto original em inglês.