Você está na página 1de 44

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS

NÚCLEO DE EDUCAÇÃO A DISTÂNCIA


Pós-graduação Lato Sensu em Ciência de Dados e Big Data

Bruno Sousa Cavalcante Barroso

Uma análise das avaliações realizadas pelos clientes em suas experiências de


compras

Belo Horizonte
2021
Bruno Sousa Cavalcante Barroso

UMA ANÁLISE DAS AVALIAÇÕES REALIZADAS PELOS CLIENTES EM SUAS


EXPERIÊNCIAS DE COMPRAS

Trabalho de Conclusão de Curso apresentado


ao Curso de Especialização em Ciência de
Dados e Big Data como requisito parcial à
obtenção do título de especialista.

Belo Horizonte
2021
SUMÁRIO

1. Introdução .............................................................................................................. 4
1.1. Contextualização ................................................................................................ 4
1.2. O problema proposto ......................................................................................... 5
2. Coleta de Dados .................................................................................................... 6
3. Processamento/Tratamento de Dados ................................................................ 9
4. Análise e Exploração dos Dados ....................................................................... 18
5. Criação de Modelos de Machine Learning ........................................................ 28
6. Apresentação dos Resultados ........................................................................... 39
7. Links ..................................................................................................................... 42
REFERÊNCIAS ......................................................................................................... 43
4

1. Introdução

1.1. Contextualização
Durante o processo de aquisição de bens e serviços, clientes e fornecedores
firmam uma relação de consumo. Estas relações podem possuir números distintos
de interações entre as partes, podendo ser um simples ato de escolher o produto,
pagar no caixa e levar, até um conjunto de atos que envolvem conhecer o bem, tirar
dúvidas, pedir informações a respeito, agendar datas para reuniões com outras
partes envolvidas e estabelecer prazos para cumprimento de obrigações, até
finalmente efetivar-se a compra.
Independentemente do volume de interações dentro da relação de consumo,
existe um fator crucial para que um estabelecimento comercial consiga, nos dias de
hoje, manter a sua sobrevivência: a fidelização de clientes.
Estima-se que 65% dos negócios vêm de clientes fiéis, e não de novos.
Fidelizar é tornar nosso produto ou serviço tão irresistível que nosso cliente, quando
precisar de mais, irá imediatamente pensar em nós. (GONÇALVES, 2007)
Fidelizar é importante porque os clientes fiéis são mais propensos a pagar
mais pelos nossos produtos e serviços, tendem a comprar mais e também estão
mais inclinados a comprar outros itens e usufruir de outros serviços que a empresa
oferece. (GONÇALVES, 2007)
Todavia, não se trata de uma tarefa fácil. O consumidor está cada vez mais
exigente, ponderando variáveis como tempo de atendimento, qualidade do produto,
se este veio de acordo com o solicitado, atendimento do vendedor, preço, e até
mesmo a comparação com outro concorrente, na avaliação final do estabelecimento
como um todo. E com o advento do e-commerce, a sensibilidade das avaliações
ficou ainda mais acentuada, pois até o simples fato de uma página web não carregar
apenas em um determinado momento pode passar para o consumidor o sentimento
de péssima experiência.

Dessa maneira, para que uma empresa consiga otimizar a mensuração de


indicadores que envolvem o nível de satisfação dos clientes, é interessante que haja
o emprego de técnicas de machine learning, capazes de prever qual será a nota que
poderá um cliente atribuir à experiência de compra, com base nas mensagens
registrados em ouvidoria, avaliação das ferramentas de loja virtual, etc.
5

1.2. O problema proposto


O problema proposto se baseia nas respostas elencadas na matriz 5Ws
abaixo destacada.

Tabela 1 – Matriz 5Ws para apresentação do problema proposto

Salienta-se que todo este trabalho será desenvolvido na linguagem de programação


