Sistema completo de análise de NPS (Net Promoter Score) para e-commerce utilizando análise de sentimento com IA via Ollama.
- Backend: FastAPI + SQLAlchemy (SQLite)
- Frontend: Streamlit
- IA: Ollama (análise de sentimento com LLM)
- Visualização: Plotly
ecommerce_nps/
├── data/
│ └── ecommerce_nps.db # Banco de dados SQLite (gerado automaticamente)
├── backend.py # API FastAPI com integração Ollama
├── fake_data.py # Script para gerar 1000 avaliações fake
├── frontend.py # Dashboard Streamlit
├── requirements.txt # Dependências do projeto
└── README.md # Este arquivo
cd ecommerce_nps
pip install -r requirements.txtLinux:
curl -fsSL https://ollama.com/install.sh | shmacOS:
brew install ollamaWindows: Baixe o instalador em: https://ollama.com/download
ollama serveO Ollama rodará em http://localhost:11434
Em outro terminal, execute:
ollama pull gemma:2bNota: O modelo
gemma:2bé recomendado por ser mais rápido (~2-3x) e menor (~1.7GB), ideal para análise de sentimento.
Modelos alternativos (caso queira testar outros):
ollama pull phi3(mais preciso, mas mais lento)ollama pull llama2(mais robusto, porém pesado)ollama pull mistral(boa alternativa rápida)
Execute o script para gerar 100 avaliações fake:
python fake_data.pyVocê verá uma mensagem de confirmação:
✅ Banco populado com sucesso! Total: 100 avaliações.
uvicorn backend:app --reloadA API estará disponível em: http://localhost:8000
Documentação interativa: http://localhost:8000/docs
Em outro terminal:
streamlit run frontend.pyO dashboard abrirá automaticamente em: http://localhost:8501
- Acesse o dashboard Streamlit
- Na barra lateral, clique em "🤖 Rodar Análise de Sentimento (Ollama)"
- Aguarde o processamento (pode levar alguns minutos para 100 avaliações)
- O dashboard será atualizado automaticamente
Após o processamento, você verá:
- NPS Score: Métrica principal (% Promotores - % Detratores)
- Distribuição: Quantidade de Promotores, Neutros e Detratores
- Gráficos:
- Gráfico de pizza com distribuição percentual
- Gráfico de barras comparativo
- Tabela: Avaliações detalhadas com filtros
- Use os filtros para visualizar categorias específicas
- Ajuste o número de linhas exibidas
- Ordene por nota para identificar melhores/piores avaliações
Retorna todas as avaliações do banco.
Calcula e retorna o NPS com estatísticas detalhadas.
Resposta:
{
"nps_score": 15.5,
"total_avaliacoes": 100,
"promotores": 350,
"neutros": 300,
"detratores": 350,
"percentual_promotores": 35.0,
"percentual_neutros": 30.0,
"percentual_detratores": 35.0
}Processa todas as avaliações pendentes usando Ollama.
Resposta:
{
"total_processadas": 100,
"total_pendentes": 100
}- 🟢 Promotores (8-10): Clientes entusiastas que recomendam ativamente
- 🟡 Neutros (5-7): Clientes satisfeitos mas não entusiastas
- 🔴 Detratores (0-4): Clientes insatisfeitos que podem prejudicar a marca
NPS = % Promotores - % Detratores
- NPS > 50: Excelente! 🎉
- NPS 0-50: Bom 👍
- NPS < 0: Precisa melhorar
⚠️
Solução: Certifique-se de que o Ollama está rodando:
ollama serveSolução: Baixe o modelo:
ollama pull gemma:2bSoluções:
- Certifique-se de estar usando o modelo otimizado
gemma:2b(mais rápido) - Se ainda estiver lento, tente um modelo ainda menor (não recomendado para qualidade)
- Use uma GPU se disponível (Ollama detecta automaticamente)
Solução: Execute o script de população:
python fake_data.pyNo arquivo backend.py, linha 65, altere:
def get_ollama_sentiment_score(texto: str, model: str = "gemma:2b"):Para outro modelo de sua preferência:
def get_ollama_sentiment_score(texto: str, model: str = "phi3"): # Mais preciso
# ou
def get_ollama_sentiment_score(texto: str, model: str = "llama2"): # Mais robustoLembre-se: Modelos maiores são mais precisos, mas mais lentos.
Edite o prompt na função get_ollama_sentiment_score() em backend.py para personalizar a análise.
No arquivo fake_data.py, altere a linha final:
popular_banco(100) # Altere para o número desejadoEste projeto é de código aberto e está disponível para uso educacional e comercial.
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou pull requests.
Para dúvidas ou problemas, abra uma issue no repositório do projeto.
Desenvolvido com ❤️ por https://github.com/albertohco usando FastAPI, Streamlit e Ollama