Projeto Final 1 - EPS7008 UFSC

Você está na página 1de 26

Análise do comportamento de vendas

de Lego utilizando técnicas de Machine


Learning
Filipe, Leonardo, Letycia e Otávio.
Índice

1 Introdução 2
1.1 Objetivo Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Objetivos Específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Estrutura do Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Procedimentos Metodológicos 3
2.1 Estrutura e tratamento dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Visualização e Análise Exploratória dos Dados . . . . . . . . . . . . . . . . . . . . . . 4
2.3 Modelagem e comunicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Desenvolvimento e Resultados 5
3.1 Análise Exploratória dos Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.1 Carregamento e limpeza dos dados . . . . . . . . . . . . . . . . . . . . . . . . 5
3.1.2 Visualização dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.3 Limpeza dos dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Modelagem preditiva . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.1 Preparação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.2 Regressão linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.3 Árvore de decisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.4 Random Forest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.5 Comparação entre os modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.6 Poisson Regression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.7 Cálculos Finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4 Conclusão 25

5 Referências 26

1 INTRODUÇÃO
A intensa concorrência entre as empresas por fatias de mercado semelhantes têm forçado
as companhias a buscar novas maneiras de capturar e aumentar as participações de mercado,
reduzindo custos. Ao compreender melhor o comportamento de compra dos clientes, pode‐se criar
estratégias de marketing direcionadas que sejam mais eficazes. A tecnologia de armazenamento
de dados permitiu que as empresas organizassem e armazenassem grandes volumes de dados
de negócios em formatos possíveis de serem analisados. O amadurecimento do campo da
“inteligência artificial” criou um conjunto de técnicas de “aprendizado de máquina” que são úteis
na automatização de atividades cruciais de descoberta de padrões em bancos de dados (BOSE;
MAHAPATRA, 2001). Esse avanço na tecnologia mudou a forma como os dados de negócios são
analisados. Originou‐se assim a mineração de dados, a qual integra aprendizado de máquina, análise
estatística e técnicas de visualização, com a intuição e o conhecimento do analista de negócios,
a fim de descobrir padrões significativos e interessantes nos dados de negócios.As técnicas de

EPS 7008 ‐ Gestão Estratégica da TI 2


machine learning são utilizadas em diversas finalidades no mercado, indo desde a predição de
manutenção de máquinas, seleção de fornecedores a criação de campanhas publicitárias.

1.1 OBJETIVO GERAL


Utilizar técnicas de estatística e Machine Learning para analisar o comportamento das vendas de
uma empresa de Lego.

1.2 OBJETIVOS ESPECÍFICOS


• Realizar análise exploratória dos dados por meio de gráficos e tabelas;

• Prever o possível faturamento gerado pelas vendas de produtos Lego;

• Utilizar métodos de Machine Learning na estruturação de um modelo de previsão de


faturamento;

1.3 ESTRUTURA DO TRABALHO


Este trabalho está dividido em quatro capítulos: Introdução, Procedimentos Metodológicos,
Desenvolvimento e Resultados e Conclusão. No primeiro capítulo é realizada a contextualização
do tema de pesquisa e apresentação dos objetivos que se pretende alcançar ao final do projeto.
O segundo capítulo apresenta os procedimentos a serem utilizados na etapa de desenvolvimento,
bem como uma breve explicação das etapas do ciclo de dados. O capítulo três descreve os passos
e análises realizadas bem como os resultados encontrados. Por fim, a conclusão retomará os
objetivos do projeto, avaliando se foram ou não alcançados.

2 PROCEDIMENTOS METODOLÓGICOS
A Ciência de Dados é a área que estuda como são extraídos os conhecimentos dos dados, utilizando
técnicas de Estatística e Machine Learning para fazer previsões. As etapas do ciclo de dados tem
suas características determinadas pelo tipo de dados, pela tecnologia empregada no processo e
pela natureza do seu uso. De forma geral, pode‐se dizer que um projeto de Ciência de Dados segue
os seguintes passos (MALDONADO, 2022):

• Coleta e carregamento dos dados;


• Limpeza dos dados;
• Transformação;
• Visualização e modelagem dos dados;
• Comunicação do resultado da análise.

Nas seções seguintes serão detalhados os passos e decisões tomadas em cada etapa para o banco
de dados escolhido.

EPS 7008 ‐ Gestão Estratégica da TI 3


2.1 ESTRUTURA E TRATAMENTO DOS DADOS
Esta primeira etapa consiste na coleta e tratamento dos dados, vista como a parte mais importante
de um projeto, pois é preciso conhecer a base de dados para entender como ela pode ser explorada,
quais as análises possíveis de serem feitas.

Neste projeto, será utilizado um dataset sobre a venda de peças de Lego, onde há registro de dados
do cliente como nome, sobrenome do cliente, idade e telefone; dados da compra, como quantidade,
ano e id; dados do produto, como tema, subtema, nome do produto, número de peças e preço.

Para realizar uma melhor visualização e análise dos dados, é necessário realizar um tratamento
para eliminar redundâncias ou informações desnecessárias para o estudo. Com isso, dados como
informações do cliente com exceção da idade, ano, ID’s foram eliminados e também foram obtidas
informações combinando dados como valor e quantidade comprada para obter a receita, caso seja
necessário. Após a limpeza dos dados, restaram as seguintes informações: tema, subtema, número
de peças, preço, quantidade vendida e receita.

2.2 VISUALIZAÇÃO E ANÁLISE EXPLORATÓRIA DOS DADOS


Após a coleta do banco de dados, é necessário realizar uma análise descritiva, a fim de que o
pesquisador fique familiarizado com os dados. Ao explorar os dados, é possível visualizar se estes
estão acessíveis ao uso de técnicas estatísticas. Além disso, é importante realizar um exame gráfico
da natureza das variáveis individuais, avaliando se estas precisam ser modificadas para a análise que
se pretende fazer.

