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:

  1. Questões da disciplina: as questões originalmente aplicadas no curso.
  2. Questões conceituais e teóricas: perguntas discursivas que exigem compreender e explicar, com suas próprias palavras, os conceitos do capítulo.
  3. 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.
  4. 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 do scikit-learn) ou disponibilizados por link.
  5. 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.
Como estudar com as listas
  • 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_state no scikit-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).
Convenções numéricas

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

  1. Quais são as duas partes da Inteligência Artificial?
  2. Defina o conceito de Aprendizagem de Máquina (Machine Learning).
  3. Quais são os 5 desafios que as empresas enfrentam ao implementar soluções baseadas em Inteligência Artificial?
  4. Descreva o conceito de “O que é Ciência de Dados”.
  5. Cite pelo menos 5 outros termos que atualmente estão relacionados ou são sinônimos de Ciência de Dados.
  6. Cite 3 exemplos de aplicações de Ciência de Dados.
  7. Cite pelo menos 3 áreas que compõem a área de Ciência de Dados.
  8. Quais são os 3 tipos de conhecimento exigidos de um profissional de Ciência de Dados?
  9. Quais são os 4 pilares de um Cientista de Dados?
  10. Cite as 6 etapas que formam o processo CRISP-DM.
  11. Descreva como é a estrutura tabular de dados estruturados.
  12. Cite 4 tipos de arquivos que não fazem parte de dados estruturados.
  13. Cite um produto ou serviço que utiliza IA e explique como ele funciona.

