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 ∘ Sencadeia relações (a se relaciona com b e b com c ⇒ a com c): é o que umJOINfaz. - 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
UNIONeUNION 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}\)):
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:
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.