Pular para o conteúdo principal

Data science em vendas: análise de sentimento do cliente

Descubra como usar data science para analisar as emoções dos clientes e gerar insights valiosos para otimizar vendas.
Atualizado 31 de ago. de 2026  · 9 min lido

Explorar com IA

ChatGPTClaudePerplexity

Artificial Intelligence Concept Illustration

Casos de uso de data science podem estar ligados a praticamente qualquer setor em que um grande volume de dados é ou pode ser acumulado.  Lojas físicas e sites de e-commerce são onde acontece a experiência real do cliente atraído por campanhas de marketing e onde são coletados dados valiosos de compra de uma marca ou empresa. É ali que as pessoas decidem se realmente querem comprar um produto, se têm interesse em adquirir algo que antes não planejavam, quanto estão dispostas a pagar, se voltariam a essa loja e qual avaliação deixariam sobre a experiência de compra. 

De fato, avaliações de clientes são uma fonte rica de dados para analisar e entender o que pode ser mudado ou reforçado em todo o processo de vendas. Olhar para esses dados dessa forma pode ajudar a reduzir custos, aumentar a eficiência operacional, melhorar a experiência do cliente, revelar novas oportunidades, fazer o negócio crescer e, no fim, aumentar a receita. Vamos ver de perto como essas informações valiosas podem ser analisadas e modeladas com algoritmos de data science para extrair insights ocultos e captar a mensagem geral de cada cliente.

Caso de uso de data science em vendas: analisando o sentimento do cliente 

A análise de sentimento do cliente é um processo automatizado para identificar as emoções dos usuários ao utilizar produtos ou serviços de uma empresa. Normalmente, trabalha-se com dados textuais não estruturados coletados de pesquisas on-line, redes sociais, tickets de suporte, formulários de feedback, avaliações de produtos, fóruns, ligações telefônicas, e-mails e chatbots. Em machine learning, a análise de sentimento é feita via processamento de linguagem natural (NLP), que aplica métodos estatísticos e linguísticos para extrair sentimentos positivos, negativos e neutros diretamente do texto. Essencialmente, ela gera dois parâmetros:

  • Polaridade: indica se o sentimento é positivo ou negativo.
  • Magnitude: indica a intensidade desse sentimento.

A análise de sentimento é uma ferramenta essencial para qualquer negócio moderno, pois ajuda a obter insights acionáveis, identificar e corrigir problemas recorrentes que deixam clientes insatisfeitos, reforçar recursos do produto ou serviço que geram emoções positivas e, no geral, tomar decisões mais eficientes e orientadas por dados. Em um nível mais detalhado, a análise de sentimento permite:

  • melhorar o atendimento e, consequentemente, a experiência do cliente,
  • aumentar a fidelidade,
  • reduzir a taxa de churn,
  • evoluir produtos e serviços no tempo certo,
  • otimizar campanhas de marketing,
  • antecipar novas tendências e mercados,
  • preservar a alta reputação da empresa,
  • aumentar os lucros.

Como em qualquer tarefa de análise de texto, alguns desafios podem surgir ao realizar a análise de sentimento. Por exemplo, o algoritmo de NLP pode não captar sarcasmo em algumas avaliações e categorizá-las de forma incorreta. Às vezes, também pode falhar ao decifrar abreviações muito específicas ou gírias pouco usuais.

Preparando o dataset

Vamos explorar na prática como funciona a análise de sentimento usando um dataset de avaliações de filmes do IMDB:

import pandas as pd

movies = pd.read_csv('movies.csv', index_col=0).reset_index(drop=True)
print(f'Number of reviews: {movies.shape[0]:,}\n')
print(movies.head())
Number of reviews: 7,501

                                              review  label
0  This short spoof can be found on Elite's Mille...      0
1  A singularly unfunny musical comedy that artif...      0
2  An excellent series, masterfully acted and dir...      1
3  The master of movie spectacle Cecil B. De Mill...      1
4  I was gifted with this movie as it had such a ...      0

Temos duas colunas: uma com o texto de cada avaliação e outra com a classificação do sentimento geral: positivo (1) ou negativo (0).

Vamos calcular a porcentagem de avaliações positivas e negativas:

round(movies['label'].value_counts()*100/len(movies['label'])).convert_dtypes()
0    50
1    50
Name: label, dtype: Int64

Ou seja, temos proporções quase iguais de avaliações positivas e negativas.

Aplicando o método BOW 