É recomendável ainda realizar um exame gráfico das relações entre as variáveis analisadas, bem
como uma análise descritiva que quantifique o grau de inter‐relação entre elas, identificando assim
os possíveis outliers e presença de dados ausentes (LAURETTO, 2011).

Neste projeto, serão gerados gráficos relacionando preço e faturamento; quantidade de peças e
faturamento; tema e faturamento; subtema e faturamento, para encontrar possíveis correlações
entre as variáveis.

2.3 MODELAGEM E COMUNICAÇÃO


Após a realização da Análise Exploratória dos dados, será necessário prepará‐los para aplicar
técnicas de Machine Learning. É por meio da modelagem que será feita a extração de conhecimento
por meio dos dados para resolver o problema de pesquisa proposto.

Machine learning (ou Aprendizado de Máquina) é um ramo da inteligência artificial (IA) que
automatiza a construção de modelos analíticos e faz uso de dados e algoritmos para imitar a
maneira como os humanos aprendem, melhorando gradualmente sua precisão. Os algoritmos
de aprendizado de máquina podem ser divididos em três grupos: Aprendizagem Supervisionada;
Aprendizagem por Reforço e Aprendizagem Não Supervisionada. Neste relatório serão explorados
apenas os modelos de aprendizagem supervisionada e não supervisionada.

A aprendizagem supervisionada busca descrever fenômenos e relações ocultas no conjunto


de dados composto por atributos de entrada (as variáveis independentes) e um atributo meta

EPS 7008 ‐ Gestão Estratégica da TI 4


ou variável dependente. São realizadas tarefas preditivas e classificar atributos a partir de
características específicas presentes dentro dos atributos. Este mecanismo de aprendizagem é
normalmente dividido em três etapas: treinamento, teste e avaliação (GUARNIZO, 2021). Alguns
métodos de aprendizagem supervisionada são: Regressão Linear, Regressão logística, Árvore de
decisão e Random Forest.

Já a aprendizagem não supervisionada usa algoritmos de machine learning para analisar e agrupar
conjuntos de dados não rotulados, tentando encontrar padrões ocultos ou agrupamentos de
dados. Devido à capacidade do modelo de descobrir semelhanças e diferenças nas informações, é
muito utilizado para análise exploratória de dados, estratégias de vendas cruzadas, segmentação
de clientes, imagem e reconhecimento de padrões. Os algoritmos usados no aprendizado não
supervisionado incluem redes neurais, armazenamento em cluster de k‐médias, métodos de
armazenamento em cluster probabilístico e muito mais (IBM, 2020).

Neste projeto, serão utilizados os métodos Regressão Linear, Árvore de decisão e Random Forest
para prever o possível faturamento gerado por um produto, analisando características como tema,
subtema, quantidade de peças e preço. Para entender qual método descreverá melhor o modelo,
serão comparados os parâmetros MAE, RMSE e R2 por meio de gráficos. Aquele que apresentar o
menor parâmetro MAE, menor RMSE e maior R2 de acordo com os gráficos, será o escolhido para
calcular o modelo final.

Caso o valor de R2 na análise pelo modelo escolhido foi próximo de 1, haverão indícios de que o
modelo desenvolvido explicará bem a variabilidade dos dados de resposta.

Além dos três métodos de machine learning citados, será utilizado um 4° método supervisionado
de previsão, Os parâmetros obtidos nesse método serão comparados com os tradicionais vistos em
sala de aula, a fim de avaliar a acuracidade do modelo proposto.

3 DESENVOLVIMENTO E RESULTADOS
Nesta seção será detalhado o procedimento da análise dos dados e os resultados obtidos com essas
análises.

3.1 ANÁLISE EXPLORATÓRIA DOS DADOS


A análise exploratória dos dados permite conhecer melhor os tipos de informações contidas no
banco de dados a ser utilizado. Assim, possibilita a aplicação de modelos de previsão e outras
técnicas de machine learning de forma mais assertiva. Nas subseções a seguir serão descritos os
passos tomados para realizar essa análise preliminar dos dados.

3.1.1 CARREGAMENTO E LIMPEZA DOS DADOS

Conforme mencionado anteriormente, o banco de dados utilizado neste trabalho consiste em


dados de vendas de conjuntos de Lego. Antes de carregar o banco de dados, é preciso carregar as
bibliotecas dos pacotes em R necessárias para realizar as análises exploratórias.

EPS 7008 ‐ Gestão Estratégica da TI 5


Um dos principais pacotes R utilizados será o Tidyverse. Esse pacote consolida diversas ferramentas
que fazem parte da Ciência de Dados. Ao carregar o Tidyverse, são carregados com ele os pacotes:

• {tibble} utilizado para data frames repaginados;

• {readr} usado para importar bases de dados para o R;

• {tidyr} e {dplyr} usados na arrumação e manipulação de dados;

• {stringr} necessário para que seja possível trabalhar com textos;

• {forcats} necessário para que seja possível trabalhar com fatores;

• {ggplot2} utilizado para gerar gráficos;

• {purrr} utilizado para programação funcional.

O Tidyverse contém inúmeros outros pacotes, mas somente os citados acima são carregados
quando o comando library(tidyverse) é acionado.

Além do Tidyverse, outro pacote importante a ser utilizado neste trabalho é o pacote Tidymodels,
cuja estrutura consiste em um conjunto de pacotes para modelagem e aprendizado de máquina
usando os princípios do Tidyverse. A partir dele é possível criar classificadores e regressores usando
algoritmos como Regressão Linear, Random Forest, Regressão Logística, entre outros modelos.

Por utilizarmos um banco de dados com dados históricos de vendas de Lego, instalaremos também
o pacote Lubridate, o qual permite a melhor manipulação de informações contendo datas. Como
ainda não exploramos as características dos nossos dados, esse pacote será carregado caso seja
necessário.

Outro pacotes importantes neste trabalho são:

• Forcats: permite trabalhar os dados como variáveis categóricas, atribuindo níveis a essas
variáveis;

• Broom: este pacote sumariza informações‐chave sobre os modelos em tibbles usando três
funções: tidy, glance e augment, este último especialmente importante por impedir que as
colunas existentes sejam substituídas ao se adicionar colunas a um conjunto de dados.

• Knitr: por meio deste pacote, os blocos de códigos (ou chunks) em um documento R
Markdown vão conter marcação especial para indicar que devem ser interpretados pelo R.

Carregando os pacotes e o banco de dados a ser analisado:

library(tidyverse)
library(tidymodels)
library(readxl)
library(dplyr)
library(lubridate)
library(scales)
library(plotly)
library (glue)

EPS 7008 ‐ Gestão Estratégica da TI 6


library(forcats)
library(broom)
library(knitr)
library(plotly)
library(ggplot2)

lego_sales <- read.csv("lego_sales.csv")

Após carregar os dados, é importante explorar o banco de dados e visualizar quais tipos de variáveis
estão contidas nele por meio do código str().

str(lego_sales)

'data.frame': 674 obs. of 14 variables:


$ first_name : chr "Kimberly" "Neel" "Neel" "Chelsea" ...
$ last_name : chr "Beckstead" "Garvin" "Garvin" "Bouchard" ...
$ age : int 24 35 35 41 41 41 19 19 37 37 ...
$ phone_number: chr "216-555-2549" "819-555-3189" "819-555-3189" NA ...
$ set_id : chr "76062" "70595" "21031" "31048" ...
$ theme : chr "DC Comics Super Heroes" "Ninjago" "Architecture" "Creator" ...
$ subtheme : chr "Mighty Micros" "Rise of the Villains" NA NA ...
$ year : int 2018 2018 2018 2018 2018 2018 2018 2018 2018 2018 ...
$ name : chr "Robin vs. Bane" "Ultra Stealth Raider" "Burj Khalifa" "Lakeside Lodge" ...
$ pieces : int 77 1093 333 368 1093 19 233 77 108 NA ...
$ us_price : num 9.99 119.99 39.99 29.99 119.99 ...
$ image_url : chr "http://images.brickset.com/sets/images/76062-1.jpg" "http://images.brickset
$ quantity : int 1 1 1 1 1 1 1 3 1 2 ...
$ theme_id : int 482 435 252 22 435 504 169 482 494 577 ...

Visualiza‐se que o banco de dados é composto de 674 observações e 14 variáveis (colunas).

3.1.2 VISUALIZAÇÃO DOS DADOS

Nesta subseção serão plotados alguns gráficos e tabelas para que seja possível entender como as
variáveis se comportam e se correlacionam entre si.

O primeiro gráfico mostra a quantidade de conjuntos de Lego vendidos por tema:

vendas <- lego_sales %>%


group_by(theme) %>%
summarise(quantity=sum(quantity)) %>%
arrange(desc(quantity))%>%
ggplot(aes(quantity, theme,label=quantity))+
geom_col(fill= "#C71585")+
geom_label()+

EPS 7008 ‐ Gestão Estratégica da TI 7


labs(x="Quantidade vendida", y="Tema", title = "Quantidade de jogos vendidos por tema")

vendas

Quantidade de jogos vendidos por tema


The Angry Birds Movie 13
Technic 12
Star Wars 117
Seasonal 4
Ninjago 59
Nexo Knights 93
Mixels 83
Minecraft 10
Marvel Super Heroes 30
Ideas 3
Ghostbusters 5
Tema

Gear 79
Friends 56
Elves 28
Duplo 50
Disney Princess 20
Dimensions 24
DC Comics Super Heroes 35
Creator 35
Collectable Minifigures 57
Classic 1
City 65
Bionicle 46
Architecture 15
Advanced Models 5
0 30 60 90 120
Quantidade vendida

Como o projeto visa analisar o faturamento, considerou‐se importante visualizar a quantidade de


vendas de cada tema, pois a quantidade está diretamente relacionada ao faturamento. Nesse
sentido, foi importante mostrar também os dez temas mais vendidos:

mais_vendidos <-lego_sales %>%


group_by(theme)%>%
summarise(quantity=sum(quantity)) %>%
arrange(desc(quantity))

mais_vendidos

# A tibble: 25 x 2
theme quantity
<chr> <int>
1 Star Wars 117
2 Nexo Knights 93
3 Mixels 83
4 Gear 79
5 City 65
6 Ninjago 59
7 Collectable Minifigures 57
8 Friends 56

EPS 7008 ‐ Gestão Estratégica da TI 8


9 Duplo 50
10 Bionicle 46
# ... with 15 more rows

A próxima análise foi sobre o faturamento obtido com as vendas desses dez temas mais vendidos.

vendas <-lego_sales %>%


mutate(faturamento = us_price*quantity) %>%
group_by(theme)%>%
summarise(faturamento=sum(faturamento)) %>%
arrange(desc(faturamento))

vendas

# A tibble: 25 x 2
theme faturamento
<chr> <dbl>
1 Star Wars 4448.
2 Ninjago 2279.
3 City 2211.
4 Nexo Knights 2209.
5 Minecraft 1550.
6 Gear 1533.
7 Friends 1279.
8 Duplo 1220.
9 Elves 1120.
10 Ghostbusters 880.
# ... with 15 more rows

Essas tabelas mostram que o faturamento não depende somente da quantidade vendida, visto que
o segundo e o terceiro temas mais vendidos não são os mesmos em segundo e terceiro lugar em
faturamento.

O gráfico seguinte mostra o faturamento por temática dos conjuntos de Lego vendidos:

vendas %>%
group_by(theme) %>%
arrange(desc(faturamento)) %>%
head(10) %>%
ggplot(aes(faturamento, theme,label=faturamento))+
geom_col(fill= "#C71585")+
geom_label()+
labs(x="Faturamento", y="Tema", title = "Faturamento dos jogos vendidos por tema")

