Pular para conteúdo

Matemática

Esta página tem duas partes: matemática discreta (lógica, conjuntos, relações, funções e estruturas algébricas — a base da computação) e, mais abaixo, estatística e probabilidade (a base da análise de dados). Em entrevistas, a primeira aparece em perguntas de lógica, estruturas de dados, bancos de dados e algoritmos; a segunda, em dados e machine learning.

Matemática discreta: por que importa

A matemática "contínua" (cálculo) estuda quantidades que variam sem saltos; a discreta estuda objetos separados e contáveis: valores verdadeiro/falso, conjuntos finitos, grafos, sequências. É a linguagem de:

Área da computação Conceito de matemática discreta
Programação (if, laços, condições) Lógica proposicional
Bancos de dados relacionais e SQL Conjuntos, relações, álgebra relacional, lógica de predicados
Estruturas de dados e algoritmos Funções, recursão, grafos, relações de ordem
Compiladores, protocolos, interfaces Máquinas de estados finitos, linguagens formais
Criptografia e códigos Estruturas algébricas (grupos), aritmética modular
Teoria da computação Funções computáveis, máquina de Turing

Lógica proposicional

Definição: proposição

Sentença declarativa que é verdadeira ou falsa (nunca as duas). "7 é primo" é uma proposição; "feche a porta" e "x > 3" (sem valor para x) não são.

Proposições se combinam com conectivos:

Conectivo Símbolo Leitura Em código Quando é verdadeiro
Negação ¬P não P !p / not p P é falso
Conjunção P ∧ Q P e Q p && q ambos verdadeiros
Disjunção P ∨ Q P ou Q (inclusivo) p \|\| q pelo menos um verdadeiro
Condicional P → Q se P, então Q !p \|\| q só é falso quando P é V e Q é F
Bicondicional P ↔ Q P se e somente se Q p == q P e Q têm o mesmo valor

Tabela-verdade do condicional e do bicondicional:

P Q P → Q P ↔ Q
V V V V
V F F F
F V V F
F F V V

Um condicional com antecedente falso é vacuamente verdadeiro ("se eu for rei, então..." não é violado por quem não é rei).

Classificação de fórmulas: tautologia (sempre verdadeira, como P ∨ ¬P), contradição (sempre falsa, como P ∧ ¬P) e contingência (depende dos valores). Duas fórmulas são equivalentes se têm a mesma tabela-verdade. As equivalências mais usadas:

Nome Equivalência
De Morgan ¬(P ∧ Q) ≡ ¬P ∨ ¬Q e ¬(P ∨ Q) ≡ ¬P ∧ ¬Q
Dupla negação ¬¬P ≡ P
Condicional P → Q ≡ ¬P ∨ Q
Contrapositiva P → Q ≡ ¬Q → ¬P (não equivale à recíproca Q → P nem à inversa ¬P → ¬Q)
Distributiva P ∧ (Q ∨ R) ≡ (P ∧ Q) ∨ (P ∧ R)

Na prática: simplificar condições (if (!(a && b)) ≡ if (!a || !b)) e entender por que um if aparentemente invertido está certo. Em SQL, a lógica é de três valores (verdadeiro, falso e desconhecido por causa do NULL), o que muda algumas dessas leis.

Argumentos e regras de inferência

Um argumento tem premissas e uma conclusão; é válido se for impossível as premissas serem verdadeiras e a conclusão falsa (validade é sobre a forma, não sobre a verdade do conteúdo). Regras de inferência básicas (⊢ = "conclui-se"):

Regra Forma Exemplo
Modus ponens (MP) P → Q, P ⊢ Q Se chove, a rua molha. Chove. ⊢ A rua molha
Modus tollens (MT) P → Q, ¬Q ⊢ ¬P Se o carro está no estacionamento, estou na faculdade. Não estou. ⊢ O carro não está
Silogismo hipotético (SH) P → Q, Q → R ⊢ P → R Encadear condicionais
Silogismo disjuntivo (SD) P ∨ Q, ¬P ⊢ Q Está dentro ou no pátio; não está no pátio ⊢ está dentro
Dilema construtivo (DC) P ∨ Q, P → R, Q → S ⊢ R ∨ S
Introdução/eliminação da conjunção A, B ⊢ A ∧ B / A ∧ B ⊢ A
Introdução da disjunção A ⊢ A ∨ B
Prova do condicional Supor P, derivar Q ⊢ P → Q Teorema da dedução
Redução ao absurdo (RAA) Supor A e derivar contradição ⊢ ¬A Base das provas por contradição

