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!

2
respostas

Faça como eu fiz: construindo um sistema inteligente de recomendação

1. Classificação dos produtos:

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

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

2. Sistema de Recomendação com A*

import heapq

class AStarRecommendation:
    def __init__(self, produtos):
        self.produtos = produtos
        # Grafo simplificado:
        self.grafo = {p: [q for q in produtos if q != p] for p in produtos}

    def heuristica(self, produto_atual, produto_destino):
        
        return 1 - produto_atual.probabilidade_conversao

    def custo(self, produto_atual, produto_vizinho):
        # Custo inverso da probabilidade de conversão:
        return 1 - produto_vizinho.probabilidade_conversao

    def encontrar_caminho(self, inicio, destino):
        open_set = []
        heapq.heappush(open_set, (0, inicio))
        came_from = {}
        g_score = {p: float("inf") for p in self.produtos}
        g_score[inicio] = 0

        while open_set:
            _, atual = heapq.heappop(open_set)

            if atual == destino:
                caminho = []
                while atual in came_from:
                    caminho.append(atual)
                    atual = came_from[atual]
                caminho.append(inicio)
                return list(reversed(caminho))

            for vizinho in self.grafo[atual]:
                tentativo_g = g_score[atual] + self.custo(atual, vizinho)
                if tentativo_g < g_score[vizinho]:
                    came_from[vizinho] = atual
                    g_score[vizinho] = tentativo_g
                    f_score = tentativo_g + self.heuristica(vizinho, destino)
                    heapq.heappush(open_set, (f_score, vizinho))

        return None

3. Testando o Sistema:

# Criação de produtos:
p1 = Produto("Notebook Gamer", "Eletrônicos", 0.9)
p2 = Produto("Mouse Wireless", "Acessórios", 0.7)
p3 = Produto("Cadeira Ergonômica", "Móveis", 0.6)
p4 = Produto("Monitor 4K", "Eletrônicos", 0.8)
p5 = Produto("Headset", "Acessórios", 0.75)

# Lista de produtos:
produtos = [p1, p2, p3, p4, p5]

# Criação de sistema de recomendação:
sistema = AStarRecommendation(produtos)

# Melhor camingo de recomendação:
caminho = sistema.encontrar_caminho(p1, p3)
print("Melhor caminho de recomendação:", caminho)

Melhor caminho de recomendação: [Notebook Gamer (Eletrônicos, 0.9), Cadeira Ergonômica (Móveis, 0.6)]
2 respostas

Olá, Andressa! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a busca A* para recomendação de produtos com Python, utilizou muito bem a heurística baseada em probabilidade de conversão para guiar o caminho e ainda compreendeu a importância da estrutura de grafo para simular relações entre itens.

Uma dica interessante para o futuro é expandir o modelo para considerar categorias ou afinidade entre produtos, não apenas a probabilidade de conversão. Assim:

def custo(self, produto_atual, produto_vizinho):
    # Custo ajustado considerando categoria
    if produto_atual.categoria == produto_vizinho.categoria:
        return (1 - produto_vizinho.probabilidade_conversao) * 0.8
    else:
        return 1 - produto_vizinho.probabilidade_conversao

Isso faz o sistema favorecer recomendações dentro da mesma categoria, simulando afinidade entre produtos relacionados.

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

  • Adicionar pesos personalizados: considerar histórico de compras ou preferências do cliente.
  • Testar diferentes heurísticas: comparar resultados com heurísticas baseadas em distância ou relevância.
  • Visualizar o grafo: usar bibliotecas como networkx para entender melhor os caminhos de recomendação.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução do navegador.

Ah, uma pergunta: Você acredita que sistemas de recomendação devem priorizar produtos com maior probabilidade de conversão imediata ou equilibrar com diversidade para estimular descobertas do cliente?

Abraço e bons estudos!

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

Muito obrigada pelo retorno, Daniel!