Python, com o uso das seguintes bibliotecas:

 Pandas;

 OS;

 Numpy;

 Regex;

 Datetime;

 Seaborn;

 MatPlotLib;

 NLTK;

 string;

 sklearn;
6

 wordcloud;

 yellowbrick;

 KaggleApi

2. Coleta de Dados

Para o desenvolvimento do trabalho proposto, foram coletados, do repositório


de dados denominado Kaggle, um conjunto de datasets contendo registros de
transações de compras, em formato .csv, no dia 12/04/2021.

Utilizou-se os seguintes comandos em Python:

Figura 1 – Código Python para conexão com o Kaggle


7

Figura 2 – Código Python para busca de datasets com a expressão


“commerce”

Na figura acima, observa-se na segunda linha a existência de um dataset


contendo informações sobre comércio eletrônico no Brasil. Optou-se pela escolha
desses dados, e o download foi feito por meio do comando abaixo.

Figura 3 – Código Python para download do dataset

O conjunto de dados obtido contém 9 datasets, referentes a compras


aprovadas no período de setembro de 2016 até setembro de 2018. O mesmo
conjunto pode ser obtido diretamente do link
https://www.kaggle.com/olistbr/brazilian-ecommerce, acessado na mesma data de
obtenção dos dados por meio do Python.
De acordo com a descrição dos dados obtida no link, pôde-se concluir que é
suficiente para o objetivo deste trabalho apenas 3 datasets, cujo detalhamento está
nas tabelas a seguir.

Tabela 2 – Detalhamento dataset “olist_customers_dataset.csv”

Nome da coluna/campo Descrição Tipo


customer_id Chave para o dataset de String
pedidos. Cada pedido tem
um único customer_id
customer_unique_id Identificador de String
consumidor, que permite
identificar se a mesma
pessoa fez outra compra
na loja.
customer_zip_code_prefix Primeiros cinco dígitos do Int
cep do consumidor.
customer_city Cidade do consumidor. String
customer_state Estado do Consumidor. String
8

Tabela 3 – Detalhamento dataset “olist_orders_dataset.csv”

Nome da coluna/campo Descrição Tipo


Identificador único do String
order_id pedido
Chave para o dataset de String
consumidor. Cada
customer_id pedido tem um único
customer_id.
order_status Referência ao status do String
pedido (entregue, em
trânsito, etc)

order_purchase_timestamp Contém a data da Date


compra
order_approved_at Contém a data da Date
efetivação do
pagamento.
order_delivered_carrier_date Contém a data da Date
entrega da mercadoria
para a transportadora.
order_delivered_customer_date Contém a data da Date
entrega da compra ao
consumidor.
order_estimated_delivery_date Contém a data estimada Date
da entrega da compra no
momento em que o
consumidor a realizou.

Tabela 4 – Detalhamento dataset “olist_order_reviews_dataset.csv”

Nome da coluna/campo Descrição Tipo


review_id Identificador único de String
9

avaliação
order_id Identificador único do String
pedido
review_score Intervalo de notas de 1 a 5 Int
dado pelo consumidor no
momento da pesquisa de
satisfação
review_comment_title Título do comentário String
deixado pelo consumidor,
referente à avaliação
dada, em Português
review_comment_message Comentário do String
consumidor, referente à
avaliação dada, em
Português.
review_creation_date Data em que a pesquisa Date
de satisfação foi enviada
ao consumidor.
review_answer_timestamp Data da resposta à Date
pesquisa de satisfação.

3. Processamento/Tratamento de Dados
Inicialmente, utilizou-se o script abaixo, para criar um DataFrame para cada
um dos arquivos utilizados.
10

Figura 4 – Código Python para armazenamento dos dados em dataframes

A seguir, verificou-se as dimensões de cada um deles.

Figura 5 – Código Python para cálculo das dimensões dos dataframes

Após a importação, observou-se, em todos os dataframes, que os índices


ficaram inconsistentes, e os cabeçalhos, desconfigurados. Como exemplo, podemos
observar o problema no layout do dataframe de consumidores.
11