EPS 7008 ‐ Gestão Estratégica da TI 9


Faturamento dos jogos vendidos por tema
Star Wars 4447.83
Ninjago 2279.41
Nexo Knights 2209.07
Minecraft 1549.9
879.95
Tema

Ghostbusters

Gear 1533.21
Friends 1279.44
Elves 1119.72
Duplo 1219.5
City 2211.35
0 1000 2000 3000 4000
Faturamento

A próxima análise mostra o valor do preço dos conjuntos por tema:

preco_lego <- lego_sales %>%


select(theme, name, us_price) %>%
arrange(desc(us_price))

preco_lego %>%
head(10)

theme name us_price


1 Ghostbusters Firehouse Headquarters 349.99
2 Star Wars Assault on Hoth 249.99
3 Minecraft The Village 199.99
4 Minecraft The Village 199.99
5 Minecraft The Village 199.99
6 Minecraft The Village 199.99
7 Minecraft The Village 199.99
8 Advanced Models Brick Bank 169.99
9 Advanced Models Brick Bank 169.99
10 Advanced Models Brick Bank 169.99

Para visualizar melhor a distribuição dos preços entre os conjuntos de Lego, os dados foram
ajustados em categorias de preços, conforme apresentado na tabela a seguir.

faixa_preco2 <- lego_sales


faixa_preco2[faixa_preco2$us_price <= 19.99, "categoria_preco"] <- "0-$20"

EPS 7008 ‐ Gestão Estratégica da TI 10


faixa_preco2[faixa_preco2$us_price >= 20 & faixa_preco2$us_price <= 49.99,
"categoria_preco"] <- "$21-$50"
faixa_preco2[faixa_preco2$us_price >= 50 & faixa_preco2$us_price <= 89.99,
"categoria_preco"] <- "$51-$90"
faixa_preco2[faixa_preco2$us_price >= 90 & faixa_preco2$us_price <= 119.99,
"categoria_preco"] <- "$91-$120"
faixa_preco2[faixa_preco2$us_price >= 120 & faixa_preco2$us_price <= 199.99,
"categoria_preco"] <- "$121-$200"
faixa_preco2[faixa_preco2$us_price >= 200, "categoria_preco"] <- "acima de $200"

compra_preco <- faixa_preco2 %>%


group_by(categoria_preco)%>%
summarise(Quantidade=sum(quantity))%>%
arrange(desc(Quantidade))

compra_preco

# A tibble: 6 x 2
categoria_preco Quantidade
<chr> <int>
1 0-$20 580
2 $21-$50 260
3 $51-$90 70
4 $91-$120 21
5 $121-$200 11
6 acima de $200 3

Pelo resultado da tabela, constata‐se que mais da metade dos conjuntos de Lego vendidos custam
até 20 dólares. Além disso, quase 90% dos conjuntos vendidos custam até 50 dólares.

O Box‐Plot a seguir mostra a distribuição do faturamento por categoria de preços dos produtos
Lego.

grafico_precos <-faixa_preco2 %>%


mutate (Faturamento = us_price*quantity) %>%
ggplot(aes(x=categoria_preco, y=Faturamento, fill=categoria_preco))+
geom_boxplot()+
scale_y_log10()+
scale_fill_brewer(palette = "RdBu")

grafico_precos

EPS 7008 ‐ Gestão Estratégica da TI 11


300
categoria_preco
$121−$200
Faturamento

100
$21−$50
$51−$90
$91−$120
30
0−$20
acima de $200
10

$121−$200$21−$50 $51−$90 $91−$120 0−$20acima de $200


categoria_preco

Os blocos preenchidos com cores representam a diferença entre o primeiro e o terceiro quartil,
exemplificando a dispersão do faturamento de cada categoria de preços. As categorias possuem
uma contribuição ao faturamento bem diferente umas das outras.

Uma observação interessante de se notar, é que apesar da maior quantidade das vendas
corresponder à categoria de preços 0‐$20 (com 580 conjuntos vendidos) e $21‐$50 (com 260
conjuntos vendidos), a categoria que apresenta o maior faturamento é a “acima de $200”, a qual,
neste banco de dados, conta com três conjuntos vendidos.

O gráfico de densidade a seguir possibilita uma melhor visualização da comparação entre a


distribuição das categorias de preço em termos de faturamento.

grafico_precos2 <- faixa_preco2 %>%


mutate (faturamento = us_price*quantity) %>%
ggplot(aes(faturamento, fill = categoria_preco)) +
geom_density(alpha = 0.5) +
scale_x_log10()

grafico_precos2

EPS 7008 ‐ Gestão Estratégica da TI 12


6

categoria_preco
$121−$200

4 $21−$50
density

$51−$90
$91−$120
0−$20
2
acima de $200

0
10 30 100 300
faturamento

Outra análise considerada interessante de se realizar nesta etapa, foi mensurar o faturamento por
faixa etária dos compradores. Para isso, os dados de idade foram agrupados em categorias etárias,
conforme a tabela a seguir.

faixa_etaria <- lego_sales


faixa_etaria[faixa_etaria$age <= 18, "categoria_idades"] <- "0-18"
faixa_etaria[faixa_etaria$age >= 19 & faixa_etaria$age <= 25, "categoria_idades"] <- "19-25"
faixa_etaria[faixa_etaria$age >= 26 & faixa_etaria$age <= 35, "categoria_idades"] <- "26-35"
faixa_etaria[faixa_etaria$age >= 36 & faixa_etaria$age <= 50, "categoria_idades"] <- "36-50"
faixa_etaria[faixa_etaria$age >= 51, "categoria_idades"] <- "51 e supperior"

compras_idade <- faixa_etaria %>%


group_by(categoria_idades)%>%
summarise(Quantidade=sum(quantity))

compras_idade

