Revisão integrada
Nove paradas, cada uma um exercício que liga a análise exploratória à probabilidade, para rodar no navegador
Cada tópico do mapa mora de um lado: análise exploratória à esquerda, probabilidade à direita. As pontes ligam os dois lados, e aqui cada ponte vira um exercício resolvido por dois caminhos: a rota dos dados (pandas) e a rota da probabilidade (fórmula ou modelo). Quando os dois caminhos dão o mesmo número, a ponte está entendida.
A base é o Titanic da Aula 4. Esta célula carrega os dados e prepara as variáveis qualitativas como na aula. Comece por ela: clique em Run Code. Depois, mude o código e rode de novo para explorar.
1 O tipo da variável decide a ferramenta
A ponte. Antes de qualquer conta, o tipo da variável escolhe o resumo. E uma quantitativa discreta nos dados é, no modelo, uma variável aleatória discreta. Tópicos: Tipos de variáveis · Categorias e ordem · Tabela de frequências · Medidas de posição · V.a. e distribuição.
Na Aula 3, antes de qualquer conta, classificamos as variáveis: o tipo decide a ferramenta. Qualitativa pede contagem e tabela; quantitativa contínua pede média, mediana e quartis; quantitativa discreta também pode ser contada valor a valor, e essa tabela, na parada 7, vira uma distribuição de probabilidade.
Exercício 1.1 rota dos dados
Classifique as variáveis em 'nominal', 'ordinal', 'discreta' ou 'continua'. Pclass é a classe da passagem, Fare é a tarifa, SibSp é o número de irmãos ou cônjuges a bordo.
Classe da passagem é categoria com ordem; tarifa é medida; número de irmãos vem de contagem.
tipos = {'Pclass': 'ordinal', 'Fare': 'continua', 'SibSp': 'discreta', 'Sex': 'nominal'}
tiposExercício 1.2 rota dos dados
Pclass é ordinal: calcule as frequências relativas na ordem natural das classes (1st, 2nd, 3rd), e não da mais para a menos frequente.
O argumento que controla a ordenação por frequência é sort.
freq_classe = dados['Pclass'].value_counts(normalize=True, sort=False)
freq_classeExercício 1.3 rota dos dados
Fare é contínua e tem algumas tarifas muito altas. Calcule o resumo de posição que não é puxado por elas.
Média é puxada pelos valores extremos; a mediana não.
mediana_tarifa = dados['Fare'].median()
mediana_tarifaExercício 1.4 rota dos dados
SibSp é discreta: faça a tabela de frequências relativas ordenada pelo valor (0, 1, 2, …).
value_counts ordena pela frequência; para ordenar pelo valor, use o método que ordena o índice.
fr_sibsp = dados['SibSp'].value_counts(normalize=True).sort_index()
fr_sibsp
Pergunta para a turma: Por que não faz sentido calcular a média de Pclass, mesmo que ela venha como 1, 2 e 3 no arquivo?
Porque é qualitativa ordinal: os números só dizem a ordem, não medem nada. Uma classe média de 2,31 não tem interpretação. Para ela, o resumo certo é a tabela de frequências na ordem natural, como no Exercício 1.2.
2 Contar é estimar probabilidade
A ponte. A frequência relativa de um rótulo estima a probabilidade do evento, e os filtros com & e | são a interseção e a união. Tópicos: Tabela de frequências · Filtrar linhas · Eventos e regras.
A frequência relativa de um rótulo é a nossa estimativa da probabilidade do evento (Aula 2). E as regras da probabilidade valem para essas frequências: o complementar é “1 menos”, e a união soma e desconta a interseção. Nos filtros do pandas, & é a interseção e | é a união.
Exercício 2.1 rota dos dados
Calcule \(P(\text{3ª classe})\) contando.
value_counts(normalize=True) e depois o rótulo entre colchetes.
p_3a = dados['Pclass'].value_counts(normalize=True)['3rd']
p_3aExercício 2.2 rota da probabilidade
Pela regra do complementar, calcule \(P(\text{não ser da 3ª classe})\) sem olhar os dados de novo.
\(P(A^c) = 1 - P(A)\).
p_nao_3a = 1 - p_3a
p_nao_3aExercício 2.3 rota dos dados
Confira pelos dados: a média de uma condição (True/False) é a proporção de True. Complete o operador para “não é da 3ª classe”.
Deve dar exatamente o número do Exercício 2.2.
p_nao_3a_dados = (dados['Pclass'] != '3rd').mean()
p_nao_3a_dadosExercício 2.4 rota da probabilidade
Pela regra da união, calcule \(P(\text{mulher} \cup \text{1ª classe}) = P(F) + P(\text{1ª}) - P(F \cap \text{1ª})\). A interseção sai da tabela cruzada com proporções do total.
Com normalize=True, cada casela da tabela é uma probabilidade conjunta.
p_f = dados['Sex'].value_counts(normalize=True)['female']
p_1a = dados['Pclass'].value_counts(normalize=True)['1st']
p_f_e_1a = pd.crosstab(dados['Sex'], dados['Pclass'], normalize=True).loc['female', '1st']
p_f_ou_1a = p_f + p_1a - p_f_e_1a
p_f_ou_1aExercício 2.5 rota dos dados
Agora pelos dados: filtre quem é mulher ou da 1ª classe e calcule a proporção.
& é “e” (interseção); | é “ou” (união).
p_f_ou_1a_dados = ((dados['Sex'] == 'female') | (dados['Pclass'] == '1st')).mean()
p_f_ou_1a_dadosPergunta para a turma: Por que a regra da união subtrai \(P(F \cap \text{1ª})\)?
Porque as mulheres da 1ª classe entram duas vezes na soma, uma em \(P(F)\) e outra em \(P(\text{1ª})\). Tirando a interseção uma vez, cada passageira é contada uma vez só. O filtro com | faz isso automaticamente.
3 Condicionar é filtrar
A ponte. P(A | B) olha só para quem está em B. Nos dados, isso é filtrar as linhas de B ou usar crosstab com normalize=‘index’. Tópicos: Filtrar linhas · Tabela cruzada · Prob. condicional.
\(P(A \mid B)\) é a probabilidade de \(A\) olhando só para quem está em \(B\). Condicionar é reduzir o espaço amostral, e nos dados isso é exatamente filtrar as linhas. Vamos calcular \(P(\text{sobreviver} \mid \text{1ª classe})\) de três jeitos; os três têm de dar o mesmo número.
Exercício 3.1 rota dos dados
Jeito 1, filtrando: fique só com as linhas da 1ª classe (todas as colunas) e calcule a proporção de sobreviventes.
dados.loc[condição, :].
primeira = dados.loc[dados['Pclass'] == '1st', :]
p_s_dado_1a = primeira['Survived'].value_counts(normalize=True)['Yes']
p_s_dado_1aExercício 3.2 rota dos dados
Jeito 2, tabela cruzada: com a classe nas linhas, use as proporções dentro de cada linha.
'index' divide pelo total da linha; 'columns', pelo total da coluna.
tab = pd.crosstab(dados['Pclass'], dados['Survived'], normalize='index')
p_s_dado_1a_tab = tab.loc['1st', 'Yes']
p_s_dado_1a_tabExercício 3.3 rota da probabilidade
Jeito 3, definição da Aula 2: \(P(S \mid \text{1ª}) = \dfrac{P(S \cap \text{1ª})}{P(\text{1ª})}\).
Numerador: a interseção. Denominador: a probabilidade da condição.
conjunta = pd.crosstab(dados['Pclass'], dados['Survived'], normalize=True)
p_s_e_1a = conjunta.loc['1st', 'Yes']
p_1a = conjunta.loc['1st'].sum()
p_s_dado_1a_def = p_s_e_1a / p_1a
p_s_dado_1a_defPergunta para a turma: Qual a diferença entre \(P(S \mid \text{1ª})\) e \(P(S \cap \text{1ª})\)?
\(P(S \cap \text{1ª}) = 0,153\) é a fração de todos os passageiros que são da 1ª classe e sobreviveram. \(P(S \mid \text{1ª}) = 0,630\) é a fração de sobreviventes entre os da 1ª classe. A condicional muda o denominador: divide só pelo grupo da condição.
4 Independência se vê na tabela
A ponte. Eventos independentes: saber B não muda a chance de A. Na tabela cruzada, todas as linhas ficam iguais à linha All. Tópicos: Tabela cruzada · Independência · Eventos e regras.
Dois eventos são independentes quando saber um não muda a chance do outro: \(P(A \mid B) = P(A)\), ou, de forma equivalente, \(P(A \cap B) = P(A)\,P(B)\). Na tabela cruzada com normalize='index' e margens, isso se vê de olho: as linhas ficam iguais à linha All.
Exercício 4.1 rota dos dados
Monte a tabela da classe (linhas) por sobrevivência (colunas), com proporções dentro de cada linha e com a linha de margem All. Guarde \(P(S \mid \text{3ª})\).
O argumento que acrescenta os totais é margins.
tab_classe = pd.crosstab(dados['Pclass'], dados['Survived'], normalize='index', margins=True)
p_s_dado_3a = tab_classe.loc['3rd', 'Yes']
p_s_dado_3aExercício 4.2 as duas rotas
A linha All dá \(P(S)\). Compare com \(P(S \mid \text{3ª})\) e responda em texto: classe e sobrevivência são 'independentes' ou 'dependentes'?
Olhe os dois números impressos: saber que o passageiro é da 3ª classe muda a chance de sobreviver?
p_s = tab_classe.loc['All', 'Yes']
print(p_s_dado_3a, p_s)
resposta_4_2 = 'dependentes'
resposta_4_2Exercício 4.3 rota da probabilidade
Agora pela regra do produto, com sexo: se fossem independentes, \(P(S \cap F)\) seria igual a \(P(S)\,P(F)\). Calcule a diferença entre os dois lados.
Uma diferença perto de zero indicaria independência.
conj_sexo = pd.crosstab(dados['Sex'], dados['Survived'], normalize=True)
p_s_e_f = conj_sexo.loc['female', 'Yes']
p_f = conj_sexo.loc['female'].sum()
diferenca = p_s_e_f - p_s * p_f
diferencaPergunta para a turma: “Sobreviveu” e “não sobreviveu” são eventos disjuntos. Eles são independentes?
Não. Disjuntos não acontecem juntos, então \(P(S \cap S^c) = 0\), mas \(P(S)\,P(S^c) = 0,384 \times 0,616 \neq 0\). Saber que um aconteceu diz tudo sobre o outro (o outro não aconteceu): isso é o contrário de independência.
5 Inverter a condicional: Bayes e o classificador
A ponte. normalize=‘columns’ dá a condicional invertida. O Teorema de Bayes faz a mesma troca pela fórmula, e o classificador guarda a decisão numa coluna nova, avaliada com outro crosstab. Tópicos: Tabela cruzada · Teorema de Bayes · Prob. total e árvore · Classificador (Titanic) · Criar colunas.
\(P(S \mid \text{1ª})\) e \(P(\text{1ª} \mid S)\) são perguntas diferentes. Na tabela cruzada, trocar 'index' por 'columns' troca a pergunta; o Teorema de Bayes faz a mesma troca pela fórmula. Na Aula 4, essa conta virou um classificador, cuja decisão vai para uma coluna nova e é avaliada com outra tabela cruzada, a matriz de confusão.
Exercício 5.1 rota dos dados
Pelos dados: entre os sobreviventes, qual a proporção da 1ª classe? Isso é \(P(\text{1ª} \mid S)\).
Dentro de cada coluna: 'columns'.
p_1a_dado_s = pd.crosstab(dados['Pclass'], dados['Survived'], normalize='columns').loc['1st', 'Yes']
p_1a_dado_sExercício 5.2 rota da probabilidade
Pela probabilidade: use o Teorema de Bayes para calcular \(P(S \mid \text{1ª}) = \dfrac{P(\text{1ª} \mid S)\,P(S)}{P(\text{1ª})}\).
Compare com a parada 3: tem de dar o mesmo número.
p_s = dados['Survived'].value_counts(normalize=True)['Yes']
p_1a = dados['Pclass'].value_counts(normalize=True)['1st']
p_s_dado_1a_bayes = p_1a_dado_s * p_s / p_1a
p_s_dado_1a_bayesExercício 5.3 rota da probabilidade
Probabilidade total: \(P(\text{1ª}) = P(\text{1ª} \mid S)\,P(S) + P(\text{1ª} \mid S^c)\,P(S^c)\). Tire \(P(\text{1ª} \mid S^c)\) da tabela com 'columns'.
O resultado tem de bater com p_1a, contado direto nos dados.
tab_col = pd.crosstab(dados['Pclass'], dados['Survived'], normalize='columns')
p_1a_dado_sc = tab_col.loc['1st', 'No']
p_1a_total = p_1a_dado_s * p_s + p_1a_dado_sc * (1 - p_s)
p_1a_totalExercício 5.4 as duas rotas
Classificador pela classe: prevê 'Yes' para a classe em que \(P(S \mid \text{classe})\) passa do limite de decisão e 'No' nas outras. A previsão vai para a coluna nova Boot_classe. Complete o limite.
Na Aula 4: classificar como sobrevivente se \(P(S \mid \text{perfil}) > P(S^c \mid \text{perfil})\).
p_s_por_classe = pd.crosstab(dados['Pclass'], dados['Survived'], normalize='index')['Yes']
dados['Boot_classe'] = 'No'
for classe in ['1st', '2nd', '3rd']:
if p_s_por_classe[classe] > 0.5:
dados.loc[dados['Pclass'] == classe, 'Boot_classe'] = 'Yes'
previsoes = dados['Boot_classe'].value_counts()
previsoesExercício 5.5 rota dos dados
Matriz de confusão: cruze o real (Survived) com o previsto (Boot_classe), com proporções dentro de cada linha. O falso negativo é a proporção de sobreviventes que o classificador previu como 'No'.
Na matriz, as linhas são o real e as colunas o previsto.
confusao = pd.crosstab(dados['Survived'], dados['Boot_classe'], normalize='index')
falso_negativo = confusao.loc['Yes', 'No']
falso_negativoExercício 5.6 rota dos dados
Acurácia: a proporção de passageiros em que a previsão acertou.
A média de uma coluna de True/False é a proporção de True.
acuracia = (dados['Survived'].astype(str) == dados['Boot_classe']).mean()
acuraciaPergunta para a turma: Na Aula 4, o classificador pelo sexo acertou 78,7%. O classificador pela classe acertou 67,9%. Por que o sexo classifica melhor?
Porque a sobrevivência está mais associada ao sexo do que à classe: \(P(S \mid F)\) e \(P(S \mid M)\) são muito diferentes (0,742 e 0,189), enquanto só a 1ª classe passa de 0,5. O classificador pela classe erra quase todos os sobreviventes da 2ª e da 3ª classes: por isso o falso negativo dele é de 60,2%.
6 Classificar textos é contar palavras
A ponte. P(palavra | livro) é a frequência relativa da palavra no livro, um value_counts(normalize=True). O Naive Bayes multiplica essas frequências. Tópicos: Tabela de frequências · Classificar textos.
No classificador de textos da Aula 6 (e do Projeto 1), \(P(\text{palavra} \mid \text{livro})\) é simplesmente a frequência relativa da palavra no livro, um value_counts(normalize=True). O Naive Bayes supõe as palavras independentes e multiplica essas frequências. A frase aqui é outra, diferente da frase da APS3.
Exercício 6.1 rota dos dados
Calcule \(P(\text{'mar'} \mid \text{Os Lusíadas})\): a frequência relativa da palavra mar no livro.
É uma tabela de frequências de uma variável qualitativa (as palavras).
freq_lusiadas = lusiadas.value_counts(normalize=True)
p_mar_lusiadas = freq_lusiadas['mar']
p_mar_lusiadasExercício 6.2 rota dos dados
Faça o mesmo em Dom Casmurro: \(P(\text{'mar'} \mid \text{Dom Casmurro})\).
Qual livro usa mais a palavra “mar”?
freq_casmurro = casmurro.value_counts(normalize=True)
p_mar_casmurro = freq_casmurro['mar']
p_mar_casmurroExercício 6.3 rota da probabilidade
Classifique a frase 'o mar e os olhos' com o Naive Bayes, usando priors iguais (\(P(L) = P(C) = 0{,}5\)): multiplique as frequências das palavras em cada livro e compare. A resposta é o texto 'Lusíadas' ou 'Dom Casmurro'.
\(P(L \mid \text{frase}) \propto P(\text{frase} \mid L)\,P(L)\), e \(P(\text{frase} \mid L)\) é o produto das frequências.
frase = 'o mar e os olhos'.split()
p_frase_lusiadas = freq_lusiadas[frase].prod()
p_frase_casmurro = freq_casmurro[frase].prod()
classificacao = 'Lusíadas' if 0.5 * p_frase_lusiadas > 0.5 * p_frase_casmurro else 'Dom Casmurro'
classificacaoPergunta para a turma: E se a frase tivesse uma palavra que não aparece em um dos livros?
A frequência dela nesse livro seria zero, e o produto inteiro viraria zero, por mais que as outras palavras apontem para aquele livro. Por isso o Projeto 1 usa a suavização de Laplace (somar 1 a todas as contagens) e soma logaritmos em vez de multiplicar números muito pequenos.
7 Da tabela de frequências à E(X) e à Var(X)
A ponte. A tabela de frequências de uma discreta é a sua distribuição; a média ponderada é E(X), e a variância com ddof=0 é Var(X). As propriedades de aX + b valem na coluna criada. Tópicos: Tabela de frequências · Medidas de posição · Medidas de dispersão · Criar colunas · V.a. e distribuição · Esperança e variância · E(aX+b) e Var(aX+b).
Seja \(X\) o número de irmãos ou cônjuges a bordo (SibSp) de um passageiro sorteado. Tratando as frequências como probabilidades, a tabela da parada 1 é a distribuição de \(X\), e as fórmulas da Aula 8 viram contas com a tabela. Do lado dos dados, as mesmas contas saem de .mean() e .var(ddof=0); e as propriedades de \(aX + b\) valem para uma coluna criada.
Exercício 7.1 rota da probabilidade
Pela probabilidade: \(E(X) = \sum_x x \cdot P(X = x)\), com a tabela de frequências no papel de \(P(X = x)\).
Multiplique cada valor pela sua probabilidade e some.
fr = dados['SibSp'].value_counts(normalize=True).sort_index()
esperanca_x = (fr.index * fr).sum()
esperanca_xExercício 7.2 rota dos dados
Pelos dados: a média da coluna.
Tem de dar o mesmo que o 7.1.
media_x = dados['SibSp'].mean()
media_xExercício 7.3 rota dos dados
Variância: \(Var(X) = \sum_x (x - E(X))^2 \cdot P(X = x)\) já está calculada em variancia_x. Do lado dos dados, qual ddof dá o mesmo número?
O padrão do pandas é ddof=1 (divide por \(n - 1\)).
variancia_x = (((fr.index - esperanca_x) ** 2) * fr).sum()
variancia_dados = dados['SibSp'].var(ddof=0)
variancia_dadosExercício 7.4 rota dos dados
Crie a coluna taxa = 10 libras por irmão ou cônjuge a bordo mais 5 libras fixas, isto é, \(Y = 10X + 5\). Calcule o desvio padrão (com ddof=0) da coluna.
Complete a parte fixa da taxa.
dados['taxa'] = 10 * dados['SibSp'] + 5
dp_taxa_dados = dados['taxa'].std(ddof=0)
dp_taxa_dadosExercício 7.5 rota da probabilidade
Pela propriedade da Aula 8, \(DP(aX + b) = |a| \cdot DP(X)\). Calcule o desvio padrão de \(Y\) sem usar a coluna.
O \(b = 5\) não entra no desvio padrão.
dp_taxa_prop = 10 * variancia_x ** 0.5
dp_taxa_propPergunta para a turma: Quanto vale \(E(Y)\)? E por que as 5 libras fixas não aparecem no desvio padrão?
\(E(Y) = 10\,E(X) + 5 = 10,23\) libras. Somar uma constante desloca todos os valores igualmente: a média anda, mas a distância de cada valor até a média não muda. Por isso \(Var(X + b) = Var(X)\).
8 No histograma, área é probabilidade
A ponte. Com density=True, a área de cada barra é a proporção de observações na faixa. Somar áreas é somar probabilidades, e a área total vale 1. Tópicos: Histograma · Faixas (pd.cut) · V.a. e distribuição.
Na Aula 7, o histograma com density=True tem área total 1, e a área de cada barra (altura vezes largura) é a proporção de observações naquela faixa. É por isso que ele é a ponte para as distribuições de probabilidade: somar áreas é somar probabilidades.
Exercício 8.1 rota dos dados
Pelos dados: a proporção de passageiros com idade de 20 (inclusive) até 30 (exclusive) anos.
Duas condições juntas: &.
p_20_30 = ((idades >= 20) & (idades < 30)).mean()
p_20_30Exercício 8.2 rota da probabilidade
Pelo histograma: com faixas de 5 anos, as barras [20, 25) e [25, 30) são as de posição 4 e 5. Some as áreas das duas (densidade vezes largura).
faixas[4] é 20 e faixas[5] é 25.
densidades, faixas, _ = plt.hist(idades, bins=np.arange(0, 85, 5), density=True, edgecolor='white')
plt.xlabel('idade (anos)')
plt.ylabel('densidade')
plt.show()
area_20_30 = densidades[4] * 5 + densidades[5] * 5
area_20_30Exercício 8.3 rota da probabilidade
Some as áreas de todas as barras.
Todas as faixas têm a mesma largura.
area_total = (densidades * 5).sum()
area_total
Pergunta para a turma: Por que, sem density=True, a altura das barras não pode ser lida como probabilidade?
Sem density=True a altura é uma contagem, que depende do tamanho da amostra e da largura das faixas (lembre do histograma errado da Aula 7, com faixas de larguras diferentes). Com densidade, a área total vale 1, como em qualquer distribuição de probabilidade.
9 Da Bernoulli à binomial: dados × modelo
A ponte. A média de uma coluna 0/1 é o p da Bernoulli. Somando 10 sorteios, o modelo Bin(10; p) prevê as frequências que a simulação com os dados produz. Tópicos: Tabela de frequências · Bernoulli · Binomial · Usar a cdf: ≥, <, entre · Dados × modelo · Binomial com dados.
Sorteie um passageiro: \(B = 1\) se sobreviveu e \(B = 0\) se não. Então \(B \sim Bernoulli(p)\), e \(p\) é a média da coluna 0/1. Sorteie 10 com reposição e conte os sobreviventes: \(Y \sim Bin(10;\ p)\). Aqui fazemos o sorteio de verdade, 2.000 vezes, e comparamos com o modelo: é o gráfico dados × modelo da Aula 11.
Exercício 9.1 rota dos dados
Pelos dados: crie a coluna 0/1 de sobreviventes e estime \(p\) como a média dela.
Qual método calcula a média?
sobreviveu = (dados['Survived'] == 'Yes').astype(int) # 1 = sobreviveu, 0 = não
p = sobreviveu.mean()
pExercício 9.2 rota da probabilidade
Pela probabilidade: \(Var(B) = p(1 - p)\). (Confira que dá o mesmo que sobreviveu.var(ddof=0).)
\(p(1 - p)\).
var_bernoulli = p * (1 - p)
var_bernoulliExercício 9.3 rota da probabilidade
Pelo modelo: \(P(Y \geq 5)\) para 10 sorteados, com stats.binom.cdf.
“Pelo menos 5” é o complemento de “no máximo 4”.
p_pelo_menos_5 = 1 - stats.binom.cdf(4, 10, p)
p_pelo_menos_5Exercício 9.4 rota dos dados
Pelos dados (simulados): a proporção das 2.000 rodadas com pelo menos 5 sobreviventes.
Deve ficar perto do resultado do 9.3, mas não idêntico: é uma simulação.
p_pelo_menos_5_sim = (sobreviventes >= 5).mean()
p_pelo_menos_5_simExercício 9.5 rota dos dados
A tabela de frequências relativas das 2.000 contagens, ordenada pelo número de sobreviventes. É ela que vai para o gráfico.
O mesmo comando da parada 1.
freq_sim = sobreviventes.value_counts(normalize=True).sort_index()
freq_simPergunta para a turma: E se os pontos dos dados ficassem longe dos pontos do modelo? O que poderia estar errado?
Duas coisas. (1) O parâmetro: talvez \(p\) não seja o suposto; como \(E(Y) = np\), estima-se \(\hat{p} = \bar{y}/n\) (Exercício 7 da atividade da Aula 11). (2) As suposições: ensaios não independentes ou com probabilidades diferentes (os 14 itens da vistoria do Detran não são iguais). Se a suposição cai, a binomial pode não servir.
Todas as pontes
| Nos dados (análise exploratória) | No modelo (probabilidade) | A ponte | Parada |
|---|---|---|---|
| Tipos de variáveis | V.a. e distribuição | Quantitativa discreta nos dados, variável aleatória discreta no modelo | 1 |
| Tabela de frequências | Eventos e regras | Frequência relativa ≈ probabilidade | 2 |
| Filtrar linhas | Eventos e regras | & e | nos filtros são interseção e união de eventos | 2 |
| Filtrar linhas | Prob. condicional | Filtrar linhas = condicionar (reduzir o espaço amostral) | 3 |
| Tabela cruzada | Prob. condicional | crosstab(normalize=‘index’) dá P(coluna | linha) | 3 |
| Tabela cruzada | Independência | Linhas iguais à linha All da tabela cruzada indicam independência | 4 |
| Tabela cruzada | Teorema de Bayes | normalize=‘columns’ dá P(linha | coluna): Bayes inverte a condicional | 5 |
| Tabela cruzada | Classificador (Titanic) | A matriz de confusão é um crosstab(real, previsto) | 5 |
| Criar colunas | Classificador (Titanic) | A previsão do classificador vira uma coluna nova (Boot) | 5 |
| Tabela de frequências | Classificar textos | P(palavra | livro) é a frequência relativa da palavra no livro | 6 |
| Tabela de frequências | V.a. e distribuição | Tabela de frequências de uma discreta ≈ distribuição de probabilidade | 7 |
| Medidas de posição | Esperança e variância | Média dos dados ≈ E(X) | 7 |
| Medidas de dispersão | Esperança e variância | Variância dos dados (ddof=0) ≈ Var(X) | 7 |
| Criar colunas | E(aX+b) e Var(aX+b) | Criar a coluna Y = aX + b e tirar a média dá a·E(X) + b | 7 |
| Histograma | V.a. e distribuição | Histograma com density=True: área de uma faixa = probabilidade | 8 |
| Tabela de frequências | Bernoulli | A média de uma coluna 0/1 é a frequência relativa do 1, o p da Bernoulli | 9 |
| Dados × modelo | Binomial com dados | Frequência relativa × P(Y = y): o modelo se ajusta aos dados? | 9 |