Figura 6 – Dataframe com índice construído em coluna de dados e cabeçalho desconfigurado

Para a correção, efetuaram-se os comandos a seguir.

Figura 7 – Correção do problema evidenciado na figura anterior

A fim de ratificar que realmente os dados são de 2016 a 2018, utilizou-se o


comando a seguir, no campo “order_approved_at”, pertencente ao DataFrame de
pedidos realizados, que traz a data da aprovação do pagamento. Observa-se que,
de fato, os dados se referem ao período de 2016 a 2018.
12

Figura 8 – Cinco primeiros e cinco últimos registros do dataframe de pedidos

Foi verificada, a seguir, a existência de registros nulos nos dataframes, com o


uso do comando “isna().sum()”. Foram encontrados os seguintes registros nulos,
pertencentes aos dois DataFrames a seguir. Não se identificou registros nulos nos
demais.

Figura 9 – Verificação de registros nulos no dataset de consumidores

olist_orders_dataset.csv

Figura 10 – Verificação de registros nulos no dataset de pedidos


13

Figura 11 – Verificação de registros nulos no dataset de avaliações

Além dos registros nulos, observou-se no dataframe de avaliações a existência de


várias colunas sem nenhum registro (além das destacadas na figura acima, tinham
muitas outras colunas “NaN”). Para tanto, e de imediato, executou-se o comando a
seguir, para deixar no dataframe apenas os dados com informações armazenadas.

Figura 12 – Retirada de colunas com valores nulos do dataframe de avaliações

Devido ao objetivo deste trabalho, que tem como intuito prever avaliações a serem
dadas pelos clientes baseado no comentário registrado, não foram localizadas
informações suficientes para o tratamento de missing values alusivos a este tipo de
análise, a não ser a mera exclusão dos registros onde a informação a ser analisada
esteja nula. Antes disso, porém, verificou-se, no dataset de avaliações, se havia
alguma avaliação com o campo de título preenchido e o campo da mensagem não
preenchido. Foram encontrados 1.729 registros, cujo valor do campo
14

“review_comment_title” foi copiado para o campo “review_comment_message”.

Figura 13 – Comando para preencher, onde couber, os registros nulos de comentários, com o valor
do título da mensagem, se disponível

Realizou-se uma verificação nos três dataframes, no intuito de identificar registros


duplicados. Os comandos abaixo foram executados, sem identificar nenhuma
duplicata.

Figura 14 – Comando para remoção de duplicatas, caso existente, deixando o registro mais recente

Ainda antes da exclusão, realizou a junção de todas as informações, para verificar


em quais condições os registros poderiam ser excluídos sem prejuízo de
informações essenciais para a análise exploratória e elaboração dos modelos de
machine learning. Portanto, executou-se o comando abaixo, que juntou todos os
DataFrame em um só, converteu o campo “review_score” para inteiro, pois trata-se
do campo que contém as pontuações dadas pelos clientes, e, no fim, removeu
duplicatas.
15

Figura 15 – Comandos para junção dos dataframes em um só

Da junção realizada, observou-se que os dados continuaram distribuídos no


período de 2016 a 2018. Uma verificação final foi realizada, no intuito de identificar
se os registros “customer_id” eram todos oriundos do território nacional. Os
comandos abaixo foram executados, certificando que todos os clientes que
registraram notas são do território nacional.

Figura 16 – Comando para verificar se “customer_id” pertence apenas aos estados da federação
16

Por fim, foi feita a cópia do dataframe para um outro, para não se perder os
dados brutos, e os registros onde “review_comment_message” estavam nulos foram
apagados.

Figura 17 – Cópia do dataframe para um novo, e exclusão de linhas onde


“review_comment_message” é nulo

Feitas todas essas validações, procedeu-se à análise do campo