# A tibble: 5 x 2
categoria_idades Quantidade
<chr> <int>
1 0-18 45
2 19-25 192
3 26-35 285
4 36-50 313
5 51 e supperior 110

Diferente das categorias de preço, a quantidade de compras realizadas está melhor distribuída entre

EPS 7008 ‐ Gestão Estratégica da TI 13


as faixas etárias, sendo o grupo etário 36‐50 anos o que mais comprou conjuntos de Legos, com
313 conjuntos, seguido do grupo etário de 26‐35 anos, com 285 conjuntos comprados.

Da mesma forma como foi feito com as categorias de preços, foi plotado um gráfico Box‐Plot
mostrando a distribuição do faturamento entre as categorias etárias.

grafico_vendas <-faixa_etaria %>%


mutate (Faturamento = us_price*quantity) %>%
ggplot(aes(x=categoria_idades, y=Faturamento, fill=categoria_idades))+
geom_boxplot()+
scale_y_log10()+
scale_fill_brewer(palette = "RdBu")

grafico_vendas

300

categoria_idades
Faturamento

100 0−18
19−25
26−35
30 36−50
51 e supperior

10

0−18 19−25 26−35 36−50 51 e supperior


categoria_idades

No gráfico é possível perceber que os grupos etários de 0‐18 anos e de 19‐25 anos têm
faturamentos semelhantes. O mesmo acontece com os grupos etários de 26‐35 anos e de 36‐50
anos. De todos os grupos, o de 36‐50 anos é o que possui a maior mediana, indicando que
os clientes dessa faixa etária em propensão a gastar mais. No grupo “51 e superior”, há uma
maior dispersão no faturamento dentre todos os grupos etários analisados, mas sua mediana é
semelhante aos três primeiros grupos etários.

Outro gráfico em que é possível realizar uma comparação da distribuição do faturamento entre os
grupos etários é o gráfico de densidade.

EPS 7008 ‐ Gestão Estratégica da TI 14


grafico_etario <- faixa_etaria %>%
mutate (faturamento = us_price*quantity) %>%
ggplot(aes(faturamento, fill = categoria_idades)) +
geom_density(alpha = 0.5) +
scale_x_log10()

grafico_etario

0.9
categoria_idades
0−18
density

0.6 19−25
26−35
36−50

0.3 51 e supperior

0.0
10 30 100 300
faturamento

Além de analisar o faturamento por tema, a ideia era também plotar um gráfico de faturamento
por ano, para visualizar se o faturamento aumentava ou diminuía por tema ao longo dos anos.
Entretanto, ao explorar as datas das compras antes de plotar um gráfico de linhas, constatou‐se
que o banco de dados utilizado fornece somente informações de vendas de conjuntos de Lego
realizadas no ano de 2018, impossibilitando a análise da variação do faturamento por ano.

lego_sales %>%
group_by(year) %>%
summarize(theme=n())

# A tibble: 1 x 2
year theme
<int> <int>
1 2018 674

Essa informação reforçou a importância deste trabalho em implementar um modelo de previsão


do faturamento das vendas, visto que essa informação não está disponível para outros anos neste
banco de dados, apenas para o ano de 2018.

EPS 7008 ‐ Gestão Estratégica da TI 15


3.1.3 LIMPEZA DOS DADOS

Com os dados conhecidos, será preciso realizar uma limpeza antes da aplicação dos métodos de
Machine Learning. Como constatado durante a análise exploratória, algumas linhas das variáveis
subtema (subtheme), número de peças (pieces) possuem dados vazios. O que pode interferir no
bom funcionamento dos modelos preditivos.

Além disso, para obter uma melhor acurácia nos modelos de previsão, é interessante retirar as
variáveis que aparentemente não contribuem com o que se pretende analisar.

Neste trabalho, serão retiradas as variáveis subtema, por não estar presente em todos os dados, e
por estar intrinsecamente relacionada ao tema do conjunto de Legos. Serão retiradas as variáveis
de nomes dos conjuntos opr motivos similares aos da retirada dos subtemas.

Serão retiradas ainda as variáveis theme_id e set_id, por serem apenas utilizadas para controle dos
conjuntos de Legos vendidos no banco de dados da empresa, bem como o link para a imagem
do conjunto. Outras variáveis a serem retiradas são as relacionadas a informações pessoais dos
compradores, os chamados dados sensíveis, como número de telefone, nome e sobrenome do
cliente.

Com isso, o banco de dados ficou o seguinte:

faturamento_lego <-lego_sales %>%


mutate(faturamento = us_price*quantity)%>%
select(-subtheme, -name, -theme_id, -image_url,-set_id,-first_name,
-last_name,-phone_number)%>%
mutate_if(is.character, factor)%>%
filter(pieces != "NA")

faturamento_lego %>%
head(10)

age theme year pieces us_price quantity faturamento


1 24 DC Comics Super Heroes 2018 77 9.99 1 9.99
2 35 Ninjago 2018 1093 119.99 1 119.99
3 35 Architecture 2018 333 39.99 1 39.99
4 41 Creator 2018 368 29.99 1 29.99
5 41 Ninjago 2018 1093 119.99 1 119.99
6 41 Duplo 2018 19 9.99 1 9.99
7 19 Star Wars 2018 233 24.99 1 24.99
8 19 DC Comics Super Heroes 2018 77 9.99 3 29.97
9 37 Friends 2018 108 9.99 1 9.99
10 19 Duplo 2018 13 9.99 1 9.99

Após a limpeza dos dados, serão elaborados os modelos de previsão.

EPS 7008 ‐ Gestão Estratégica da TI 16


3.2 MODELAGEM PREDITIVA
Esta etapa consiste na aplicação de técnicas de Machine Learning para elaborar um modelo
preditivo para o faturamento das vendas de conjuntos de Lego, conforme mencionado na Seção
2.3. A primeira técnica utilizada será a Regressão Linear, seguida do modelo e Árvore de Decisão,
Random Forest e finalmente, o quarto modelo proposto pela equipe, a Regressão de Poisson (ou
Poisson Regression).