Falácias clássicas

Afirmar o consequente: "Se João está em casa, a porta está aberta. A porta está aberta. Logo João está em casa" — inválido (P → Q, Q ⊬ P). Negar o antecedente: P → Q, ¬P ⊬ ¬Q. Para validar uma forma, monte a tabela-verdade e procure uma linha com premissas verdadeiras e conclusão falsa.

from itertools import product

def valido(premissas, conclusao):
    """Um argumento é válido se não existe valoração com premissas V e conclusão F."""
    for p, q in product([True, False], repeat=2):
        if all(f(p, q) for f in premissas) and not conclusao(p, q):
            return False
    return True

implica = lambda a, b: (not a) or b
print(valido([lambda p, q: implica(p, q), lambda p, q: p], lambda p, q: q))      # modus ponens → True
print(valido([lambda p, q: implica(p, q), lambda p, q: q], lambda p, q: p))      # afirmar o consequente → False

Lógica de predicados

A lógica proposicional não consegue dizer "todo homem é mortal" e "Sócrates é homem, logo Sócrates é mortal", porque não enxerga o interior das sentenças. A lógica de predicados (de primeira ordem) acrescenta predicados (propriedades e relações, como Homem(x)), variáveis e quantificadores:

Quantificador Símbolo Leitura
Universal ∀x para todo x
Existencial ∃x existe algum x

∀x (Homem(x) → Mortal(x)), Homem(sócrates) ⊢ Mortal(sócrates). Negação: ¬∀x P(x) ≡ ∃x ¬P(x) ("nem todo" = "existe um que não") e ¬∃x P(x) ≡ ∀x ¬P(x). Em computação aparece em consultas SQL (EXISTS é ∃; "para todo" costuma virar NOT EXISTS ... NOT), em invariantes de programas e em especificações formais.

Conjuntos

Definição: conjunto

Coleção não ordenada de elementos distintos, escrita {1, 2, 3}. x ∈ A (pertence), A ⊆ B (subconjunto), ∅ (vazio), U (universo), |A| (cardinalidade, o número de elementos). Conjuntos numéricos: ℕ (naturais) ⊂ ℤ (inteiros) ⊂ ℚ (racionais) ⊂ ℝ (reais).

Operação Símbolo Significado SQL Python
União A ∪ B está em A ou B UNION a \| b
Interseção A ∩ B está em A e B INTERSECT a & b
Diferença A − B está em A e não em B EXCEPT / MINUS a - b
Complemento Aᶜ tudo em U que não está em A — u - a
Produto cartesiano A × B todos os pares (a, b) CROSS JOIN itertools.product(a, b)
Conjunto potência P(A) todos os subconjuntos de A (2ⁿ elementos) —

Propriedades: associativa, comutativa e distributiva de ∪ e ∩; ∅ é elemento neutro da união e nulo da interseção; leis de De Morgan valem também ((A ∪ B)ᶜ = Aᶜ ∩ Bᶜ). Um diagrama de Venn ajuda a visualizar. A cardinalidade de um produto é |A × B| = |A|·|B| (o que explica por que um CROSS JOIN cresce rápido).

Infinitos: um conjunto é enumerável se seus elementos podem ser listados (ℕ, ℤ, ℚ); Cantor mostrou, pelo argumento diagonal, que ℝ não é — existem "infinitos de tamanhos diferentes" (o mesmo argumento aparece na prova de que certos problemas não são computáveis). Paradoxos (Russell: "o conjunto de todos os conjuntos que não contêm a si mesmos"; Cantor; Burali-Forti) levaram à teoria axiomática de conjuntos.

Relações

Definição: relação binária

Subconjunto de um produto cartesiano A × B: um conjunto de pares (a, b). O domínio é o conjunto dos primeiros elementos, e a imagem, o dos segundos. É a base do modelo relacional: uma tabela é uma relação (um conjunto de tuplas).

Propriedades de uma relação R sobre um conjunto A:

Propriedade Definição Exemplo
Reflexiva a R a para todo a =, ≤, "tem o mesmo pai que"
Simétrica a R b ⇒ b R a =, "é irmão de"
Antissimétrica a R b e b R a ⇒ a = b ≤, ⊆
Transitiva a R b e b R c ⇒ a R c <, ≤, ⊆, "é ancestral de"
  • Relação de equivalência: reflexiva + simétrica + transitiva. Ela particiona o conjunto em classes de equivalência (grupos disjuntos que cobrem tudo). Exemplo: "tem o mesmo resto na divisão por 3". Aplicações: agrupar duplicados, union-find, componentes conexos.
  • Relação de ordem: reflexiva + antissimétrica + transitiva. Total (todos os pares são comparáveis, como ≤ nos inteiros) ou parcial (nem todos, como ⊆ ou "depende de" entre tarefas — base da ordenação topológica, de dependências de build e de schedulers).
  • Composição: R ∘ S encadeia relações (a se relaciona com b e b com c ⇒ a com c): é o que um JOIN faz.
  • Representação: por matriz (0/1) ou por grafo (nós e arestas) — a mesma ideia de matriz e lista de adjacência dos grafos.

Funções

Definição: função

Relação que associa cada elemento do domínio A a exatamente um elemento do contradomínio B (f: A → B). A imagem é o conjunto dos valores de fato atingidos. Em programação, uma função "pura" é isso: a mesma entrada produz sempre a mesma saída.

Tipo Significado Em computação
Injetora Entradas diferentes → saídas diferentes (sem colisão) Um bom hash ideal; um identificador único
Sobrejetora Todo elemento do contradomínio é atingido
Bijetora Injetora e sobrejetora: correspondência um-para-um Tem inversa — criptografia reversível, codificação/decodificação

Função composta (g ∘ f)(x) = g(f(x)) é o encadeamento de funções (pipelines, map seguido de map); a inversa f⁻¹ desfaz f (só existe se f for bijetora). Funções de hash não são injetoras (por isso há colisões) nem bijetoras.

Recursão: definir uma função em termos de si mesma, com um caso base e um passo recursivo (fatorial: 0! = 1, n! = n·(n−1)!). É a contraparte computacional da indução matemática e a base de muitos algoritmos (veja recursividade).

Computabilidade. Uma função é computável se um algoritmo a calcula, terminando, para qualquer entrada válida. Há problemas não computáveis: o mais famoso é o problema da parada (nenhum programa decide, para todo programa e entrada, se ele termina), provado por Turing em 1936. A Tese de Church-Turing diz que tudo o que é efetivamente calculável é calculável por uma máquina de Turing.

  • Máquina de estados finitos (autômato finito): conjunto de estados, entradas (alfabeto), função de transição (estado + entrada → próximo estado) e, nas máquinas de saída, uma função de saída. Modela circuitos sequenciais, analisadores léxicos, protocolos de rede, fluxos de pedido/estado e interfaces — e é equivalente às expressões regulares.
  • Máquina de Turing: um autômato com uma fita infinita de leitura e escrita; é o modelo teórico de computador (o que ela não calcula, nenhum computador calcula).
stateDiagram-v2
    [*] --> Criado
    Criado --> Pago: pagamento aprovado
    Criado --> Cancelado: cancelar
    Pago --> Enviado: despachar
    Enviado --> Entregue: confirmar entrega
    Entregue --> [*]
    Cancelado --> [*]

Estruturas algébricas

Uma estrutura algébrica é um conjunto munido de uma ou mais operações que obedecem a certas propriedades. A hierarquia mais usada em computação:

Estrutura Propriedades da operação ∗ Exemplo em computação
Magma Fechamento (a ∗ b está no conjunto)
Semigrupo + associativa Concatenação de listas não vazias
Monoide + elemento neutro Strings com concatenação (neutro: ""); inteiros com soma (0) ou produto (1)
Grupo + elemento inverso para todo elemento Inteiros com soma; rotações; aritmética modular na criptografia
Grupo abeliano + comutativa Inteiros com soma

Com duas operações (soma e produto) surgem anéis e corpos (como ℚ, ℝ e os corpos finitos usados em criptografia e códigos corretores de erro). O isomorfismo diz que dois sistemas com a mesma estrutura são "o mesmo" a menos de renomear elementos. Aplicação prática de monoides: se uma operação é associativa e tem neutro, ela pode ser dividida e executada em paralelo (map/reduce, somas parciais em clusters, reduce/fold) — a razão pela qual agregações distribuídas funcionam.

Como isso aparece em entrevistas