“review_comment_message”, fruto do escopo deste trabalho. Trata-se de um campo
de texto, onde se registram as mensagens referentes às pesquisas de satisfação.
Uma classe, denominada “AjeitaTexto” foi criada, e nela, as seguintes funções:

 ajeita_caractere(self, texto): Faz a conversão de caracteres para o


formato UTF-8, de modo a tornar legível palavras como
“SOLUÃ\x87Ã\x83O” (Solução), “Já” (Já), “não” (não), etc;

 retira_acento(self, texto): Retira os acentos de palavras. Por exemplo,


“chapéu” vira “chapeu”, “íris” vira “iris”, “âmbar” vira “ambar”, etc;

 remove_pontuacao(self, texto): Chama a função punctuation, que traz


um conjunto de caracteres de pontuação, e, identificando-os no texto,
faz a substituição por um comando de espaço;

 remove_numero(self, texto): Retira todos os caracteres numéricos com


o auxílio de expressões regulares (regex);

 retira_caracter_repetido(self, texto): Reduz textos que possuem


sequencias de dois ou mais caracteres repetidos, tais como “aaaaaa”,
“kkkkkkk”, “amoooooooo”, “adoreeeeeeei”, perfeeeeeito”, etc;

 to_lower(self, texto): Transforma todos os caracteres do texto em letras


minúsculas, tira espaçamentos e separa apenas palavras com mais de
2 caracteres e a palavra “ok’;
17

 stemming3(self,texto): Emprega a técnica do stemming, que tem como


objetivo reduzir uma palavra para o seu radical, retirando prefixos e
sufixos. Esta função foi implementada com o algoritmo RSLPStemmer
(Removedor de Sufixos da Língua Portuguesa). Por exemplo, palavras
como “ventilador” e “ventilação” seriam reduzidas para “vent”, que é a
raiz das duas palavras, e de outras, como “vento”, “ventania”, etc;

 transforma(self, X, **transform_params): Método que faz a chamada


das funções de tratamento textual (ajeita_caractere, retira_acento,
remove_pontuacao, remove_numero, retira_caractere_repetido e
to_lower)

É importante salientar que, no método de stemming, foram aplicados


tratamentos para retirar stopwords, que são as expressões que não agregam valor
para a análise final de um algoritmo de machine learning. Portanto, expressões a
exemplo de preposições são descartadas. A biblioteca ntlk possui um pacote com
stopwords da língua portuguesa, cujo comando para utilização segue abaixo.

stopwordsnltk = nltk.corpus.stopwords.words('portuguese')

Por fim, código da classe AjeitaTexto.


18

Figura 18 – Estrutura da classe AjeitaTexto

4. Análise e Exploração dos Dados

Primeiramente, é importante saber qual a escala de notas atribuída pelos


consumidores. Para isto, plotou-se o gráfico de barras abaixo.
19

Figura 19 – Quantidade de mensagens por nota

Verifica-se, portanto, que a escala vai de 1 a 5. Para se verificar maiores


informações sobre esses números, as análises a seguir foram realizadas.

Algumas informações foram geradas para se ter ideia do tamanho das


mensagens que os clientes registraram. Criou-se o dataframe auxiliar abaixo, para
armazenar as mensagens e o tamanho de cada uma delas.

Figura 20 – Comando para criação de dataframe com tamanho das mensagens


20

Plotou-se o histograma abaixo, a partir do dataframe criado, para se ter uma


melhor visualização.

Figura 21 – Histograma p/ análise da quantidade de mensagens X tamanho das mensagens

Observa-se que o histograma possui assimetria à direita, o que indica que


quanto maior a quantidade de caracteres da mensagem, menor sua quantidade no
dataframe. Isso pode ser um indício de que, quanto menor a nota, pior a avaliação,
visto que há tendência das pessoas melhor detalharem a experiência nestas
situações.

Chama a atenção o fato de muitas mensagens estarem com tamanho igual a