3.2.1 PREPARAÇÃO

Inicialmente serão divididos os datasets de treinamento e teste:

set.seed(1234)
faturamento_split <- initial_split(faturamento_lego,prop=0.75, strata=faturamento)

faturamento_train <- training(faturamento_split)


faturamento_test <- testing(faturamento_split)

faturamento_train %>%
head(10)

age theme year pieces us_price quantity faturamento


6 41 Duplo 2018 19 9.99 1 9.99
9 37 Friends 2018 108 9.99 1 9.99
10 19 Duplo 2018 13 9.99 1 9.99
18 44 Mixels 2018 63 4.99 1 4.99
33 43 Mixels 2018 64 4.99 2 9.98
40 17 Nexo Knights 2018 76 9.99 1 9.99
42 48 Friends 2018 54 4.99 2 9.98
43 48 Mixels 2018 61 4.99 1 4.99
53 32 Star Wars 2018 76 9.99 1 9.99
55 25 Marvel Super Heroes 2018 95 9.99 1 9.99

faturamento_test %>%
head(10)

age theme year pieces us_price quantity faturamento


1 24 DC Comics Super Heroes 2018 77 9.99 1 9.99
2 35 Ninjago 2018 1093 119.99 1 119.99
3 35 Architecture 2018 333 39.99 1 39.99
5 41 Ninjago 2018 1093 119.99 1 119.99
7 19 Star Wars 2018 233 24.99 1 24.99
11 19 Duplo 2018 15 14.99 1 14.99
15 36 Mixels 2018 61 4.99 1 4.99
17 40 Advanced Models 2018 2380 169.99 1 169.99

EPS 7008 ‐ Gestão Estratégica da TI 17


21 45 Star Wars 2018 409 59.99 1 59.99
23 45 City 2018 248 19.99 1 19.99

Em seguida, será usado um procedimento chamado k‐fold cross validation ou validação cruzada,
a fim de que a robustez das estimações seja aprimorada. Além disso, a recipe criada servirá para
todas as análises.

faturamento_fold <- vfold_cv(faturamento_train, v=10)

faturamento_rec <- recipe(faturamento ~ ., data = faturamento_train) %>%


step_dummy(all_nominal()) %>%
step_impute_knn(age, year, pieces, us_price, quantity) %>%
step_normalize(all_numeric())

faturamento_wf <- workflow() %>%


add_recipe(faturamento_rec)

Para validar os modelos propostos, serão usadas três métricas: R², MAE e RMSE. O R² é uma medida
estatística que mede quão próximos os dados estão da linha de regressão ajustada. Essa métrica
é conhecida ainda como o coeficiente de determinação ou o coeficiente de determinação múltipla
para a regressão múltipla.

O R² fica sempre entre 0 e 1:

• 0: indica que o modelo não explica nada da variabilidade dos dados de resposta ao redor de
sua média.

• 1: indica que o modelo explica toda a variabilidade dos dados de resposta ao redor de sua
média.

MAE (Erro Médio absoluto): O erro médio absoluto (MAE) é a métrica de erro de regressão que
calcula o valor dos resíduos para cada um dos pontos e, em seguida, tira a média de todos esses
resíduos.

RMSE (Raiz do Erro Quadrático Médio): é uma medida de erro absoluto que eleva os desvios ao
quadrado a fim de impedir que os desvios positivos e negativos se cancelem. Essa medida também
tende a superestimar erros grandes, o que pode ajudar a eliminar os métodos com esses erros.

3.2.2 REGRESSÃO LINEAR

A Regressão linear é um algoritmo supervisionado de machine learning usado para estimar o valor
de uma variável com base em uma série de dados históricos. Para treinar o modelo de Regressão
Linear, será utilizado o lm.

lm_spec <- linear_reg() %>%


set_engine("lm")

EPS 7008 ‐ Gestão Estratégica da TI 18


lm_rs <- faturamento_wf %>%
add_model(lm_spec) %>%
fit_resamples(resamples=faturamento_fold,
metrics=metric_set(rmse, rsq, mae),
control=control_resamples(save_pred=TRUE))

collect_metrics(lm_rs)

# A tibble: 3 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 mae standard 0.206 10 0.0188 Preprocessor1_Model1
2 rmse standard 0.384 10 0.0496 Preprocessor1_Model1
3 rsq standard 0.858 10 0.0181 Preprocessor1_Model1

O R² de 0,858 indica que o modelo explica bem a variabilidade dos dados.

3.2.3 ÁRVORE DE DECISÃO

A Árvore de Decisão é um algoritmo de aprendizado de máquina supervisionado utilizado tanto


para problemas de classificação quanto para regressão. Essa técnica pode ser usada para prever
categorias discretas e para prever valores numéricos.

A Árvore de Decisão lembra muito um fluxograma, pois assim como os fluxogramas, a árvore de
decisão estabelece nós (decision nodes) que se relacionam entre si por uma hierarquia previamente
estabelecida. Para treinar o modelo de Árvore de Decisão, será utilizado o rpart.

tree_spec <- decision_tree() %>%


set_engine("rpart") %>%
set_mode("regression")

tree_rs <- faturamento_wf %>%


add_model(tree_spec) %>%
fit_resamples(resamples=faturamento_fold,
metrics=metric_set(rmse, rsq, mae),
control=control_resamples(save_pred=TRUE))

collect_metrics(tree_rs)

# A tibble: 3 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 mae standard 0.246 10 0.0307 Preprocessor1_Model1
2 rmse standard 0.532 10 0.120 Preprocessor1_Model1
3 rsq standard 0.796 10 0.0263 Preprocessor1_Model1

EPS 7008 ‐ Gestão Estratégica da TI 19