(Complemento do projeto.)

  • "Simplifique esta condição" → De Morgan, contrapositiva, tabela-verdade.
  • "Qual a diferença entre UNION e UNION ALL?" → conjunto (sem repetição) x multiconjunto.
  • "Uma tabela é um conjunto ou uma lista?" → no modelo relacional, um conjunto de tuplas (sem ordem nem duplicatas); o SQL na prática permite duplicatas.
  • "Por que um hash tem colisões?" → não é injetora (o domínio é maior que o contradomínio — princípio da casa dos pombos).
  • "Dá para detectar se um programa entra em laço infinito?" → não em geral (problema da parada).
  • "Modele o ciclo de vida de um pedido" → máquina de estados finitos.

Estatística e probabilidade

Estatística é o conjunto de técnicas para organizar, descrever, analisar e interpretar dados e tirar conclusões sob incerteza. É a base de análise de dados, machine learning e experimentos (por exemplo, decidir se um modelo novo é de fato melhor que o atual). Divide-se em três ramos:

flowchart LR
    E[Estatística] --> D[Descritiva<br/>resumir os dados]
    E --> P[Probabilidade<br/>medir a incerteza]
    E --> I[Inferência<br/>generalizar da amostra<br/>para a população]
    D --> D1[Posição, dispersão,<br/>gráficos, correlação]
    P --> P1[Eventos, Bayes,<br/>distribuições]
    I --> I1[Amostragem, IC,<br/>testes de hipótese]

Definição: população x amostra

População (N) é o conjunto de todos os indivíduos de interesse; amostra (n) é um subconjunto dela; censo é examinar toda a população. Quase sempre trabalhamos com amostras por custo, acesso ou prazo. Um valor calculado na população é um parâmetro; calculado na amostra é uma estatística.

Em projetos de dados a estatística aparece em todas as etapas: na análise exploratória (resumos e gráficos), no pré-processamento (valores ausentes, outliers, transformações — costuma ser a etapa mais demorada), na modelagem (base teórica dos modelos), e na avaliação (intervalos de confiança e testes de significância). Vale a frase atribuída a George Box: todos os modelos estão errados, mas alguns são úteis.

Estatística descritiva

Tipos de variáveis

Tipo Subtipo Exemplos Gráfico adequado
Qualitativa Nominal (sem ordem) cor dos olhos, fumante/não fumante Pizza, barras/colunas
Qualitativa Ordinal (com ordem) grau de instrução, estágio da doença Barras/colunas
Quantitativa Discreta (contável) número de filhos, de carros Barras, dispersão
Quantitativa Contínua (mensurável) peso, altura, salário Histograma, boxplot, linhas (série temporal)

Definição: variável dicotômica

Variável com só dois resultados possíveis (sucesso/fracasso), codificada como 0 e 1. É a base da distribuição de Bernoulli e da classificação binária.

Dados organizados em tabelas de frequência usam a frequência absoluta (contagem), relativa (proporção), absoluta acumulada e relativa acumulada; dados contínuos são agrupados em classes (intervalos) para formar o histograma.

Medidas de posição (tendência central)

Medida O que é Sensível a outliers?
Média aritmética soma / quantidade Sim
Média geométrica raiz n-ésima do produto (taxas, índices) Sim
Média harmônica n / soma dos inversos (razões, velocidades médias) Sim
Média ponderada soma(valor × peso) / soma(pesos) Sim
Mediana valor central dos dados ordenados Não (robusta)
Moda valor mais frequente (pode ser única, bimodal ou inexistente) Não

Relação entre as médias: aritmética ≥ geométrica ≥ harmônica (são iguais só quando todos os valores são iguais). Para o conjunto {1, 2, 3, 4, 5}: 3,00 ≥ 2,61 ≥ 2,19.

Mediana: ordene os dados; se n é ímpar, é o valor na posição (n+1)/2; se é par, é a média dos valores nas posições n/2 e n/2 + 1. Quando há muitos outliers (salários, tempos de resposta), a mediana representa melhor o "típico" do que a média.

Medidas separatrizes: dividem os dados ordenados em partes iguais. Quartis (Q1, Q2 = mediana, Q3) em quatro partes; percentis em cem (P25 = Q1, P50 = mediana, P75 = Q3). Percentis como P95 e P99 são usados em latência (veja SRE).

