Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

(Fundamentos de IA: explorando a estrutura e abordagens de sistemas inteligentes) Faça como eu fiz: construindo um sistema inteligente de recomendação

Construindo um sistema inteligente de recomendação com A*

Para desenvolver um sistema de recomendação em uma loja online, a ideia é modelar os produtos como nós de um grafo e utilizar o algoritmo A* para encontrar os caminhos mais promissores entre itens, levando em consideração a probabilidade de conversão como heurística.

1. Definição dos produtos

Criei uma classe Produto para representar cada item do sistema, contendo informações essenciais como nome, categoria e probabilidade de conversão. Esse último atributo será fundamental para orientar a recomendação.

2. Construção do grafo e do sistema

Em seguida, implementei a classe AStarRecommendation, responsável por montar um grafo onde cada produto se conecta aos demais. Isso permite explorar diferentes caminhos de recomendação entre os itens disponíveis.

3. Aplicação do algoritmo A*

O algoritmo A* foi utilizado para encontrar o melhor caminho entre dois produtos. Ele combina:

g(n): custo acumulado até o nó atual
h(n): heurística baseada na probabilidade de conversão

A função total é dada por:
f(n) = g(n) + h(n)

Com isso, o sistema prioriza caminhos que levam a produtos mais relevantes para o usuário.

4. Heurística utilizada

A heurística foi definida com base na probabilidade de conversão do produto. Quanto maior essa probabilidade, mais atrativo o produto se torna dentro da busca, ajudando a guiar o algoritmo para melhores recomendações.

5. Teste do sistema

Foram inseridos produtos com diferentes categorias e taxas de conversão, e o sistema foi testado buscando o melhor caminho entre um produto inicial e um produto alvo. O resultado foi uma sequência de recomendações mais alinhadas ao potencial de compra do usuário.

Código completo com a implementação desses conceitos.

import heapq

class Produto:
    def __init__(self, nome, categoria, conversao):
        self.nome = nome
        self.categoria = categoria
        self.conversao = conversao

    def __repr__(self):
        return f"{self.nome} ({self.categoria})"


class AStarRecommendation:
    def __init__(self, produtos):
        self.produtos = produtos
        self.grafo = self.criar_grafo()

    def criar_grafo(self):
        grafo = {}
        for p in self.produtos:
            grafo[p] = [x for x in self.produtos if x != p]
        return grafo

    # Heurística: quanto maior a conversão, melhor
    def heuristica(self, produto):
        return -produto.conversao

    def a_star(self, inicio, objetivo):
        fila = []
        heapq.heappush(fila, (0 + self.heuristica(inicio), 0, inicio))

        visitados = set()
        pais = {}

        while fila:
            _, g, atual = heapq.heappop(fila)

            if atual in visitados:
                continue

            visitados.add(atual)

            if atual == objetivo:
                break

            for vizinho in self.grafo[atual]:
                if vizinho not in visitados:
                    custo_g = g + 1
                    f = custo_g + self.heuristica(vizinho)
                    heapq.heappush(fila, (f, custo_g, vizinho))
                    pais[vizinho] = atual

        # reconstrução do caminho
        caminho = []
        atual = objetivo

        while atual in pais:
            caminho.insert(0, atual)
            atual = pais[atual]

        caminho.insert(0, inicio)
        return caminho
        
        
# Testando o sistema	
        
produtos = [
    Produto("Notebook Gamer", "Eletrônicos", 0.95),
    Produto("Mouse RGB", "Acessórios", 0.80),
    Produto("Teclado Mecânico", "Acessórios", 0.85),
    Produto("Monitor 144Hz", "Eletrônicos", 0.90),
]

recomendador = AStarRecommendation(produtos)

inicio = produtos[0]
objetivo = produtos[2]

caminho = recomendador.a_star(inicio, objetivo)

print("Recomendação gerada:")
for p in caminho:
    print(p)
1 resposta

Olá, Eduardo! Como vai?

Parabéns pela realização das atividades!

Você apresentou um projeto muito interessante, mostrando clareza na definição da classe Produto, organização na construção do grafo e precisão na aplicação do algoritmo A*. Essa combinação evidencia domínio de conceitos de inteligência artificial e criatividade na aplicação prática para sistemas de recomendação.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Avaliação: testar o sistema com diferentes cenários e métricas de desempenho.
  • Personalização: adaptar a heurística para considerar preferências individuais dos usuários.
  • Escalabilidade: expandir o grafo para milhares de produtos sem comprometer a eficiência.

Ah uma pergunta: O que você considera mais desafiador nesse projeto, ajustar a heurística para refletir melhor o comportamento do usuário ou otimizar o algoritmo para lidar com grandes volumes de produtos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!