Para este modelo, o R² encontrado foi de 0,7956, também indicando uma boa correspondência do
modelo com a variabilidade dos dados, entretanto, com um valor inferior ao encontrado no modelo
de Regressão Linear.

3.2.4 RANDOM FOREST

O Random Forest (Floresta Aleatória em português) é um algoritmo de aprendizado supervisionado


mais robusto e complexo que os anteriores. Apesar de exigir maior custo computacional, costuma
produzir melhores resultados.

Este modelo cria várias árvores de decisão, quanto mais árvores criadas, melhores serão os
resultados do modelo, e maior o tempo necessário para o sistema rodar o modelo. Em determinado
ponto, a nova árvore criada não consegue levar a uma melhora significativa no desempenho do
modelo, então o algoritmo apresenta o resultado.

Neste trabalho, será utilizado o ranger para treinar o modelo de Random Forest.

rf_spec <- rand_forest(trees=1000) %>%


set_engine("ranger") %>%
set_mode("regression")

rf_rs <- faturamento_wf %>%


add_model(rf_spec) %>%
fit_resamples(resamples=faturamento_fold,
metrics=metric_set(rmse, rsq, mae),
control=control_resamples(save_pred=TRUE))

collect_metrics(rf_rs)

# A tibble: 3 x 6
.metric .estimator mean n std_err .config
<chr> <chr> <dbl> <int> <dbl> <chr>
1 mae standard 0.179 10 0.0279 Preprocessor1_Model1
2 rmse standard 0.426 10 0.138 Preprocessor1_Model1
3 rsq standard 0.894 10 0.0176 Preprocessor1_Model1

O modelo retornou um R² de 0,8935, o melhor resultado até o momento.

3.2.5 COMPARAÇÃO ENTRE OS MODELOS

Nesta subseção será feito um comparativo entre os três modelos aplicados, os quais foram
aprendidos em sala de aula. A comparação das variáveis R², MAE e RMSE será feita por meio de
gráficos.

resultados <- collect_metrics(lm_rs) %>%


mutate(modelo="lm") %>%

EPS 7008 ‐ Gestão Estratégica da TI 20


rbind(collect_metrics(tree_rs) %>%
mutate(modelo="tree")) %>%
rbind(collect_metrics(rf_rs) %>%
mutate(modelo="rf"))

resultados %>%
ggplot(aes(modelo, mean, fill=modelo))+
geom_col() +
facet_wrap(vars(.metric
), scales = "free_y")+
scale_fill_viridis_d()+
theme(axis.title.y = element_blank(),
axis.title.x = element_blank(),
legend.position = "none")

mae rmse rsq


0.25

0.75
0.20
0.4

0.15
0.50

0.10
0.2

0.25
0.05

0.00 0.0 0.00


lm rf tree lm rf tree lm rf tree

Como observado nos gráficos, ainda que não possua o menor RMSE, o modelo Random Forest
apresentou o menor MAE e maior R2 de acordo com os gráficos. Portanto, dos três modelos
aplicados até então, o Random Forest será o escolhido para calcular o modelo final.

Antes de calcular o modelo final, será avaliado o algoritmo de um quarto método de previsão
utilizando Machine Learning supervisionado, conforme solicitado no escopo deste projeto. O
modelo proposto será o Poisson Regression e será apresentado na subseção seguinte.

EPS 7008 ‐ Gestão Estratégica da TI 21


3.2.6 POISSON REGRESSION

Para realizar o quarto modelo de previsão supervisionado, optou‐se por utilizar poisson regression
ou quasi poisson regression. Para definir qual dos modelos seria utilizado, foi feita uma análise de
grandeza dos valores de média e de variância do faturamento.

var <- faturamento_train %>%


summarise(mean = mean(faturamento), var = var(faturamento))

var

mean var
1 41.20862 3276.331

Visto que foi obtido 3276,33 como resultado da variância e 41,21 o resultado da média de
faturamento, optou‐se pelo modelo quasi poisson de previsão, pois a variância é muito maior que
a média dos valores de faturamento.

Inicialmente foi aplicado o modelo de previsão no dataset de treinamento, como mostra o código a
seguir.

fmla <- faturamento ~ age + year + pieces + us_price + quantity

model <- glm(fmla, data = faturamento_train, family = quasipoisson)

perf <- glance(model)

Para realizar a análise da qualidade do modelo de previsão, utilizou‐se as métricas MAE, RMSE,
pseudoR2 e um gráfico que compara o modelo de previsão e os dados do dataset de teste.

pseudoR2 <- 1 - perf$deviance/perf$null.deviance

pseudoR2

[1] 0.764963

faturamento_test$pred <- predict(model, newdata = faturamento_test, type = "response")

faturamento_test %>%
mutate(residual = pred - faturamento) %>%
summarize(mae = (mean(sqrt(residual^2)))/mean(faturamento))

mae
1 0.3648393

EPS 7008 ‐ Gestão Estratégica da TI 22


faturamento_test %>%
mutate(residual = pred - faturamento) %>%
summarize(rmse = (sqrt(mean(residual^2)))/mean(faturamento))

rmse
1 0.5251102

ggplot(faturamento_test, aes(x = pred, y = faturamento)) +


geom_point() +
geom_abline(color = "darkblue")

250

200
faturamento

150

100

50

0
40 80 120 160
pred

Com isso, obteve‐se um MAE de 0,3648, RMSE de 0,5251 e pseudo R2 de 0,7650. Com base nos
resultados obtidos, podemos observar que o modelo não é muito preciso em prever o faturamento,
fato que pode ser explicado pela pequena quantidade de dados para análise, visto que esse método
é recomendado para situações de com elevada quantidade de dados de entrada.

3.2.7 CÁLCULOS FINAIS

Conforme visto anteriormente, o quarto modelo de Machine Learning proposto, o Poisson


Regression, não apresentou os melhores valores para as variáveis R², MAE e RMSE que o modelo
Random Forest. Portanto, para o cálculo do modelo final será utilizado o Random Forest.