Assimetria: compara a forma da distribuição com a simetria da normal. Assimetria zero: simétrica (média ≈ mediana ≈ moda); positiva: cauda longa à direita (média > mediana); negativa: cauda à esquerda.

Medidas de dispersão

Medida Definição Observação
Amplitude máximo − mínimo Muito sensível a extremos
Variância média dos quadrados dos desvios em relação à média Em amostra, divide por n − 1 (e na população por N)
Desvio padrão raiz da variância Mesma unidade dos dados
Coeficiente de variação (CV) desvio padrão / média Relativa e sem unidade; abaixo de ~25% costuma indicar dados homogêneos

Em fórmulas (amostra de tamanho \(n\), média \(\bar{x}\)):

\[s^2 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n - 1} \qquad s = \sqrt{s^2} \qquad CV = \frac{s}{\bar{x}}\]

Exemplo (amostra {3, 4, 5, 6, 12}): média 6; variância \(= 50/4 = 12{,}5\); desvio padrão \(\approx 3{,}54\); CV \(\approx 59\%\) (dados heterogêneos).

Efeito de operar sobre todos os valores: somar uma constante desloca a média, a mediana e a moda, e não altera variância nem desvio padrão; multiplicar por K multiplica as medidas de posição e o desvio padrão por K, a variância por K² e não altera o CV.

Gráficos e correlação

  • Pizza: composição de um todo (poucas categorias). Barras/colunas: comparar categorias.
  • Histograma: distribuição de variável contínua (barras contíguas por classe).
  • Dispersão (scatter): relação entre duas variáveis numéricas. Linhas: evolução no tempo.
  • Boxplot (diagrama de caixas): resume mediana, Q1, Q3 e outliers; ótimo para comparar grupos.

Definição: correlação

Grau de relacionamento linear entre duas variáveis, de −1 (negativa perfeita) a +1 (positiva perfeita); 0 = nenhuma relação linear. Pearson mede relação linear entre variáveis contínuas; Spearman usa postos e serve para variáveis ordinais ou relações monotônicas. Para várias variáveis usa-se a matriz de correlação. Correlação não implica causalidade.

Variáveis muito correlacionadas entre si (multicolinearidade) podem prejudicar certos modelos.

import pandas as pd

df = pd.DataFrame({"idade": [45, 20, 25, 40, 34], "experiencia": [13, 2, 5, 10, 12]})
print(df.describe())              # contagem, média, desvio padrão, quartis, mín/máx
print(df.corr())                  # Pearson (padrão)
print(df.corr(method="spearman")) # Spearman

Probabilidade

Probabilidade mede a chance de um evento: um número entre 0 (impossível) e 1 (certo). Para resultados igualmente prováveis:

\[P(A) = \frac{\text{casos favoráveis}}{\text{casos possíveis}}\]

O complemento é \(P(\bar{A}) = 1 - P(A)\).

Conceito Significado Exemplo (dado)
Experimento aleatório Ação cujo resultado não se prevê, mas cujas possibilidades se conhecem Lançar o dado
Espaço amostral (S) Todos os resultados possíveis {1, 2, 3, 4, 5, 6}
Evento Subconjunto do espaço amostral "face par" = {2, 4, 6}
Mutuamente exclusivos Não ocorrem juntos (A ∩ B = ∅) par e ímpar
Independentes A ocorrência de um não altera a probabilidade do outro dois lançamentos

Axiomas de Kolmogorov: (1) \(0 \le P(A) \le 1\); (2) \(P(S) = 1\) e \(P(\varnothing) = 0\); (3) para eventos mutuamente exclusivos, \(P(A \cup B) = P(A) + P(B)\).

Regras úteis:

  • União: \(P(A \cup B) = P(A) + P(B) - P(A \cap B)\) — subtrai a interseção para não contá-la duas vezes. Ex.: tópico presente em um livro com 30%, em outro com 28%, e em ambos com 24% → 30 + 28 − 24 = 34%.
  • Probabilidade condicional: \(P(A \mid B) = \dfrac{P(A \cap B)}{P(B)}\) — o espaço amostral é reduzido pela informação B.
  • Lei da probabilidade total: \(P(A) = P(A \mid B)\,P(B) + P(A \mid \bar{B})\,P(\bar{B})\) — soma todos os caminhos até A.
  • Teorema de Bayes: \(P(B \mid A) = \dfrac{P(A \mid B)\,P(B)}{P(A)}\) — inverte a condição.