0. Como estamos trabalhando em cima de dados já tratados, isso pode significar
que as mensagens só tinham stopwords ou somente números, que foram removidos
integralmente.
21

Para uma melhor compreensão, plotaram-se histogramas considerando a


nota atribuída esse histograma considerando a nota atribuída pelo consumidor.

Figura 22 – Comando para criação de dataframe com tamanho das mensagens – nota 5

Figura 23 – Histograma p/ análise da quantidade de mensagens X tamanho das mensagens – nota 5

Figura 24 – Estatísticas mensagens notas 5

Figura 25 – Comando para criação de dataframe com tamanho das mensagens – nota 1
22

Figura 26 – Histograma p/ análise da quantidade de mensagens X tamanho das mensagens – nota 1

Figura 27 – Estatísticas mensagens notas 1

Do detalhamento, confirma-se que as mensagens com avaliação igual 1


tendem a possuir uma maior quantidade de caracteres.

Realizando uma análise amostral de registros com mensagem tamanho 0,


observou-se que, de fato, não existe nenhum texto. Para as de tamanho 1,
mensagens que não agregam nenhum valor. Ambos os casos justificam a condição
23

disposta na função stemming3, onde apenas os tokens com tamanho acima de 2


serão considerados na análise.

Todavia, para as mensagens de tamanho 2, uma coisa que chamou atenção


foi a quantidade de textos, para mensagens de nota 5, com a expressão “ok”. Trata-
se, portanto, de um termo muito forte e que, em sua maioria, indica que a
experiência do usuário foi satisfatória. Portanto, um ajuste na função stemming3 foi
realizado, de modo a não excluir tokens que representem a expressão “ok”.

Figura 28 – Ajuste na função stemming3, para não excluir a expressão “ok”

Feitas as considerações acima, prosseguiu-se para a análise das palavras em


si, que compõem as mensagens.

Para esta etapa, utilizou-se o emprego da nuvem de palavras, para identificar


quais expressões possuem maior frequência nos textos, dado o escore de uma
avaliação. Dessa maneira, foram plotadas cinco nuvens de palavras,
correspondentes às cinco notas de avaliação. A biblioteca da linguagem Python
utilizada foi a WordCloud.

Criou-se um dataframe auxiliar, para armazenar a lista de tokens obtidos após


o stemming, e as notas que foram atribuídas à frase correspondente aos tokens
gerados.

Figura 29 – Comando para criação de dataframe para plotagem de nuvem de palavras


24

Em seguida, utilizou-se o comando abaixo, que varre o dataframe criado e


concatena os tokens dentro de uma variável do tipo String, observando o valor da
avaliação atribuída, ou seja, somente serão armazenadas na variável os tokens
correspondentes à uma avaliação. Esta variável será utilizada para plotar a nuvem.

Segue código utilizado.

Figura 30 – Comando para criação de string de palavras e plotagem das nuvens

E a seguir, segue os resultados das nuvens plotadas.


25

Figura 31 – Nuvem de palavras oriundas de avaliação igual a 5

Figura 32 – Nuvem de palavras oriundas de avaliação igual a 4


26

Figura 33 – Nuvem de palavras oriundas de avaliação igual a 3

Figura 34 – Nuvem de palavras oriundas de avaliação igual a 2


27

Figura 35 – Nuvem de palavras oriundas de avaliação igual a 1

Como é possível observar, há um predomínio de palavras negativas nas


nuvens de palavras com avaliações iguais a 1 e 2, e um predomínio de palavras
positivas nas com avaliação igual a 4 e 5. Na avaliação igual 3, há um certo
equilíbrio entre a qualidade das palavras. Pode-se, portanto, concluir neste ponto
que, quanto maior a nota, melhor foi a experiência do cliente no estabelecimento, e
ratificar o comportamento dos histogramas e as estatísticas levantadas.
28

5. Criação de Modelos de Machine Learning

Após as considerações realizadas nas etapas anteriores, inicia-se a fase de