O próximo passo é transformar os textos em números, já que modelos de machine learning trabalham apenas com variáveis numéricas. Em particular, vamos criar atributos que contam quantas vezes cada palavra aparece na respectiva avaliação. A abordagem mais básica e direta para isso é o bag-of-words (BOW), que constrói um vocabulário com todas as palavras presentes no documento e contabiliza a frequência de cada palavra em cada avaliação. Como resultado, teremos novos atributos, um para cada palavra, com suas frequências correspondentes.

Vamos aplicar o método BOW ao nosso dataset:

from sklearn.feature_extraction.text import CountVectorizer

# Creating new features
vect = CountVectorizer(max_features=200)
vect.fit(movies.review)
X_review = vect.transform(movies.review)
X_df = pd.DataFrame(X_review.toarray(), columns=vect.get_feature_names())

# Combining the new features with the label
movies_bow = pd.concat([movies['label'], X_df], axis=1)
print(movies_bow.head())
  label  10  about  acting  action  actors  actually  after  again  all  ...  \
0      0   0      0       0       0       0         0      0      0    0  ...  
1      0   1      0       1       0       1         0      0      0    3  ...  
2      1   0      0       0       0       0         0      1      0    0  ...  
3      1   0      0       0       1       0         0      0      0    0  ...  
4      0   1      0       0       1       0         0      0      0    3  ...  

  will  with  without  work  world  would  years  you  young  your 
0     0     1        0     0      0      1      0    0      0     0 
1     2     7        1     0      0      2      0    3      0     2 
2     0     2        0     0      0      0      0    0      1     0 
3     0     0        0     0      0      0      0    1      1     0 
4     0     2        0     1      0      0      0    0      0     0 

[5 rows x 201 columns]

Acima, aplicamos o parâmetro opcional max_features para considerar apenas as 200 palavras mais frequentes e evitar um possível overfitting do modelo.

Usando um modelo supervisionado de machine learning para prever o sentimento

Agora, vamos usar um modelo supervisionado de machine learning para prever o sentimento. Como queremos estimar se o sentimento de uma nova avaliação é positivo ou negativo com base em avaliações já rotuladas, estamos novamente diante de um problema de classificação. Vamos usar, mais uma vez, regressão logística e medir a acurácia do modelo:

Accuracy score: 0.754

Confusion matrix:
[[37.62772101 13.23856064]
[11.32829853 37.80541981]]

Vemos que o modelo classificou 11% das avaliações positivas como negativas e 13% como positivas mesmo sendo negativas. Para melhorar a acurácia, podemos considerar a exclusão de stopwords (palavras pouco informativas e muito frequentes, como "about", "will", "you", etc.) e aumentar o tamanho do vocabulário.

Ao aplicar BOW, podemos acabar com centenas ou até milhares de novos atributos no dataframe. Isso pode gerar um modelo excessivamente complexo: superajustado, com variáveis e parâmetros desnecessários. Uma forma de corrigir é usar regularização, que restringe a função do modelo. O parâmetro a ajustar aqui é C, que representa a força da regularização. Vamos testar 2 valores desse parâmetro: 100 e 0,1, e ver qual oferece o melhor desempenho no conjunto de teste:

lr_1 = LogisticRegression(C=100)
lr_1.fit(X_train, y_train)
predictions_1 = lr_1.predict(X_test)

lr_2 = LogisticRegression(C=0.1)
lr_2.fit(X_train, y_train)
predictions_2 = lr_2.predict(X_test)

print(f'Accuracy score, lr_1 model: {round(accuracy_score(y_test, predictions_1), 3)}\n'
      f'Accuracy score, lr_2 model: {round(accuracy_score(y_test, predictions_2), 3)}\n\n'
      f'Confusion matrix for lr_1 model, %:\n{confusion_matrix(y_test, predictions_1)/len(y_test)*100}\n\n'
      f'Confusion matrix for lr_2 model, %:\n{confusion_matrix(y_test, predictions_2)/len(y_test)*100}')
Accuracy score, lr_1 model: 0.753
Accuracy score, lr_2 model: 0.756

Confusion matrix for lr_1 model, %:
[[37.53887161 13.32741004]
[11.32829853 37.80541981]]

Confusion matrix for lr_2 model, %:
[[37.67214571 13.19413594]
[11.19502443 37.93869391]]

A diferença de acurácia entre os valores testados de C é insignificante. Poderíamos encontrar um parâmetro que melhore mais o desempenho explorando outros valores. Porém, aqui temos apenas 200 novos atributos; nosso modelo não é tão complexo e a regularização não é realmente necessária neste caso.