Definição: teorema de Bayes

Atualiza a probabilidade de uma causa depois de observar um efeito. Exemplo: 80% da turma é de homens; 40% dos homens e 20% das mulheres falam inglês fluente. Dado que um aluno é fluente, a probabilidade de ser homem é 0,8·0,4 / (0,8·0,4 + 0,2·0,2) = 0,32 / 0,36 ≈ 89%. É a base do classificador Naive Bayes (Machine Learning).

Variáveis aleatórias e distribuições

Uma variável aleatória associa números aos resultados de um experimento; é discreta (valores contáveis) ou contínua (intervalo de reais). Sua distribuição de probabilidade diz com que probabilidade cada valor ocorre; o valor esperado é a média e a variância mede a dispersão. Na discreta usa-se a função massa de probabilidade; na contínua, a função densidade (probabilidade = área sob a curva, não o valor num ponto); a função de distribuição acumulada dá P(X ≤ x).

Distribuição Tipo Modela Média Variância Exemplo
Bernoulli(p) Discreta Uma tentativa, sucesso ou fracasso p p(1−p) Um clique converteu?
Binomial(n, p) Discreta Nº de sucessos em n tentativas independentes np np(1−p) Chutar 20 questões de 5 alternativas
Poisson(λ) Discreta Nº de ocorrências num intervalo λ λ Acidentes por hora, requisições por segundo
Uniforme(a, b) Contínua Todos os valores equiprováveis (a+b)/2 (b−a)²/12 Corrente medida entre 0 e 10 mA
Exponencial(λ) Contínua Tempo até um evento 1/λ 1/λ² Tempo de espera, vida útil
Normal(μ, σ²) Contínua Fenômenos com valores em torno de uma média μ σ² Altura, erros de medição

A Bernoulli é a Binomial com n = 1. Na Poisson, média e variância são iguais.

Distribuição normal: curva em sino definida por média μ e desvio padrão σ. A regra empírica: cerca de 68% dos valores ficam a 1 desvio da média, 95% a 2 e 99,7% a 3. Para calcular probabilidades padroniza-se o valor: \(Z = \dfrac{X - \mu}{\sigma}\) (normal padrão: média 0, desvio 1). Quantis úteis: 1,64 (90%), 1,96 (95%) e 2,58 (99%).

from scipy import stats

# Binomial: probabilidade de acertar exatamente 6 de 20 questões chutando (p = 0,2)
print(stats.binom.pmf(6, n=20, p=0.2))               # ≈ 0,109

# Poisson: P(pelo menos 2 acidentes em 2 h) com média de 3 por hora (λ = 6)
print(1 - stats.poisson.cdf(1, mu=6))                # ≈ 0,983

# Exponencial com média de 10 min: P(espera < 12 min)
print(stats.expon.cdf(12, scale=10))                 # ≈ 0,699

# Normal(70, 5): P(60 < peso < 80) — cerca de 95%
print(stats.norm.cdf(80, 70, 5) - stats.norm.cdf(60, 70, 5))  # ≈ 0,954

Em ciência de dados, conhecer a distribuição ajuda a detectar outliers (observações muito improváveis), a escolher algoritmos e a avaliar a distribuição dos erros do modelo.

Inferência estatística

Amostragem

Amostragem é selecionar uma amostra da população para estimar um parâmetro-alvo. A diferença entre o resultado da amostra e o da população é o erro amostral, que tem duas fontes: o viés de seleção (o método distorce a amostra) e o erro de amostragem (a aleatoriedade natural do sorteio).

Definição: teorema central do limite (TCL)

Para amostras grandes (regra prática: n > 30), a distribuição das médias amostrais se aproxima de uma normal, mesmo que os dados originais não sejam normais, centrada na média da população e com desvio padrão menor (\(\sigma/\sqrt{n}\), o erro padrão). É o que sustenta intervalos de confiança e vários testes.

Amostragem Como funciona Quando serve
Aleatória simples Todos têm a mesma chance, com ou sem reposição Simples; exige cadastro da população
Sistemática Sorteia a primeira posição e pega 1 a cada k elementos (k = N/n) População ordenada e homogênea
Estratificada Divide em estratos homogêneos e sorteia em cada um, proporcionalmente População heterogênea. É o que o stratify=y do train_test_split faz para manter a proporção de classes
Por conglomerados Sorteia grupos (escolas, filiais) e estuda todos dentro deles Praticidade e custo
Não probabilísticas: conveniência, cotas, intencional, voluntária Escolha subjetiva do pesquisador ou do participante Quando não há alternativa; não permitem medir o erro amostral