construção e execução dos modelos de machine learning. Serão utilizados modelos
com a abordagem supervisionada, ou seja, dado um conjunto de dados rotulados, já
sabemos qual é a nossa saída correta e que este deve ser semelhante ao conjunto
(BARROS, 2016). Usaremos modelos de classificação, pois a ideia é prever qual
será a nota dada por um cliente considerando a mensagem deixada na pesquisa de
satisfação.

Foram testados 4 modelos de classificação diferente, e em cada um deles,


empregou-se técnicas de Vetorização. Esta abordagem tem como objetivo
transformar os tokens em um padrão legível para os modelos de classificação, já
que estes, em sua grande maioria, só entendem dados numéricos.
(ALENCAR,2014).

Para cada algoritmo de classificação, testou-se duas abordagens de


vetorização: a abordagem bag of words e a term frequency-inverse document
frequency (TFIDF). No primeiro, um texto é representado por um saco de palavras,
desconsiderando a gramática e até mesmo a ordem das palavras. Já o segundo tem
como objetivo refletir o quão importante é uma palavra no texto passado. Leva em
consideração tanto o número de vezes que a palavra aparece no conjunto de
mensagens, como na quantidade de mensagens em que essa palavra é utilizada.
(SINGH, 2019)

Primeiramente, foi criado um dataframe para recuperar os valores dos


radicais obtidos após a aplicação do stemming. Esse dataframe armazenou os
radicais junto com as notas.
29

Figura 36 – Dataframe de tokens após stemming

Em seguida, esse dataframe foi quebrado em duas bases, sendo uma de


treino, com 80% dos dados, para o treinamento dos algoritmos, e a outra de teste,
para validar as previsões dos algoritmos. Para poder passar os tokens par os
algoritmos, foi necessário inseri-los dentro de listas, uma para treino e outra para
teste.

Figura 37 – Código para criação das bases de treino e de teste


30

Em seguida, para testar a acurácia dos algoritmos no processo de classificação,


testou-se cada um deles utilizando as técnicas de vetorização bag of words e TFIDF.
Abaixo, código evidenciando a criação das variáveis de treino e de teste, em cada
uma das abordagens.

Figura 38 – Vetorização abordagem Bag of Words

Figura 39 – Vetorização abordagem TFIDF

Feita a vetorização, procedeu-se com a criação de instâncias, treinamento, cálculo


das métricas de acurácia, precisão, recall e f1-score e a plotagem das matrizes de
confusão dos seguintes algoritmos:

 MultinomialNB
 GaussianNB
 LogisticRegression
 BernoulliNB

O detalhamento dos códigos de criação das instâncias, treinamentos, métricas e


plotagem das matrizes de confusão podem ser vistos nas figuras a seguir.
31

Figura 40 – Métricas abordagem BOW – Multinomial Naive Bayes

Figura 41– Matriz de Confusão abordagem BOW – Multinomial Naive Bayes


32

Figura 42 – Métricas abordagem TFIDF – Multinomial Naive Bayes

Figura 43 – Matriz de Confusão abordagem TFIDF – Multinomial Naive Bayes


33

Figura 44 – Métricas abordagem BOW – Gaussian Naive Bayes

Figura 45 – Matriz de Confusão abordagem BOW – Gaussian Naive Bayes


34

Figura 46 – Métricas abordagem TFIDF – Gaussian Naive Bayes

Figura 47 – Matriz de Confusão abordagem BOW – Gaussian Naive Bayes


35

Figura 48 – Métricas abordagem BOW – Regressão Logística

Figura 49 – Matriz de Confusão abordagem BOW – Regressão Logística


36

Figura 50 – Métricas abordagem TFIDF – Regressão Logística

Figura 51 – Acurácia abordagem TFIDF – Regressão Logística


37

Figura 52 – Métricas abordagem BOW – Bernoulli Naive Bayes

