IA e Aprendizado de Máquina
fit, transform e predict. Compare pares próximos, como precisão/recall e kNN/k-means, explicando o mecanismo de cada um. Há conexões com Estatística e Fluência de Dados, mas nenhum conjunto de tabelas garante uma quantidade de acertos na prova.Entenda do zero · IA e Machine Learning
Antes dos algoritmos, entenda o problema: o que se quer prever, com quais dados e como verificar se o resultado é bom?
1. O que significa aprender com dados?
Em uma regra tradicional, alguém programa: “se ocorrer X, sinalize Y”. No Machine Learning (ML), um algoritmo ajusta um modelo usando exemplos. Para estimar um valor, temos uma tarefa de regressão; para escolher uma categoria, de classificação. As informações usadas para prever são as variáveis de entrada ou features. O resultado que se quer prever é o alvo.
2. Com resposta conhecida ou sem resposta pronta?
No aprendizado supervisionado, os exemplos de treino incluem o alvo: por exemplo, operações já classificadas após apuração. No não supervisionado, busca-se uma estrutura sem esses rótulos, como agrupar contribuintes com comportamento parecido. Um agrupamento incomum não prova fraude; ele pode apenas orientar investigação.
3. Acertar o treino não basta
O objetivo é funcionar em dados novos. Por isso separam-se dados de treino, validação e teste, conforme a estratégia adotada. Overfitting ocorre quando o modelo se ajusta demais aos exemplos de treino e generaliza mal. Vazamento de dados acontece quando informações que não estariam disponíveis no uso real contaminam o treinamento ou a avaliação.
4. E a IA generativa?
Ela produz conteúdo, como texto e código. Um LLM é um modelo de linguagem de grande porte; uma resposta convincente pode conter erro. Em RAG, o sistema recupera informações de uma base e as fornece ao modelo como contexto. Isso ajuda a fundamentar a resposta, mas não elimina a necessidade de checagem.
Confira se entendeu: prever o valor arrecadado é classificação?
Não: é regressão, quando o alvo é numérico. Classificar a arrecadação em faixas como “baixa” e “alta” seria outro problema, com alvo categórico.
A seguir, conecte essas ideias aos algoritmos, métricas e ferramentas.
Panorama: IA, ML, DL e tipos de aprendizado
- IA: campo amplo de sistemas que executam tarefas que exigiriam inteligência humana. Inclui sistemas especialistas baseados em regras (IA simbólica).
- Machine Learning: subárea da IA em que o sistema aprende padrões a partir de dados, sem ser explicitamente programado regra a regra.
- Deep Learning: subárea do ML com redes neurais de muitas camadas; aprende as próprias representações (features) a partir de dados brutos (imagem, texto, áudio).
- IA generativa: modelos que geram conteúdo novo (texto, imagem, código). LLMs são deep learning (Transformers).
| Tipo | Dados | Tarefas típicas | Exemplos |
|---|---|---|---|
| Supervisionado | Rotulados (X e y) | Classificação (y categórico) e regressão (y numérico) | Regressão linear/logística, árvores, RF, SVM, kNN, Naive Bayes, redes neurais |
| Não supervisionado | Sem rótulo (só X) | Agrupamento, redução de dimensionalidade, regras de associação, detecção de anomalias | k-means, hierárquico, DBSCAN, PCA, ICA, Apriori |
| Semissupervisionado | Poucos rotulados + muitos não rotulados | Classificação com rotulagem cara | Self-training, propagação de rótulos |
| Por reforço | Interação agente-ambiente | Aprender política que maximiza recompensa acumulada | Q-learning, jogos, robótica |
| Autossupervisionado | O próprio dado gera o rótulo | Pré-treino de LLMs (prever o próximo token) | GPT, BERT (palavra mascarada) |
Ciclo do modelo: treino, validação, teste e inferência
- Treino: o algoritmo ajusta os parâmetros (pesos, coeficientes).
- Validação: escolhe hiperparâmetros (k do kNN, profundidade da árvore, alpha) e compara modelos.
- Teste: estimativa final e imparcial do desempenho em dados nunca vistos. Usado uma vez, no fim.
- Inferência: uso do modelo já treinado para prever dados novos em produção.
| Parâmetro | Hiperparâmetro |
|---|---|
| Aprendido dos dados durante o treino | Definido antes do treino, pelo analista (ou por busca) |
| Coeficientes da regressão, pesos da rede, centróides finais | k do kNN/k-means, taxa de aprendizado, nº de árvores, max_depth, C do SVM, alpha da regularização |
Estratégias de validação
| Técnica | Como funciona | Quando |
|---|---|---|
| Holdout | Divide uma vez (ex.: 70/30, 80/20) em treino e teste | Muitos dados; rápido, mas estimativa depende da divisão |
| k-fold | Divide em k partes; treina em k−1 e testa na restante, k vezes; tira a média | Estimativa mais estável; cada registro é teste exatamente uma vez |
| k-fold estratificado | Cada fold mantém a proporção das classes | Classes desbalanceadas |
| Leave-one-out (LOOCV) | k = n: cada registro é um fold | Poucos dados; custo alto |
Séries temporais (TimeSeriesSplit) | Treina no passado, valida no futuro; sem embaralhar | Dados com ordem temporal |
fit do scaler/imputer na base inteira antes do split; usar variável que só existe depois do evento (ex.: "data de pagamento da multa" para prever sonegação); embaralhar série temporal. Resultado: desempenho otimista no teste e ruim em produção. Solução: dividir primeiro e encapsular pré-processamento em Pipeline.Pré-processamento de dados
Escala: normalização x padronização
| Normalização (min-max) | Padronização (z-score) | |
|---|---|---|
| Fórmula | x' = (x − mín) / (máx − mín) | z = (x − μ) / σ |
| Resultado | Intervalo [0, 1] (ou outro definido) | Média 0 e desvio-padrão 1 (sem limite fixo) |
| Outliers | Muito sensível (um extremo comprime o resto) | Menos sensível (ainda afetada; RobustScaler usa mediana e IQR) |
| scikit-learn | MinMaxScaler | StandardScaler |
Variáveis categóricas (encoding)
- One-hot encoding: uma coluna binária por categoria. Para nominais (UF, CNAE).
pd.get_dummies,OneHotEncoder. Cuidado com alta cardinalidade (explosão de colunas) e com a armadilha da variável dummy em regressão (usedrop_first=True). - Label / ordinal encoding: inteiros 0, 1, 2... Para ordinais (baixo < médio < alto). Em nominais cria ordem falsa.
Dados faltantes
- Remoção:
dropna()de linhas ou colunas (perde informação; ok se poucos faltantes e aleatórios). - Imputação: média (sensível a outliers), mediana (robusta), moda (categóricas), constante, kNN (
KNNImputer), modelo preditivo. Pode-se criar coluna indicadora "era nulo". - Mecanismos: MCAR (completamente aleatório), MAR (depende de outras variáveis observadas), MNAR (depende do próprio valor ausente).
Classes desbalanceadas
- Oversampling da minoria (duplicação ou SMOTE, que cria exemplos sintéticos interpolando vizinhos); undersampling da maioria;
class_weight='balanced'; ajuste do limiar de decisão. - Reamostragem só no treino, nunca no teste.
- Avalie com recall, precisão, F1, AUC (de preferência curva precisão-recall), não com acurácia.
Outliers e seleção de variáveis
- Outlier: regra do IQR (abaixo de Q1 − 1,5·IQR ou acima de Q3 + 1,5·IQR), z-score com |z| > 3, boxplot, Isolation Forest.
- Seleção de variáveis: filtro (correlação, qui-quadrado, variância), wrapper (RFE, forward/backward), embutida (Lasso, importância em árvores).
Algoritmos supervisionados
| Algoritmo | Ideia central | Pontos que caem |
|---|---|---|
| Regressão linear | ŷ = β₀ + β₁x₁ + ... ; minimiza a soma dos quadrados dos resíduos (MQO) | Regressão (saída contínua); interpretável; supõe relação linear; sensível a outliers e multicolinearidade |
| Regressão logística | Aplica a sigmoide σ(z) = 1/(1 + e−z) à combinação linear; saída é probabilidade entre 0 e 1 | Classificação; limiar padrão 0,5; coeficientes em log-odds; fronteira de decisão linear |
| Árvore de decisão | Divisões sucessivas por atributos que maximizam pureza (Gini ou entropia/ganho de informação; variância na regressão) | Interpretável (regras se-então); não precisa de escala; tende a overfitting, controlado por poda e max_depth. Algoritmos: ID3, C4.5, CART |
| Random Forest | Muitas árvores com bagging (amostras bootstrap) + subconjunto aleatório de atributos em cada divisão; votação/média | Reduz variância; robusta; fornece importância de variáveis; menos interpretável |
| Boosting (AdaBoost, Gradient Boosting, XGBoost, LightGBM) | Modelos fracos treinados em sequência, cada um corrigindo os erros do anterior | Reduz principalmente o viés; muito preciso em dados tabulares; mais sensível a ruído e hiperparâmetros |
| SVM | Hiperplano de margem máxima; definido pelos vetores de suporte; kernel trick (linear, polinomial, RBF) para fronteiras não lineares | Precisa de escala; bom em alta dimensão; C alto = menos regularização (margem estreita, risco de overfitting) |
| kNN | Classe = voto dos k vizinhos mais próximos (distância euclidiana, Manhattan...) | Aprendizado preguiçoso (lazy): não treina, custo na predição; precisa de escala; k pequeno = overfitting, k grande = underfitting |
| Naive Bayes | Teorema de Bayes com a suposição "ingênua" de independência condicional dos atributos dada a classe | Rápido; ótimo para texto (spam); variantes Gaussiana, Multinomial, Bernoulli |
| Bagging | Boosting |
|---|---|
| Modelos em paralelo, independentes | Modelos em sequência, dependentes |
| Amostras bootstrap (com reposição) | Reponderação dos erros / ajuste aos resíduos |
| Reduz variância | Reduz principalmente viés |
| Votação ou média simples | Combinação ponderada |
| Random Forest | AdaBoost, Gradient Boosting, XGBoost |
Algoritmos não supervisionados e redução de dimensionalidade
| k-means | Hierárquico | DBSCAN | |
|---|---|---|---|
| Precisa definir k? | Sim, a priori | Não; corta o dendrograma depois | Não; define eps e minPts |
| Como agrupa | Atribui ao centróide mais próximo e recalcula centróides até convergir | Aglomerativo (bottom-up, junta) ou divisivo (top-down, separa) | Por densidade: pontos núcleo, borda e ruído |
| Formato dos grupos | Esféricos, tamanhos parecidos | Depende da ligação (simples, completa, média, Ward) | Formas arbitrárias |
| Outliers | Sensível | Sensível (ligação simples sofre "encadeamento") | Identifica como ruído |
| Escolha de k / qualidade | Método do cotovelo (inércia), silhueta | Altura dos cortes no dendrograma | Gráfico de k-distâncias |
k-means++ melhora a escolha inicial) e minimiza a inércia (soma das distâncias quadráticas aos centróides). Precisa de escala.Redução de dimensionalidade
| PCA | ICA |
|---|---|
| Componentes ortogonais e não correlacionados | Componentes estatisticamente independentes |
| Ordenados pela variância explicada (1º componente = maior variância) | Sem ordenação natural por variância |
| Compressão, visualização, remover multicolinearidade | Separação de fontes misturadas ("cocktail party": separar vozes num áudio); supõe fontes não gaussianas |
- PCA é linear e não supervisionada; é sensível à escala. A padronização é usual quando escalas diferentes não devem dominar a análise, mas não é requisito matemático universal. Componentes são combinações lineares das variáveis originais (perde-se interpretabilidade direta).
- LDA (análise discriminante linear) é a versão supervisionada: maximiza separação entre classes. t-SNE/UMAP: não lineares, usados para visualização.
- Maldição da dimensionalidade: com muitas variáveis os dados ficam esparsos e as distâncias perdem significado.
Regras de associação (cesta de compras)
| Medida | Fórmula (regra A → B) | Leitura |
|---|---|---|
| Suporte | freq(A e B) / total | Quão comum é o conjunto |
| Confiança | P(A e B) / P(A) = P(B | A) | Dado A, com que frequência vem B. Em notação de conjuntos de itens, o suporte de A∪B mede a presença conjunta dos itens; não confundir com união de eventos (“A ou B”) |
| Lift | confiança(A → B) / suporte(B) | > 1 associação positiva; = 1 independência; < 1 negativa |
Métricas de avaliação: classificação, regressão e agrupamento
Classificação: matriz de confusão
| Previsto positivo | Previsto negativo | |
|---|---|---|
| Real positivo | VP (TP) | FN (erro tipo II) |
| Real negativo | FP (erro tipo I) | VN (TN) |
| Métrica | Fórmula | Pergunta que responde | Priorizar quando |
|---|---|---|---|
| Acurácia | (VP + VN) / total | Quanto acertou no geral? | Classes balanceadas |
| Precisão | VP / (VP + FP) | Dos que eu disse positivo, quantos eram? | Falso positivo custa caro (autuar contribuinte inocente, spam bloqueando e-mail bom) |
| Recall / sensibilidade / TPR | VP / (VP + FN) | Dos positivos reais, quantos peguei? | Falso negativo custa caro (deixar fraude passar, doença não detectada) |
| Especificidade / TNR | VN / (VN + FP) | Dos negativos reais, quantos acertei? | Importa não alarmar negativos |
| F1-score | 2 · P · R / (P + R) | Média harmônica de precisão e recall | Desbalanceamento; equilíbrio P x R |
| Taxa de falso positivo (FPR) | FP / (FP + VN) = 1 − especificidade | Eixo x da ROC |
Exemplo resolvido (estilo FCC)
Modelo de fraude: 1.000 notas, 100 fraudes reais. Detectou 80 fraudes verdadeiras e marcou 20 notas legítimas como fraude.
- VP = 80; FN = 100 − 80 = 20; FP = 20; VN = 900 − 20 = 880.
- Acurácia = (80 + 880)/1000 = 96%; Precisão = 80/100 = 0,80; Recall = 80/100 = 0,80; F1 = 0,80; Especificidade = 880/900 ≈ 0,978.
ROC e AUC
- Curva ROC: TPR (recall) no eixo y versus FPR no eixo x, variando o limiar de decisão.
- AUC: área sob a curva. 1,0 = perfeito; 0,5 = aleatório (diagonal); < 0,5 = pior que o acaso (inverter as previsões melhora). Interpretação: probabilidade de o modelo ranquear um positivo aleatório acima de um negativo aleatório.
- AUC independe do limiar escolhido. Em desbalanceamento extremo, a curva precisão-recall (AUC-PR) é mais informativa.
confusion_matrix retorna linhas = real e colunas = previsto, e no caso binário a ordem é [[VN, FP], [FN, VP]].Métricas de regressão
| Métrica | Fórmula | Características |
|---|---|---|
| MAE | (1/n) Σ |y − ŷ| | Mesma unidade de y; robusta a outliers; erro "médio típico" |
| MSE | (1/n) Σ (y − ŷ)² | Unidade ao quadrado; penaliza muito erros grandes |
| RMSE | √MSE | Volta à unidade de y; sempre RMSE ≥ MAE |
| R² | 1 − SQres / SQtot = 1 − Σ(y − ŷ)² / Σ(y − ȳ)² | Proporção da variância explicada; 1 = perfeito; 0 = igual a prever a média; pode ser negativo em dados de teste |
| R² ajustado | Penaliza o nº de variáveis | R² comum nunca diminui ao adicionar variáveis; o ajustado pode diminuir |
| MAPE | (100/n) Σ |(y − ŷ)/y| | Erro percentual; problema quando y ≈ 0 |
Exemplo: erros de 2, −2 e 4. MAE = (2 + 2 + 4)/3 ≈ 2,67; MSE = (4 + 4 + 16)/3 = 8; RMSE = √8 ≈ 2,83.
Agrupamento
- Coeficiente de silhueta: s = (b − a) / máx(a, b), em que a = distância média ao próprio cluster e b = distância média ao cluster vizinho mais próximo. Varia de −1 a 1: perto de 1 = bem agrupado; perto de 0 = na fronteira; negativo = provavelmente no cluster errado.
- Inércia (WCSS): soma das distâncias quadráticas aos centróides; sempre cai ao aumentar k, por isso usa-se o cotovelo.
- Davies-Bouldin: quanto menor, melhor.
Overfitting, viés-variância e regularização
| Underfitting (subajuste) | Overfitting (sobreajuste) | |
|---|---|---|
| Sintoma | Erro alto no treino e no teste | Erro baixo no treino, alto no teste |
| Causa | Modelo simples demais; alto viés | Modelo complexo demais, decora ruído; alta variância |
| Remédios | Mais variáveis, modelo mais complexo, menos regularização, treinar mais | Mais dados, regularização, poda, max_depth menor, dropout, early stopping, menos variáveis, validação cruzada, ensembles (bagging) |
| L1 · Lasso | L2 · Ridge | |
|---|---|---|
| Penalidade somada à perda | α · Σ |βᵢ| | α · Σ βᵢ² |
| Efeito nos coeficientes | Zera alguns (esparsidade) | Encolhe todos, sem zerar |
| Uso | Seleção de variáveis embutida | Multicolinearidade; mantém todas as variáveis |
| scikit-learn | Lasso(alpha=...) | Ridge(alpha=...) |
Ridge/Lasso, alpha maior = mais regularização. Já em LogisticRegression e SVC, o hiperparâmetro C é o inverso: C maior = menos regularização. Também: regularização reduz variância à custa de um pouco mais de viés.Redes neurais e Deep Learning
- Perceptron (neurônio artificial): soma ponderada das entradas + viés, passada por função de ativação. Um perceptron só separa classes linearmente separáveis (não resolve XOR).
- MLP (perceptron multicamadas): camada de entrada, camadas ocultas e saída. Treinado por backpropagation (retropropagação do erro) + gradiente descendente.
- Ativações: ReLU (max(0, x), padrão nas ocultas), sigmoide (saída binária), tanh, softmax (saída multiclasse, probabilidades que somam 1).
- Vocabulário: época = uma passagem completa pela base; batch = lote de exemplos por atualização; taxa de aprendizado = tamanho do passo; dropout = desliga neurônios aleatoriamente no treino (regularização); early stopping = para quando a validação piora.
- Problemas: dissipação do gradiente (vanishing) em redes profundas/RNNs com sigmoide; custo computacional (GPUs); baixa explicabilidade (caixa-preta).
| Arquitetura | Para quê | Mecanismo-chave |
|---|---|---|
| CNN (convolucional) | Imagens, visão computacional (OCR de notas, reconhecimento) | Filtros de convolução extraem padrões locais; pooling reduz dimensão; compartilhamento de pesos |
| RNN / LSTM / GRU | Sequências: texto, séries temporais, fala | Estado oculto (memória) passa de um passo ao seguinte; LSTM/GRU usam portões para mitigar a dissipação do gradiente |
| Transformer | Base dos LLMs; tradução, texto, também imagem | Autoatenção (self-attention): cada token pondera todos os outros; processa a sequência em paralelo; artigo "Attention Is All You Need" (2017) |
| Autoencoder | Compressão, detecção de anomalias | Codificador + decodificador reconstroem a entrada |
| GAN | Geração de imagens | Gerador x discriminador competindo |
Processamento de Linguagem Natural (PLN)
| Etapa / técnica | O que faz | Exemplo |
|---|---|---|
| Tokenização | Quebra o texto em unidades (palavras, sentenças, subpalavras) | "Nota fiscal emitida" → [Nota, fiscal, emitida] |
| Stopwords | Remove palavras muito frequentes e pouco informativas | de, a, o, que, e |
| Stemming | Corta sufixos por regras; o radical pode não ser palavra real | "tributação", "tributário" → "tribut" |
| Lematização | Reduz à forma canônica do dicionário (lema), usando análise morfológica | "fizeram" → "fazer" |
| POS tagging | Classe gramatical de cada token | substantivo, verbo, adjetivo |
| NER | Reconhece entidades nomeadas | pessoa, organização, CNPJ, local, data |
| Bag of Words | Vetor de contagens; ignora a ordem | CountVectorizer |
| TF-IDF | tf(t, d) × log(N / df(t)): valoriza termos frequentes no documento e raros na coleção | TfidfVectorizer |
| n-gramas | Sequências de n tokens | bigrama "nota fiscal" |
| Word embeddings | Vetores densos em que palavras de sentido parecido ficam próximas | Word2Vec (CBOW e skip-gram), GloVe, FastText |
Python para ciência de dados: pandas, NumPy, matplotlib
NumPy
ndarray: array n-dimensional homogêneo (um tipo só), operações vetorizadas e broadcasting (operar arrays de formatos compatíveis sem laço).a.shape,a.reshape(2, 3),np.mean(a, axis=0)(média por coluna),np.arange,np.linspace,a @ b(produto matricial).
pandas
import pandas as pd
df = pd.read_csv("notas.csv", sep=";")
df.head() # 5 primeiras linhas
df.info() # tipos e contagem de não nulos
df.describe() # estatísticas das colunas numéricas
df.isnull().sum() # faltantes por coluna
df["valor"].fillna(df["valor"].median())
df.dropna(subset=["cnpj"])
df[df["valor"] > 1000] # filtro booleano
df[(df["uf"] == "SP") & (df["valor"] > 0)] # use & e |, com parênteses
df.groupby("uf")["valor"].agg(["sum", "mean"])
pd.merge(notas, empresas, on="cnpj", how="left")
df["cnae"].value_counts()
df.loc[0:2, "valor"] # por rótulo: inclui o 2
df.iloc[0:2, 1] # por posição: exclui o 2
loc | iloc |
|---|---|
| Seleção por rótulo (nome do índice/coluna) | Seleção por posição inteira |
| Fatia inclui o fim | Fatia exclui o fim (como Python) |
axis=0 opera ao longo das linhas (resultado por coluna, ex.: df.mean()), e axis=1 ao longo das colunas (resultado por linha). df.drop("col", axis=1) remove coluna. E filtros combinados usam & e |, não and/or. Lembre também: fillna e dropna retornam uma cópia, a menos que se reatribua ou use inplace=True.Visualização
- matplotlib (
import matplotlib.pyplot as plt):plt.plot(linha),plt.bar,plt.hist(distribuição),plt.scatter(relação entre duas variáveis),plt.boxplot(quartis e outliers),plt.show(). seaborn: camada estatística sobre o matplotlib (heatmap de correlação, pairplot).
R (o edital cita)
- Atribuição com
<-; índices começam em 1; estrutura tabulardata.frame;summary(),str(),lm(y ~ x1 + x2, data = df)(regressão linear),glm(..., family = binomial)(logística). - Pacotes: tidyverse (
dplyr:filter,select,mutate,group_by,summarise; operador pipe%>%ou nativo|>), ggplot2 (gramática dos gráficos), caret/tidymodels (ML).
scikit-learn, PySpark e NLTK
A API do scikit-learn
| Método | Quem tem | O que faz |
|---|---|---|
fit(X, y) | Todo estimador | Aprende com os dados (coeficientes do modelo; média e desvio do scaler) |
predict(X) | Modelos supervisionados (e k-means) | Gera previsões com o que foi aprendido |
predict_proba(X) | Classificadores probabilísticos | Probabilidade de cada classe (usada na ROC) |
transform(X) | Transformadores (scalers, PCA, encoders) | Aplica a transformação aprendida, sem reaprender |
fit_transform(X) | Transformadores | fit + transform de uma vez; só no treino |
score(X, y) | Modelos | Acurácia (classificadores) ou R² (regressores) |
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2,
stratify=y, random_state=42)
scaler = StandardScaler()
X_tr_s = scaler.fit_transform(X_tr) # aprende média/desvio SÓ no treino
X_te_s = scaler.transform(X_te) # reaplica no teste (sem fit!)
pipe = Pipeline([("esc", StandardScaler()),
("rf", RandomForestClassifier(n_estimators=200))])
print(cross_val_score(pipe, X_tr, y_tr, cv=5, scoring="f1").mean())
busca = GridSearchCV(pipe, {"rf__max_depth": [5, 10, None]}, cv=5)
busca.fit(X_tr, y_tr)
y_pred = busca.predict(X_te)
print(confusion_matrix(y_te, y_pred))
print(classification_report(y_te, y_pred)) # precisão, recall, F1 por classe
fit_transform no conjunto de teste é erro (o scaler reaprende com o teste = vazamento e escalas inconsistentes). Correto: fit_transform no treino, transform no teste. O Pipeline garante isso automaticamente dentro da validação cruzada.model_selection (split, CV, Grid), preprocessing (scalers, encoders), impute, metrics, linear_model, tree, ensemble, svm, neighbors, naive_bayes, cluster, decomposition (PCA, FastICA).PySpark
- API Python do Apache Spark: processamento distribuído em cluster, em memória. Ponto de entrada:
SparkSession. - DataFrames (e RDDs) são imutáveis e distribuídos em partições.
- Avaliação preguiçosa (lazy): transformações (
select,filter/where,withColumn,groupBy,join) só montam o plano (DAG); nada executa até uma ação (show,count,collect,take,write). - MLlib (
pyspark.ml):VectorAssemblerjunta colunas num vetor de features; Transformers têmtransform(), Estimators têmfit()e devolvem um Transformer (modelo);Pipeline.
from pyspark.sql import SparkSession, functions as F
spark = SparkSession.builder.appName("nfe").getOrCreate()
df = spark.read.parquet("s3://dados/nfe/")
res = (df.filter(F.col("uf") == "SP")
.groupBy("cnae")
.agg(F.sum("valor").alias("total"))) # ainda nada executou
res.show(10) # ação: dispara o processamento
collect() traz todos os dados para o driver (risco de estouro de memória); não é transformação, é ação. E PySpark não é "pandas mais rápido em uma máquina": seu valor é escalar horizontalmente em cluster.NLTK
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import RSLPStemmer # stemmer para português
tokens = word_tokenize("As notas fiscais foram canceladas.", language="portuguese")
sw = set(stopwords.words("portuguese"))
limpos = [t for t in tokens if t.lower() not in sw and t.isalpha()]
radicais = [RSLPStemmer().stem(t) for t in limpos]
nltk.FreqDist(limpos).most_common(5)
PorterStemmer para inglês, RSLPStemmer para português), lematização (WordNetLemmatizer), pos_tag, n-gramas, FreqDist, corpora. Para produção e deep learning, usam-se spaCy e Hugging Face Transformers.IA generativa, LLMs e RAG
| Conceito | Definição para a prova |
|---|---|
| Modelo fundacional | Modelo grande, pré-treinado em dados amplos (em geral autossupervisionado) e adaptável a muitas tarefas (por prompt, fine-tuning ou RAG) |
| LLM | Modelo de linguagem de grande escala, baseado em Transformer, que gera texto prevendo o próximo token com base em probabilidades |
| Token | Unidade de texto processada (palavra, pedaço de palavra ou símbolo). Custo e limites são medidos em tokens |
| Janela de contexto | Máximo de tokens (prompt + resposta) que o modelo considera de uma vez |
| Temperatura | Controla a aleatoriedade da amostragem: baixa = respostas mais previsíveis e repetíveis; alta = mais variadas/criativas (e mais risco de erro). Top-p/top-k limitam o conjunto de tokens candidatos |
| Embedding | Vetor numérico denso que representa o significado; textos semelhantes ficam próximos (medido por similaridade de cosseno). Armazenados em bancos vetoriais |
| Prompt engineering | Técnica de formular instruções: papel/persona, contexto, formato de saída, exemplos (zero-shot = sem exemplos; few-shot = com alguns exemplos), chain-of-thought (raciocínio passo a passo), prompt de sistema |
| Fine-tuning | Treino adicional que altera os pesos do modelo com dados específicos (estilo, formato, domínio). Variantes eficientes: LoRA/PEFT. RLHF: ajuste com feedback humano |
| RAG | Recuperação aumentada por geração: recupera trechos relevantes de uma base (busca vetorial sobre embeddings) e os injeta no prompt para o LLM responder com base neles |
| Alucinação | Resposta fluente e plausível, porém falsa ou sem fundamento (inclusive citações e leis inventadas) |
| RAG | Fine-tuning | |
|---|---|---|
| Altera os pesos? | Não | Sim |
| Conhecimento novo/atualizado | Ideal: basta atualizar a base de documentos | Caro de atualizar (retreinar) |
| Rastreabilidade | Permite citar a fonte | Conhecimento fica "diluído" nos pesos |
| Melhor para | Responder sobre legislação, normas internas, manuais da SEFAZ | Estilo, formato, tarefa especializada recorrente |
Limitações dos LLMs
- Alucinação; data de corte do conhecimento; viés herdado dos dados; falta de raciocínio garantido em cálculos; limite da janela de contexto; custo e latência; não determinismo.
- Segurança: prompt injection (instruções maliciosas embutidas na entrada ou nos documentos recuperados), vazamento de dados sensíveis inseridos no prompt, jailbreak.
Governança, ética e explicabilidade em IA
| Princípio (edital) | Significado | Exemplo no fisco |
|---|---|---|
| Transparência | Informar que se usa IA, como, com quais dados e limites | Publicar que a seleção de fiscalizações usa modelo de risco |
| Responsabilidade (accountability) | Há humanos/órgãos identificáveis que respondem pelas decisões e danos; supervisão humana | Auditor revisa e assina o auto, não "o algoritmo" |
| Explicabilidade | Capacidade de explicar por que o modelo decidiu algo | Indicar quais fatores elevaram o score de risco |
| Privacidade | Minimização, finalidade, anonimização, base legal (LGPD) | Treinar sem expor dados pessoais desnecessários |
| Segurança | Robustez contra ataques (envenenamento de dados, exemplos adversariais, prompt injection) e falhas | Controle de acesso ao modelo e aos dados de treino |
| Alucinação | Saída falsa apresentada com confiança | Parecer citando súmula inexistente |
| Viés | Erro sistemático que gera resultados injustos para grupos | Modelo que fiscaliza mais certas regiões por histórico enviesado |
Tipos de viés
- Amostragem/seleção: dados não representam a população.
- Histórico: dados refletem discriminações passadas (o modelo as reproduz e amplifica).
- Medição/rótulo: variável-alvo é uma aproximação enviesada (ex.: "foi autuado" mede onde se fiscalizou, não onde se sonegou).
- Confirmação e automação: humano tende a aceitar a saída do sistema sem crítica.
Explicabilidade (XAI)
- Modelos interpretáveis por natureza ("caixa-branca"): regressão linear/logística, árvore rasa.
- Modelos caixa-preta: redes profundas, ensembles grandes. Explicações pós-hoc: SHAP (contribuição de cada variável, baseada em valores de Shapley), LIME (modelo simples local em torno de uma previsão), importância por permutação.
- Explicação global (comportamento geral do modelo) x local (uma decisão específica).
Teste rápido
1. A regressão logística, por gerar saída numérica contínua, é técnica de regressão e não pode ser usada para classificação binária.
Errado. A logística aplica a sigmoide e produz uma probabilidade (0 a 1) que, comparada a um limiar, gera a classe. É um classificador.
2. Um classificador obteve VP = 40, FP = 10, FN = 60 e VN = 890. Sua precisão é 0,80 e seu recall é 0,40.
Certo. Precisão = 40/(40 + 10) = 0,80. Recall = 40/(40 + 60) = 0,40. A acurácia seria 930/1000 = 93%, alta apesar do recall baixo: base desbalanceada.
3. Para identificar o maior número possível de contribuintes sonegadores, ainda que se aceitem alguns alarmes falsos, a métrica a priorizar é a precisão.
Errado. Não deixar passar positivos (minimizar falsos negativos) é recall. Precisão se prioriza quando o falso positivo é o erro caro.
4. A regularização Lasso (L1) pode levar coeficientes exatamente a zero, atuando como seleção de variáveis, enquanto a Ridge (L2) reduz os coeficientes sem zerá-los.
Certo. É a diferença clássica L1 x L2.
5. No scikit-learn, o procedimento correto é aplicar fit_transform do StandardScaler sobre toda a base e só então dividir em treino e teste, para que ambas as partes fiquem na mesma escala.
Errado. Isso causa data leakage: média e desvio do teste influenciam o treino. Divide-se primeiro; fit_transform no treino e transform no teste (ou usa-se Pipeline).
6. O Random Forest é um método de boosting em que as árvores são treinadas sequencialmente, cada uma corrigindo os erros da anterior.
Errado. Random Forest é bagging (árvores independentes, em paralelo, com bootstrap e sorteio de atributos). O descrito é boosting (AdaBoost, Gradient Boosting).
7. Diferentemente do k-means, o DBSCAN não exige que o número de clusters seja informado previamente e é capaz de identificar pontos de ruído.
Certo. DBSCAN agrupa por densidade (eps e minPts), encontra formas arbitrárias e marca outliers como ruído.
8. Um modelo com erro muito baixo no treinamento e erro elevado no teste apresenta underfitting, caracterizado por alto viés.
Errado. É overfitting (alta variância). Underfitting é erro alto nos dois conjuntos.
9. Uma AUC-ROC igual a 0,5 indica desempenho equivalente ao de uma classificação aleatória.
Certo. A diagonal da ROC (AUC = 0,5) corresponde ao acaso; 1,0 é o classificador perfeito.
10. Na técnica RAG, o modelo de linguagem é retreinado com os documentos da organização, o que altera seus pesos e dispensa a recuperação de informações no momento da consulta.
Errado. Isso é fine-tuning. No RAG os pesos não mudam: trechos relevantes são recuperados (busca por similaridade de embeddings) no momento da consulta e inseridos no prompt.
11. Em PySpark, a operação filter executa imediatamente o processamento no cluster e retorna os dados ao driver.
Errado. filter é transformação com avaliação preguiçosa: só registra o plano. A execução ocorre em uma ação (show, count, collect, write).
12. A PCA gera componentes estatisticamente independentes, sendo a técnica indicada para separar sinais de fontes misturadas, como vozes simultâneas em uma gravação.
Errado. Esse é o objetivo da ICA. A PCA gera componentes ortogonais (não correlacionados) ordenados pela variância explicada.