A qualidade dos dados importa mais do que a quantidade.

Reamostragem

Com uma única amostra há uma única estimativa; para medir sua incerteza, repete-se o cálculo em várias subamostras:

  • Bootstrap: sorteia subamostras com reposição da própria amostra; útil com amostras pequenas. As observações não sorteadas (out-of-bag) podem servir de teste.
  • Validação cruzada k-fold: divide os dados em K partes; treina em K−1 e testa em 1, K vezes; cada observação é teste uma vez e treino K−1 vezes (K = 3, 5 ou 10). Detalhes no contexto de classificação em Machine Learning.

Intervalo de confiança

Definição: intervalo de confiança (IC)

Faixa de valores plausíveis para um parâmetro da população, calculada a partir da amostra, com um nível de confiança (em geral 95%). Fórmula para a média: \(\bar{x} \pm z_{\alpha/2}\,\dfrac{s}{\sqrt{n}}\). Exemplo: média 50, desvio 10, \(n = 100\), 95% → \(50 \pm 1{,}96 \times 1 \approx (48{,}0;\ 52{,}0)\).

A interpretação correta: se repetíssemos o procedimento muitas vezes, cerca de 95% dos intervalos construídos conteriam o valor verdadeiro. Não significa "95% de chance de o parâmetro estar neste intervalo". Em machine learning, o IC sobre as métricas de validação cruzada mostra se a diferença entre dois modelos é real ou pode ser acaso:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier

X, y = load_iris(return_X_y=True)
scores = cross_val_score(DecisionTreeClassifier(random_state=7), X, y, cv=10)
media, erro_padrao = scores.mean(), scores.std(ddof=1) / np.sqrt(len(scores))
print(f"acurácia = {media:.3f}, IC 95% ≈ ({media - 1.96*erro_padrao:.3f}, {media + 1.96*erro_padrao:.3f})")

Modelagem: panorama

Muitas perguntas de negócio viram um destes problemas:

Problema Saída Exemplo Métrica típica
Classificação Categoria Conceder ou não crédito Acurácia (taxa de acerto), precisão, recall, F1
Regressão Número contínuo Prever o preço de um imóvel Erro entre previsto e real (MAE, RMSE)

Algoritmos comuns: KNN (classifica pela maioria dos k vizinhos mais próximos), árvore de decisão, Naive Bayes, SVM, regressão linear (regressão) e regressão logística (classificação, apesar do nome). Vale o teorema "não existe almoço grátis": nenhum algoritmo é melhor em todos os problemas, então experimenta-se e compara-se de forma justa, o que leva ao tema seguinte.

Experimentação contínua e testes de hipótese

Antes de implantar um modelo novo, é preciso saber se ele melhora o atual com significância estatística e não por sorte. Isso é feito com testes de hipótese.

Definição: hipótese nula e alternativa

H₀ (nula): não há efeito nem diferença (por exemplo, modelo A e modelo B têm a mesma acurácia). H₁ (alternativa): há efeito (o modelo A é melhor). O teste decide se os dados são tão extremos que H₀ se torna improvável.

Passos: (1) formular H₀ e H₁; (2) coletar as métricas dos dois modelos em vários conjuntos de teste (por exemplo, via validação cruzada); (3) aplicar o teste estatístico adequado; (4) rejeitar ou não rejeitar H₀.

Terminologia

A fonte fala em "aceitar a hipótese nula". O mais correto é "não rejeitar": falta de evidência para a diferença não prova que os modelos sejam iguais.

Erros, significância e p-valor

H₀ é verdadeira H₀ é falsa
Rejeita H₀ Erro tipo I (α): "falso positivo" — conclui que há diferença onde não há Acerto (poder do teste)
Não rejeita H₀ Acerto Erro tipo II (β): "falso negativo" — perde uma diferença real
  • Nível de significância (α): probabilidade máxima aceita de erro tipo I; costuma ser 5% (às vezes 1% ou 10%).
  • p-valor: probabilidade de obter um resultado tão extremo quanto o observado se H₀ fosse verdadeira. Se p ≤ α, rejeita-se H₀ (há significância estatística). Um p de 0,048 com α = 5% passa, mas por pouco — a evidência é fraca.
  • O p-valor não é a probabilidade de H₀ ser verdadeira, nem diz o tamanho do efeito.

