IA e Aprendizado de Máquina

P2 · 10 questões × peso 3 = 30 pontos · prioridade: máxima
Visão do professorAprenda a sequência problema → dados → treino → avaliação → uso. Minha prioridade pedagógica é ciclo do modelo, vazamento, métricas e overfitting: sem isso, decorar nomes de algoritmos pouco ajuda. Treine a matriz de confusão à mão e leia exemplos curtos de 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.

Na prática · um alerta de riscoHá 10 casos positivos entre 100 operações. O modelo emite 8 alertas e acerta 6 deles. A precisão é 6/8 = 75%: quantos alertas estavam corretos? O recall é 6/10 = 60%: quantos positivos reais foram encontrados? São perguntas diferentes. Um modelo que sempre diz “negativo” teria 90% de acurácia e não encontraria nenhum positivo.

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

MnemônicoBonecas russas: IA ⊃ ML ⊃ DL ⊃ (LLMs). Todo DL é ML, todo ML é IA; a recíproca é falsa.
TipoDadosTarefas típicasExemplos
SupervisionadoRotulados (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 supervisionadoSem rótulo (só X)Agrupamento, redução de dimensionalidade, regras de associação, detecção de anomaliask-means, hierárquico, DBSCAN, PCA, ICA, Apriori
SemissupervisionadoPoucos rotulados + muitos não rotuladosClassificação com rotulagem caraSelf-training, propagação de rótulos
Por reforçoInteração agente-ambienteAprender política que maximiza recompensa acumuladaQ-learning, jogos, robótica
AutossupervisionadoO próprio dado gera o rótuloPré-treino de LLMs (prever o próximo token)GPT, BERT (palavra mascarada)
Pegadinha FCCRegressão logística é classificação, apesar do nome. E kNN (supervisionado, classifica pelo voto dos k vizinhos) não é k-means (não supervisionado, forma k grupos). O "k" significa coisas diferentes: vizinhos x clusters.
BizuPergunte: "existe a resposta certa (rótulo) no treino?" Sim = supervisionado. Não = não supervisionado. Há recompensa por ações em sequência = reforço. Previsão de valor contínuo (arrecadação de ICMS do mês) = regressão; previsão de categoria (sonegador/não sonegador) = classificação; descobrir perfis de contribuintes sem rótulo = agrupamento.

Ciclo do modelo: treino, validação, teste e inferência

ParâmetroHiperparâmetro
Aprendido dos dados durante o treinoDefinido antes do treino, pelo analista (ou por busca)
Coeficientes da regressão, pesos da rede, centróides finaisk 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écnicaComo funcionaQuando
HoldoutDivide uma vez (ex.: 70/30, 80/20) em treino e testeMuitos dados; rápido, mas estimativa depende da divisão
k-foldDivide em k partes; treina em k−1 e testa na restante, k vezes; tira a médiaEstimativa mais estável; cada registro é teste exatamente uma vez
k-fold estratificadoCada fold mantém a proporção das classesClasses desbalanceadas
Leave-one-out (LOOCV)k = n: cada registro é um foldPoucos dados; custo alto
Séries temporais (TimeSeriesSplit)Treina no passado, valida no futuro; sem embaralharDados com ordem temporal
Pegadinha FCCData leakage (vazamento de dados): informação do teste "vaza" para o treino. Exemplos clássicos: aplicar 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.
BizuNo k-fold com k = 5, o modelo é treinado 5 vezes, cada vez com 80% dos dados, e o desempenho reportado é a média (com desvio-padrão) das 5 avaliações.

Pré-processamento de dados

Escala: normalização x padronização

Normalização (min-max)Padronização (z-score)
Fórmulax' = (x − mín) / (máx − mín)z = (x − μ) / σ
ResultadoIntervalo [0, 1] (ou outro definido)Média 0 e desvio-padrão 1 (sem limite fixo)
OutliersMuito sensível (um extremo comprime o resto)Menos sensível (ainda afetada; RobustScaler usa mediana e IQR)
scikit-learnMinMaxScalerStandardScaler
BizuEscala importa para algoritmos baseados em distância ou gradiente: kNN, k-means, SVM, PCA, regressão regularizada, redes neurais. Árvores, Random Forest e boosting de árvores não precisam de escala (dividem por limiares, um atributo por vez).
Pegadinha FCCPadronizar não transforma a distribuição em normal. Só muda média e escala; a forma (assimetria) continua a mesma.

Variáveis categóricas (encoding)

Dados faltantes

Classes desbalanceadas

Outliers e seleção de variáveis

Mnemônico"LIMPE" antes de modelar: Limpar duplicados e erros; Imputar faltantes; Mapear categóricas (encoding); Padronizar/normalizar a escala; Equilibrar classes (só no treino).

Algoritmos supervisionados

AlgoritmoIdeia centralPontos 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ísticaAplica a sigmoide σ(z) = 1/(1 + e−z) à combinação linear; saída é probabilidade entre 0 e 1Classificação; limiar padrão 0,5; coeficientes em log-odds; fronteira de decisão linear
Árvore de decisãoDivisõ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 ForestMuitas árvores com bagging (amostras bootstrap) + subconjunto aleatório de atributos em cada divisão; votação/médiaReduz 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 anteriorReduz principalmente o viés; muito preciso em dados tabulares; mais sensível a ruído e hiperparâmetros
SVMHiperplano de margem máxima; definido pelos vetores de suporte; kernel trick (linear, polinomial, RBF) para fronteiras não linearesPrecisa de escala; bom em alta dimensão; C alto = menos regularização (margem estreita, risco de overfitting)
kNNClasse = 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 BayesTeorema de Bayes com a suposição "ingênua" de independência condicional dos atributos dada a classeRápido; ótimo para texto (spam); variantes Gaussiana, Multinomial, Bernoulli
BaggingBoosting
Modelos em paralelo, independentesModelos em sequência, dependentes
Amostras bootstrap (com reposição)Reponderação dos erros / ajuste aos resíduos
Reduz variânciaReduz principalmente viés
Votação ou média simplesCombinação ponderada
Random ForestAdaBoost, Gradient Boosting, XGBoost
MnemônicoBagging = Bando em paralelo (cada um vota sozinho). Boosting = Bastão (corrida de revezamento: um passa os erros para o próximo). E stacking = empilhar: um meta-modelo aprende a combinar as saídas de modelos diferentes.
Pegadinha FCC"O Random Forest seleciona aleatoriamente apenas os registros" — incompleto. São duas aleatoriedades: amostras (bootstrap) e subconjunto de atributos em cada nó. É isso que descorrelaciona as árvores.

Algoritmos não supervisionados e redução de dimensionalidade

k-meansHierárquicoDBSCAN
Precisa definir k?Sim, a prioriNão; corta o dendrograma depoisNão; define eps e minPts
Como agrupaAtribui ao centróide mais próximo e recalcula centróides até convergirAglomerativo (bottom-up, junta) ou divisivo (top-down, separa)Por densidade: pontos núcleo, borda e ruído
Formato dos gruposEsféricos, tamanhos parecidosDepende da ligação (simples, completa, média, Ward)Formas arbitrárias
OutliersSensívelSensível (ligação simples sofre "encadeamento")Identifica como ruído
Escolha de k / qualidadeMétodo do cotovelo (inércia), silhuetaAltura dos cortes no dendrogramaGráfico de k-distâncias
Bizuk-means depende da inicialização (pode cair em ótimo local; 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

PCAICA
Componentes ortogonais e não correlacionadosComponentes estatisticamente independentes
Ordenados pela variância explicada (1º componente = maior variância)Sem ordenação natural por variância
Compressão, visualização, remover multicolinearidadeSeparação de fontes misturadas ("cocktail party": separar vozes num áudio); supõe fontes não gaussianas

Regras de associação (cesta de compras)

MedidaFórmula (regra A → B)Leitura
Suportefreq(A e B) / totalQuão comum é o conjunto
ConfiançaP(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”)
Liftconfiança(A → B) / suporte(B)> 1 associação positiva; = 1 independência; < 1 negativa
BizuAlgoritmo clássico: Apriori (todo subconjunto de um conjunto frequente também é frequente). Alternativa: FP-Growth. Detecção de anomalias (fraude, nota fiscal atípica): Isolation Forest, One-Class SVM, LOF, z-score.
Pegadinha FCCConfiança alta não garante regra útil: se B já é muito frequente, a confiança sai alta por acaso. Quem corrige isso é o lift.

Métricas de avaliação: classificação, regressão e agrupamento

Classificação: matriz de confusão

Previsto positivoPrevisto negativo
Real positivoVP (TP)FN (erro tipo II)
Real negativoFP (erro tipo I)VN (TN)
MétricaFórmulaPergunta que respondePriorizar quando
Acurácia(VP + VN) / totalQuanto acertou no geral?Classes balanceadas
PrecisãoVP / (VP + FP)Dos que eu disse positivo, quantos eram?Falso positivo custa caro (autuar contribuinte inocente, spam bloqueando e-mail bom)
Recall / sensibilidade / TPRVP / (VP + FN)Dos positivos reais, quantos peguei?Falso negativo custa caro (deixar fraude passar, doença não detectada)
Especificidade / TNRVN / (VN + FP)Dos negativos reais, quantos acertei?Importa não alarmar negativos
F1-score2 · P · R / (P + R)Média harmônica de precisão e recallDesbalanceamento; equilíbrio P x R
Taxa de falso positivo (FPR)FP / (FP + VN) = 1 − especificidadeEixo x da ROC
MnemônicoPRecisão olha a coluna do Previsto (denominador VP + FP: tudo que eu previ positivo). REcall olha a linha do REal (denominador VP + FN: tudo que é realmente positivo). ESpecificidade = ESpelho do recall para os negativos.

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.

Pegadinha FCCParadoxo da acurácia: com 1% de fraudes, um modelo que diz "nunca é fraude" tem 99% de acurácia e recall zero. Em base desbalanceada, acurácia alta não prova nada.

ROC e AUC

BizuTrade-off do limiar: baixar o limiar (de 0,5 para 0,3) gera mais positivos, aumenta o recall e tende a reduzir a precisão. Subir o limiar faz o inverso. Na scikit-learn, 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étricaFórmulaCaracterí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√MSEVolta à 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² ajustadoPenaliza o nº de variáveisR² 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

Pegadinha FCC"Quanto maior o R², melhor; portanto, deve-se adicionar variáveis até maximizá-lo." Errado: no MQO com intercepto, mantendo a mesma amostra e modelos aninhados, o R² de treino não diminui ao acrescentar regressores, mesmo irrelevantes. Isso não garante generalização. Examine R² ajustado e validação; não generalize a propriedade para qualquer algoritmo ou conjunto de dados.

Overfitting, viés-variância e regularização

Underfitting (subajuste)Overfitting (sobreajuste)
SintomaErro alto no treino e no testeErro baixo no treino, alto no teste
CausaModelo simples demais; alto viésModelo complexo demais, decora ruído; alta variância
RemédiosMais variáveis, modelo mais complexo, menos regularização, treinar maisMais dados, regularização, poda, max_depth menor, dropout, early stopping, menos variáveis, validação cruzada, ensembles (bagging)
Decomposição do erroErro esperado = viés² + variância + erro irredutível (ruído). Aumentar a complexidade reduz o viés e aumenta a variância; o ponto ótimo equilibra os dois.
L1 · LassoL2 · Ridge
Penalidade somada à perdaα · Σ |βᵢ|α · Σ βᵢ²
Efeito nos coeficientesZera alguns (esparsidade)Encolhe todos, sem zerar
UsoSeleção de variáveis embutidaMulticolinearidade; mantém todas as variáveis
scikit-learnLasso(alpha=...)Ridge(alpha=...)
MnemônicoLAsso LArga variáveis (zera e descarta). Ridge = Rédea (segura todas, mas não solta nenhuma). Elastic Net = L1 + L2 juntos.
Pegadinha FCCEm 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

ArquiteturaPara 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 / GRUSequências: texto, séries temporais, falaEstado oculto (memória) passa de um passo ao seguinte; LSTM/GRU usam portões para mitigar a dissipação do gradiente
TransformerBase dos LLMs; tradução, texto, também imagemAutoatenção (self-attention): cada token pondera todos os outros; processa a sequência em paralelo; artigo "Attention Is All You Need" (2017)
AutoencoderCompressão, detecção de anomaliasCodificador + decodificador reconstroem a entrada
GANGeração de imagensGerador x discriminador competindo
BizuEncoder-only (BERT) = entender/classificar texto. Decoder-only (GPT) = gerar texto, prevendo o próximo token. Encoder-decoder (T5, tradução original do Transformer) = transformar uma sequência em outra.
Pegadinha FCC"Transformers processam o texto sequencialmente, palavra a palavra, como as RNNs." Errado: a vantagem do Transformer é justamente o processamento paralelo via atenção (com codificação posicional para saber a ordem). Na geração é que um LLM produz um token por vez.

Processamento de Linguagem Natural (PLN)

Etapa / técnicaO que fazExemplo
TokenizaçãoQuebra o texto em unidades (palavras, sentenças, subpalavras)"Nota fiscal emitida" → [Nota, fiscal, emitida]
StopwordsRemove palavras muito frequentes e pouco informativasde, a, o, que, e
StemmingCorta sufixos por regras; o radical pode não ser palavra real"tributação", "tributário" → "tribut"
LematizaçãoReduz à forma canônica do dicionário (lema), usando análise morfológica"fizeram" → "fazer"
POS taggingClasse gramatical de cada tokensubstantivo, verbo, adjetivo
NERReconhece entidades nomeadaspessoa, organização, CNPJ, local, data
Bag of WordsVetor de contagens; ignora a ordemCountVectorizer
TF-IDFtf(t, d) × log(N / df(t)): valoriza termos frequentes no documento e raros na coleçãoTfidfVectorizer
n-gramasSequências de n tokensbigrama "nota fiscal"
Word embeddingsVetores densos em que palavras de sentido parecido ficam próximasWord2Vec (CBOW e skip-gram), GloVe, FastText
MnemônicoStemming = Serrote (corta o fim da palavra sem pensar). Lematização = Lexicógrafo (consulta o dicionário e devolve a palavra de verbete). Lematização é mais precisa e mais cara.
BizuAplicações cobradas: análise de sentimentos, classificação de documentos (petições, denúncias da ouvidoria), sumarização, tradução, chatbots, extração de informação de notas e contratos. Embeddings contextuais (BERT, LLMs) dão vetores diferentes para a mesma palavra conforme o contexto ("banco" de praça x "banco" financeiro); Word2Vec dá um vetor fixo por palavra.

Python para ciência de dados: pandas, NumPy, matplotlib

NumPy

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
lociloc
Seleção por rótulo (nome do índice/coluna)Seleção por posição inteira
Fatia inclui o fimFatia exclui o fim (como Python)
Pegadinha FCCEm pandas, 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

R (o edital cita)

scikit-learn, PySpark e NLTK

A API do scikit-learn

MétodoQuem temO que faz
fit(X, y)Todo estimadorAprende 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ísticosProbabilidade de cada classe (usada na ROC)
transform(X)Transformadores (scalers, PCA, encoders)Aplica a transformação aprendida, sem reaprender
fit_transform(X)Transformadoresfit + transform de uma vez; só no treino
score(X, y)ModelosAcurá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
Pegadinha FCCChamar 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.
Mnemônico"Fita no treino, Transforma no resto": fit só vê treino; transform e predict servem para validação, teste e produção. Módulos: model_selection (split, CV, Grid), preprocessing (scalers, encoders), impute, metrics, linear_model, tree, ensemble, svm, neighbors, naive_bayes, cluster, decomposition (PCA, FastICA).

PySpark

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
Pegadinha FCCcollect() 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)
BizuNLTK = biblioteca didática e clássica de PLN: tokenização, stopwords, stemming (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

ConceitoDefinição para a prova
Modelo fundacionalModelo grande, pré-treinado em dados amplos (em geral autossupervisionado) e adaptável a muitas tarefas (por prompt, fine-tuning ou RAG)
LLMModelo de linguagem de grande escala, baseado em Transformer, que gera texto prevendo o próximo token com base em probabilidades
TokenUnidade de texto processada (palavra, pedaço de palavra ou símbolo). Custo e limites são medidos em tokens
Janela de contextoMáximo de tokens (prompt + resposta) que o modelo considera de uma vez
TemperaturaControla 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
EmbeddingVetor numérico denso que representa o significado; textos semelhantes ficam próximos (medido por similaridade de cosseno). Armazenados em bancos vetoriais
Prompt engineeringTé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-tuningTreino adicional que altera os pesos do modelo com dados específicos (estilo, formato, domínio). Variantes eficientes: LoRA/PEFT. RLHF: ajuste com feedback humano
RAGRecuperaçã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çãoResposta fluente e plausível, porém falsa ou sem fundamento (inclusive citações e leis inventadas)
MnemônicoFluxo do RAG = "FIBRA": Fragmentar documentos (chunks); Indexar como embeddings em banco vetorial; Buscar os trechos mais similares à pergunta; Rechear (aumentar) o prompt com eles; Apresentar a resposta gerada, idealmente citando as fontes.
RAGFine-tuning
Altera os pesos?NãoSim
Conhecimento novo/atualizadoIdeal: basta atualizar a base de documentosCaro de atualizar (retreinar)
RastreabilidadePermite citar a fonteConhecimento fica "diluído" nos pesos
Melhor paraResponder sobre legislação, normas internas, manuais da SEFAZEstilo, formato, tarefa especializada recorrente
Pegadinha FCC"O RAG elimina as alucinações." Errado: reduz (ancora a resposta em fontes), mas não elimina; se a recuperação trouxer trecho errado ou incompleto, o modelo pode errar. Também é falso que temperatura 0 garanta resposta correta: garante, no máximo, resposta mais determinística.

Limitações dos LLMs

BizuCiclo de um LLM: pré-treino autossupervisionado em grande corpus (prever próximo token) → ajuste por instruções e RLHF (alinhamento com preferências humanas) → uso por prompt (inferência), com ou sem RAG. Modelos multimodais aceitam e/ou geram texto, imagem e áudio.

Governança, ética e explicabilidade em IA

Princípio (edital)SignificadoExemplo no fisco
TransparênciaInformar que se usa IA, como, com quais dados e limitesPublicar 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 humanaAuditor revisa e assina o auto, não "o algoritmo"
ExplicabilidadeCapacidade de explicar por que o modelo decidiu algoIndicar quais fatores elevaram o score de risco
PrivacidadeMinimização, finalidade, anonimização, base legal (LGPD)Treinar sem expor dados pessoais desnecessários
SegurançaRobustez contra ataques (envenenamento de dados, exemplos adversariais, prompt injection) e falhasControle de acesso ao modelo e aos dados de treino
AlucinaçãoSaída falsa apresentada com confiançaParecer citando súmula inexistente
ViésErro sistemático que gera resultados injustos para gruposModelo que fiscaliza mais certas regiões por histórico enviesado
MnemônicoOs 7 do edital = "TREPS-AV": Transparência, Responsabilidade, Explicabilidade, Privacidade, Segurança, Alucinação, Viés.

Tipos de viés

Explicabilidade (XAI)

Lei secaLGPD, art. 20: o titular dos dados tem direito a solicitar a revisão de decisões tomadas unicamente com base em tratamento automatizado de dados pessoais que afetem seus interesses, incluídas as decisões destinadas a definir o seu perfil pessoal, profissional, de consumo e de crédito ou os aspectos de sua personalidade.
BizuRegulação por níveis de risco é a tendência: o AI Act europeu classifica sistemas em risco inaceitável (proibidos), alto risco (obrigações rígidas), risco limitado (dever de transparência) e risco mínimo; o PL 2338/2023 brasileiro segue abordagem semelhante, baseada em risco. Governança de IA inclui inventário de modelos, documentação (dados, finalidade, métricas), monitoramento de drift (mudança na distribuição dos dados em produção) e revisão humana.
Pegadinha FCC"Remover a coluna sexo/raça garante que o modelo não discrimine." Errado: outras variáveis podem funcionar como proxies (CEP, nome, renda). E "maior acurácia implica modelo mais justo" também é falso: justiça exige métricas próprias por grupo.

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.