17 Caderno de Exercícios Práticos
Neste capítulo estão compiladas as listas de exercícios aplicadas durante a disciplina, abrangendo desde os conceitos de Inteligência Artificial e Ciência de Dados até a aplicação prática de algoritmos de Aprendizado de Máquina. As listas originais da disciplina foram preservadas e complementadas com novas questões conceituais, demonstrações, problemas numéricos para resolver à mão e tarefas de programação em R e em Python.
17.1 Como Usar Este Caderno
As listas seguem a ordem dos capítulos do livro. Cada lista é organizada, sempre que possível, em blocos:
- Questões da disciplina: as questões originalmente aplicadas no curso.
- Questões conceituais e teóricas: perguntas discursivas que exigem compreender e explicar, com suas próprias palavras, os conceitos do capítulo.
- Demonstrações e problemas numéricos: derivações matemáticas e cálculos que devem ser feitos à mão (com calculadora), antes de qualquer verificação computacional.
- Tarefas de programação: exercícios práticos em R e/ou Python, com conjuntos de dados embutidos nas linguagens (
iris,mtcars,penguins,diamonds, bases doscikit-learn) ou disponibilizados por link. - Respostas e soluções selecionadas: resultados numéricos de parte dos exercícios, conferidos computacionalmente, para que você possa verificar o seu trabalho.
O nível de dificuldade de cada questão nova é indicado por estrelas:
| Marcador | Nível | O que se espera |
|---|---|---|
| \((\star)\) | Básico | Aplicação direta de uma definição, comando ou fórmula. |
| \((\star\star)\) | Intermediário | Combinação de conceitos, interpretação de resultados ou código com várias etapas. |
| \((\star\star\star)\) | Avançado | Demonstrações, análise crítica, projetos abertos ou implementações do zero. |
- Resolva primeiro os exercícios à mão e só depois confira com o computador: o objetivo dos problemas numéricos é fixar o mecanismo dos métodos, e não apenas obter o número.
- Consulte as respostas selecionadas somente depois de tentar resolver a questão. Quando seu resultado divergir, procure o passo em que o raciocínio se separou da solução.
- Nos exercícios de programação, escreva código legível, comente as decisões importantes e fixe a semente aleatória (
set.seed()no R,random_statenoscikit-learn) para que os resultados sejam reprodutíveis. - Sempre que possível, versione suas soluções com Git (Lista 6) e as entregue como documentos Quarto ou RMarkdown renderizados (Lista 7).
Nas respostas, os números são apresentados com vírgula decimal e, em geral, arredondados para quatro casas decimais. Pequenas diferenças na última casa, decorrentes de arredondamentos intermediários, não indicam erro. Logaritmos na entropia são na base 2, salvo menção em contrário.
17.2 Lista 1 — Conceitos de Ciência de Dados e Inteligência Artificial
Esta lista acompanha os capítulos introdutórios sobre Ciência de Dados e Inteligência Artificial.
17.2.1 Questões da disciplina
- Quais são as duas partes da Inteligência Artificial?
- Defina o conceito de Aprendizagem de Máquina (Machine Learning).
- Quais são os 5 desafios que as empresas enfrentam ao implementar soluções baseadas em Inteligência Artificial?
- Descreva o conceito de “O que é Ciência de Dados”.
- Cite pelo menos 5 outros termos que atualmente estão relacionados ou são sinônimos de Ciência de Dados.
- Cite 3 exemplos de aplicações de Ciência de Dados.
- Cite pelo menos 3 áreas que compõem a área de Ciência de Dados.
- Quais são os 3 tipos de conhecimento exigidos de um profissional de Ciência de Dados?
- Quais são os 4 pilares de um Cientista de Dados?
- Cite as 6 etapas que formam o processo CRISP-DM.
- Descreva como é a estrutura tabular de dados estruturados.
- Cite 4 tipos de arquivos que não fazem parte de dados estruturados.
- Cite um produto ou serviço que utiliza IA e explique como ele funciona.
17.2.2 Questões conceituais e teóricas
- \((\star)\) Explique a hierarquia Dado–Informação–Conhecimento–Sabedoria (DIKW) (Ackoff 1989) usando como exemplo o registro de notas dos alunos de uma disciplina.
- \((\star)\) Diferencie análise descritiva, diagnóstica, preditiva e prescritiva. Para cada uma, dê um exemplo de pergunta de negócio em uma rede de farmácias.
- \((\star\star)\) Em que sentido a Ciência de Dados pode ser considerada uma continuação da proposta de Tukey (Tukey 1962) e de Cleveland (William S. Cleveland 2001)? Discuta também a crítica de Donoho (Donoho 2017) sobre a relação entre Estatística e Ciência de Dados.
- \((\star)\) Descreva os “V’s” do Big Data (volume, velocidade, variedade, veracidade e valor) (Laney 2001). Qual deles você considera o maior desafio para um estatístico? Justifique.
- \((\star\star)\) Para cada etapa do CRISP-DM (Chapman et al. 2000), indique um entregável concreto e um erro comum que pode comprometer o projeto.
- \((\star)\) Classifique as variáveis a seguir quanto ao tipo (qualitativa nominal, qualitativa ordinal, quantitativa discreta, quantitativa contínua) e quanto à escala de medida de Stevens (Stevens 1946) (nominal, ordinal, intervalar, razão): (a) CEP; (b) temperatura em graus Celsius; (c) número de filhos; (d) renda mensal; (e) escolaridade; (f) nota de satisfação de 1 a 5; (g) tempo até a falha de um equipamento.
- \((\star\star)\) Por que não faz sentido dizer que “30 °C é o dobro de 15 °C”? Converta as duas temperaturas para Kelvin (\(K = C + 273{,}15\)) e calcule a razão correta.
- \((\star)\) Diferencie dados estruturados, semiestruturados e não estruturados, dando dois exemplos de cada. Em qual categoria se encaixa um arquivo JSON? E um arquivo de áudio?
- \((\star\star)\) Explique o Teste de Turing (Turing 1950) e o argumento do Quarto Chinês (Searle 1980). O que cada um sugere sobre a possibilidade de uma máquina “pensar”?
- \((\star)\) Diferencie as abordagens simbólica, conexionista e estatística da IA, citando um exemplo histórico de cada.
- \((\star)\) Qual a diferença entre IA fraca (estreita) e IA forte (geral)? Os grandes modelos de linguagem atuais são exemplos de qual delas? Justifique.
- \((\star\star)\) Explique o que é viés algorítmico e dê um exemplo de como um modelo de concessão de crédito pode discriminar um grupo mesmo sem usar explicitamente a variável sensível (por exemplo, raça ou sexo).
- \((\star\star)\) O que é \(k\)-anonimidade (Sweeney 2002)? Por que remover apenas o nome e o CPF de uma base de dados não garante a privacidade dos indivíduos?
- \((\star)\) Descreva as diferenças de atribuições entre cientista de dados, engenheiro de dados, analista de dados e engenheiro de aprendizado de máquina.
17.2.3 Problemas numéricos
\((\star)\) Unidades de armazenamento. Um fabricante anuncia um disco de 1 TB, entendido como \(10^{12}\) bytes, enquanto o sistema operacional reporta a capacidade em potências de 2 (\(1\ \text{TiB} = 2^{40}\) bytes).
- Quantos TiB o disco possui?
- Qual é a diferença percentual entre 1 TiB e 1 TB?
\((\star\star)\) Paradoxo de Simpson. Dois hospitais tratam pacientes leves e graves com os resultados (fictícios) abaixo.
Hospital Leves: sobreviventes/total Graves: sobreviventes/total A 95/100 300/900 B 850/900 30/100 - Calcule a taxa de sobrevivência de cada hospital em cada estrato e a taxa agregada.
- Qual hospital parece melhor no agregado? E dentro de cada estrato? Explique o paradoxo (Simpson 1951).
- Calcule uma taxa padronizada atribuindo peso igual (50%) aos dois estratos.
\((\star\star)\) Agente sob incerteza. Um agente pode escolher a ação \(a_1\), que rende 100 com probabilidade 0,3 e \(-20\) com probabilidade 0,7, ou a ação \(a_2\), que rende 10 com certeza. Calcule a utilidade esperada de cada ação. Qual ação um agente racional neutro ao risco escolhe? Para qual probabilidade de sucesso \(p\) de \(a_1\) o agente fica indiferente?
\((\star\star)\) Perceptron. Treine à mão um perceptron para a função lógica AND, com entradas \(x_1, x_2 \in \{0, 1\}\), pesos iniciais \(\mathbf{w} = (0, 0)\), viés \(b = 0\), taxa de aprendizado \(\eta = 1\), saída \(\hat y = 1\) se \(\mathbf{w}^\top\mathbf{x} + b > 0\) e \(\hat y = 0\) caso contrário, e regra de atualização \(\mathbf{w} \leftarrow \mathbf{w} + \eta(y - \hat y)\mathbf{x}\), \(b \leftarrow b + \eta(y - \hat y)\). Percorra os exemplos na ordem \((0,0), (0,1), (1,0), (1,1)\) até uma época sem erros. Por que o mesmo procedimento nunca converge para a função XOR (Minsky e Papert 1969)?
\((\star\star)\) Temperatura na geração de texto. Um modelo de linguagem atribui os escores (logits) \(z = (2, 1, 0)\) a três palavras candidatas. A probabilidade de cada palavra é dada pela função softmax com temperatura \(\tau\): \(p_i = e^{z_i/\tau} / \sum_j e^{z_j/\tau}\). Calcule as probabilidades para \(\tau = 0{,}5\), \(\tau = 1\) e \(\tau = 2\) e explique o efeito da temperatura sobre a “criatividade” do texto gerado.
17.2.4 Respostas e soluções selecionadas
- 20. \(303{,}15/288{,}15 \approx 1{,}052\): 30 °C é cerca de 5,2% “mais quente” que 15 °C em termos de energia térmica, e não o dobro. A escala Celsius é intervalar (zero arbitrário), por isso razões não têm significado.
- 28. (a) \(10^{12}/2^{40} \approx 0{,}9095\) TiB. (b) \(2^{40}/10^{12} - 1 \approx 9{,}95\%\).
- 29. (a) Hospital A: leves 95%, graves \(33{,}33\%\), agregado \(395/1000 = 39{,}5\%\). Hospital B: leves \(94{,}44\%\), graves 30%, agregado \(880/1000 = 88\%\). (b) B parece muito melhor no agregado, mas A é melhor em ambos os estratos: a inversão ocorre porque A recebe a grande maioria dos casos graves (a gravidade é uma variável de confusão). (c) A: \(0{,}5(0{,}95) + 0{,}5(0{,}3333) \approx 64{,}17\%\); B: \(0{,}5(0{,}9444) + 0{,}5(0{,}30) \approx 62{,}22\%\), confirmando a vantagem de A.
- 30. \(E[U(a_1)] = 0{,}3 \cdot 100 + 0{,}7 \cdot (-20) = 16\) e \(E[U(a_2)] = 10\); o agente escolhe \(a_1\). Indiferença: \(100p - 20(1-p) = 10 \Rightarrow p = 0{,}25\).
- 31. Evolução de \((\mathbf{w}; b)\) ao final de cada época: \((1,1; 1)\), \((2,1; 0)\), \((2,1; -1)\), \((2,2; -1)\), \((2,1; -2)\) e, na 6ª época, nenhum erro. Solução final: \(\mathbf{w} = (2, 1)\), \(b = -2\), isto é, \(\hat y = 1 \iff 2x_1 + x_2 > 2\). O XOR não é linearmente separável, logo nenhum hiperplano o resolve e o algoritmo cicla indefinidamente.
- 32. \(\tau = 0{,}5\): \((0{,}8668;\ 0{,}1173;\ 0{,}0159)\). \(\tau = 1\): \((0{,}6652;\ 0{,}2447;\ 0{,}0900)\). \(\tau = 2\): \((0{,}5065;\ 0{,}3072;\ 0{,}1863)\). Temperaturas baixas concentram a probabilidade na palavra mais provável (texto previsível); temperaturas altas achatam a distribuição (texto mais variado e arriscado).
17.3 Lista 2 — Programação em R
Esta lista acompanha o capítulo de introdução ao R e ao tidyverse (Wickham e Grolemund 2017; Wickham 2019).
17.3.1 Questões da disciplina
- Calcule o resultado das seguintes operações:
- \(5 + 3 \times 2\)
- \((10 - 3)^2\)
- \(16 \div 4 + 7\)
- Crie um vetor chamado
numeroscom os seguintes valores: 1, 3, 5, 7, 9. Em seguida:- Multiplique todos os elementos do vetor por 2.
- Encontre a soma dos elementos do vetor.
- Usando o vetor
numeroscriado anteriormente:- Retorne o terceiro elemento do vetor.
- Retorne todos os elementos maiores que 4.
- Escreva uma função que verifica se um número armazenado na variável
xé par ou ímpar. Caso seja par, exiba “Número par”; caso contrário, exiba “Número ímpar”. - Crie um data frame chamado
dadoscom as seguintes colunas e dados:Nome: “Ana”, “Bruno”, “Carlos”, “Diana”Idade: 25, 30, 22, 28Sexo: “F”, “M”, “M”, “F”
- Usando o data frame
dados:- Calcule a média das idades.
- Encontre o valor mínimo e o máximo da coluna
Idade.
- Carregue o data frame
mtcars(disponível no R) e exiba as primeiras 6 linhas (utilize|>). - Utilizando o
dplyr, selecione apenas as colunasmpg(milhas por galão) ecyl(número de cilindros) do data framemtcars. - Usando o
dplyr, filtre o data framemtcarspara mostrar apenas os carros commpgmaior que 20. - Ordene o data frame
mtcarspela colunahp(horsepower) em ordem decrescente. - Crie uma nova coluna no data frame
mtcarschamadapeso_relativo, que corresponde à razão entrewt(peso) ehp(horsepower). - Agrupe o data frame
mtcarspelo número de cilindros (cyl) e calcule a média dempgpara cada grupo. - Adicione uma coluna chamada
eficienciano data framemtcars, definida comompg / wt. Em seguida, filtre para exibir apenas os carros cuja eficiência seja maior que 5. - Utilize o
summarizedodplyrpara calcular:- a média de
mpg; - o desvio padrão de
hp.
- a média de
- Crie um pipeline com o
dplyrque:- filtra o data frame
mtcarspara incluir apenas carros commpgmaior que 25; - ordena os carros pela coluna
hpem ordem crescente; - retorna apenas as colunas
mpg,hpewt.
- filtra o data frame
17.3.2 Questões conceituais e teóricas
- \((\star)\) Quais são os tipos atômicos de vetores no R? O que acontece ao executar
c(1, "a", TRUE)? Explique a regra de coerção envolvida. - \((\star)\) Diferencie vetor, matriz, array, lista, fator e data frame. Em que situação uma lista é preferível a um data frame?
- \((\star\star)\) Explique a regra da reciclagem do R. Qual é o resultado de
1:6 + c(10, 20)? E de1:5 + c(10, 20)? Por que o segundo caso gera um aviso? - \((\star\star)\) O que significa dizer que o R é uma linguagem vetorizada? Compare, em termos de legibilidade e desempenho, um laço
forque soma os quadrados de1:1e6e a expressãosum((1:1e6)^2). - \((\star)\) Qual a diferença entre
NA,NULL,NaNeInf? O que retornammean(c(1, NA, 3))emean(c(1, NA, 3), na.rm = TRUE)? - \((\star\star)\) Explique os três princípios de dados tidy (Wickham 2014). Dê um exemplo de tabela “larga” que viola esses princípios e mostre como
tidyr::pivot_longer()a corrige. - \((\star)\) Qual a diferença entre o pipe nativo
|>e o pipe%>%do pacotemagrittr? - \((\star\star)\) Por que é preferível usar
solve(A, b)em vez desolve(A) %*% bpara resolver um sistema linear? - \((\star\star)\) Em uma junção
left_join(x, y, by = "id"), o que acontece com o número de linhas dexse a chaveidestiver duplicada emy? Ilustre com um exemplo pequeno.
17.3.3 Tarefas de programação
- \((\star)\) Crie a matriz \(A = \begin{pmatrix} 2 & 1 \\ 1 & 3 \end{pmatrix}\) e o vetor \(\mathbf{b} = (3, 5)^\top\). Resolva \(A\mathbf{x} = \mathbf{b}\) com
solve()e confira o resultado comA %*% x. - \((\star)\) Escreva uma função
cv(x)que retorna o coeficiente de variação \(s/\bar{x}\) de um vetor numérico, ignorando valores ausentes. Aplique-a às colunas numéricas deirisusandosapply(). - \((\star\star)\) Usando
dplyre o conjuntomtcars, construa uma tabela com, para cada combinação decyleam(tipo de câmbio), o número de carros, a média e o desvio padrão dempg, ordenada pela média decrescente. - \((\star\star)\) Usando o conjunto
penguins(pacotepalmerpenguins(Horst, Hill, e Gorman 2020) oudatasets::penguinsa partir do R 4.5):- conte os valores ausentes por coluna;
- remova as linhas com ausência na massa corporal;
- calcule a massa corporal média por espécie e sexo;
- transforme o resultado para o formato largo, com uma coluna por sexo, usando
pivot_wider().
- \((\star\star)\) Escreva uma função
resumo(x)que retorna uma lista com média, mediana, desvio padrão, mínimo, máximo e número de ausentes. Valide os argumentos comstopifnot(is.numeric(x)). - \((\star\star\star)\) Simule 10.000 lançamentos de dois dados com
sample()e estime a distribuição da soma. Compare as frequências relativas obtidas com as probabilidades exatas (\(P(S = s) = (6 - |s - 7|)/36\)) em uma tabela. Useset.seed(2024). - \((\star\star\star)\) Implemente, sem usar
lm(), a estimação de mínimos quadrados \(\hat{\boldsymbol\beta} = (X^\top X)^{-1}X^\top\mathbf{y}\) para o modelompg ~ wtnomtcars. Compare os coeficientes com os delm(mpg ~ wt, data = mtcars).
17.3.4 Respostas e soluções selecionadas
- 1. (a) 11; (b) 49; (c) 11.
- 2. (a)
c(2, 6, 10, 14, 18); (b) 25. - 3. (a) 5; (b)
c(5, 7, 9). - 6. Média 26,25; mínimo 22; máximo 30.
- 12. Médias de
mpg: 4 cilindros, 26,6636; 6 cilindros, 19,7429; 8 cilindros, 15,1000. - 13. 19 carros possuem
mpg / wtmaior que 5. - 14. Média de
mpg= 20,0906; desvio padrão dehp= 68,5629. - 15. O pipeline retorna 6 carros. Uma solução:
library(dplyr)
mtcars |>
filter(mpg > 25) |>
arrange(hp) |>
select(mpg, hp, wt)- 18.
1:6 + c(10, 20)resulta em11 22 13 24 15 26. No segundo caso, o comprimento 5 não é múltiplo de 2; o R recicla mesmo assim e emite um aviso. - 25. \(\mathbf{x} = (0{,}8;\ 1{,}4)^\top\).
- 31. \(\hat\beta_0 \approx 37{,}2851\) e \(\hat\beta_1 \approx -5{,}3445\).
17.4 Lista 3 — Programação em Python
Esta lista acompanha o capítulo de introdução ao Python (Van Rossum e Drake 2009; McKinney 2022).
17.4.1 Questões da disciplina
- Importe a biblioteca
mathe use a funçãosqrt()para calcular a raiz quadrada de 256. - Utilize o módulo
randompara gerar um número aleatório entre 1 e 10. - Escreva um laço
forque imprime os números de 1 a 10. - Utilize um laço
whilepara imprimir os números de 10 até 1 em ordem decrescente. - Crie um programa que pergunte ao usuário um número e determine se ele é par ou ímpar.
- Defina uma função
saudacao()que recebe um nome como argumento e imprime"Olá, [nome]!". - Escreva uma função
maximo()que recebe dois números como argumentos e retorna o maior deles. - Crie uma string
"Python"e use slicing para obter a substring"thon". - Inverta a string
"Python"usando slicing. - Crie uma lista com os números de 1 a 5 e adicione o número 6 ao final da lista.
- Remova o número 3 da lista anterior.
- Crie uma tupla com os números de 1 a 5 e tente alterar o valor do terceiro elemento para 10.
- Crie um dicionário com chaves sendo os dias da semana e os valores os números correspondentes (1 para Segunda, 2 para Terça etc.).
- Adicione um par chave-valor ao dicionário anterior: “Feriado” com o valor 0.
- Crie um conjunto com os números 1, 2, 3, 4 e 5 e adicione o número 6.
- Remova o número 3 do conjunto anterior.
- Escreva um programa que lê uma lista de números do usuário e imprime o maior e o menor número.
- Faça um programa que lê uma frase do usuário e conta quantas vezes aparece a letra “a”.
- Crie um programa que converte uma temperatura de Celsius para Fahrenheit.
17.4.2 Questões conceituais e teóricas
- \((\star)\) Diferencie objetos mutáveis e imutáveis em Python. Classifique:
int,str,list,tuple,dict,set,frozenset. Qual o erro gerado no exercício 12 e por quê? - \((\star\star)\) Explique o que acontece no código abaixo e por que
btambém é alterada. Como fazer uma cópia independente?
a = [1, 2, 3]
b = a
a.append(4)
print(b)- \((\star\star)\) Por que não se deve usar uma lista como argumento padrão de uma função (por exemplo,
def f(x, lista=[]))? Mostre um exemplo do comportamento inesperado e a forma correta. - \((\star)\) Diferencie a indexação do Python (base 0, intervalo semiaberto em
a[i:j]) da indexação do R (base 1, intervalo fechado). Qual é o resultado delist(range(2, 10, 3))? - \((\star)\) O que são list comprehensions? Reescreva o laço que gera os quadrados dos números pares de 1 a 20 como uma list comprehension.
- \((\star\star)\) Explique a diferença entre um
arraydo NumPy e uma lista do Python quanto a tipo dos elementos, armazenamento em memória e operações vetorizadas (Harris et al. 2020). - \((\star\star)\) O que é broadcasting no NumPy? Qual o formato (shape) do resultado de
np.ones((3, 1)) + np.arange(4)? - \((\star)\) Qual a diferença entre
np.std(x)epandas.Series(x).std()? Discuta o argumentoddof. - \((\star)\) Para que servem os blocos
try/except/finally? Dê um exemplo de leitura de arquivo que trata a exceçãoFileNotFoundError. - \((\star\star)\) Explique os conceitos de classe, objeto, atributo e método. Por que o
scikit-learnorganiza os modelos como classes com métodosfit()epredict()? - \((\star)\) Por que é recomendável usar ambientes virtuais (
venvouconda) em projetos de Ciência de Dados?
17.4.3 Tarefas de programação
- \((\star)\) Escreva uma função
estatisticas(lista)que retorna, em um dicionário, a média, a mediana, a variância amostral e o desvio padrão amostral sem usar bibliotecas. Teste com[2, 4, 4, 5, 10]. - \((\star)\) Escreva uma função
fizzbuzz(n)que retorna uma lista de 1 an, substituindo múltiplos de 3 por"Fizz", de 5 por"Buzz"e de ambos por"FizzBuzz". - \((\star\star)\) Escreva uma função que recebe um texto e retorna um dicionário com a frequência de cada palavra, ignorando maiúsculas e pontuação. Mostre as 5 palavras mais frequentes de um parágrafo à sua escolha.
- \((\star\star)\) Crie uma classe
ContaBancariacom atributostitularesaldoe métodosdepositar(),sacar()(que levantaValueErrorse o saldo for insuficiente) e__repr__(). - \((\star\star)\) Com NumPy, gere uma matriz \(1000 \times 3\) de valores normais padrão (
np.random.default_rng(42)), calcule a média e o desvio padrão de cada coluna e padronize as colunas sem usar laços. - \((\star\star)\) Com
pandas, carregue o conjuntoirisviaseaborn.load_dataset("iris")e calcule, para cada espécie, a média e o desvio padrão das quatro medidas. Qual espécie tem a maior pétala, em média? - \((\star\star\star)\) Implemente o método de Monte Carlo para estimar \(\pi\): sorteie \(n\) pontos uniformes no quadrado \([0,1]^2\) e use a proporção que cai no quarto de círculo. Estude o erro da estimativa para \(n = 10^2, 10^3, \ldots, 10^6\) e verifique empiricamente que ele decai aproximadamente como \(1/\sqrt{n}\).
17.4.4 Respostas e soluções selecionadas
- 1. 16,0.
- 8–9.
"Python"[2:]retorna"thon";"Python"[::-1]retorna"nohtyP". - 12.
TypeError: 'tuple' object does not support item assignment: tuplas são imutáveis. - 19. \(F = \frac{9}{5}C + 32\); por exemplo, 25 °C correspondem a 77 °F.
- 21. Imprime
[1, 2, 3, 4]:b = anão copia a lista, apenas cria outro nome para o mesmo objeto. Useb = a.copy()oub = list(a). - 23.
[2, 5, 8]. - 26. O resultado tem formato
(3, 4). - 31. Média 5; mediana 4; variância amostral 9; desvio padrão amostral 3.
17.5 Lista 4 — Projeto de Análise Exploratória: Carros Usados (CARS4U)
Esta lista é um pequeno projeto de exploração de dados, feito primeiro em Python e depois em R.
17.5.1 Primeira parte com Python
- Acesse o link https://storage.googleapis.com/subject-materials-databases/datasets_curso/CARS4U.zip, baixe o arquivo e descompacte-o. O arquivo contém um conjunto de dados de uma empresa de aluguel de carros. Usando
pandas, leia os dados do arquivo used_cars_data.csv em um DataFrame chamadodados, através da funçãoread_csv. - Quantas características estão neste conjunto de dados, ou seja, quantas variáveis existem nessa base de dados?
- Quais são os nomes e tipos iniciais das características?
- Verifique a quantidade de dados faltantes nas colunas da base de dados.
- Remova a variável
idusando a funçãodrop. - Utilizando a função
describe, interprete a saída e descreva o que aconteceu com as variáveis da base de dados. - Encontre os quantis 0; 0,25; 0,5; 0,75 e 1 da variável
precoe interprete os resultados. - Encontre a matriz de covariância das variáveis numéricas.
- Encontre a matriz de correlação das variáveis numéricas.
- Utilizando a biblioteca
seaborncomosnsematplotlib.pyplotcomoplt, faça um heatmap (mapa de calor) das correlações entre as variáveis numéricas. - Com as variáveis numéricas e utilizando a biblioteca
matplotlib.pyplotcomoplt, faça gráficos de histogramas e boxplot para cada variável numérica. - Com a variável
ano, crie uma nova variável no DataFrame chamadaidade_carro. - Sabendo que a primeira parte de cada valor da variável
nomeé a marca do carro, crie uma nova variável chamadamarca, com a parte do nome do carro que representa a marca. Verifique a quantidade de carros por marca.
17.5.2 Segunda parte com R
- Refaça todas as letras de a até l (itens 1 a 12) da parte de Python, mas agora utilizando a linguagem
R, adaptando as funções e pacotes para a nova linguagem de programação.
17.5.3 Questões complementares
- \((\star)\) Por que a matriz de covariância é difícil de interpretar quando as variáveis estão em escalas diferentes? Mostre que a correlação de Pearson é a covariância das variáveis padronizadas.
- \((\star\star)\) A variável
precoprovavelmente é assimétrica à direita. Aplique a transformação \(\log(\text{preco})\), refaça o histograma e compare a média e a mediana antes e depois da transformação. - \((\star\star)\) Identifique outliers em
precopela regra de Tukey (\(Q_1 - 1{,}5\,\text{IQR}\), \(Q_3 + 1{,}5\,\text{IQR}\)) (Tukey 1977). Quantas observações são sinalizadas? Você as removeria? Justifique. - \((\star\star)\) Classifique o mecanismo de ausência que você considera mais plausível para as colunas com dados faltantes (MCAR, MAR ou MNAR) (Rubin 1976; Little e Rubin 2019) e proponha uma estratégia de imputação para cada uma.
- \((\star\star\star)\) Escreva um relatório curto (uma página) com os três principais achados da análise, cada um sustentado por um gráfico, seguindo os princípios da Lista 10.
17.6 Lista 5 — Projeto com a Base vendas.csv
17.6.1 Questões da disciplina
- Explique a diferença entre dados estruturados e não estruturados. Dê um exemplo de cada.
- Suponha que você tenha um conjunto de dados com as seguintes colunas:
idade,salário,departamentoeanos_na_empresa. Descreva o processo para identificar e tratar valores ausentes. - Dado o conjunto de dados
vendas.csv, que contém informações de vendas de uma empresa, escreva um código em Python que leia o arquivo e calcule o total de vendas por departamento. Apresente os resultados em uma tabela. - Escreva uma função em Python que recebe uma lista de números e retorna a média e a mediana dos números.
- Utilizando a biblioteca
matplotlib, crie um gráfico de barras que mostre a distribuição de funcionários por departamento, com base no conjunto de dadosvendas.csv. - Explique o que é a Regressão Linear e como ela pode ser usada para prever valores futuros.
- Usando a biblioteca
seaborn, crie um gráfico de dispersão que mostre a relação entreidadeesalário, com a cor representando odepartamento. Interprete os resultados.
17.6.2 Instruções adicionais
Utilize boas práticas de programação e comente seu código quando necessário. Garanta que todas as visualizações sejam claras e devidamente rotuladas.
17.6.3 Sobre a base de dados vendas.csv
Leia o arquivo de forma on-line diretamente no
pythonou noR; não é para ler o arquivo de forma local.
Link: https://storage.googleapis.com/subject-materials-databases/datasets_curso/vendas.csv
A base de dados vendas.csv contém informações fictícias de vendas de uma empresa, distribuídas em diferentes departamentos. Ela é composta por 100 registros, cada um representando um funcionário. Abaixo está uma descrição detalhada das colunas presentes na base de dados:
- idade: a idade do funcionário, variando entre 22 e 60 anos.
- salário: o salário anual do funcionário, variando entre 30.000 e 120.000 unidades monetárias.
- departamento: o departamento ao qual o funcionário pertence. Os departamentos possíveis são:
- Sales
- Marketing
- HR
- IT
- Finance
- anos_na_empresa: o número de anos que o funcionário trabalha na empresa, variando entre 1 e 30 anos.
- vendas: o valor total das vendas realizadas pelo funcionário, variando entre 10.000 e 1.000.000 unidades monetárias.
17.6.4 Exemplo de registro
| idade | salário | departamento | anos_na_empresa | vendas |
|---|---|---|---|---|
| 34 | 45000 | Sales | 12 | 550000 |
| 29 | 32000 | IT | 7 | 120000 |
| 45 | 87000 | Finance | 20 | 720000 |
17.6.5 Questões complementares
- \((\star)\) Refaça as questões 3, 5 e 7 em R, usando
readr::read_csv(),dplyreggplot2. - \((\star\star)\) Calcule a correlação de Pearson e a de Spearman entre
anos_na_empresaevendas. Os dois coeficientes contam a mesma história? Em que situação eles divergiriam? - \((\star\star)\) Ajuste uma regressão linear simples de
vendasemanos_na_empresa. Interprete \(\hat\beta_1\) e \(R^2\) e verifique os resíduos graficamente. Como os dados são fictícios e gerados aleatoriamente, que resultado você espera para \(R^2\)? - \((\star\star)\) Construa um boxplot de
saláriopordepartamentoe teste informalmente se as medianas parecem diferir. Que cuidados tomar ao comparar grupos com poucos funcionários? - \((\star\star\star)\) Crie a variável
vendas_por_ano = vendas / anos_na_empresae identifique os 10 funcionários mais produtivos. Discuta se essa métrica é justa para funcionários recém-contratados.
17.7 Lista 6 — Controle de Versão com Git e GitHub
Esta lista acompanha o capítulo sobre Git e GitHub (Chacon e Straub 2014; Bryan 2018).
17.7.1 Questões conceituais e teóricas
- \((\star)\) Qual a diferença entre Git e GitHub? Cite duas alternativas ao GitHub para hospedagem de repositórios.
- \((\star)\) Descreva os três estados de um arquivo no fluxo local do Git (modificado, preparado e confirmado) e as três áreas correspondentes (diretório de trabalho, staging area e repositório).
- \((\star\star)\) Explique o modelo de dados do Git: o que são os objetos blob, tree e commit? Por que dizemos que um commit é um “retrato” (snapshot) e não uma lista de diferenças?
- \((\star\star)\) Por que o histórico de commits forma um grafo acíclico dirigido? O que caracteriza um commit de mesclagem (merge) nesse grafo?
- \((\star\star)\) O identificador de um objeto é um hash criptográfico do seu conteúdo. Que propriedade isso garante sobre a integridade do histórico? Por que alterar um commit antigo muda os identificadores de todos os seus descendentes?
- \((\star)\) Diferencie
git fetch,git pullegit push. - \((\star\star)\) Diferencie uma mesclagem fast-forward de uma mesclagem de três vias (three-way merge). Em que situação cada uma ocorre?
- \((\star\star)\) Compare
git mergeegit rebase. Enuncie a “regra de ouro do rebase” e explique por que ela existe. - \((\star\star)\) Diferencie
git revert,git reset --soft,git reset --hardegit restore. Qual deles é seguro para desfazer um commit que já foi enviado ao repositório remoto? - \((\star)\) Para que serve o arquivo
.gitignore? Liste cinco tipos de arquivo que normalmente não devem ser versionados em um projeto de Ciência de Dados. - \((\star\star)\) Um colega enviou acidentalmente um arquivo com uma senha de banco de dados para um repositório público. Por que apagar o arquivo em um novo commit não resolve o problema? Quais medidas devem ser tomadas?
- \((\star)\) Explique o versionamento semântico (
MAIOR.MENOR.CORREÇÃO). Partindo da versão1.4.2, qual seria a nova versão após (a) correção de um bug; (b) adição de uma função compatível; (c) mudança que quebra a compatibilidade? - \((\star)\) Reescreva as mensagens de commit a seguir seguindo boas práticas: “ajustes”, “arrumei”, “versão final agora vai”, “mudanças no código do modelo”.
- \((\star\star)\) Por que notebooks Jupyter são difíceis de versionar? Cite duas estratégias para contornar o problema.
17.7.2 Tarefas práticas
- \((\star)\) Configure nome e e-mail no Git, crie um repositório local
meu-projeto, adicione umREADME.mde faça o primeiro commit. Mostre a saída degit log --oneline. - \((\star\star)\) No repositório anterior, crie o ramo
analise-exploratoria, adicione um scriptaed.R, faça dois commits e mescle o ramo no ramo principal. Represente o grafo resultante comgit log --oneline --graph --all. - \((\star\star)\) Provoque um conflito de mesclagem: altere a mesma linha do
README.mdem dois ramos distintos e tente mesclá-los. Resolva o conflito manualmente e explique o significado dos marcadores<<<<<<<,=======e>>>>>>>. - \((\star\star)\) Publique o repositório no GitHub, crie uma issue descrevendo uma melhoria, resolva-a em um ramo próprio e abra um pull request que referencie a issue.
- \((\star\star\star)\) Em dupla: um aluno cria um repositório e adiciona o outro como colaborador; cada um trabalha em um ramo, abre um pull request e revisa o código do colega antes da mesclagem. Entregue um pequeno relato do fluxo de trabalho adotado.
17.7.3 Respostas e soluções selecionadas
- 9.
git revert, pois cria um novo commit que desfaz as alterações sem reescrever o histórico compartilhado. - 12. (a)
1.4.3; (b)1.5.0; (c)2.0.0.
17.8 Lista 7 — Markdown, RMarkdown e Quarto
Esta lista acompanha o capítulo sobre documentos dinâmicos e reprodutibilidade (Xie, Allaire, e Grolemund 2018; Xie, Dervieux, e Riederer 2020).
17.8.1 Questões da disciplina
Crie um arquivo
README.mdusando Markdown para documentar um projeto simples. Inclua os seguintes elementos:- título;
- subtítulos;
- lista numerada de passos do projeto;
- um link para a documentação oficial do RMarkdown (https://rmarkdown.rstudio.com/);
- um bloco de código para descrever como instalar um pacote no R.
Motivação: lembre-se de que o formato
README.mdé amplamente utilizado no GitHub para apresentar projetos.Crie um documento em Markdown que contenha:
- uma lista com marcadores (
*ou-) descrevendo 3 pacotes do R que você mais utiliza; - um link para o repositório de cada pacote no CRAN;
- uma imagem qualquer da web (com link) que represente visualmente o uso de um desses pacotes.
- uma lista com marcadores (
Crie uma tabela em Markdown que apresente os dados a seguir:
Pacote Função Principal Autor dplyr Manipulação de Dados Hadley Wickham ggplot2 Visualização de Dados Hadley Wickham caret Modelagem Preditiva Max Kuhn Observação: utilize o formato correto de tabelas no Markdown.
Crie um arquivo
RMarkdown(.Rmd) com o seguinte conteúdo:- um título com cabeçalho de nível 1 (
h1); - um parágrafo que explica o propósito do documento;
- um bloco de código R que imprime a sequência de números de 1 a 10 usando a função
seq().
Dica: compile o arquivo em HTML para visualizar o resultado.
- um título com cabeçalho de nível 1 (
Crie um documento em RMarkdown que:
- inclua uma introdução ao pacote
ggplot2; - adicione um bloco de código que cria um gráfico simples de dispersão usando
ggplot2, commpgno eixo x ewtno eixo y, usando o conjunto de dadosmtcars; - seja renderizado em PDF.
- inclua uma introdução ao pacote
Elabore um documento em RMarkdown que tenha uma estrutura de seções, com pelo menos três níveis de cabeçalhos (
#,##,###).Crie um documento RMarkdown que contenha os seguintes elementos:
- um bloco de código (chunk) que calcula a média da variável
Sepal.Lengthdo conjunto de dadosiris; - após o chunk, um parágrafo explicando o que foi feito, mencionando a média calculada diretamente no texto usando
rinline; - outro chunk que calcule o desvio padrão da mesma variável;
- no texto seguinte, uma explicação do desvio padrão, com o valor gerado incluído diretamente no texto utilizando a mesma técnica.
Exemplo de estrutura:
- Um bloco de código calcula a média.
- No parágrafo a seguir, use
rinline para incorporar o resultado: “A média deSepal.Lengthé …”. - Outro bloco de código calcula o desvio padrão.
- No parágrafo subsequente, incorpore o desvio padrão no texto: “O desvio padrão de
Sepal.Lengthé …”.
- um bloco de código (chunk) que calcula a média da variável
17.8.2 Questões conceituais e teóricas
- \((\star)\) Defina reprodutibilidade e replicabilidade (National Academies of Sciences, Engineering, and Medicine 2019). Por que documentos dinâmicos contribuem para a primeira, mas não garantem a segunda?
- \((\star\star)\) Explique a ideia de programação literária proposta por Knuth (Knuth 1984) e como ela se relaciona com RMarkdown, Quarto e Jupyter.
- \((\star)\) Qual é o papel do Pandoc na renderização de um documento Quarto? Descreva o caminho
.qmd\(\to\).md\(\to\) HTML/PDF/DOCX. - \((\star)\) Explique as opções de chunk
echo,eval,include,warning,messageecache. Qual combinação usar para mostrar apenas o resultado de um gráfico, sem o código? - \((\star\star)\) Quais são os riscos do uso de
cache: trueem um documento que lê dados de um arquivo que é atualizado periodicamente? - \((\star)\) Escreva, em LaTeX, as expressões: (a) a média amostral \(\bar{x} = \frac{1}{n}\sum_{i=1}^n x_i\); (b) a densidade da normal; (c) o estimador de mínimos quadrados \(\hat{\boldsymbol\beta} = (X^\top X)^{-1}X^\top\mathbf{y}\).
- \((\star\star)\) Como funcionam as referências cruzadas no Quarto (
@fig-,@tbl-,@sec-,@eq-)? E as citações bibliográficas a partir de um arquivo BibTeX? - \((\star\star)\) O que é um relatório parametrizado? Dê um exemplo de uso em que o mesmo documento gera um relatório para cada estado brasileiro.
- \((\star\star)\) Discuta o caso Reinhart–Rogoff, citado no capítulo, como exemplo de erro de “copiar e colar” entre planilha e texto. Como um fluxo de trabalho reprodutível teria evitado o problema?
17.8.3 Tarefas práticas
- \((\star\star)\) Crie um documento Quarto com uma tabela gerada por código (
knitr::kable()ougt) contendo a média de cada variável numérica doirispor espécie, com legenda e rótulotbl-, e faça referência a ela no texto. - \((\star\star)\) Crie um documento Quarto com uma figura rotulada (
fig-), uma equação numerada (eq-) e duas citações bibliográficas de um arquivo.bibcriado por você. - \((\star\star\star)\) Crie um relatório parametrizado com um parâmetro
especieque gera, para a espécie escolhida dopenguins, um resumo numérico e um histograma da massa corporal. Renderize-o para as três espécies a partir de um único comando. - \((\star\star\star)\) Converta um notebook Jupyter de uma análise sua em um documento Quarto (
quarto convert) e publique-o como página HTML no GitHub Pages.
17.8.4 Respostas e soluções selecionadas
- 7. Média de
Sepal.Length\(\approx 5{,}8433\); desvio padrão \(\approx 0{,}8281\). - 11.
echo: false(mantendoeval: true).
17.9 Lista 8 — Visualização de Dados com ggplot2
Esta lista acompanha o capítulo sobre a gramática dos gráficos (Wilkinson 2005; Wickham 2010, 2016).
17.9.1 Questões da disciplina
- Utilize o conjunto de dados
mtcars. Crie um gráfico de dispersão (scatter plot) mostrando a relação entrempg(milhas por galão) ehp(cavalos de potência). - Utilize o conjunto de dados
mtcars. Crie um gráfico de barras para contar a frequência de carros por número de cilindros (cyl). - Com o resultado da questão 2, coloque as barras na horizontal, com percentual por categoria, tema minimalista e na tonalidade vermelha.
- Utilize o gráfico de dispersão criado na questão 1, mas adicione um título ao gráfico e rótulos aos eixos.
- Utilize o conjunto de dados
iris. Crie um gráfico de dispersão da largura (Sepal.Width) versus comprimento da sépala (Sepal.Length), separando os gráficos por espécie (Species) usandofacet_grid. - Usando o conjunto de dados
mtcars, crie um gráfico de dispersão dempgversushp, mas agora altere as cores dos pontos de acordo com o número de cilindros (cyl). - Utilize o conjunto de dados
faithful. Crie um histograma da duração das erupções (eruptions). - Utilize o conjunto de dados
airmiles. Crie um gráfico de linhas que mostre a quantidade de milhas aéreas acumuladas ao longo do tempo.
Todos os conjuntos de dados desta seção pertencem ao pacote datasets, que é carregado automaticamente pelo R. Também é possível chamá-los explicitamente, por exemplo: mtcars <- datasets::mtcars, iris <- datasets::iris, faithful <- datasets::faithful e airmiles <- datasets::airmiles. Observe que airmiles é uma série temporal (ts); para usá-la no ggplot2, converta-a antes em data frame, por exemplo com data.frame(ano = time(airmiles), milhas = as.numeric(airmiles)).
17.9.2 Questões conceituais e teóricas
- \((\star)\) Descreva os componentes da gramática dos gráficos: dados, mapeamentos estéticos, geometrias, estatísticas, escalas, sistemas de coordenadas, facetas e tema.
- \((\star)\) Explique a diferença entre
ggplot(mtcars, aes(mpg, hp, colour = factor(cyl))) + geom_point()eggplot(mtcars, aes(mpg, hp)) + geom_point(colour = "blue"). Por queaes(colour = "blue")não produz pontos azuis? - \((\star\star)\) Segundo Cleveland e McGill (William S. Cleveland e McGill 1984), quais canais visuais são percebidos com mais precisão? Use esse resultado para justificar por que gráficos de barras costumam ser preferíveis a gráficos de pizza.
- \((\star\star)\) Qual a diferença entre
coord_cartesian(ylim = ...)escale_y_continuous(limits = ...)quando aplicados a um boxplot? Qual delas pode alterar as estatísticas calculadas? - \((\star)\) Para cada objetivo, indique o gráfico mais adequado: (a) distribuição de uma variável contínua; (b) comparação de uma variável contínua entre grupos; (c) relação entre duas variáveis contínuas; (d) evolução temporal; (e) composição de um total com 3 categorias.
- \((\star\star)\) Por que um histograma depende fortemente da largura das classes? Compare as regras de Sturges (Sturges 1926), Scott (Scott 1979) e Freedman–Diaconis (Freedman e Diaconis 1981).
- \((\star\star)\) O que é sobreposição de pontos (overplotting)? Cite três estratégias para lidar com ela no
ggplot2.
17.9.3 Problemas numéricos
- \((\star)\) Número de classes. O conjunto
mpgdoggplot2tem \(n = 234\) carros, e a variávelhwytem amplitude 32 e intervalo interquartil 9. Calcule:- o número de classes pela regra de Sturges, \(k = \lceil 1 + \log_2 n \rceil\);
- a largura de classe pela regra de Freedman–Diaconis, \(h = 2\,\text{IQR}\,n^{-1/3}\), e o número de classes correspondente.
- \((\star\star)\) Boxplot à mão. Para os dados \(2, 4, 4, 5, 10\), com quartis \(Q_1 = 4\) e \(Q_3 = 5\), calcule o intervalo interquartil, as cercas de Tukey \(Q_1 - 1{,}5\,\text{IQR}\) e \(Q_3 + 1{,}5\,\text{IQR}\), e identifique os pontos que seriam desenhados individualmente. Até onde vão os “bigodes”?
- \((\star\star)\) Estimador de densidade por núcleo. Com os dados \(\{1, 2, 4\}\), núcleo gaussiano \(\phi\) e largura de banda \(h = 1\), calcule \(\hat f(2) = \frac{1}{nh}\sum_{i=1}^{n}\phi\!\left(\frac{2 - x_i}{h}\right)\), sabendo que \(\phi(0) \approx 0{,}3989\), \(\phi(1) \approx 0{,}2420\) e \(\phi(2) \approx 0{,}0540\).
17.9.4 Tarefas de programação
- \((\star)\) Com o conjunto
diamonds, faça um histograma depricee outro delog10(price). Descreva a forma das duas distribuições. - \((\star\star)\) Com o
diamonds, construa boxplots depriceporcut. Em seguida, faça o mesmo controlando porcarat(por exemplo, comprice / carat). A conclusão sobre o efeito do corte muda? Discuta. - \((\star\star)\) Com o
penguins, faça um gráfico de dispersão deflipper_length_mmversusbody_mass_g, com cor por espécie, uma reta de regressão por espécie (geom_smooth(method = "lm")), rótulos em português e tematheme_minimal(). Salve-o comggsave()em PNG com 300 dpi. - \((\star\star)\) Com o
mpg, crie um painel comfacet_wrap(~ class)mostrando a relação entredisplehwy. Que padrão aparece nos carros da classe2seater? - \((\star\star)\) Com o
economics, faça um gráfico de linhas da taxa de desemprego (unemploy / pop) ao longo do tempo, destacando comannotate()um período de recessão de sua escolha. - \((\star\star\star)\) Reproduza, com o conjunto
anscombe(Anscombe 1973), os quatro gráficos de dispersão com retas ajustadas em um único painel (dica: transforme os dados para o formato longo). Calcule médias, variâncias, correlações e coeficientes da reta de cada grupo e comente a lição do quarteto.
17.9.5 Respostas e soluções selecionadas
- 16. (a) \(1 + \log_2 234 \approx 8{,}87\), logo \(k = 9\). (b) \(h = 2 \cdot 9 \cdot 234^{-1/3} \approx 2{,}92\); número de classes \(\approx 32/2{,}92 \approx 11\).
- 17. \(\text{IQR} = 1\); cercas em \(2{,}5\) e \(6{,}5\). Os valores 2 e 10 são desenhados como pontos atípicos; os bigodes vão de 4 a 5 (os valores mais extremos dentro das cercas).
- 18. \(\hat f(2) = (0{,}2420 + 0{,}3989 + 0{,}0540)/3 \approx 0{,}2316\).
17.10 Lista 9 — Análise Exploratória de Dados em Python
Esta lista acompanha o capítulo de análise exploratória com pandas, matplotlib e seaborn (McKinney 2022; Hunter 2007; Waskom 2021).
17.10.1 Questões conceituais e teóricas
- \((\star)\) Quais são os objetivos de uma análise exploratória de dados, segundo Tukey (Tukey 1977)? Em que ela difere de uma análise confirmatória?
- \((\star)\) Diferencie
SerieseDataFramenopandas. Qual a diferença entre.loc[]e.iloc[]? - \((\star)\) Por que a mediana é uma medida resistente e a média não? Ilustre com os salários de uma pequena empresa em que o dono ganha 50 vezes mais que os funcionários.
- \((\star\star)\) Explique por que a variância amostral usa o divisor \(n - 1\). O que o
pandase o NumPy usam por padrão? - \((\star\star)\) Diferencie a correlação de Pearson da correlação de Spearman (Spearman 1904). Por que uma correlação próxima de zero não implica ausência de relação entre as variáveis?
- \((\star\star)\) Descreva os mecanismos de ausência MCAR, MAR e MNAR (Rubin 1976). Por que a imputação pela média distorce a variância e as correlações?
- \((\star\star)\) O que é o efeito de mascaramento na detecção de outliers? Por que o escore \(z\) modificado de Iglewicz e Hoaglin (Iglewicz e Hoaglin 1993), baseado na mediana e no MAD, é mais robusto?
- \((\star\star)\) Para que serve a transformação de Box–Cox (Box e Cox 1964)? Qual valor de \(\lambda\) corresponde à transformação logarítmica?
17.10.2 Demonstrações e problemas numéricos
\((\star\star)\) A média minimiza o erro quadrático. Mostre que, para dados \(x_1, \ldots, x_n\), a função \(S(c) = \sum_{i=1}^n (x_i - c)^2\) é minimizada em \(c = \bar{x}\). Sugestão: derive \(S(c)\) e iguale a zero, ou use a decomposição \[ \sum_{i=1}^n (x_i - c)^2 = \sum_{i=1}^n (x_i - \bar{x})^2 + n(\bar{x} - c)^2. \]
\((\star\star\star)\) A mediana minimiza o erro absoluto. Mostre que \(A(c) = \sum_{i=1}^n |x_i - c|\) é minimizada por qualquer mediana dos dados. Sugestão: analise como \(A(c)\) varia quando \(c\) cruza um dos pontos \(x_i\).
\((\star)\) Para os dados \(2, 4, 4, 5, 10\), calcule: média, mediana, moda, variância amostral, desvio padrão amostral, \(S(\bar x)\), \(S(\text{mediana})\), \(A(\bar x)\) e \(A(\text{mediana})\). Confira numericamente os resultados dos exercícios 9 e 10.
\((\star\star)\) Para os mesmos dados, calcule o escore \(z\) modificado \(M_i = 0{,}6745\,(x_i - \tilde{x})/\text{MAD}\), em que \(\tilde x\) é a mediana e \(\text{MAD} = \operatorname{mediana}|x_i - \tilde x|\). Usando o limiar \(|M_i| > 3{,}5\), algum ponto é atípico?
\((\star\star)\) Calcule as correlações de Pearson e de Spearman entre \(x = (1, 2, 3, 4, 5)\) e \(y = (1, 4, 9, 16, 100)\). Explique a diferença.
\((\star\star)\) Em uma pesquisa, 100 pessoas foram classificadas por grupo e opinião:
Favorável Contrário Total Grupo 1 30 20 50 Grupo 2 10 40 50 Total 40 60 100 - Calcule as frequências esperadas sob independência.
- Calcule a estatística \(\chi^2 = \sum (O - E)^2/E\) (sem correção de continuidade).
- Calcule o \(V\) de Cramér, \(V = \sqrt{\chi^2/(n\,(\min(r, c) - 1))}\), e interprete.
\((\star\star)\) Mostre que a correlação de Pearson é invariante a transformações lineares positivas \(x \mapsto a + bx\) (\(b > 0\)) de cada variável. O que acontece se \(b < 0\)?
17.10.3 Tarefas de programação
- \((\star)\) Carregue o conjunto
tipscomseaborn.load_dataset("tips")e useinfo(),describe()evalue_counts()para descrever as variáveis. Classifique cada uma quanto ao tipo. - \((\star\star)\) No
tips, crie a variávelpct_gorjeta = tip / total_bille compare sua distribuição entre fumantes e não fumantes e entre os dias da semana com boxplots egroupby(). - \((\star\star)\) No
penguinsdoseaborn, calcule a proporção de ausentes por coluna, impute as variáveis numéricas pela mediana dentro de cada espécie e compare as médias antes e depois da imputação. - \((\star\star)\) Construa, para o
penguins, umpairplotcolorido por espécie e um mapa de calor da matriz de correlação de Spearman. Qual par de variáveis é mais correlacionado? - \((\star\star)\) Com
pd.crosstab(), construa a tabela de contingência entrespecieseislanddopenguinse calcule o \(V\) de Cramér usandoscipy.stats.chi2_contingency. - \((\star\star\star)\) Escreva uma função
aed_rapida(df)que, para qualquer DataFrame, retorna uma tabela com tipo, número de ausentes, número de valores distintos, média, desvio padrão, mínimo, máximo e número de outliers pela regra de Tukey de cada coluna numérica. Teste-a nodiamonds(seaborn.load_dataset("diamonds")).
17.10.4 Respostas e soluções selecionadas
- 11. Média 5; mediana 4; moda 4; variância 9; desvio padrão 3; \(S(5) = 36 < S(4) = 41\); \(A(4) = 9 < A(5) = 10\).
- 12. Mediana 4, desvios absolutos \(2, 0, 0, 1, 6\), \(\text{MAD} = 1\). Para \(x = 10\): \(M = 0{,}6745 \cdot 6 \approx 4{,}05 > 3{,}5\), logo 10 é atípico; para \(x = 2\): \(|M| \approx 1{,}35\).
- 13. Pearson \(\approx 0{,}7952\); Spearman \(= 1\). A relação é perfeitamente monótona, mas não linear, e o valor 100 afeta fortemente Pearson.
- 14. (a) Esperados: 20 e 30 em cada linha. (b) \(\chi^2 = \frac{100}{20} + \frac{100}{30} + \frac{100}{20} + \frac{100}{30} \approx 16{,}67\). (c) \(V = \sqrt{16{,}67/100} \approx 0{,}408\), associação moderada.
17.11 Lista 10 — Storytelling com Dados
Esta lista acompanha o capítulo sobre comunicação com dados (Knaflic 2015; Tufte 1983; Cairo 2019).
17.11.1 Questões conceituais e teóricas
- \((\star)\) Diferencie análise exploratória de análise explanatória. Por que um gráfico adequado para uma pode ser inadequado para a outra?
- \((\star)\) Quais são os três pilares do storytelling com dados (contexto, visual e narrativa)? Descreva o papel de cada um.
- \((\star\star)\) O que são atributos pré-atentivos (Treisman e Gelade 1980)? Dê três exemplos e explique como usá-los para destacar a mensagem principal de um gráfico.
- \((\star\star)\) Explique os princípios da Gestalt (proximidade, similaridade, cercamento, fechamento, continuidade e conexão) e dê um exemplo de aplicação de cada um em um gráfico.
- \((\star)\) O que é a razão dados-tinta (data-ink ratio) de Tufte (Tufte 1983)? O que é “lixo gráfico” (chartjunk)?
- \((\star\star)\) Como a teoria da carga cognitiva (Sweller 1988) e o “número mágico 7 ± 2” (Miller 1956) justificam limitar o número de categorias e cores em um gráfico?
- \((\star\star)\) Por que gráficos de barras devem começar no zero, enquanto gráficos de linhas não precisam? Dê um exemplo numérico de como truncar o eixo de um gráfico de barras exagera uma diferença de 2%.
- \((\star\star)\) Cite cinco formas de enganar com gráficos (Huff 1954; Cairo 2019) e, para cada uma, a correção adequada.
- \((\star)\) Por que as paletas de cores devem considerar pessoas com daltonismo? Cite uma paleta segura.
- \((\star\star)\) Descreva a estrutura narrativa em três atos (começo, meio e fim) (Duarte 2010) aplicada a uma apresentação de resultados para a diretoria de uma empresa.
17.11.2 Tarefas práticas
- \((\star\star)\) Escolha um gráfico publicado em um jornal ou relatório que você considere ruim. Identifique os problemas e proponha uma versão melhorada, explicando cada mudança.
- \((\star\star)\) Com o
mtcars, construa um gráfico “antes” (padrão doggplot2, com legenda, grade e cores para todas as categorias) e um gráfico “depois” que destaque apenas os carros commpg > 25, com título declarativo, cor de destaque e texto direto no gráfico em vez de legenda. - \((\star\star)\) Com o
gapminder(pacotegapminderem R ouplotly.express.data.gapminder()em Python), construa um gráfico que conte a história da expectativa de vida no Brasil em comparação com a média da América do Sul. - \((\star\star\star)\) Prepare uma apresentação de no máximo 5 slides que comunique uma conclusão de uma análise sua para um público não técnico. Siga os seis passos do capítulo e entregue também a “ideia principal” em uma única frase.
- \((\star\star\star)\) Crie dois gráficos com os mesmos dados que sugiram conclusões opostas (por exemplo, mudando a escala do eixo, o período mostrado ou a agregação). Discuta as implicações éticas.
17.12 Lista 11 — Fundamentos de Aprendizado de Máquina
Esta lista acompanha o capítulo de introdução ao aprendizado de máquina (James et al. 2013; Hastie, Tibshirani, e Friedman 2009).
17.12.1 Questões da disciplina
Quais são os três principais conceitos do Machine Learning e como funciona cada um deles?
O que é um modelo de Machine Learning?
O que é um conjunto de treinamento?
O que é um conjunto de teste?
Considerando que estamos trabalhando com dados estruturados, como é a estrutura de um conjunto de dados para um estudo de Análise Supervisionada? Cite exemplos de problemas aos quais pode ser aplicada a Análise Supervisionada.
Quais são as etapas do Processo de Aprendizagem de um Modelo?
O que é underfitting e overfitting? Como podemos identificar esses problemas em um modelo de Machine Learning?
Como podemos definir o erro total de previsão de um modelo?
Qual a regra geral de um bom modelo?
Cite duas métricas, apresentando a equação e descrevendo as variáveis envolvidas, que podemos utilizar para avaliar quantitativamente o desempenho de um modelo de Regressão.
Cite duas métricas, apresentando a equação e descrevendo as variáveis envolvidas, que podemos utilizar para avaliar quantitativamente o desempenho de um modelo de Classificação.
Dada a seguinte matriz de confusão, calcule a precisão, o recall, o F1-score, o coeficiente Kappa e o MCC (Matthews Correlation Coefficient):
Predito Positivo Predito Negativo Real Positivo 80 10 Real Negativo 5 105 Dada a seguinte matriz de confusão, calcule a precisão, o recall, o F1-score, o coeficiente Kappa e o MCC:
Predito Positivo Predito Negativo Real Positivo 50 20 Real Negativo 15 115 Dada a seguinte matriz de confusão, calcule a precisão, o recall, o F1-score, o coeficiente Kappa e o MCC:
Predito Positivo Predito Negativo Real Positivo 70 30 Real Negativo 10 90
Com VP, FN, FP e VN as contagens de verdadeiros positivos, falsos negativos, falsos positivos e verdadeiros negativos, e \(n\) o total:
\[ \text{Precisão} = \frac{VP}{VP + FP}, \qquad \text{Recall} = \frac{VP}{VP + FN}, \qquad F_1 = \frac{2 \cdot \text{Precisão} \cdot \text{Recall}}{\text{Precisão} + \text{Recall}}, \]
\[ \kappa = \frac{p_o - p_e}{1 - p_e}, \quad p_o = \frac{VP + VN}{n}, \quad p_e = \frac{(VP + FN)(VP + FP) + (FP + VN)(FN + VN)}{n^2}, \]
\[ \text{MCC} = \frac{VP \cdot VN - FP \cdot FN}{\sqrt{(VP + FP)(VP + FN)(VN + FP)(VN + FN)}}. \]
17.12.2 Questões conceituais e teóricas
- \((\star)\) Diferencie aprendizado supervisionado, não supervisionado e por reforço, dando um exemplo de cada.
- \((\star\star)\) No modelo \(Y = f(X) + \varepsilon\), com \(E[\varepsilon] = 0\) e \(\operatorname{Var}(\varepsilon) = \sigma^2\), mostre que \[ E\big[(Y - \hat f(X))^2 \mid X = x\big] = \big(f(x) - \hat f(x)\big)^2 + \sigma^2 \] para um \(\hat f\) fixo. Identifique o erro redutível e o irredutível.
- \((\star\star\star)\) Decomposição viés–variância. Considerando agora \(\hat f\) aleatório (depende da amostra de treino, independente de \(\varepsilon\)), mostre que \[ E\big[(Y - \hat f(x_0))^2\big] = \operatorname{Var}\big(\hat f(x_0)\big) + \big[\operatorname{Viés}\big(\hat f(x_0)\big)\big]^2 + \sigma^2 . \] Explique, à luz dessa identidade, por que modelos muito flexíveis tendem ao overfitting (Geman, Bienenstock, e Doursat 1992).
- \((\star\star)\) Diferencie predição e inferência. Por que um modelo muito preciso pode ser pouco útil para inferência?
- \((\star)\) Diferencie métodos paramétricos e não paramétricos, citando dois exemplos de cada.
- \((\star\star)\) Explique a validação cruzada \(k\)-fold (Kohavi 1995) e a validação cruzada estratificada. Quais as vantagens e desvantagens de \(k = 5\), \(k = 10\) e \(k = n\) (leave-one-out)?
- \((\star\star)\) O que é vazamento de dados (data leakage)? Por que padronizar todo o conjunto de dados antes de dividi-lo em treino e teste é um exemplo de vazamento? Como os pipelines resolvem o problema?
- \((\star\star)\) Por que a acurácia é uma métrica enganosa em problemas desbalanceados? Calcule a acurácia de um classificador que sempre prediz “negativo” em uma base com 1% de positivos.
- \((\star\star)\) Explique a curva ROC e a AUC (Fawcett 2006). Qual a interpretação probabilística da AUC?
- \((\star)\) Diferencie parâmetros e hiperparâmetros. Compare busca em grade e busca aleatória (Bergstra e Bengio 2012).
17.12.3 Problemas numéricos
\((\star)\) Para a matriz de confusão do exercício 12, calcule também a acurácia e a especificidade.
\((\star\star)\) Uma validação cruzada com 5 partes produziu as taxas de erro \(0{,}12\); \(0{,}15\); \(0{,}10\); \(0{,}13\); \(0{,}10\). Calcule a estimativa do erro e o seu desvio padrão amostral.
\((\star\star)\) AUC à mão. Um classificador atribuiu os escores abaixo a 8 observações:
Observação 1 2 3 4 5 6 7 8 Escore 0,90 0,80 0,70 0,60 0,55 0,40 0,30 0,20 Classe real 1 1 0 1 0 0 1 0 - Calcule a taxa de verdadeiros positivos (TVP) e a taxa de falsos positivos (TFP) para os limiares \(0{,}75\) e \(0{,}50\) (classifica-se como positivo quando escore \(\geq\) limiar).
- Calcule a AUC como a proporção de pares (positivo, negativo) em que o positivo tem escore maior.
\((\star\star)\) Uma doença tem prevalência de 2%. Um teste tem sensibilidade de 95% e especificidade de 90%. Usando o Teorema de Bayes, calcule o valor preditivo positivo (precisão) do teste. Interprete.
17.12.4 Tarefas de programação
- \((\star\star)\) Em Python, carregue
load_breast_cancer()doscikit-learn(Pedregosa et al. 2011), divida os dados em treino e teste (70/30, estratificado,random_state=42), ajuste uma regressão logística dentro de umPipelinecomStandardScalere reporte a matriz de confusão, oclassification_reporte a AUC. - \((\star\star)\) Refaça o exercício anterior em R com
tidymodelsoucaret(Kuhn 2008; Kuhn e Silge 2022). - \((\star\star\star)\) Simule dados de \(y = \sin(2\pi x) + \varepsilon\), com \(x \sim U(0, 1)\), \(\varepsilon \sim N(0;\ 0{,}3^2)\) e \(n = 50\). Ajuste polinômios de grau 1 a 15 e faça um gráfico dos erros de treino e de validação (calculado em uma amostra independente de 1000 pontos) em função do grau. Identifique as regiões de underfitting e overfitting.
- \((\star\star\star)\) Demonstre empiricamente o efeito do vazamento de dados: gere 100 observações com 1000 variáveis de puro ruído e um rótulo binário aleatório; selecione as 20 variáveis mais correlacionadas com o rótulo usando todos os dados e depois estime a acurácia por validação cruzada. Repita fazendo a seleção dentro de cada partição. Compare e explique.
17.12.5 Respostas e soluções selecionadas
| Exercício | Precisão | Recall | F1 | \(p_e\) | Kappa | MCC |
|---|---|---|---|---|---|---|
| 12 | 0,9412 | 0,8889 | 0,9143 | 0,5075 | 0,8477 | 0,8488 |
| 13 | 0,7692 | 0,7143 | 0,7407 | 0,5525 | 0,6089 | 0,6099 |
| 14 | 0,8750 | 0,7000 | 0,7778 | 0,5000 | 0,6000 | 0,6124 |
- 22. 99% de acurácia, apesar de o classificador nunca detectar um positivo.
- 25. Acurácia \(= 185/200 = 0{,}925\); especificidade \(= 105/110 \approx 0{,}9545\).
- 26. Erro médio \(0{,}12\); desvio padrão \(\approx 0{,}0212\).
- 27. (a) Limiar \(0{,}75\): TVP \(= 0{,}50\) e TFP \(= 0\); limiar \(0{,}50\): TVP \(= 0{,}75\) e TFP \(= 0{,}50\). (b) Dos 16 pares, 12 são ordenados corretamente: AUC \(= 0{,}75\).
- 28. \(\text{VPP} = \frac{0{,}95 \cdot 0{,}02}{0{,}95 \cdot 0{,}02 + 0{,}10 \cdot 0{,}98} = \frac{0{,}019}{0{,}117} \approx 0{,}1624\). Apenas cerca de 16% dos positivos no teste têm de fato a doença, por causa da baixa prevalência.
17.13 Lista 12 — Árvores de Decisão
Esta lista acompanha o capítulo sobre árvores de decisão (Breiman et al. 1984; Quinlan 1986, 1993).
17.13.1 Questões conceituais e teóricas
- \((\star)\) Descreva a estrutura de uma árvore de decisão: nó raiz, nós internos, ramos e folhas. Como uma nova observação é classificada?
- \((\star\star)\) Explique por que uma árvore de decisão particiona o espaço de atributos em regiões retangulares (hiper-retângulos). Desenhe a partição induzida por uma árvore com as regras “\(x_1 < 3\)” na raiz e “\(x_2 < 5\)” no ramo da direita.
- \((\star\star)\) Por que se usa um algoritmo guloso para crescer a árvore em vez de procurar a árvore ótima? Relacione sua resposta ao resultado de Hyafil e Rivest (Hyafil e Rivest 1976).
- \((\star)\) Compare os algoritmos ID3, C4.5 e CART quanto ao critério de divisão, ao tipo de variáveis aceitas e ao tipo de divisão (binária ou múltipla).
- \((\star\star)\) Defina entropia, índice de Gini e erro de classificação para um nó com proporções \(p_1, \ldots, p_K\). Quais são os valores mínimo e máximo de cada medida para \(K = 2\)?
- \((\star\star\star)\) Mostre que a entropia binária \(H(p) = -p\log_2 p - (1-p)\log_2(1-p)\) atinge o máximo em \(p = 1/2\) e que esse máximo vale 1. Faça o mesmo para o Gini binário \(G(p) = 2p(1-p)\).
- \((\star\star)\) Por que o erro de classificação não é um bom critério para crescer a árvore, embora seja usado na poda? Construa um exemplo de divisão que melhora a entropia mas não altera o erro de classificação.
- \((\star\star)\) Por que o ganho de informação favorece atributos com muitas categorias (por exemplo, um identificador)? Como a razão de ganho do C4.5 corrige esse viés?
- \((\star\star)\) Explique a poda por custo-complexidade, com objetivo \(R_\alpha(T) = R(T) + \alpha|T|\), em que \(|T|\) é o número de folhas. O que acontece quando \(\alpha = 0\) e quando \(\alpha \to \infty\)? Como se escolhe \(\alpha\)?
- \((\star)\) Cite três vantagens e três desvantagens das árvores de decisão. Por que se diz que elas têm alta variância?
- \((\star\star)\) Como as árvores tratam variáveis contínuas? Quantos pontos de corte candidatos existem para uma variável com \(m\) valores distintos?
17.13.2 Problemas numéricos
- \((\star)\) Calcule a entropia e o índice de Gini de nós com as seguintes distribuições de classe: (a) \((5, 5)\); (b) \((10, 0)\); (c) \((9, 5)\); (d) três classes com proporções iguais.
- \((\star\star)\) Um nó pai tem 10 observações: 6 da classe “+” e 4 da classe “-”. Duas divisões candidatas são:
- Divisão A: filho esquerdo com \((4+, 0-)\) e filho direito com \((2+, 4-)\);
- Divisão B: filho esquerdo com \((3+, 1-)\) e filho direito com \((3+, 3-)\).
- \((\star\star)\) Um atributo
idassume um valor diferente em cada uma das 10 observações do exercício anterior. Qual seria o ganho de informação de uma divisão porid? Explique por que essa divisão é inútil para prever novas observações. - \((\star\star)\) Uma árvore completa \(T_0\) tem 8 folhas e erro de treinamento \(R(T_0) = 0{,}05\); uma subárvore podada \(T_1\) tem 3 folhas e \(R(T_1) = 0{,}12\). Para quais valores de \(\alpha\) a subárvore \(T_1\) é preferida pelo critério \(R_\alpha(T)\)?
17.13.3 Tarefas de programação
- \((\star)\) Em R, ajuste uma árvore com
rpartao conjuntoiris, visualize-a comrpart.plote escreva as regras de decisão em linguagem natural. - \((\star\star)\) Em R, use o conjunto
kyphosis(pacoterpart) para crescer uma árvore comcp = 0, examine a tabelaprintcp()e pode a árvore pela regra de um erro padrão. Compare o número de folhas antes e depois da poda. - \((\star\star)\) Em Python, ajuste um
DecisionTreeClassifieraoload_wine()commax_depthvariando de 1 a 10. Faça o gráfico da acurácia de treino e de validação cruzada em função da profundidade e identifique o ponto de overfitting. - \((\star\star)\) Em Python, use
cost_complexity_pruning_path()noload_breast_cancer()para obter a sequência de valores de \(\alpha\), escolha o melhor por validação cruzada estratificada e compare com a árvore sem poda. - \((\star\star\star)\) Implemente em Python, do zero, uma função
melhor_divisao(x, y)que, para uma variável contínuaxe rótulosy, retorna o ponto de corte que maximiza a redução do índice de Gini. Teste-a na variávelpetal_lengthdoiris.
17.13.4 Respostas e soluções selecionadas
- 12. (a) \(H = 1\), \(G = 0{,}5\); (b) \(H = 0\), \(G = 0\); (c) \(H \approx 0{,}9403\), \(G \approx 0{,}4592\); (d) \(H = \log_2 3 \approx 1{,}5850\), \(G = 2/3 \approx 0{,}6667\).
- 13. Pai: \(H = 0{,}9710\) e \(G = 0{,}48\).
- Divisão A: \(H_E = 0\), \(H_D \approx 0{,}9183\), ganho \(\approx 0{,}9710 - 0{,}6 \cdot 0{,}9183 \approx 0{,}4200\); \(G_E = 0\), \(G_D \approx 0{,}4444\), redução do Gini \(\approx 0{,}2133\); erro ponderado \(= 0{,}2\).
- Divisão B: \(H_E \approx 0{,}8113\), \(H_D = 1\), ganho \(\approx 0{,}0464\); \(G_E = 0{,}375\), \(G_D = 0{,}5\), redução do Gini \(= 0{,}03\); erro ponderado \(= 0{,}4\).
- A divisão A é melhor pelos três critérios.
- 14. Todos os filhos ficam puros, de modo que o ganho é máximo, \(0{,}9710\); mas a divisão apenas memoriza o treino e não generaliza.
- 15. \(R_\alpha(T_1) \leq R_\alpha(T_0) \iff 0{,}12 + 3\alpha \leq 0{,}05 + 8\alpha \iff \alpha \geq 0{,}014\).
17.14 Lista 13 — Floresta Aleatória e Métodos de Conjunto
Esta lista acompanha o capítulo sobre florestas aleatórias (Breiman 1996, 2001).
17.14.1 Questões conceituais e teóricas
- \((\star)\) O que é um método de conjunto (ensemble)? Diferencie bagging, boosting e stacking.
- \((\star)\) Descreva o procedimento de reamostragem bootstrap (Efron 1979). Como a amostragem é feita (com ou sem reposição) e qual o tamanho de cada amostra?
- \((\star\star)\) Explique por que a média de muitas árvores tem variância menor que a de uma única árvore. Qual é o papel da correlação entre as árvores?
- \((\star\star)\) Qual a diferença entre bagging de árvores e floresta aleatória? Por que sortear um subconjunto de
mtryvariáveis em cada nó reduz a correlação entre as árvores? Quais são os valores usuais demtrypara classificação e regressão? - \((\star\star)\) O que é o erro out-of-bag (OOB)? Por que ele pode substituir a validação cruzada em uma floresta aleatória?
- \((\star\star)\) Compare a importância por diminuição média da impureza (MDI) com a importância por permutação. Qual delas é enviesada a favor de variáveis contínuas ou com muitas categorias (Strobl et al. 2007)?
- \((\star)\) Liste os principais hiperparâmetros de uma floresta aleatória e o efeito esperado de aumentar cada um deles.
- \((\star\star)\) Por que aumentar o número de árvores não causa overfitting em uma floresta aleatória, mas aumentar o número de iterações pode causá-lo no boosting (Freund e Schapire 1997; J. H. Friedman 2001)?
17.14.2 Demonstrações e problemas numéricos
- \((\star\star)\) Probabilidade de ficar fora do bootstrap. Mostre que a probabilidade de uma observação específica não ser sorteada em uma amostra bootstrap de tamanho \(n\) é \((1 - 1/n)^n\). Calcule-a para \(n = 10\) e \(n = 100\) e mostre que ela converge para \(e^{-1} \approx 0{,}3679\) quando \(n \to \infty\). Interprete a fração \(1 - e^{-1} \approx 63{,}2\%\).
- \((\star\star\star)\) Variância da média de variáveis correlacionadas. Sejam \(T_1, \ldots, T_B\) variáveis identicamente distribuídas, com variância \(\sigma^2\) e correlação \(\rho > 0\) entre cada par. Mostre que \[ \operatorname{Var}\left(\frac{1}{B}\sum_{b=1}^{B} T_b\right) = \rho\,\sigma^2 + \frac{1 - \rho}{B}\,\sigma^2 . \] Calcule o valor para \(\sigma^2 = 1\), \(\rho = 0{,}3\) e \(B = 100\). Qual é o limite quando \(B \to \infty\)? Que lição isso traz para o projeto de uma floresta aleatória?
- \((\star\star)\) Votação majoritária. Suponha 5 classificadores independentes, cada um com probabilidade 0,7 de acertar. Calcule a probabilidade de a votação majoritária acertar. Por que, na prática, o ganho de uma floresta é menor que esse?
- \((\star)\) Em uma floresta com 7 árvores, as predições para uma observação foram: A, B, A, A, C, B, A. Qual a classe prevista e qual a “probabilidade” estimada de cada classe?
17.14.3 Tarefas de programação
- \((\star\star)\) Em R, ajuste uma floresta com
randomForest(Liaw e Wiener 2002) aoirise reporte o erro OOB, a matriz de confusão OOB e o gráficovarImpPlot(). - \((\star\star)\) Em R, com
ranger(Wright e Ziegler 2017), faça uma busca em grade demtryemin.node.sizenopenguins(sem ausentes) usando o erro OOB como critério. - \((\star\star)\) Em Python, compare no
load_breast_cancer()a acurácia em validação cruzada de: uma árvore única, bagging de árvores (BaggingClassifier), floresta aleatória eExtraTreesClassifier(Geurts, Ernst, e Wehenkel 2006). - \((\star\star)\) Em Python, use
warm_start=Truepara traçar o erro OOB de uma floresta em função do número de árvores (de 10 a 500). A partir de quantas árvores o erro se estabiliza? - \((\star\star\star)\) Em Python, adicione ao
load_breast_cancer()uma coluna de ruído contínuo e outra de ruído categórico com muitas categorias. Compare a importância MDI e a importância por permutação dessas colunas e discuta o resultado.
17.14.4 Respostas e soluções selecionadas
- 9. \(n = 10\): \(0{,}9^{10} \approx 0{,}3487\); \(n = 100\): \(0{,}99^{100} \approx 0{,}3660\). Como \(\lim_{n\to\infty}(1 - 1/n)^n = e^{-1}\), cada amostra bootstrap contém, em média, cerca de 63,2% das observações distintas; as demais (\(\approx 36{,}8\%\)) formam o conjunto OOB daquela árvore.
- 10. Use \(\operatorname{Var}(\sum T_b) = B\sigma^2 + B(B-1)\rho\sigma^2\) e divida por \(B^2\). Para os valores dados: \(0{,}3 + 0{,}7/100 = 0{,}307\); o limite é \(\rho\sigma^2 = 0{,}3\). Aumentar \(B\) não reduz a variância abaixo de \(\rho\sigma^2\): é preciso diminuir a correlação entre as árvores, o que justifica o sorteio de variáveis.
- 11. \(P = \sum_{k=3}^{5}\binom{5}{k}0{,}7^k\,0{,}3^{5-k} = 0{,}3087 + 0{,}3602 + 0{,}1681 \approx 0{,}8369\). As árvores de uma floresta são correlacionadas, não independentes.
- 12. Classe A, com proporções \(\hat p_A = 4/7 \approx 0{,}571\), \(\hat p_B = 2/7 \approx 0{,}286\) e \(\hat p_C = 1/7 \approx 0{,}143\).
17.15 Lista 14 — Projeto: Detecção de Ocupação com Árvores e Florestas
17.15.1 Problemática
A determinação precisa da ocupação em edifícios pode reduzir o consumo de energia em até 42%, com economias reportadas variando entre 29% e 80% quando dados de ocupação são utilizados em algoritmos de controle HVAC. Com a crescente acessibilidade a sensores e poder computacional para automação, a detecção de ocupação tornou-se uma estratégia promissora para otimizar o controle de sistemas de HVAC e iluminação, além de ter aplicações em segurança e análise do comportamento dos ocupantes, especialmente quando não se utilizam câmeras, respeitando a privacidade.
Base de dados:
- date: marca a data e a hora em que as medições foram realizadas.
- Temperature: refere-se à medida da temperatura ambiente registrada pelos sensores. Pode influenciar o conforto e o comportamento dos ocupantes no edifício.
- Humidity: mede o nível de umidade relativa no ambiente. A umidade pode afetar a percepção de conforto e a qualidade do ar.
- Light: indica a intensidade da luz no ambiente, medida pelos sensores. Pode estar relacionada à presença de ocupantes ou ao uso de iluminação no espaço.
- CO2: concentração de dióxido de carbono no ambiente, medida pelos sensores. Níveis elevados podem indicar a presença de ocupantes e sua atividade.
- HumidityRatio: calculada a partir dos dados de umidade, essa variável representa a proporção da umidade em relação a um valor de referência, fornecendo uma medida mais precisa do nível de umidade relativa.
- Occupancy: variável binária que indica se o ambiente está ocupado (1) ou não (0).
Cada uma dessas variáveis fornece informações diferentes que podem ser usadas para prever o status de ocupação e melhorar a eficiência dos sistemas de controle ambiental.
- Link dos dados: data.csv
- Link do artigo da base de dados: https://doi.org/10.1016/j.enbuild.2015.11.071
17.15.2 Questões da disciplina
- Crie um Modelo de Árvore de Decisão para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de Árvore de Decisão para a base de dados acima utilizando a linguagem de programação
python. - Crie um Modelo de Árvore de Decisão aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de Árvore de Decisão aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
python. - Selecionando o melhor modelo de Árvore de Decisão, faça o tuning dos hiperparâmetros utilizando
python. - Crie um Modelo de Floresta Aleatória para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de Floresta Aleatória para a base de dados acima utilizando a linguagem de programação
python. - Crie um Modelo de Floresta Aleatória aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de Floresta Aleatória aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
python. - Selecionando o melhor modelo de Floresta Aleatória, faça o tuning dos hiperparâmetros utilizando
python. - Faça uma análise sobre os resultados encontrados, comparando os modelos de Árvore de Decisão e Floresta Aleatória.
17.15.3 Questões complementares
- \((\star\star)\) A variável
datenão deve ser usada diretamente como preditora. Por quê? Extraia dela a hora do dia e o dia da semana e avalie se essas novas variáveis melhoram o modelo. - \((\star\star)\) As observações são uma série temporal: medições consecutivas são muito parecidas. Explique por que uma validação cruzada com partições aleatórias pode superestimar o desempenho e proponha uma divisão temporal (treinar no passado, testar no futuro).
- \((\star\star)\) Verifique o balanceamento da variável
Occupancy. Além da acurácia, reporte precisão, recall, F1, AUC e MCC. - \((\star\star\star)\) Analise a importância das variáveis da floresta. Treine um modelo usando apenas a variável
Lighte compare seu desempenho com o modelo completo. O que isso revela sobre o problema?
17.16 Lista 15 — k-Vizinhos Mais Próximos (k-NN)
Esta lista acompanha o capítulo sobre o k-NN (Fix e Hodges 1951; Cover e Hart 1967).
17.16.1 Questões conceituais e teóricas
- \((\star)\) Descreva o algoritmo k-NN para classificação e para regressão. Por que se diz que ele é um método “preguiçoso” (lazy learning) e não paramétrico?
- \((\star\star)\) Escreva a regra de classificação do k-NN como uma estimativa da probabilidade condicional \(P(Y = j \mid X = \mathbf{x}_0)\). Qual a relação com o classificador de Bayes?
- \((\star\star)\) Enuncie o resultado de Cover e Hart (Cover e Hart 1967) sobre o erro assintótico do 1-NN. O que ele garante e o que ele não garante na prática?
- \((\star)\) Defina as distâncias euclidiana, de Manhattan, de Chebyshev e de Minkowski. Qual valor de \(p\) na distância de Minkowski corresponde a cada uma das outras?
- \((\star\star)\) Por que é essencial padronizar ou normalizar as variáveis antes de aplicar o k-NN? Dê um exemplo com renda (em reais) e idade (em anos).
- \((\star\star)\) Como o valor de \(k\) controla o equilíbrio entre viés e variância? O que acontece quando \(k = 1\) e quando \(k = n\)?
- \((\star\star)\) Explique a “maldição da dimensionalidade” (Bellman 1961; Beyer et al. 1999) e por que ela afeta métodos baseados em distância.
- \((\star)\) Qual o custo computacional de classificar uma nova observação por força bruta? Como estruturas como a árvore \(k\)-d (Bentley 1975) ajudam?
- \((\star\star)\) Como medir distâncias quando há variáveis categóricas e numéricas misturadas? Descreva a distância de Gower (Gower 1971).
- \((\star)\) O que é o k-NN ponderado pela distância (Dudani 1976)? Em que situação ele é preferível ao k-NN com votos iguais?
17.16.2 Problemas numéricos
\((\star)\) Calcule as distâncias euclidiana, de Manhattan e de Chebyshev entre \(\mathbf{a} = (1, 2, 3)\) e \(\mathbf{b} = (4, 0, 3)\).
\((\star\star)\) Considere o conjunto de treinamento abaixo, com variáveis já na mesma escala, e o ponto a classificar \(\mathbf{x}_0 = (2{,}5;\ 2{,}8)\).
Ponto \(x_1\) \(x_2\) Classe P1 1 1 A P2 2 4 B P3 4 1 A P4 3 5 B P5 5 4 B P6 1 3 A P7 4 4 B - Calcule a distância euclidiana de \(\mathbf{x}_0\) a cada ponto e ordene-os.
- Classifique \(\mathbf{x}_0\) com \(k = 1\), \(k = 3\) e \(k = 5\) por votação simples.
- Para \(k = 3\), refaça a votação com pesos \(1/d\).
\((\star)\) Padronize os valores \(10, 12, 14, 16, 18\) pelo escore \(z\) (com desvio padrão amostral) e pela normalização mín–máx.
\((\star\star)\) Maldição da dimensionalidade. Pontos estão distribuídos uniformemente no hipercubo unitário \([0, 1]^p\). Qual deve ser a aresta \(\ell\) de um subcubo para que ele contenha, em média, 10% dos pontos? Calcule \(\ell = 0{,}1^{1/p}\) para \(p = 1, 2, 10, 100\) e interprete: o que significa “vizinhança local” em dimensão alta?
17.16.3 Tarefas de programação
- \((\star\star)\) Em R, use o pacote
class(funçãoknn()) noiris, com padronização calculada apenas no treino, e escolha \(k\) por validação cruzada comcaret::train(). - \((\star\star)\) Em Python, construa um
PipelinecomStandardScalereKNeighborsClassifierpara oload_wine()e useGridSearchCVpara escolhern_neighbors(1 a 30),weights(uniform,distance) ep(1, 2). Reporte a melhor combinação e a acurácia no teste. - \((\star\star)\) Repita o exercício anterior sem padronização e compare os resultados. Qual variável do
load_wine()domina as distâncias e por quê? - \((\star\star)\) Use
KNeighborsRegressorno conjuntoload_diabetes()e trace o RMSE de validação cruzada em função de \(k\). - \((\star\star\star)\) Implemente o k-NN do zero em Python (com NumPy, sem
scikit-learn), com distância euclidiana e votação majoritária, e compare as predições com as doKNeighborsClassifiernoiris. - \((\star\star\star)\) Simule pontos uniformes em \([0, 1]^p\) para \(p = 2, 10, 100, 1000\) e calcule a razão entre a menor e a maior distância de um ponto de consulta aos demais. Faça um gráfico e relacione com o exercício 14.
17.16.4 Respostas e soluções selecionadas
- 11. Euclidiana \(\sqrt{13} \approx 3{,}6056\); Manhattan 5; Chebyshev 3.
- 12. (a) Distâncias: P2 \(= 1{,}300\); P6 \(\approx 1{,}513\); P7 \(\approx 1{,}921\); P4 \(\approx 2{,}256\); P1 \(=\) P3 \(\approx 2{,}343\); P5 \(\approx 2{,}773\). (b) \(k = 1\): B; \(k = 3\): {B, A, B}, classe B; \(k = 5\): {B, A, B, B, A}, classe B. (c) Pesos: B \(= 1/1{,}300 + 1/1{,}921 \approx 1{,}290\); A \(= 1/1{,}513 \approx 0{,}661\); classe B.
- 13. \(\bar x = 14\), \(s = \sqrt{10} \approx 3{,}1623\); escores \(z\): \(-1{,}2649\); \(-0{,}6325\); \(0\); \(0{,}6325\); \(1{,}2649\). Mín–máx: \(0\); \(0{,}25\); \(0{,}5\); \(0{,}75\); \(1\).
- 14. \(\ell = 0{,}1\) (\(p = 1\)); \(0{,}3162\) (\(p = 2\)); \(0{,}7943\) (\(p = 10\)); \(0{,}9772\) (\(p = 100\)). Em dimensão alta, para capturar 10% dos dados é preciso cobrir quase toda a amplitude de cada variável: a “vizinhança” deixa de ser local.
17.17 Lista 16 — Máquinas de Vetores de Suporte (SVM)
Esta lista acompanha o capítulo sobre SVM (Cortes e Vapnik 1995; Vapnik 1995; Schölkopf e Smola 2002).
17.17.1 Questões conceituais e teóricas
- \((\star)\) Explique a ideia de classificador de margem máxima. O que são os vetores de suporte?
- \((\star\star)\) Mostre que a distância de um ponto \(\mathbf{x}_0\) ao hiperplano \(\{\mathbf{x} : \mathbf{w}^\top\mathbf{x} + b = 0\}\) é \(|\mathbf{w}^\top\mathbf{x}_0 + b|/\|\mathbf{w}\|\). Sugestão: projete \(\mathbf{x}_0 - \mathbf{x}_1\) na direção de \(\mathbf{w}\), sendo \(\mathbf{x}_1\) um ponto do hiperplano.
- \((\star\star)\) Com a normalização \(\min_i y_i(\mathbf{w}^\top\mathbf{x}_i + b) = 1\), mostre que a largura da margem é \(2/\|\mathbf{w}\|\) e que maximizá-la equivale a resolver \[ \min_{\mathbf{w}, b}\ \frac{1}{2}\|\mathbf{w}\|^2 \quad \text{sujeito a} \quad y_i(\mathbf{w}^\top\mathbf{x}_i + b) \geq 1,\ i = 1, \ldots, n. \]
- \((\star\star)\) Explique o papel das variáveis de folga \(\xi_i\) e do hiperparâmetro \(C\) na SVM de margem suave. O que acontece com a margem e com o número de vetores de suporte quando \(C\) aumenta?
- \((\star\star)\) Mostre que o problema da margem suave pode ser reescrito como a minimização de \(\sum_i \max\{0, 1 - y_i f(\mathbf{x}_i)\} + \lambda\|\mathbf{w}\|^2\). Qual a relação entre \(\lambda\) e \(C\)?
- \((\star\star)\) No problema dual, a solução tem a forma \(\mathbf{w} = \sum_i \alpha_i y_i \mathbf{x}_i\). Por que apenas os vetores de suporte têm \(\alpha_i > 0\)? Que consequência isso tem para a predição?
- \((\star\star)\) O que é o truque do kernel (Boser, Guyon, e Vapnik 1992)? Por que ele permite trabalhar em espaços de dimensão muito alta (ou até infinita) sem calcular explicitamente a transformação \(\phi\)? Cite a condição de Mercer (Mercer 1909).
- \((\star\star)\) Descreva o efeito do hiperparâmetro \(\gamma\) do kernel RBF \(K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma\|\mathbf{x} - \mathbf{z}\|^2)\) sobre a fronteira de decisão. Quais combinações de \(C\) e \(\gamma\) levam a underfitting e a overfitting?
- \((\star)\) Compare as estratégias “um contra um” e “um contra todos” para SVM multiclasse. Quantos classificadores binários cada uma treina para \(K = 4\) classes?
- \((\star)\) Como a SVR (regressão por vetores de suporte) adapta a ideia da margem para a regressão? O que é o tubo \(\varepsilon\)-insensível?
17.17.2 Problemas numéricos
- \((\star)\) Considere o hiperplano \(3x_1 + 4x_2 - 5 = 0\). Calcule a distância do ponto \((2, 1)\) ao hiperplano e indique de que lado ele está.
- \((\star\star)\) Considere apenas dois pontos de treino: \(\mathbf{x}_1 = (1, 1)\) com \(y_1 = -1\) e \(\mathbf{x}_2 = (3, 3)\) com \(y_2 = +1\).
- Argumente geometricamente que o hiperplano de margem máxima é a mediatriz do segmento que une os pontos.
- Encontre \(\mathbf{w}\) e \(b\) que satisfazem \(y_i(\mathbf{w}^\top\mathbf{x}_i + b) = 1\) para os dois pontos, com \(\mathbf{w}\) paralelo a \(\mathbf{x}_2 - \mathbf{x}_1\).
- Calcule a margem \(2/\|\mathbf{w}\|\) e compare-a com a distância entre os pontos.
- \((\star)\) Calcule a perda hinge \(\max\{0, 1 - y f(\mathbf{x})\}\) para os pares \((y, f(\mathbf{x}))\): \((+1;\ 0{,}3)\), \((-1;\ 0{,}3)\), \((+1;\ 2)\), \((-1;\ -1{,}5)\) e \((+1;\ -0{,}5)\). Quais pontos estão corretamente classificados mas dentro da margem?
- \((\star\star)\) Para \(\mathbf{x} = (1, 2)\) e \(\mathbf{z} = (2, 0)\), calcule:
- o kernel linear \(K(\mathbf{x}, \mathbf{z}) = \mathbf{x}^\top\mathbf{z}\);
- o kernel polinomial \(K(\mathbf{x}, \mathbf{z}) = (1 + \mathbf{x}^\top\mathbf{z})^2\);
- o kernel RBF com \(\gamma = 0{,}5\).
- \((\star\star)\) Para o kernel polinomial homogêneo de grau 2, \(K(\mathbf{x}, \mathbf{z}) = (\mathbf{x}^\top\mathbf{z})^2\) em \(\mathbb{R}^2\), verifique que \(K(\mathbf{x}, \mathbf{z}) = \phi(\mathbf{x})^\top\phi(\mathbf{z})\) com \(\phi(\mathbf{x}) = (x_1^2,\ \sqrt{2}\,x_1x_2,\ x_2^2)\). Confira numericamente com os vetores do exercício 14.
17.17.3 Tarefas de programação
- \((\star\star)\) Em R, com o pacote
e1071(Chang e Lin 2011), ajuste uma SVM linear e uma SVM RBF aoirise usetune()para escolher \(C\) e \(\gamma\) por validação cruzada com 10 partes. - \((\star\star)\) Em Python, use
make_moons(n_samples=300, noise=0.25, random_state=0)e ajuste SVMs com kernels linear, polinomial e RBF. Desenhe as fronteiras de decisão lado a lado e comente. - \((\star\star)\) Para a SVM RBF do exercício anterior, construa um mapa de calor da acurácia de validação cruzada em uma grade \(C \in \{0{,}01; 0{,}1; 1; 10; 100\}\) e \(\gamma \in \{0{,}01; 0{,}1; 1; 10; 100\}\). Identifique as regiões de underfitting e overfitting.
- \((\star\star)\) Em Python, ajuste uma SVM ao
load_breast_cancer()com e semStandardScalerdentro de umPipeline. Compare as acurácias e explique a diferença. - \((\star\star\star)\) Em Python, ajuste uma
SVC(kernel="linear", C=1e6)(aproximando a margem rígida) aos dois pontos do exercício 12 e confira \(\mathbf{w}\) (coef_), \(b\) (intercept_) e os vetores de suporte.
17.17.4 Respostas e soluções selecionadas
- 11. \(d = |3 \cdot 2 + 4 \cdot 1 - 5|/\sqrt{3^2 + 4^2} = 5/5 = 1\); o ponto está do lado positivo.
- 12. (b) \(\mathbf{w} = (0{,}5;\ 0{,}5)\) e \(b = -2\): de fato, \(\mathbf{w}^\top\mathbf{x}_1 + b = -1\) e \(\mathbf{w}^\top\mathbf{x}_2 + b = 1\). (c) \(\|\mathbf{w}\| = \sqrt{0{,}5} \approx 0{,}7071\) e a margem é \(2/0{,}7071 \approx 2{,}8284 = 2\sqrt{2}\), exatamente a distância entre os dois pontos.
- 13. Perdas: \(0{,}7\); \(1{,}3\); \(0\); \(0\); \(1{,}5\). O ponto \((+1;\ 0{,}3)\) está corretamente classificado, mas dentro da margem.
- 14. (a) 2; (b) 9; (c) \(\|\mathbf{x} - \mathbf{z}\|^2 = 5\), \(K = e^{-2{,}5} \approx 0{,}0821\).
- 15. \(\phi(\mathbf{x}) = (1;\ 2\sqrt{2};\ 4)\), \(\phi(\mathbf{z}) = (4;\ 0;\ 0)\), produto interno \(= 4 = (\mathbf{x}^\top\mathbf{z})^2\).
17.18 Lista 17 — Projeto: Detecção de Ocupação com SVM e k-NN
17.18.1 Problemática
A determinação precisa da ocupação em edifícios pode reduzir o consumo de energia em até 42%, com economias reportadas variando entre 29% e 80% quando dados de ocupação são utilizados em algoritmos de controle HVAC. Com a crescente acessibilidade a sensores e poder computacional para automação, a detecção de ocupação tornou-se uma estratégia promissora para otimizar o controle de sistemas de HVAC e iluminação, além de ter aplicações em segurança e análise do comportamento dos ocupantes, especialmente quando não se utilizam câmeras, respeitando a privacidade.
A descrição das variáveis (date, Temperature, Humidity, Light, CO2, HumidityRatio e Occupancy) é a mesma apresentada na Lista 14.
- Link dos dados: data.csv
- Link do artigo da base de dados: https://doi.org/10.1016/j.enbuild.2015.11.071
17.18.2 Questões da disciplina
- Crie um Modelo de SVM para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de SVM para a base de dados acima utilizando a linguagem de programação
python. - Crie um Modelo de SVM aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de SVM aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
python. - Selecionando o melhor modelo de SVM, faça o tuning dos hiperparâmetros utilizando
python. - Crie um Modelo de k-NN para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de k-NN para a base de dados acima utilizando a linguagem de programação
python. - Crie um Modelo de k-NN aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de k-NN aplicando um \(k\)-fold com \(k = 10\) para a base de dados acima utilizando a linguagem de programação
python. - Selecionando o melhor modelo de k-NN, faça o tuning dos hiperparâmetros utilizando
python. - Faça uma análise sobre os resultados encontrados, comparando os modelos de SVM e k-NN.
17.18.3 Questões complementares
- \((\star\star)\) Por que a padronização é obrigatória para SVM e k-NN, mas irrelevante para árvores de decisão? Verifique empiricamente nesta base.
- \((\star\star)\) Compare o tempo de treinamento e o tempo de predição da SVM RBF e do k-NN nesta base. Qual método escalaria melhor para milhões de medições? Justifique.
- \((\star\star\star)\) Monte uma tabela final comparando os quatro modelos das Listas 14 e 17 (árvore, floresta, SVM e k-NN) quanto a acurácia, F1, AUC, tempo de treinamento e interpretabilidade, e recomende um modelo para implantação em um edifício real.
17.19 Lista 18 — Modelos de Regressão
Esta lista acompanha o capítulo sobre modelos de regressão (James et al. 2013; Montgomery, Peck, e Vining 2012).
17.19.1 Questões conceituais e teóricas
- \((\star)\) Diferencie problemas de classificação e de regressão, com dois exemplos de cada. A previsão do número de clientes em uma loja é um problema de que tipo?
- \((\star)\) Escreva o modelo de regressão linear simples e explique o significado de \(\beta_0\), \(\beta_1\) e \(\varepsilon\). Quais são as suposições usuais sobre os erros?
- \((\star\star)\) Por que se minimiza a soma dos quadrados dos resíduos, e não a soma dos resíduos? Qual seria o problema de minimizar \(\sum_i (y_i - \hat y_i)\)?
- \((\star\star)\) Interprete \(R^2\) e \(R^2\) ajustado. Por que o \(R^2\) nunca diminui quando se acrescenta uma variável ao modelo? Escreva a fórmula do \(R^2\) ajustado.
- \((\star\star)\) O que é multicolinearidade? Quais são seus efeitos sobre as estimativas e os erros padrão dos coeficientes? Como diagnosticá-la?
- \((\star\star)\) Por que a regressão polinomial ainda é um modelo linear? Qual é o risco de usar um polinômio de grau muito alto?
- \((\star\star)\) Compare Ridge (Hoerl e Kennard 1970), Lasso (Tibshirani 1996) e Elastic Net (Zou e Hastie 2005) quanto à penalidade, à seleção de variáveis e ao comportamento com preditores correlacionados. Por que é preciso padronizar as variáveis antes de aplicá-las?
- \((\star\star)\) Explique a interpretação geométrica de por que o Lasso produz coeficientes exatamente iguais a zero e o Ridge não.
- \((\star\star)\) Na regressão logística (Cox 1958), explique por que não se modela a probabilidade diretamente por uma reta. Interprete \(e^{\beta_j}\) como razão de chances.
- \((\star)\) Como uma árvore de regressão faz previsões? Qual critério é usado para escolher as divisões?
- \((\star\star)\) Compare MAE, MSE, RMSE, MAPE e \(R^2\). Qual métrica é mais sensível a outliers? Em que situação o MAPE é problemático?
- \((\star\star)\) Descreva os gráficos de diagnóstico de resíduos (resíduos versus ajustados, gráfico quantil-quantil normal, escala-locação e alavancagem). Que padrão em cada um indica violação das suposições?
17.19.2 Demonstrações e problemas numéricos
\((\star\star)\) Estimadores de mínimos quadrados. Para o modelo \(y_i = \beta_0 + \beta_1 x_i + \varepsilon_i\), derive as equações normais a partir de \(\partial S/\partial\beta_0 = 0\) e \(\partial S/\partial\beta_1 = 0\), com \(S(\beta_0, \beta_1) = \sum_i (y_i - \beta_0 - \beta_1 x_i)^2\), e mostre que \[ \hat\beta_1 = \frac{\sum_{i=1}^n (x_i - \bar x)(y_i - \bar y)}{\sum_{i=1}^n (x_i - \bar x)^2}, \qquad \hat\beta_0 = \bar y - \hat\beta_1 \bar x . \]
\((\star\star\star)\) Forma matricial. Para \(\mathbf{y} = X\boldsymbol\beta + \boldsymbol\varepsilon\), mostre que o gradiente de \(S(\boldsymbol\beta) = (\mathbf{y} - X\boldsymbol\beta)^\top(\mathbf{y} - X\boldsymbol\beta)\) é \(-2X^\top(\mathbf{y} - X\boldsymbol\beta)\) e conclua que \(\hat{\boldsymbol\beta} = (X^\top X)^{-1}X^\top\mathbf{y}\), supondo \(X^\top X\) invertível. Mostre também que os resíduos são ortogonais às colunas de \(X\), isto é, \(X^\top\hat{\boldsymbol\varepsilon} = \mathbf{0}\).
\((\star\star)\) Mostre que a reta de mínimos quadrados passa pelo ponto \((\bar x, \bar y)\) e que, em um modelo com intercepto, a soma dos resíduos é zero.
\((\star\star)\) Para os dados abaixo, calcule à mão \(\hat\beta_0\), \(\hat\beta_1\), os valores ajustados, a soma de quadrados dos resíduos (SQRes), a soma de quadrados total (SQTot), o \(R^2\), a estimativa \(s^2 = \text{SQRes}/(n - 2)\) e a previsão para \(x = 6\).
\(x\) 1 2 3 4 5 \(y\) 2 4 5 4 5 \((\star)\) Valores observados \(y = (3, 5, 7, 9)\) e previstos \(\hat y = (2{,}5;\ 5{,}5;\ 7;\ 10)\). Calcule MAE, MSE, RMSE e \(R^2 = 1 - \text{SQRes}/\text{SQTot}\).
\((\star\star)\) Ridge e Lasso no caso ortonormal. Suponha \(X^\top X = I\) e estimativas de mínimos quadrados \(\hat{\boldsymbol\beta}^{\text{MQO}} = (2;\ -0{,}8;\ 0{,}3)\). Sabendo que, nesse caso, o Ridge com objetivo \(\|\mathbf{y} - X\boldsymbol\beta\|^2 + \lambda\|\boldsymbol\beta\|^2\) fornece \(\hat\beta_j/(1 + \lambda)\) e o Lasso com objetivo \(\|\mathbf{y} - X\boldsymbol\beta\|^2 + \lambda\sum_j|\beta_j|\) fornece \(\operatorname{sign}(\hat\beta_j)(|\hat\beta_j| - \lambda/2)_+\), calcule as estimativas para \(\lambda = 1\). Comente.
\((\star\star\star)\) Demonstre a fórmula do Ridge do exercício anterior: mostre que \(\hat{\boldsymbol\beta}^{\text{Ridge}} = (X^\top X + \lambda I)^{-1}X^\top\mathbf{y}\) e particularize para \(X^\top X = I\).
\((\star\star)\) Regressão logística. Um modelo estimou \(\operatorname{logit}(p) = -3 + 0{,}5x\), em que \(x\) é o número de visitas ao site no mês e \(p\) é a probabilidade de compra.
- Calcule a probabilidade de compra para \(x = 8\).
- Interprete a razão de chances \(e^{0{,}5}\).
- Para qual valor de \(x\) a probabilidade estimada é 0,5?
\((\star\star)\) Árvore de regressão. Para os dados abaixo, avalie todos os pontos de corte entre valores consecutivos de \(x\) e escolha o que minimiza a soma dos quadrados dos resíduos dos dois grupos. Quais são as previsões em cada folha?
\(x\) 1 2 3 4 5 6 \(y\) 5 6 7 15 16 18
17.19.3 Tarefas de programação
- \((\star)\) Em R, ajuste
lm(mpg ~ wt, data = mtcars), interprete os coeficientes e o \(R^2\) e faça a previsão do consumo para um carro de 3.000 libras (wt = 3). - \((\star\star)\) Acrescente
hpao modelo anterior. Compare o \(R^2\) ajustado dos dois modelos e interprete o novo coeficiente dewt. Por que ele mudou? - \((\star\star)\) Em R, faça os gráficos de diagnóstico de
lm(price ~ carat, data = diamonds)e depois delm(log(price) ~ log(carat), data = diamonds). Qual modelo atende melhor às suposições? Interprete o coeficiente do modelo log-log como elasticidade. - \((\star\star)\) Em R, com
glmnet(J. Friedman, Hastie, e Tibshirani 2010), ajuste Lasso e Ridge para prevermpgcom todas as variáveis domtcars. Usecv.glmnet()e comparelambda.minelambda.1se. Quais variáveis o Lasso mantém? - \((\star\star)\) Em Python, no
fetch_california_housing(), compareLinearRegression,Ridge,Lasso,DecisionTreeRegressor,RandomForestRegressoreKNeighborsRegressor(com padronização quando necessário) pelo RMSE de validação cruzada com 5 partes. Apresente os resultados em uma tabela. - \((\star\star)\) Em Python, ajuste uma
LogisticRegressionaoload_breast_cancer()e interprete as três variáveis com maior razão de chances (após padronização). - \((\star\star\star)\) Implemente o gradiente descendente para a regressão linear simples em Python e mostre, para os dados do exercício 16, que ele converge para \(\hat\beta_0 = 2{,}2\) e \(\hat\beta_1 = 0{,}6\). Estude o efeito da taxa de aprendizado na convergência.
17.19.4 Respostas e soluções selecionadas
- 16. \(\bar x = 3\), \(\bar y = 4\), \(\sum(x_i - \bar x)(y_i - \bar y) = 6\) e \(\sum(x_i - \bar x)^2 = 10\), logo \(\hat\beta_1 = 0{,}6\) e \(\hat\beta_0 = 2{,}2\). Ajustados: \(2{,}8\); \(3{,}4\); \(4{,}0\); \(4{,}6\); \(5{,}2\). \(\text{SQRes} = 2{,}4\), \(\text{SQTot} = 6\), \(R^2 = 0{,}6\), \(s^2 = 0{,}8\) e \(\hat y(6) = 5{,}8\).
- 17. MAE \(= 0{,}5\); MSE \(= 0{,}375\); RMSE \(\approx 0{,}6124\); \(R^2 = 1 - 1{,}5/20 = 0{,}925\).
- 18. Ridge: \((1;\ -0{,}4;\ 0{,}15)\). Lasso (limiar \(0{,}5\)): \((1{,}5;\ -0{,}3;\ 0)\). O Ridge encolhe todos os coeficientes proporcionalmente; o Lasso subtrai uma quantidade fixa e zera o menor.
- 20. (a) \(\operatorname{logit}(p) = 1\), \(p = 1/(1 + e^{-1}) \approx 0{,}7311\). (b) Cada visita adicional multiplica a chance de compra por \(e^{0{,}5} \approx 1{,}6487\) (aumento de cerca de 65%). (c) \(x = 6\).
- 21. SQRes por corte: \(1{,}5 \to 121{,}2\); \(2{,}5 \to 70{,}5\); \(3{,}5 \to 6{,}67\); \(4{,}5 \to 64{,}75\); \(5{,}5 \to 110{,}8\). Melhor corte: \(x < 3{,}5\), com previsões 6 (esquerda) e \(16{,}33\) (direita). A redução em relação a \(\text{SQTot} \approx 166{,}83\) é de cerca de 96%.
- 22. \(\widehat{\text{mpg}} = 37{,}2851 - 5{,}3445\,\text{wt}\), \(R^2 \approx 0{,}7528\); para
wt = 3, \(\widehat{\text{mpg}} \approx 21{,}25\). - 23. \(\widehat{\text{mpg}} = 37{,}2273 - 3{,}8778\,\text{wt} - 0{,}0318\,\text{hp}\); \(R^2\) ajustado passa de \(0{,}7446\) para \(0{,}8148\). O efeito de
wtdiminui porque parte dele era, na verdade, efeito dehp, correlacionada com o peso.
17.20 Lista 19 — Agrupamento e K-Means
Esta lista acompanha o capítulo sobre aprendizado não supervisionado e K-Means (MacQueen 1967; Lloyd 1982; Jain 2010).
17.20.1 Questões conceituais e teóricas
- \((\star)\) Diferencie aprendizado supervisionado e não supervisionado. Por que avaliar um agrupamento é mais difícil que avaliar um classificador?
- \((\star)\) Diferencie agrupamento particional, hierárquico, baseado em densidade e baseado em modelos, citando um algoritmo de cada tipo.
- \((\star\star)\) Escreva a função objetivo do K-Means (inércia ou soma de quadrados intragrupos) e descreva os dois passos do algoritmo de Lloyd. Mostre que nenhum dos dois passos pode aumentar o valor da função objetivo e conclua que o algoritmo converge em um número finito de iterações.
- \((\star\star)\) Por que o passo de atualização usa a média dos pontos do grupo? Relacione com o exercício 9 da Lista 9.
- \((\star\star)\) Mostre que a soma de quadrados total se decompõe em \(SQ_{Total} = SQ_{Intra} + SQ_{Entre}\). Por que minimizar \(SQ_{Intra}\) equivale a maximizar \(SQ_{Entre}\)?
- \((\star\star)\) Por que o K-Means pode convergir para um mínimo local? Explique a inicialização k-means++ (Arthur e Vassilvitskii 2007) e o uso de múltiplas inicializações (
nstart,n_init). - \((\star\star)\) Descreva o método do cotovelo, o coeficiente de silhueta (Rousseeuw 1987) e a estatística gap (Tibshirani, Walther, e Hastie 2001) para escolher o número de grupos \(K\).
- \((\star\star)\) Quais são as limitações do K-Means? Em que tipos de dados ele falha (grupos não convexos, de tamanhos ou densidades muito diferentes, presença de outliers)? Cite uma alternativa adequada para cada caso, como DBSCAN (Ester et al. 1996) ou K-Medoides (Kaufman e Rousseeuw 1990).
- \((\star)\) Compare as ligações simples, completa, média e de Ward (Ward 1963) no agrupamento hierárquico. Qual delas tende a produzir o “efeito corrente” (chaining)?
- \((\star)\) Por que é importante padronizar as variáveis antes de aplicar o K-Means? Dê um exemplo com renda e idade.
17.20.2 Problemas numéricos
\((\star\star)\) K-Means à mão. Considere os 8 pontos abaixo e \(K = 3\), com centroides iniciais \(\boldsymbol\mu_1 = A\), \(\boldsymbol\mu_2 = D\) e \(\boldsymbol\mu_3 = G\).
Ponto A B C D E F G H \((x_1, x_2)\) (2, 10) (2, 5) (8, 4) (5, 8) (7, 5) (6, 4) (1, 2) (4, 9) - Usando a distância euclidiana ao quadrado, faça a primeira atribuição dos pontos aos grupos e calcule a inércia.
- Atualize os centroides.
- Continue as iterações até a convergência, registrando a inércia ao final de cada iteração.
\((\star\star)\) k-means++. Para os mesmos pontos, suponha que o primeiro centroide sorteado foi A. Calcule a probabilidade de cada ponto ser escolhido como segundo centroide, \(P(\mathbf{x}) = D(\mathbf{x})^2/\sum_{\mathbf{x}'} D(\mathbf{x}')^2\), em que \(D(\mathbf{x})\) é a distância de \(\mathbf{x}\) ao centroide mais próximo já escolhido.
\((\star\star)\) Silhueta. Considere os pontos \(A = (1, 1)\), \(B = (1, 3)\), \(C = (2, 2)\), \(D = (6, 5)\) e \(E = (7, 7)\), agrupados em \(\{A, B, C\}\) e \(\{D, E\}\). Calcule o coeficiente de silhueta do ponto \(A\), \(s(A) = (b - a)/\max(a, b)\), em que \(a\) é a distância média de \(A\) aos pontos do seu grupo e \(b\) é a distância média de \(A\) aos pontos do outro grupo.
\((\star\star)\) Ligações. Para os grupos \(\{A, B, C\}\) e \(\{D, E\}\) do exercício anterior, calcule a distância entre os grupos pelas ligações simples, completa e média.
17.20.3 Tarefas de programação
- \((\star)\) Em R, aplique
kmeans()às quatro variáveis numéricas padronizadas doiriscom \(K = 3\) enstart = 25. Compare os grupos obtidos com as espécies usandotable(). - \((\star\star)\) Em R, com o pacote
factoextraoucluster, construa os gráficos do cotovelo e da silhueta média para \(K = 2, \ldots, 10\) no conjuntoUSArrestspadronizado. Qual \(K\) você escolheria? - \((\star\star)\) Em R, faça um agrupamento hierárquico do
USArrestscomhclust()(ligações completa e de Ward), desenhe os dendrogramas e corte-os em 4 grupos. Compare as partições com a do K-Means. - \((\star\star)\) Em Python, use
make_blobsemake_moonspara mostrar um caso em que o K-Means funciona bem e outro em que ele falha. ApliqueDBSCANao segundo caso. - \((\star\star\star)\) Implemente o algoritmo de Lloyd do zero em Python, com inicialização k-means++, e confira, nos dados do exercício 11, que ele reproduz a solução obtida à mão quando iniciado em A, D e G.
- \((\star\star\star)\) Aplique o K-Means à compressão de imagens: trate cada pixel de uma imagem como um ponto em \(\mathbb{R}^3\) (RGB), agrupe as cores com \(K = 2, 8, 32\) e reconstrua a imagem usando os centroides. Discuta a relação entre \(K\) e a qualidade da imagem.
17.20.4 Respostas e soluções selecionadas
- 11. Iteração 1: \(C_1 = \{A\}\), \(C_2 = \{C, D, E, F, H\}\), \(C_3 = \{B, G\}\), inércia 67 com os centroides iniciais; novos centroides \((2, 10)\), \((6, 6)\) e \((1{,}5;\ 3{,}5)\), com inércia 37. Iteração 2: H passa para o grupo 1; centroides \((3;\ 9{,}5)\), \((6{,}5;\ 5{,}25)\) e \((1{,}5;\ 3{,}5)\); inércia \(23{,}25\). Iteração 3: D passa para o grupo 1; grupos \(\{A, D, H\}\), \(\{C, E, F\}\) e \(\{B, G\}\); centroides \((3{,}67;\ 9)\), \((7;\ 4{,}33)\) e \((1{,}5;\ 3{,}5)\); inércia \(\approx 14{,}33\). Iteração 4: nenhum ponto muda; convergência. Como \(SQ_{Total} = 100{,}75\), a razão \(SQ_{Entre}/SQ_{Total} \approx 85{,}8\%\).
- 12. \(D^2 = (0, 25, 72, 13, 50, 52, 65, 5)\) para A–H, com soma 282. Probabilidades: A 0; B \(0{,}0887\); C \(0{,}2553\); D \(0{,}0461\); E \(0{,}1773\); F \(0{,}1844\); G \(0{,}2305\); H \(0{,}0177\). Pontos distantes de A (como C e G) são os mais prováveis.
- 13. \(a = (2 + \sqrt{2})/2 \approx 1{,}7071\); \(b = (\sqrt{41} + \sqrt{72})/2 \approx 7{,}4442\); \(s(A) \approx 0{,}7707\).
- 14. Simples: \(d(C, D) = 5\); completa: \(d(A, E) = \sqrt{72} \approx 8{,}4853\); média \(\approx 6{,}5926\).
17.21 Lista 20 — Projeto: Segmentação de Clientes de um Shopping
17.21.1 Problemática
Você é proprietário de um shopping e, por meio de cartões de fidelidade, possui alguns dados básicos sobre seus clientes, como ID do Cliente, idade, gênero, renda anual e pontuação de gastos. A Pontuação de Gastos é algo que você atribui ao cliente com base em parâmetros definidos, como comportamento do cliente e dados de compras.
- Declaração do problema
Você é o proprietário do shopping e deseja entender os clientes, identificando quais deles podem ser facilmente convertidos [Clientes-Alvo], para que essa informação possa ser passada para a equipe de marketing e a estratégia possa ser planejada de acordo.
Sendo assim, seu objetivo é realizar uma segmentação (agrupamento) dos clientes. Segue abaixo o link da base e o do Kaggle.
- Link dos dados: Mall_Customers.csv
- Link do Kaggle da base de dados: https://www.kaggle.com/datasets/vjchoudhary7/customer-segmentation-tutorial-in-python
17.21.2 Questões da disciplina
- Crie um Modelo de k-means para a base de dados acima utilizando a linguagem de programação
R. - Crie um Modelo de k-means para a base de dados acima utilizando a linguagem de programação
python.
17.21.3 Questões complementares
- \((\star)\) Faça uma análise exploratória das variáveis idade, renda anual e pontuação de gastos (histogramas, boxplots e diagrama de dispersão de renda versus pontuação). Quantos grupos o diagrama de dispersão sugere?
- \((\star\star)\) Use os métodos do cotovelo e da silhueta para escolher \(K\) (i) usando apenas renda e pontuação de gastos e (ii) usando idade, renda e pontuação. As escolhas coincidem?
- \((\star\star)\) Por que a variável
CustomerIDnão deve entrar no agrupamento? E como tratar a variávelGender? - \((\star\star)\) Descreva cada grupo encontrado (médias das variáveis por grupo) e dê a cada um um nome de negócio (por exemplo, “alta renda e alto gasto”). Quais grupos você recomendaria como Clientes-Alvo?
- \((\star\star)\) Compare a segmentação do K-Means com a de um agrupamento hierárquico com ligação de Ward. As partições são parecidas? Use a tabela cruzada entre os rótulos.
- \((\star\star\star)\) Avalie a estabilidade da segmentação: repita o K-Means com 50 sementes diferentes e em 50 subamostras bootstrap e verifique se os grupos se mantêm. Discuta a confiabilidade das recomendações para o marketing.
17.22 Projeto Integrador Final
O projeto integrador reúne, em um único trabalho, todas as competências desenvolvidas na disciplina: formulação de um problema, obtenção e preparação de dados, análise exploratória, modelagem, avaliação, comunicação dos resultados e reprodutibilidade. O trabalho deve ser feito em grupos de dois a quatro alunos e seguir as seis etapas do CRISP-DM (Chapman et al. 2000; Provost e Fawcett 2013).
17.22.1 Escolha do problema e dos dados
O grupo deve escolher um conjunto de dados real e público, com pelo menos 500 observações e 6 variáveis, que permita formular uma pergunta de negócio ou científica relevante. Sugestões de fontes:
- portais de dados abertos do governo brasileiro (dados.gov.br, IBGE, DATASUS, INEP, Portal da Transparência);
- repositório da UCI (UCI Machine Learning Repository) e Kaggle;
- conjuntos de dados embutidos em pacotes do R e do Python, desde que pouco explorados em sala.
A pergunta deve ser formulada como um problema de classificação, regressão ou agrupamento, e o grupo deve justificar por que ela é útil para algum tomador de decisão.
17.22.2 Etapas e entregáveis
| Etapa do CRISP-DM | O que fazer | Entregável |
|---|---|---|
| 1. Entendimento do negócio | Definir o problema, o público interessado, os critérios de sucesso e as restrições éticas e legais (LGPD). | Seção “Contexto e objetivos” com a pergunta principal e a métrica de sucesso. |
| 2. Entendimento dos dados | Descrever a origem, o dicionário de variáveis, a qualidade (ausências, outliers, inconsistências) e fazer a análise exploratória. | Dicionário de dados, tabela de qualidade e pelo menos 5 gráficos comentados. |
| 3. Preparação dos dados | Limpar, imputar, transformar, codificar e criar variáveis; separar treino e teste sem vazamento. | Scripts de preparação versionados e justificativa de cada decisão. |
| 4. Modelagem | Ajustar pelo menos três modelos de famílias diferentes (por exemplo, regressão, árvore/floresta, SVM ou k-NN), com ajuste de hiperparâmetros por validação cruzada. | Código reprodutível e tabela comparativa de desempenho em validação cruzada. |
| 5. Avaliação | Avaliar o melhor modelo no conjunto de teste, analisar erros, importância das variáveis e possíveis vieses entre grupos. | Seção de resultados com métricas, intervalos ou desvios padrão e discussão das limitações. |
| 6. Implantação | Propor como o modelo seria usado, monitorado e atualizado; comunicar os resultados ao público não técnico. | Relatório Quarto renderizado, apresentação de 10 minutos e repositório público no GitHub. |
- Todo o projeto deve estar em um repositório Git com histórico de commits de todos os integrantes,
README.mdexplicativo e.gitignoreadequado. - O relatório deve ser um documento Quarto ou RMarkdown que, executado do início ao fim, reproduza todos os números e figuras apresentados.
- As sementes aleatórias devem ser fixadas e as versões dos pacotes registradas (por exemplo, com
renvno R ourequirements.txtno Python). - Nenhum dado pessoal identificável pode ser publicado no repositório.
17.22.3 Cronograma sugerido
| Semana | Atividade |
|---|---|
| 1 | Formação dos grupos, escolha dos dados e definição da pergunta (etapa 1). |
| 2–3 | Entendimento e preparação dos dados (etapas 2 e 3). |
| 4–5 | Modelagem e ajuste de hiperparâmetros (etapa 4). |
| 6 | Avaliação, interpretação e redação do relatório (etapas 5 e 6). |
| 7 | Apresentação oral e entrega final. |
17.22.4 Rubrica de avaliação
| Critério | Peso | Insuficiente (0–4) | Adequado (5–7) | Excelente (8–10) |
|---|---|---|---|---|
| Formulação do problema | 10% | Pergunta vaga ou sem relação com os dados. | Pergunta clara, mas sem critério de sucesso. | Pergunta relevante, com métrica de sucesso e público definidos. |
| Análise exploratória | 15% | Poucos gráficos, sem interpretação. | Gráficos adequados com interpretação parcial. | Exploração completa, com achados que orientam a modelagem. |
| Preparação dos dados | 15% | Decisões não justificadas ou com vazamento de dados. | Tratamento correto, porém pouco documentado. | Tratamento correto, justificado e encapsulado em pipelines. |
| Modelagem e validação | 20% | Um único modelo ou avaliação apenas no treino. | Vários modelos com validação cruzada simples. | Comparação rigorosa, ajuste de hiperparâmetros e avaliação final em teste separado. |
| Interpretação e ética | 15% | Resultados apenas numéricos. | Interpretação razoável, sem discussão de limitações. | Interpretação clara, análise de erros, vieses e limitações. |
| Comunicação | 15% | Relatório confuso e gráficos inadequados. | Relatório organizado, com alguns problemas de visualização. | Narrativa clara, gráficos explanatórios e apresentação objetiva. |
| Reprodutibilidade | 10% | Código não executa ou não está versionado. | Código executa, com histórico de commits pobre. | Repositório organizado, relatório totalmente reprodutível e colaboração visível. |
A nota final é a média ponderada das notas atribuídas a cada critério, na escala de 0 a 10.
17.22.5 Perguntas para a autoavaliação do grupo
- Um colega que nunca viu o projeto consegue clonar o repositório e reproduzir todos os resultados seguindo apenas o
README.md? - O desempenho do modelo final é melhor que o de uma linha de base simples (por exemplo, prever sempre a classe majoritária ou a média)?
- Alguma informação usada pelo modelo não estaria disponível no momento real da previsão?
- O modelo comete erros sistematicamente maiores para algum subgrupo da população?
- A principal conclusão do trabalho pode ser enunciada em uma única frase, compreensível para um gestor?