Pressupostos e escolha do teste

Testes paramétricos assumem distribuição conhecida (em geral normal) e variâncias semelhantes; testes não paramétricos não assumem a distribuição (usam postos) e valem para amostras pequenas ou não normais.

Pressuposto Como verificar Interpretação
Normalidade Shapiro-Wilk (bom para n < 50) ou Kolmogorov-Smirnov p > α → não rejeita normalidade
Homocedasticidade (variâncias iguais entre grupos) Teste de Levene p > α → variâncias homogêneas

Nota sobre o Kolmogorov-Smirnov

Ao usar scipy.stats.kstest(dados, "norm") sem informar média e desvio, os dados são comparados com a normal padrão (média 0, desvio 1) e quase sempre "reprovam". Padronize os dados antes ou informe os parâmetros; para amostras pequenas, prefira o Shapiro-Wilk.

flowchart TD
    Q{Quantos grupos<br/>comparar?} -->|2| N2{Dados normais e<br/>variâncias iguais?}
    Q -->|3 ou mais| N3{Dados normais e<br/>variâncias iguais?}
    N2 -->|sim| T[Teste t<br/>independente: ttest_ind<br/>pareado: ttest_rel]
    N2 -->|não| MW[Mann-Whitney<br/>pareado: Wilcoxon]
    N3 -->|sim| AN[ANOVA<br/>depois, Tukey para<br/>saber quais pares diferem]
    N3 -->|não| KW[Kruskal-Wallis]
Teste Para quê
t de Student Comparar a média de 2 grupos (modelos); use a versão pareada se ambos foram avaliados nos mesmos conjuntos de teste
ANOVA Comparar as médias de 3 ou mais grupos
Tukey (pós-teste) Após uma ANOVA significativa, mostra quais pares diferem
Mann-Whitney Alternativa não paramétrica ao t (2 grupos independentes)
Wilcoxon (postos sinalizados) Alternativa não paramétrica ao t pareado
Kruskal-Wallis Alternativa não paramétrica à ANOVA (3 ou mais)
from scipy import stats

acc_a = [0.81, 0.79, 0.84, 0.80, 0.82, 0.78, 0.83, 0.81, 0.80, 0.82]
acc_b = [0.88, 0.90, 0.87, 0.91, 0.89, 0.90, 0.88, 0.92, 0.89, 0.90]

print(stats.shapiro(acc_a).pvalue, stats.shapiro(acc_b).pvalue)  # normalidade
print(stats.levene(acc_a, acc_b).pvalue)                         # homocedasticidade
res = stats.ttest_ind(acc_a, acc_b)                              # use ttest_rel se pareado
print(res.pvalue)                                                # p ≤ 0,05 → rejeita H0

Tamanho do efeito

Significância estatística responde "a diferença existe?"; o tamanho do efeito responde "quão grande ela é?". Com amostras enormes, diferenças minúsculas ficam significativas sem relevância prática. A medida mais usada é o d de Cohen: (média A − média B) / desvio padrão combinado; por convenção, 0,2 é pequeno, 0,5 médio e 0,8 grande — sempre interpretados no contexto do negócio.

Como isso aparece em entrevistas

(Complemento do projeto; não está no livro-fonte.)

  • Média x mediana: use a mediana quando há outliers ou distribuição assimétrica (salário, latência).
  • Desvio padrão x variância: o desvio está na mesma unidade dos dados; a variância é o quadrado dele.
  • Correlação x causalidade: correlação mede relação linear, não prova que uma variável causa a outra.
  • O que é um p-valor? A probabilidade de ver um resultado tão extremo se a hipótese nula fosse verdadeira.
  • Erro tipo I x tipo II: falso positivo x falso negativo; α controla o primeiro.
  • Por que o TCL importa? Permite inferência sobre médias mesmo sem normalidade dos dados originais.
  • Como saber se o modelo B é melhor que o A? Validação cruzada, depois teste t pareado (ou Wilcoxon), com intervalo de confiança e tamanho do efeito.
  • Teste A/B: a mesma lógica de hipótese, com grupos de usuários em vez de modelos.