Figura 53– Matriz de confusão abordagem BOW – Bernoulli Naive Bayes


38

Figura 54 – Métricas abordagem TFIDF – Bernoulli Naive Bayes

Figura 55– Matriz de confusão abordagem TFIDF – Bernoulli Naive Bayes


39

6. Apresentação dos Resultados

Apresenta-se, na tabela abaixo, os resultados das métricas obtidas para cada


algoritmo de classificação, considerando os dois tipos de vetorização aplicada para
os dados.
Vetorização
Classificação BOW TFIDF
Acurácia Precisão Recall F1-Score Acurácia Precisão Recall F1-Score
MultinomialNB 67,82% 42,94% 41,59% 39,85% 67,82% 39,10% 38,30% 33,38%
GaussianNB 10,21% 29,51% 20,93% 11,81% 10,85% 27,84% 21,17% 12,17%
LogisticRegression 68,01% 44,29% 41,15% 39,90% 69,15% 43,02% 41,16% 39,50%
BernoulliNB 65,09% 41,83% 39,29% 38,44% 65,09% 41,83% 39,29% 38,44%

Percebe-se, dos dados acima apresentados, que os algoritmos de Naive


Bayes, modalidades Multimonial e Bernoulli, assim como o da Regressão Logística,
apresentaram uma taxa de acurácia acima de 65%, o que significa uma performance
global relativamente alta. Porém, a precisão e o recall não obtiveram resultados
satisfatórios, ou seja, há uma taxa elevada de valores previstos equivocadamente
por esses modelos, principalmente nas classes minoritárias.

Normalmente, isso ocorre quando há desbalanceamentos na quantidade de


registros por classe. Isso se confirma ao se analisar a figura 19, onde se observa
números mais elevados de registros para as classes 1 e 5, e um número menor para
as demais classes. Isso provavelmente está enviesando o aprendizado dos modelos
de classificação.

A classe desbalanceada ocorre quando temos um dataset que possui muitos


exemplos de uma classe e poucos exemplos da outra classe. (SANTANA, 2020).

Os modelos machine learning são construídos para minimizar erros. Desde


que a probabilidade pertence a classe com maior número de observação, o
algoritmo estará enviesado em classificar as novas observações. (VAZ, 2019).
40

Para mitigação dessas situações, algumas técnicas podem ser empregadas


com o fito de se balancear a base:

 Undersampling – Consiste em reduzir de forma aleatória os exemplos da


classe majoritária. (SANTANA, 2020)
 NearMiss – É um algoritmo de undersampling que consiste em reduzir de
forma aleatória os exemplos da classe majoritária, porém ele seleciona os
exemplos com base na distância. (SANTANA, 2020)

Aplicou-se a técnica undersampling, reduzindo-se a quantidade de registros


das classes 1 e 5 para a média aritmética da quantidade de registros das notas 2, 3
e 4, haja visto serem as classes com menos informações. Os resultados obtidos
com o treinamento da nova base reduzida, e os códigos utilizados para balancea-
mento, estão elencados na tabela abaixo.

Vetorização
Classificação BOW TFIDF
Acurácia Precisão Recall F1-Score Acurácia Precisão Recall F1-Score
MultinomialNB 47,75% 43,28% 43,94% 42,04% 47,55% 41,54% 40,33% 36,74%
GaussianNB 26,23% 29,66% 28,81% 20,01% 26,77% 29,95% 29,43% 20,99%
LogisticRegression 48,33% 43,60% 43,17% 45,54% 49,48% 45,64% 44,34% 43,33%
BernoulliNB 44,37% 40,34% 40,59% 39,38% 44,38% 40,34% 40,59% 39,37%

Figura 56– contagem de registros por nota de avaliação


41

Figura 57– Cálculo da médias das classes minoritárias e aplicação do número para separação de
amostra de classes majoritárias