modelo_final <- faturamento_wf %>%


add_model(rf_spec) %>%
last_fit(faturamento_split)

EPS 7008 ‐ Gestão Estratégica da TI 23


collect_metrics(modelo_final,
metrics = metric_set(rsq, rmse, mae))

# A tibble: 2 x 4
.metric .estimator .estimate .config
<chr> <chr> <dbl> <chr>
1 rmse standard 0.230 Preprocessor1_Model1
2 rsq standard 0.894 Preprocessor1_Model1

collect_predictions(modelo_final) %>%
ggplot(aes(faturamento, .pred)) +
geom_abline(lty = 2, color = "gray50") +
geom_point(size = 2, alpha = 0.5, color = "#e32d91") +
coord_fixed()

2
.pred

0 1 2 3
faturamento

O gráfico acima aponta uma boa correlação entre o faturamento real e a previsão calculada com o
Random Forest, indicando que o modelo proposto é adequado a este caso.

Finalmente, serão avaliadas quais das variáveis utilizadas foram mais relevantes para chegar aos
resultados obtidos com o modelo. Para isso, será utilizado o pacote vip.

library(vip)

imp_spec <- rf_spec %>%


set_engine("ranger", importance = "permutation")

EPS 7008 ‐ Gestão Estratégica da TI 24


faturamento_wf %>%
add_model(imp_spec) %>%
fit(faturamento_train) %>%
pull_workflow_fit() %>%
vip(aesthetics = list(alpha = 0.8, fill = "#C71585"))

us_price

pieces

quantity

theme_Mixels

theme_Nexo.Knights

theme_Bionicle

theme_Duplo

theme_Creator

theme_Disney.Princess

theme_DC.Comics.Super.Heroes

0.0 0.1 0.2 0.3 0.4


Importance

Portanto, de acordo com o gráfico, as variáveis preço, quantidade de peças no conjunto de Lego e
quantidade vendida foram as três variáveis mais relevantes neste modelo.

4 CONCLUSÃO
Este trabalho tinha como objetivos utilizar técnicas de estatística e Machine Learning para analisar
o comportamento das vendas de uma empresa de Lego. Pode‐se dizer que o projeto cumpriu seus
objetivos, uma vez que foram utilizados os pacotes em R para realizar a análise exploratória dos
dados, bem como o uso de modelos de Machine Learning como Regressão Linear, Árvore de Decisão
e Random Forest para prever o faturamento das vendas dos conjuntos de Lego.

Além disso, neste trabalho foi proposto um quarto método de aprendizado supervisionado para a
modelagem do problema, a Regressão de Poisson.

A partir das análises, pode‐se concluir que um bom modelo de previsão pode ser um grande aliado
de um empreendimento que busca desenvolver novos produtos e visualizar o faturamento que a
venda destes produtos trará para a empresa.

Além disso, contatou‐se que para gerar um bom modelo de previsão deve‐se ter acesso a uma base
de dados grande e completa. Aliado a isso, o tratamento dos dados foi fundamental para evitar
redundâncias e dados irrelevantes para o desenvolvimento do modelo.

EPS 7008 ‐ Gestão Estratégica da TI 25


Foram desenvolvidos ainda diversos modelos de previsão e, como esperado, alguns obtiveram
melhores resultados, visto que cada situação pode demandar um modelo que melhor se adeque
ao problema. Neste caso, o modelo Random Forest foi o que apresentou valores de MAE, RMSE e
R2 mais atrativos.

Por fim, observou‐se que a base de dados poderia conter mais informações, como as vendas de
outros anos além de 2018, a localização das vendas, vendas ocorridas em outros países, entre
outros. Esses dados trariam para o modelo a capacidade de prever tendência, sazonalidades e
conferir maior precisão de previsão, relacionando as datas a eventos como lançamentos de filmes
com o mesmo tema e poder de compra da população na região, por exemplo.

5 REFERÊNCIAS
BOSE, I.; MAHAPATRA, R. K. Business data mining ‐ a machine learning perspective. Information &
Management, v. 39., p. 211‐225. 2001. Disponível em: https://doi.org/10.1016/S0378‐7206(01)
00091‐X. Acesso em: 12 dez. 2022.

IBM. Cloud Education. O que é Machine Learning? 2020. Disponível em: https://www.ibm.com/
br‐pt/cloud/learn/machine‐learning#toc‐mtodos‐de‐‐jJ9aK‐QI. Acesso em: 29 nov. 2022.

GUARNIZO. JHONNATAN A. Y. Métodos Supervisionados de Machine Learning Aplicados à


Produtividade Agrícola de Cana‐de‐Açúcar. Dissertação apresentada à Faculdade de Engenharia
Agrícola da Universidade Estadual de Campinas como parte dos requisitos exigidos para a obtenção
do título de Mestre em Engenharia Agrícola, na área de Máquinas Agrícolas. Campinas, 2021.
Disponível em: https://repositorio.unicamp.br/acervo/detalhe/1166814. Acesso em: 29 nov.
2022.

LAURETTO. Capítulo 1 ‐ Análise Exploratória de Dados. Disciplinas USP, 2011. Disponível em:
http://www.each.usp.br/lauretto/SIN5008_2011/aula01/aula1. Acesso em: 29 nov. 2022.

MALDONADO. Prof. Mauricio Uriona. Material de aula da disciplina de Gestão Estratégica da


Tecnologia da Informação. 2022. Disponível no ambiente virtual Moodle da Universidade Federal
de Santa Catarina. Acesso em: 29 nov. 2022.

VISGRAF. Etapas do Ciclo de Dados, 2020. Disponível em: https://www.visgraf.impa.br/coronaviz/


etapas‐do‐ciclo‐de‐dados/. Acesso em: 29 nov. 2022.

EPS 7008 ‐ Gestão Estratégica da TI 26

Você também pode gostar