17.2.2 Questões conceituais e teóricas

  1. \((\star)\) Explique a hierarquia Dado–Informação–Conhecimento–Sabedoria (DIKW) (Ackoff 1989) usando como exemplo o registro de notas dos alunos de uma disciplina.
  2. \((\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.
  3. \((\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.
  4. \((\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.
  5. \((\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.
  6. \((\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.
  7. \((\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.
  8. \((\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?
  9. \((\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”?
  10. \((\star)\) Diferencie as abordagens simbólica, conexionista e estatística da IA, citando um exemplo histórico de cada.
  11. \((\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.
  12. \((\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).
  13. \((\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?
  14. \((\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

  1. \((\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).

    1. Quantos TiB o disco possui?
    2. Qual é a diferença percentual entre 1 TiB e 1 TB?
  2. \((\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
    1. Calcule a taxa de sobrevivência de cada hospital em cada estrato e a taxa agregada.
    2. Qual hospital parece melhor no agregado? E dentro de cada estrato? Explique o paradoxo (Simpson 1951).
    3. Calcule uma taxa padronizada atribuindo peso igual (50%) aos dois estratos.
  3. \((\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?

  4. \((\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)?

  5. \((\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

  1. Calcule o resultado das seguintes operações:
    1. \(5 + 3 \times 2\)
    2. \((10 - 3)^2\)
    3. \(16 \div 4 + 7\)
  2. Crie um vetor chamado numeros com os seguintes valores: 1, 3, 5, 7, 9. Em seguida:
    1. Multiplique todos os elementos do vetor por 2.
    2. Encontre a soma dos elementos do vetor.
  3. Usando o vetor numeros criado anteriormente:
    1. Retorne o terceiro elemento do vetor.
    2. Retorne todos os elementos maiores que 4.
  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”.
  5. Crie um data frame chamado dados com as seguintes colunas e dados:
    1. Nome: “Ana”, “Bruno”, “Carlos”, “Diana”
    2. Idade: 25, 30, 22, 28
    3. Sexo: “F”, “M”, “M”, “F”
  6. Usando o data frame dados:
    1. Calcule a média das idades.
    2. Encontre o valor mínimo e o máximo da coluna Idade.
  7. Carregue o data frame mtcars (disponível no R) e exiba as primeiras 6 linhas (utilize |>).
  8. Utilizando o dplyr, selecione apenas as colunas mpg (milhas por galão) e cyl (número de cilindros) do data frame mtcars.
  9. Usando o dplyr, filtre o data frame mtcars para mostrar apenas os carros com mpg maior que 20.
  10. Ordene o data frame mtcars pela coluna hp (horsepower) em ordem decrescente.
  11. Crie uma nova coluna no data frame mtcars chamada peso_relativo, que corresponde à razão entre wt (peso) e hp (horsepower).
  12. Agrupe o data frame mtcars pelo número de cilindros (cyl) e calcule a média de mpg para cada grupo.
  13. Adicione uma coluna chamada eficiencia no data frame mtcars, definida como mpg / wt. Em seguida, filtre para exibir apenas os carros cuja eficiência seja maior que 5.
  14. Utilize o summarize do dplyr para calcular:
    1. a média de mpg;
    2. o desvio padrão de hp.
  15. Crie um pipeline com o dplyr que:
    1. filtra o data frame mtcars para incluir apenas carros com mpg maior que 25;
    2. ordena os carros pela coluna hp em ordem crescente;
    3. retorna apenas as colunas mpg, hp e wt.

17.3.2 Questões conceituais e teóricas

  1. \((\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.
  2. \((\star)\) Diferencie vetor, matriz, array, lista, fator e data frame. Em que situação uma lista é preferível a um data frame?
  3. \((\star\star)\) Explique a regra da reciclagem do R. Qual é o resultado de 1:6 + c(10, 20)? E de 1:5 + c(10, 20)? Por que o segundo caso gera um aviso?
  4. \((\star\star)\) O que significa dizer que o R é uma linguagem vetorizada? Compare, em termos de legibilidade e desempenho, um laço for que soma os quadrados de 1:1e6 e a expressão sum((1:1e6)^2).
  5. \((\star)\) Qual a diferença entre NA, NULL, NaN e Inf? O que retornam mean(c(1, NA, 3)) e mean(c(1, NA, 3), na.rm = TRUE)?
  6. \((\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.
  7. \((\star)\) Qual a diferença entre o pipe nativo |> e o pipe %>% do pacote magrittr?
  8. \((\star\star)\) Por que é preferível usar solve(A, b) em vez de solve(A) %*% b para resolver um sistema linear?
  9. \((\star\star)\) Em uma junção left_join(x, y, by = "id"), o que acontece com o número de linhas de x se a chave id estiver duplicada em y? Ilustre com um exemplo pequeno.

17.3.3 Tarefas de programação

  1. \((\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 com A %*% x.
  2. \((\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 de iris usando sapply().
  3. \((\star\star)\) Usando dplyr e o conjunto mtcars, construa uma tabela com, para cada combinação de cyl e am (tipo de câmbio), o número de carros, a média e o desvio padrão de mpg, ordenada pela média decrescente.
  4. \((\star\star)\) Usando o conjunto penguins (pacote palmerpenguins (Horst, Hill, e Gorman 2020) ou datasets::penguins a partir do R 4.5):
    1. conte os valores ausentes por coluna;
    2. remova as linhas com ausência na massa corporal;
    3. calcule a massa corporal média por espécie e sexo;
    4. transforme o resultado para o formato largo, com uma coluna por sexo, usando pivot_wider().
  5. \((\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 com stopifnot(is.numeric(x)).
  6. \((\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. Use set.seed(2024).
  7. \((\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 modelo mpg ~ wt no mtcars. Compare os coeficientes com os de lm(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 / wt maior que 5.
  • 14. Média de mpg = 20,0906; desvio padrão de hp = 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 em 11 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

  1. Importe a biblioteca math e use a função sqrt() para calcular a raiz quadrada de 256.
  2. Utilize o módulo random para gerar um número aleatório entre 1 e 10.
  3. Escreva um laço for que imprime os números de 1 a 10.
  4. Utilize um laço while para imprimir os números de 10 até 1 em ordem decrescente.
  5. Crie um programa que pergunte ao usuário um número e determine se ele é par ou ímpar.
  6. Defina uma função saudacao() que recebe um nome como argumento e imprime "Olá, [nome]!".
  7. Escreva uma função maximo() que recebe dois números como argumentos e retorna o maior deles.
  8. Crie uma string "Python" e use slicing para obter a substring "thon".
  9. Inverta a string "Python" usando slicing.
  10. Crie uma lista com os números de 1 a 5 e adicione o número 6 ao final da lista.
  11. Remova o número 3 da lista anterior.
  12. Crie uma tupla com os números de 1 a 5 e tente alterar o valor do terceiro elemento para 10.
  13. 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.).
  14. Adicione um par chave-valor ao dicionário anterior: “Feriado” com o valor 0.
  15. Crie um conjunto com os números 1, 2, 3, 4 e 5 e adicione o número 6.
  16. Remova o número 3 do conjunto anterior.
  17. Escreva um programa que lê uma lista de números do usuário e imprime o maior e o menor número.
  18. Faça um programa que lê uma frase do usuário e conta quantas vezes aparece a letra “a”.
  19. Crie um programa que converte uma temperatura de Celsius para Fahrenheit.

17.4.2 Questões conceituais e teóricas

  1. \((\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ê?
  2. \((\star\star)\) Explique o que acontece no código abaixo e por que b também é alterada. Como fazer uma cópia independente?
a = [1, 2, 3]
b = a
a.append(4)
print(b)
  1. \((\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.
  2. \((\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 de list(range(2, 10, 3))?
  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.
  4. \((\star\star)\) Explique a diferença entre um array do NumPy e uma lista do Python quanto a tipo dos elementos, armazenamento em memória e operações vetorizadas (Harris et al. 2020).
  5. \((\star\star)\) O que é broadcasting no NumPy? Qual o formato (shape) do resultado de np.ones((3, 1)) + np.arange(4)?
  6. \((\star)\) Qual a diferença entre np.std(x) e pandas.Series(x).std()? Discuta o argumento ddof.
  7. \((\star)\) Para que servem os blocos try/except/finally? Dê um exemplo de leitura de arquivo que trata a exceção FileNotFoundError.
  8. \((\star\star)\) Explique os conceitos de classe, objeto, atributo e método. Por que o scikit-learn organiza os modelos como classes com métodos fit() e predict()?
  9. \((\star)\) Por que é recomendável usar ambientes virtuais (venv ou conda) em projetos de Ciência de Dados?

17.4.3 Tarefas de programação

  1. \((\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].
  2. \((\star)\) Escreva uma função fizzbuzz(n) que retorna uma lista de 1 a n, substituindo múltiplos de 3 por "Fizz", de 5 por "Buzz" e de ambos por "FizzBuzz".
  3. \((\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.
  4. \((\star\star)\) Crie uma classe ContaBancaria com atributos titular e saldo e métodos depositar(), sacar() (que levanta ValueError se o saldo for insuficiente) e __repr__().
  5. \((\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.
  6. \((\star\star)\) Com pandas, carregue o conjunto iris via seaborn.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?
  7. \((\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 = a não copia a lista, apenas cria outro nome para o mesmo objeto. Use b = a.copy() ou b = 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

  1. 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 chamado dados, através da função read_csv.
  2. Quantas características estão neste conjunto de dados, ou seja, quantas variáveis existem nessa base de dados?
  3. Quais são os nomes e tipos iniciais das características?
  4. Verifique a quantidade de dados faltantes nas colunas da base de dados.
  5. Remova a variável id usando a função drop.
  6. Utilizando a função describe, interprete a saída e descreva o que aconteceu com as variáveis da base de dados.
  7. Encontre os quantis 0; 0,25; 0,5; 0,75 e 1 da variável preco e interprete os resultados.
  8. Encontre a matriz de covariância das variáveis numéricas.
  9. Encontre a matriz de correlação das variáveis numéricas.
  10. Utilizando a biblioteca seaborn como sns e matplotlib.pyplot como plt, faça um heatmap (mapa de calor) das correlações entre as variáveis numéricas.
  11. Com as variáveis numéricas e utilizando a biblioteca matplotlib.pyplot como plt, faça gráficos de histogramas e boxplot para cada variável numérica.
  12. Com a variável ano, crie uma nova variável no DataFrame chamada idade_carro.
  13. Sabendo que a primeira parte de cada valor da variável nome é a marca do carro, crie uma nova variável chamada marca, 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

  1. 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

  1. \((\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.
  2. \((\star\star)\) A variável preco provavelmente é 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.
  3. \((\star\star)\) Identifique outliers em preco pela 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.
  4. \((\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.
  5. \((\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

  1. Explique a diferença entre dados estruturados e não estruturados. Dê um exemplo de cada.
  2. Suponha que você tenha um conjunto de dados com as seguintes colunas: idade, salário, departamento e anos_na_empresa. Descreva o processo para identificar e tratar valores ausentes.
  3. 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.
  4. Escreva uma função em Python que recebe uma lista de números e retorna a média e a mediana dos números.
  5. 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 dados vendas.csv.
  6. Explique o que é a Regressão Linear e como ela pode ser usada para prever valores futuros.
  7. Usando a biblioteca seaborn, crie um gráfico de dispersão que mostre a relação entre idade e salário, com a cor representando o departamento. 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 python ou no R; 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:

  1. idade: a idade do funcionário, variando entre 22 e 60 anos.
  2. salário: o salário anual do funcionário, variando entre 30.000 e 120.000 unidades monetárias.
  3. departamento: o departamento ao qual o funcionário pertence. Os departamentos possíveis são:
    • Sales
    • Marketing
    • HR
    • IT
    • Finance
  4. anos_na_empresa: o número de anos que o funcionário trabalha na empresa, variando entre 1 e 30 anos.
  5. 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

  1. \((\star)\) Refaça as questões 3, 5 e 7 em R, usando readr::read_csv(), dplyr e ggplot2.
  2. \((\star\star)\) Calcule a correlação de Pearson e a de Spearman entre anos_na_empresa e vendas. Os dois coeficientes contam a mesma história? Em que situação eles divergiriam?
  3. \((\star\star)\) Ajuste uma regressão linear simples de vendas em anos_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\)?
  4. \((\star\star)\) Construa um boxplot de salário por departamento e teste informalmente se as medianas parecem diferir. Que cuidados tomar ao comparar grupos com poucos funcionários?
  5. \((\star\star\star)\) Crie a variável vendas_por_ano = vendas / anos_na_empresa e 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

  1. \((\star)\) Qual a diferença entre Git e GitHub? Cite duas alternativas ao GitHub para hospedagem de repositórios.
  2. \((\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).
  3. \((\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?
  4. \((\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?
  5. \((\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?
  6. \((\star)\) Diferencie git fetch, git pull e git push.
  7. \((\star\star)\) Diferencie uma mesclagem fast-forward de uma mesclagem de três vias (three-way merge). Em que situação cada uma ocorre?
  8. \((\star\star)\) Compare git merge e git rebase. Enuncie a “regra de ouro do rebase” e explique por que ela existe.
  9. \((\star\star)\) Diferencie git revert, git reset --soft, git reset --hard e git restore. Qual deles é seguro para desfazer um commit que já foi enviado ao repositório remoto?
  10. \((\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.
  11. \((\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?
  12. \((\star)\) Explique o versionamento semântico (MAIOR.MENOR.CORREÇÃO). Partindo da versão 1.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?
  13. \((\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”.
  14. \((\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

  1. \((\star)\) Configure nome e e-mail no Git, crie um repositório local meu-projeto, adicione um README.md e faça o primeiro commit. Mostre a saída de git log --oneline.
  2. \((\star\star)\) No repositório anterior, crie o ramo analise-exploratoria, adicione um script aed.R, faça dois commits e mescle o ramo no ramo principal. Represente o grafo resultante com git log --oneline --graph --all.
  3. \((\star\star)\) Provoque um conflito de mesclagem: altere a mesma linha do README.md em dois ramos distintos e tente mesclá-los. Resolva o conflito manualmente e explique o significado dos marcadores <<<<<<<, ======= e >>>>>>>.
  4. \((\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.
  5. \((\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

  1. Crie um arquivo README.md usando 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.

  2. 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.
  3. 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.

  4. 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.

  5. 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, com mpg no eixo x e wt no eixo y, usando o conjunto de dados mtcars;
    • seja renderizado em PDF.
  6. Elabore um documento em RMarkdown que tenha uma estrutura de seções, com pelo menos três níveis de cabeçalhos (#, ##, ###).

  7. Crie um documento RMarkdown que contenha os seguintes elementos:

    • um bloco de código (chunk) que calcula a média da variável Sepal.Length do conjunto de dados iris;
    • após o chunk, um parágrafo explicando o que foi feito, mencionando a média calculada diretamente no texto usando r inline;
    • 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:

    1. Um bloco de código calcula a média.
    2. No parágrafo a seguir, use r inline para incorporar o resultado: “A média de Sepal.Length é …”.
    3. Outro bloco de código calcula o desvio padrão.
    4. No parágrafo subsequente, incorpore o desvio padrão no texto: “O desvio padrão de Sepal.Length é …”.

17.8.2 Questões conceituais e teóricas

  1. \((\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?
  2. \((\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.
  3. \((\star)\) Qual é o papel do Pandoc na renderização de um documento Quarto? Descreva o caminho .qmd \(\to\) .md \(\to\) HTML/PDF/DOCX.
  4. \((\star)\) Explique as opções de chunk echo, eval, include, warning, message e cache. Qual combinação usar para mostrar apenas o resultado de um gráfico, sem o código?
  5. \((\star\star)\) Quais são os riscos do uso de cache: true em um documento que lê dados de um arquivo que é atualizado periodicamente?
  6. \((\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}\).
  7. \((\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?
  8. \((\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.
  9. \((\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

  1. \((\star\star)\) Crie um documento Quarto com uma tabela gerada por código (knitr::kable() ou gt) contendo a média de cada variável numérica do iris por espécie, com legenda e rótulo tbl-, e faça referência a ela no texto.
  2. \((\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 .bib criado por você.
  3. \((\star\star\star)\) Crie um relatório parametrizado com um parâmetro especie que gera, para a espécie escolhida do penguins, um resumo numérico e um histograma da massa corporal. Renderize-o para as três espécies a partir de um único comando.
  4. \((\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 (mantendo eval: 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

  1. Utilize o conjunto de dados mtcars. Crie um gráfico de dispersão (scatter plot) mostrando a relação entre mpg (milhas por galão) e hp (cavalos de potência).
  2. 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).
  3. Com o resultado da questão 2, coloque as barras na horizontal, com percentual por categoria, tema minimalista e na tonalidade vermelha.
  4. 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.
  5. 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) usando facet_grid.
  6. Usando o conjunto de dados mtcars, crie um gráfico de dispersão de mpg versus hp, mas agora altere as cores dos pontos de acordo com o número de cilindros (cyl).
  7. Utilize o conjunto de dados faithful. Crie um histograma da duração das erupções (eruptions).
  8. 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.
Dica

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

  1. \((\star)\) Descreva os componentes da gramática dos gráficos: dados, mapeamentos estéticos, geometrias, estatísticas, escalas, sistemas de coordenadas, facetas e tema.
  2. \((\star)\) Explique a diferença entre ggplot(mtcars, aes(mpg, hp, colour = factor(cyl))) + geom_point() e ggplot(mtcars, aes(mpg, hp)) + geom_point(colour = "blue"). Por que aes(colour = "blue") não produz pontos azuis?
  3. \((\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.
  4. \((\star\star)\) Qual a diferença entre coord_cartesian(ylim = ...) e scale_y_continuous(limits = ...) quando aplicados a um boxplot? Qual delas pode alterar as estatísticas calculadas?
  5. \((\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.
  6. \((\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).
  7. \((\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

  1. \((\star)\) Número de classes. O conjunto mpg do ggplot2 tem \(n = 234\) carros, e a variável hwy tem amplitude 32 e intervalo interquartil 9. Calcule:
    1. o número de classes pela regra de Sturges, \(k = \lceil 1 + \log_2 n \rceil\);
    2. a largura de classe pela regra de Freedman–Diaconis, \(h = 2\,\text{IQR}\,n^{-1/3}\), e o número de classes correspondente.
  2. \((\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”?
  3. \((\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

  1. \((\star)\) Com o conjunto diamonds, faça um histograma de price e outro de log10(price). Descreva a forma das duas distribuições.
  2. \((\star\star)\) Com o diamonds, construa boxplots de price por cut. Em seguida, faça o mesmo controlando por carat (por exemplo, com price / carat). A conclusão sobre o efeito do corte muda? Discuta.
  3. \((\star\star)\) Com o penguins, faça um gráfico de dispersão de flipper_length_mm versus body_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 tema theme_minimal(). Salve-o com ggsave() em PNG com 300 dpi.
  4. \((\star\star)\) Com o mpg, crie um painel com facet_wrap(~ class) mostrando a relação entre displ e hwy. Que padrão aparece nos carros da classe 2seater?
  5. \((\star\star)\) Com o economics, faça um gráfico de linhas da taxa de desemprego (unemploy / pop) ao longo do tempo, destacando com annotate() um período de recessão de sua escolha.
  6. \((\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

  1. \((\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?
  2. \((\star)\) Diferencie Series e DataFrame no pandas. Qual a diferença entre .loc[] e .iloc[]?
  3. \((\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.
  4. \((\star\star)\) Explique por que a variância amostral usa o divisor \(n - 1\). O que o pandas e o NumPy usam por padrão?
  5. \((\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?
  6. \((\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?
  7. \((\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?
  8. \((\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

  1. \((\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. \]

  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\).

  3. \((\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.

  4. \((\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?

  5. \((\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.

  6. \((\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
    1. Calcule as frequências esperadas sob independência.
    2. Calcule a estatística \(\chi^2 = \sum (O - E)^2/E\) (sem correção de continuidade).
    3. Calcule o \(V\) de Cramér, \(V = \sqrt{\chi^2/(n\,(\min(r, c) - 1))}\), e interprete.
  7. \((\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

  1. \((\star)\) Carregue o conjunto tips com seaborn.load_dataset("tips") e use info(), describe() e value_counts() para descrever as variáveis. Classifique cada uma quanto ao tipo.
  2. \((\star\star)\) No tips, crie a variável pct_gorjeta = tip / total_bill e compare sua distribuição entre fumantes e não fumantes e entre os dias da semana com boxplots e groupby().
  3. \((\star\star)\) No penguins do seaborn, 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.
  4. \((\star\star)\) Construa, para o penguins, um pairplot colorido por espécie e um mapa de calor da matriz de correlação de Spearman. Qual par de variáveis é mais correlacionado?
  5. \((\star\star)\) Com pd.crosstab(), construa a tabela de contingência entre species e island do penguins e calcule o \(V\) de Cramér usando scipy.stats.chi2_contingency.
  6. \((\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 no diamonds (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

  1. \((\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?
  2. \((\star)\) Quais são os três pilares do storytelling com dados (contexto, visual e narrativa)? Descreva o papel de cada um.
  3. \((\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.
  4. \((\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.
  5. \((\star)\) O que é a razão dados-tinta (data-ink ratio) de Tufte (Tufte 1983)? O que é “lixo gráfico” (chartjunk)?
  6. \((\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?
  7. \((\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%.
  8. \((\star\star)\) Cite cinco formas de enganar com gráficos (Huff 1954; Cairo 2019) e, para cada uma, a correção adequada.
  9. \((\star)\) Por que as paletas de cores devem considerar pessoas com daltonismo? Cite uma paleta segura.
  10. \((\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

  1. \((\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.
  2. \((\star\star)\) Com o mtcars, construa um gráfico “antes” (padrão do ggplot2, com legenda, grade e cores para todas as categorias) e um gráfico “depois” que destaque apenas os carros com mpg > 25, com título declarativo, cor de destaque e texto direto no gráfico em vez de legenda.
  3. \((\star\star)\) Com o gapminder (pacote gapminder em R ou plotly.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.
  4. \((\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.
  5. \((\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

  1. Quais são os três principais conceitos do Machine Learning e como funciona cada um deles?

  2. O que é um modelo de Machine Learning?

  3. O que é um conjunto de treinamento?

  4. O que é um conjunto de teste?

  5. 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.

  6. Quais são as etapas do Processo de Aprendizagem de um Modelo?

  7. O que é underfitting e overfitting? Como podemos identificar esses problemas em um modelo de Machine Learning?

  8. Como podemos definir o erro total de previsão de um modelo?

  9. Qual a regra geral de um bom modelo?

  10. 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.

  11. 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.

  12. 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
  13. 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
  14. 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
Fórmulas de referência

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

  1. \((\star)\) Diferencie aprendizado supervisionado, não supervisionado e por reforço, dando um exemplo de cada.
  2. \((\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.
  3. \((\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).
  4. \((\star\star)\) Diferencie predição e inferência. Por que um modelo muito preciso pode ser pouco útil para inferência?
  5. \((\star)\) Diferencie métodos paramétricos e não paramétricos, citando dois exemplos de cada.
  6. \((\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)?
  7. \((\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?
  8. \((\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.
  9. \((\star\star)\) Explique a curva ROC e a AUC (Fawcett 2006). Qual a interpretação probabilística da AUC?
  10. \((\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

  1. \((\star)\) Para a matriz de confusão do exercício 12, calcule também a acurácia e a especificidade.

  2. \((\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.

  3. \((\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
    1. 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).
    2. Calcule a AUC como a proporção de pares (positivo, negativo) em que o positivo tem escore maior.
  4. \((\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

  1. \((\star\star)\) Em Python, carregue load_breast_cancer() do scikit-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 um Pipeline com StandardScaler e reporte a matriz de confusão, o classification_report e a AUC.
  2. \((\star\star)\) Refaça o exercício anterior em R com tidymodels ou caret (Kuhn 2008; Kuhn e Silge 2022).
  3. \((\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.
  4. \((\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

  1. \((\star)\) Descreva a estrutura de uma árvore de decisão: nó raiz, nós internos, ramos e folhas. Como uma nova observação é classificada?
  2. \((\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.
  3. \((\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).
  4. \((\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).
  5. \((\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\)?
  6. \((\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)\).
  7. \((\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.
  8. \((\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?
  9. \((\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\)?
  10. \((\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?
  11. \((\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

  1. \((\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.
  2. \((\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-)\).
    Para cada divisão, calcule o ganho de informação (entropia), a redução do índice de Gini e o erro de classificação ponderado dos filhos. Qual divisão deve ser escolhida?
  3. \((\star\star)\) Um atributo id assume 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 por id? Explique por que essa divisão é inútil para prever novas observações.
  4. \((\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

  1. \((\star)\) Em R, ajuste uma árvore com rpart ao conjunto iris, visualize-a com rpart.plot e escreva as regras de decisão em linguagem natural.
  2. \((\star\star)\) Em R, use o conjunto kyphosis (pacote rpart) para crescer uma árvore com cp = 0, examine a tabela printcp() e pode a árvore pela regra de um erro padrão. Compare o número de folhas antes e depois da poda.
  3. \((\star\star)\) Em Python, ajuste um DecisionTreeClassifier ao load_wine() com max_depth variando 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.
  4. \((\star\star)\) Em Python, use cost_complexity_pruning_path() no load_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.
  5. \((\star\star\star)\) Implemente em Python, do zero, uma função melhor_divisao(x, y) que, para uma variável contínua x e rótulos y, retorna o ponto de corte que maximiza a redução do índice de Gini. Teste-a na variável petal_length do iris.

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

  1. \((\star)\) O que é um método de conjunto (ensemble)? Diferencie bagging, boosting e stacking.
  2. \((\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?
  3. \((\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?
  4. \((\star\star)\) Qual a diferença entre bagging de árvores e floresta aleatória? Por que sortear um subconjunto de mtry variáveis em cada nó reduz a correlação entre as árvores? Quais são os valores usuais de mtry para classificação e regressão?
  5. \((\star\star)\) O que é o erro out-of-bag (OOB)? Por que ele pode substituir a validação cruzada em uma floresta aleatória?
  6. \((\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)?
  7. \((\star)\) Liste os principais hiperparâmetros de uma floresta aleatória e o efeito esperado de aumentar cada um deles.
  8. \((\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

  1. \((\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\%\).
  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?
  3. \((\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?
  4. \((\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

  1. \((\star\star)\) Em R, ajuste uma floresta com randomForest (Liaw e Wiener 2002) ao iris e reporte o erro OOB, a matriz de confusão OOB e o gráfico varImpPlot().
  2. \((\star\star)\) Em R, com ranger (Wright e Ziegler 2017), faça uma busca em grade de mtry e min.node.size no penguins (sem ausentes) usando o erro OOB como critério.
  3. \((\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 e ExtraTreesClassifier (Geurts, Ernst, e Wehenkel 2006).
  4. \((\star\star)\) Em Python, use warm_start=True para 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?
  5. \((\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:

  1. date: marca a data e a hora em que as medições foram realizadas.
  2. Temperature: refere-se à medida da temperatura ambiente registrada pelos sensores. Pode influenciar o conforto e o comportamento dos ocupantes no edifício.
  3. Humidity: mede o nível de umidade relativa no ambiente. A umidade pode afetar a percepção de conforto e a qualidade do ar.
  4. 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.
  5. 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.
  6. 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.
  7. 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.

17.15.2 Questões da disciplina

  1. Crie um Modelo de Árvore de Decisão para a base de dados acima utilizando a linguagem de programação R.
  2. Crie um Modelo de Árvore de Decisão para a base de dados acima utilizando a linguagem de programação python.
  3. 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.
  4. 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.
  5. Selecionando o melhor modelo de Árvore de Decisão, faça o tuning dos hiperparâmetros utilizando python.
  6. Crie um Modelo de Floresta Aleatória para a base de dados acima utilizando a linguagem de programação R.
  7. Crie um Modelo de Floresta Aleatória para a base de dados acima utilizando a linguagem de programação python.
  8. 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.
  9. 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.
  10. Selecionando o melhor modelo de Floresta Aleatória, faça o tuning dos hiperparâmetros utilizando python.
  11. 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

  1. \((\star\star)\) A variável date nã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.
  2. \((\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).
  3. \((\star\star)\) Verifique o balanceamento da variável Occupancy. Além da acurácia, reporte precisão, recall, F1, AUC e MCC.
  4. \((\star\star\star)\) Analise a importância das variáveis da floresta. Treine um modelo usando apenas a variável Light e 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

  1. \((\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?
  2. \((\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?
  3. \((\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?
  4. \((\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?
  5. \((\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).
  6. \((\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\)?
  7. \((\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.
  8. \((\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?
  9. \((\star\star)\) Como medir distâncias quando há variáveis categóricas e numéricas misturadas? Descreva a distância de Gower (Gower 1971).
  10. \((\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

  1. \((\star)\) Calcule as distâncias euclidiana, de Manhattan e de Chebyshev entre \(\mathbf{a} = (1, 2, 3)\) e \(\mathbf{b} = (4, 0, 3)\).

  2. \((\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
    1. Calcule a distância euclidiana de \(\mathbf{x}_0\) a cada ponto e ordene-os.
    2. Classifique \(\mathbf{x}_0\) com \(k = 1\), \(k = 3\) e \(k = 5\) por votação simples.
    3. Para \(k = 3\), refaça a votação com pesos \(1/d\).
  3. \((\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.

  4. \((\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

  1. \((\star\star)\) Em R, use o pacote class (função knn()) no iris, com padronização calculada apenas no treino, e escolha \(k\) por validação cruzada com caret::train().
  2. \((\star\star)\) Em Python, construa um Pipeline com StandardScaler e KNeighborsClassifier para o load_wine() e use GridSearchCV para escolher n_neighbors (1 a 30), weights (uniform, distance) e p (1, 2). Reporte a melhor combinação e a acurácia no teste.
  3. \((\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ê?
  4. \((\star\star)\) Use KNeighborsRegressor no conjunto load_diabetes() e trace o RMSE de validação cruzada em função de \(k\).
  5. \((\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 do KNeighborsClassifier no iris.
  6. \((\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

  1. \((\star)\) Explique a ideia de classificador de margem máxima. O que são os vetores de suporte?
  2. \((\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.
  3. \((\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. \]
  4. \((\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?
  5. \((\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\)?
  6. \((\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?
  7. \((\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).
  8. \((\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?
  9. \((\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?
  10. \((\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

  1. \((\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á.
  2. \((\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\).
    1. Argumente geometricamente que o hiperplano de margem máxima é a mediatriz do segmento que une os pontos.
    2. 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\).
    3. Calcule a margem \(2/\|\mathbf{w}\|\) e compare-a com a distância entre os pontos.
  3. \((\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?
  4. \((\star\star)\) Para \(\mathbf{x} = (1, 2)\) e \(\mathbf{z} = (2, 0)\), calcule:
    1. o kernel linear \(K(\mathbf{x}, \mathbf{z}) = \mathbf{x}^\top\mathbf{z}\);
    2. o kernel polinomial \(K(\mathbf{x}, \mathbf{z}) = (1 + \mathbf{x}^\top\mathbf{z})^2\);
    3. o kernel RBF com \(\gamma = 0{,}5\).
  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

  1. \((\star\star)\) Em R, com o pacote e1071 (Chang e Lin 2011), ajuste uma SVM linear e uma SVM RBF ao iris e use tune() para escolher \(C\) e \(\gamma\) por validação cruzada com 10 partes.
  2. \((\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.
  3. \((\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.
  4. \((\star\star)\) Em Python, ajuste uma SVM ao load_breast_cancer() com e sem StandardScaler dentro de um Pipeline. Compare as acurácias e explique a diferença.
  5. \((\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.

17.18.2 Questões da disciplina

  1. Crie um Modelo de SVM para a base de dados acima utilizando a linguagem de programação R.
  2. Crie um Modelo de SVM para a base de dados acima utilizando a linguagem de programação python.
  3. 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.
  4. 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.
  5. Selecionando o melhor modelo de SVM, faça o tuning dos hiperparâmetros utilizando python.
  6. Crie um Modelo de k-NN para a base de dados acima utilizando a linguagem de programação R.
  7. Crie um Modelo de k-NN para a base de dados acima utilizando a linguagem de programação python.
  8. 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.
  9. 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.
  10. Selecionando o melhor modelo de k-NN, faça o tuning dos hiperparâmetros utilizando python.
  11. Faça uma análise sobre os resultados encontrados, comparando os modelos de SVM e k-NN.

17.18.3 Questões complementares

  1. \((\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.
  2. \((\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.
  3. \((\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

  1. \((\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?
  2. \((\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?
  3. \((\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)\)?
  4. \((\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.
  5. \((\star\star)\) O que é multicolinearidade? Quais são seus efeitos sobre as estimativas e os erros padrão dos coeficientes? Como diagnosticá-la?
  6. \((\star\star)\) Por que a regressão polinomial ainda é um modelo linear? Qual é o risco de usar um polinômio de grau muito alto?
  7. \((\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?
  8. \((\star\star)\) Explique a interpretação geométrica de por que o Lasso produz coeficientes exatamente iguais a zero e o Ridge não.
  9. \((\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.
  10. \((\star)\) Como uma árvore de regressão faz previsões? Qual critério é usado para escolher as divisões?
  11. \((\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?
  12. \((\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

  1. \((\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 . \]

  2. \((\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}\).

  3. \((\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.

  4. \((\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
  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}\).

  6. \((\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.

  7. \((\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\).

  8. \((\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.

    1. Calcule a probabilidade de compra para \(x = 8\).
    2. Interprete a razão de chances \(e^{0{,}5}\).
    3. Para qual valor de \(x\) a probabilidade estimada é 0,5?
  9. \((\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

  1. \((\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).
  2. \((\star\star)\) Acrescente hp ao modelo anterior. Compare o \(R^2\) ajustado dos dois modelos e interprete o novo coeficiente de wt. Por que ele mudou?
  3. \((\star\star)\) Em R, faça os gráficos de diagnóstico de lm(price ~ carat, data = diamonds) e depois de lm(log(price) ~ log(carat), data = diamonds). Qual modelo atende melhor às suposições? Interprete o coeficiente do modelo log-log como elasticidade.
  4. \((\star\star)\) Em R, com glmnet (J. Friedman, Hastie, e Tibshirani 2010), ajuste Lasso e Ridge para prever mpg com todas as variáveis do mtcars. Use cv.glmnet() e compare lambda.min e lambda.1se. Quais variáveis o Lasso mantém?
  5. \((\star\star)\) Em Python, no fetch_california_housing(), compare LinearRegression, Ridge, Lasso, DecisionTreeRegressor, RandomForestRegressor e KNeighborsRegressor (com padronização quando necessário) pelo RMSE de validação cruzada com 5 partes. Apresente os resultados em uma tabela.
  6. \((\star\star)\) Em Python, ajuste uma LogisticRegression ao load_breast_cancer() e interprete as três variáveis com maior razão de chances (após padronização).
  7. \((\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 wt diminui porque parte dele era, na verdade, efeito de hp, 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

  1. \((\star)\) Diferencie aprendizado supervisionado e não supervisionado. Por que avaliar um agrupamento é mais difícil que avaliar um classificador?
  2. \((\star)\) Diferencie agrupamento particional, hierárquico, baseado em densidade e baseado em modelos, citando um algoritmo de cada tipo.
  3. \((\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.
  4. \((\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.
  5. \((\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}\)?
  6. \((\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).
  7. \((\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\).
  8. \((\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).
  9. \((\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)?
  10. \((\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

  1. \((\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)
    1. Usando a distância euclidiana ao quadrado, faça a primeira atribuição dos pontos aos grupos e calcule a inércia.
    2. Atualize os centroides.
    3. Continue as iterações até a convergência, registrando a inércia ao final de cada iteração.
  2. \((\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.

  3. \((\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.

  4. \((\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

  1. \((\star)\) Em R, aplique kmeans() às quatro variáveis numéricas padronizadas do iris com \(K = 3\) e nstart = 25. Compare os grupos obtidos com as espécies usando table().
  2. \((\star\star)\) Em R, com o pacote factoextra ou cluster, construa os gráficos do cotovelo e da silhueta média para \(K = 2, \ldots, 10\) no conjunto USArrests padronizado. Qual \(K\) você escolheria?
  3. \((\star\star)\) Em R, faça um agrupamento hierárquico do USArrests com hclust() (ligações completa e de Ward), desenhe os dendrogramas e corte-os em 4 grupos. Compare as partições com a do K-Means.
  4. \((\star\star)\) Em Python, use make_blobs e make_moons para mostrar um caso em que o K-Means funciona bem e outro em que ele falha. Aplique DBSCAN ao segundo caso.
  5. \((\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.
  6. \((\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.

17.21.2 Questões da disciplina

  1. Crie um Modelo de k-means para a base de dados acima utilizando a linguagem de programação R.
  2. 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

  1. \((\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?
  2. \((\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?
  3. \((\star\star)\) Por que a variável CustomerID não deve entrar no agrupamento? E como tratar a variável Gender?
  4. \((\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?
  5. \((\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.
  6. \((\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.
Requisitos obrigatórios
  • Todo o projeto deve estar em um repositório Git com histórico de commits de todos os integrantes, README.md explicativo e .gitignore adequado.
  • 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 renv no R ou requirements.txt no 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

  1. Um colega que nunca viu o projeto consegue clonar o repositório e reproduzir todos os resultados seguindo apenas o README.md?
  2. 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)?
  3. Alguma informação usada pelo modelo não estaria disponível no momento real da previsão?
  4. O modelo comete erros sistematicamente maiores para algum subgrupo da população?
  5. A principal conclusão do trabalho pode ser enunciada em uma única frase, compreensível para um gestor?