Percebe-se, pelo exposto, que houve uma queda abrupta na acurácia dos al-
goritmos, com exceção do GaussianNB. Em contrapartida, houve melhora nas taxas
de acurácia, precisão e f1-score, significando, portanto, que de fato havia necessi-
dade de praticar o balanceamento na base.

De uma maneira geral, considera-se razoável as taxas aqui obtidas, considerando a


ausência de muitas informações para a aplicação da análise de sentimentos, e a
grande concentração de dados em notas melhores. Os modelos de machine lear-
ning tem como principal requisito a necessidade de uma base de dados rica em
informação, para melhor predizer uma variável resposta.
42

7. Links

Link para o vídeo:


Resumo (03:14): https://youtu.be/YvjgOHgGuLw
Completo (12:46): https://www.youtube.com/watch?v=lhmlDJ_ElUU

Link para o repositório:


https://drive.google.com/drive/folders/1Y5NUmq6hBfGrTWPCjb_Qv_BRPwhP
Jq5I?usp=sharing
43

REFERÊNCIAS

GONÇALVES, Helmer José. Fidelização de Clientes. Porto Alegre, 2007.Disponível


em: <https://lume.ufrgs.br/bitstream/handle/10183/14026/000649603.pdf>. Acesso
em: 11/04/2021

GOBBO, Débora. Análise de sentimentos gera vantagem competitiva para as


empresas. Disponível em: <https://medium.com/estas-s%C3%A3o-
mat%C3%A9rias-que-escrevi-sobre-data-science/an%C3%A1lise-de-sentimentos-
gera-vantagem-competitiva-para-as-empresas-68692731fa03>. Acesso em:
11/04/2021

GOBBO, Débora. Análise de sentimentos gera vantagem competitiva para as


empresas. Disponível em: <https://medium.com/estas-s%C3%A3o-
mat%C3%A9rias-que-escrevi-sobre-data-science/an%C3%A1lise-de-sentimentos-
gera-vantagem-competitiva-para-as-empresas-68692731fa03>. Acesso em:
11/04/2021

YADAV, Dinesh. NLP: Building Text Cleanup and PreProcessing Pipeline.


Disponível em: < https://towardsdatascience.com/nlp-building-text-cleanup-and-
preprocessing-pipeline-eba4095245a0>. Acesso em: 13/04/2021

BARROS, Pedro. Aprendizagem de Maquina: Supervisionada ou Não


Supervisionada? Disponível em: <https://medium.com/opensanca/aprendizagem-
de-maquina-supervisionada-ou-n%C3%A3o-supervisionada-7d01f78cd80a>. Acesso
em: 14/04/2021

ALENCAR, Rafael. Catalogando Itens com PLN Disponível em:


<https://medium.com/neuronio-br/catalogando-itens-com-pln-711b24ba2600>.
Acesso em: 14/04/2021
44

SINGH, Prasoon. Fundamentals of Bag Of Words and TF-IDF Disponível em: <
https://medium.com/analytics-vidhya/fundamentals-of-bag-of-words-and-tf-idf-
9846d301ff22>. Acesso em: 14/04/2021

TAMAIS, Ana Laura Morais. Modelos de Predição | Naive Bayes Disponível em: <
https://medium.com/turing-talks/turing-talks-16-modelo-de-predi%C3%A7%C3%A3o-
naive-bayes-6a3e744e7986>. Acesso em: 19/04/2021

SANTANA, Rodrigo. Lidando com Classes Desbalanceadas – Machine Learning


Disponível em: <https://minerandodados.com.br/lidando-com-classes-
desbalanceadas-machine-learning/>. Acesso em: 20/04/2021

VAZ, Arthur Lamblet. Como lidar com dados desbalanceados em problemas de


classificação Disponível em: <https://medium.com/data-hackers/como-lidar-com-
dados-desbalanceados-em-problemas-de-classifica%C3%A7%C3%A3o-
17c4d4357ef9>. Acesso em: 20/04/2021

Você também pode gostar