Em vez de prever os rótulos 0 ou 1 com a função predict, também é possível prever a probabilidade do sentimento usando predict_proba. Aqui é importante lembrar que não podemos aplicar diretamente acurácia ou matriz de confusão às probabilidades previstas, pois essas métricas funcionam apenas com classes. Portanto, precisamos convertê-las em classes. Por padrão, probabilidade maior ou igual a 0,5 vira classe 1; caso contrário, classe 0.

lr = LogisticRegression()
lr.fit(X_train, y_train)

# Predicting the probability of the 0 class
predictions_prob_0 = lr.predict_proba(X_test)[:, 0]

# Predicting the probability of the 1 class
predictions_prob_1 = lr.predict_proba(X_test)[:, 1]

print(f'First 10 predicted probabilities of class 0: {predictions_prob_0[:10].round(3)}\n'
      f'First 10 predicted probabilities of class 1: {predictions_prob_1[:10].round(3)}')
First 10 predicted probabilities of class 0: [0.246 0.143 0.123 0.708 0.001 0.828 0.204 0.531 0.121 0.515]
First 10 predicted probabilities of class 1: [0.754 0.857 0.877 0.292 0.999 0.172 0.796 0.469 0.879 0.485]

Conclusão 

Há muitas outras abordagens úteis que podemos aplicar ao dataset para realizar uma análise de sentimento mais detalhada:

  • usar n-grams (combinações de palavras) em vez de palavras isoladas para preservar o contexto,
  • excluir stopwords,
  • limitar o tamanho do vocabulário com base em frequências mínima ou máxima,
  • criar atributos numéricos extras descrevendo o tamanho de cada avaliação ou o número de sinais de pontuação (este último às vezes pode correlacionar com a magnitude do sentimento),
  • excluir números, alguns caracteres, palavras de certo comprimento ou considerar padrões de palavras mais complexos,
  • aplicar stemming e lematização, ou seja, reduzir as palavras às suas raízes,
  • usar abordagens mais sofisticadas do que BOW para criar o vocabulário, como TfIdf (term frequency–inverse document frequency), que considera a frequência de uma palavra em uma avaliação em relação ao restante,
  • usar bibliotecas especializadas em análise de sentimento, como TextBlob, SentiWordNet e VADER (Valence Aware Dictionary and Sentiment Reasoner).

Se você quer explorar estas e outras técnicas para conduzir análises de sentimento mais ricas, confira o curso Sentiment Analysis in Python.

Tópicos
Ciência de dados
Aprendizado de máquina
Relacionado

blog

Como analisar dados para sua empresa em 5 etapas

Descubra as diferentes etapas para analisar dados e extrair valor deles, bem como os métodos e técnicas envolvidos no processo.
Javier Canales Luna's photo

Javier Canales Luna

14 min

Artificial Intelligence Concept Art

blog

Guia de casos de uso em data science

Conheça casos de uso em data science e descubra como aplicar data science em diferentes setores para impulsionar crescimento e a tomada de decisões.
Elena Kosourova's photo

Elena Kosourova

15 min

blog

ROI da ciência de dados: Como calcular e maximizar

Este guia abrangente ensina a você como calcular e maximizar o ROI da ciência de dados. Descubra estratégias para medir o sucesso e aumentar o valor comercial.
Vinita Silaparasetty's photo

Vinita Silaparasetty

14 min

blog

O que é análise de dados? Um guia especializado com exemplos

Explore o mundo da análise de dados com nosso guia abrangente. Saiba mais sobre sua importância, processo, tipos, técnicas, ferramentas e as principais carreiras em 2023
Matt Crabtree's photo

Matt Crabtree

10 min

blog

As 10 melhores ferramentas de análise de dados para analistas de dados em 2026

Pensando em começar uma nova carreira como analista de dados? Aqui tá tudo o que você precisa saber sobre as ferramentas de análise de dados que vão liderar o setor de ciência de dados em 2026.
Javier Canales Luna's photo

Javier Canales Luna

13 min

Tutorial

Tutorial de análise de sentimentos com NLTK para iniciantes

Tutorial de análise de sentimentos com NLTK (Natural Language Toolkit) em Python. Aprenda a criar e desenvolver análises de sentimentos usando Python. Siga etapas específicas para realizar a mineração e análise de textos e fazer o processamento de linguagem natural.
Moez Ali's photo

Moez Ali

13 min

Ver MaisVer Mais