Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

RESUMO – MACHINE LEARNIG
Introdução 
🧠 O que é Aprendizado de Máquina?
· Machine Learning (ML) é uma área da Inteligência Artificial (IA) que permite que máquinas aprendam a partir de dados, sem serem explicitamente programadas para cada tarefa.
· Em vez de seguir um conjunto fixo de regras codificadas por humanos, a máquina analisa dados, descobre padrões e toma decisões sozinha com base nesses padrões.
📊 Como isso funciona?
· Quando uma máquina analisa grandes volumes de informação, ela consegue:
· Reconhecer padrões
· Tomar decisões
· Fazer previsões
· Tudo isso por meio de modelos matemáticos e estatísticos que ela aprende ao ser "treinada" com dados.
🧩 Diferença entre IA e ML
· Inteligência Artificial (IA) é um campo mais amplo que tenta imitar o comportamento humano.
· Machine Learning é uma subárea da IA que foca especificamente em fazer máquinas aprenderem a partir de exemplos.
🎯 Objetivo do estudo
· Compreender os métodos de aprendizado (como supervisionado, não supervisionado, etc.)
· Entender as categorias de problemas (classificação, regressão, etc.) com base nas saídas geradas pelos modelos.
Módulo 1. Conceitos de aprendizagem de máquina
Inteligência artificial e suas linhas de pensamento
🧠 O que é Inteligência Artificial?
· IA é uma área da Ciência da Computação que cria sistemas que imitam a inteligência humana.
· Ela tenta simular a capacidade de perceber, resolver problemas, propor soluções e tomar decisões — como um ser humano faria.
🏛️ Origem da ideia de IA
· A ideia não é nova: vem desde a Grécia Antiga.
· Aristóteles, por exemplo, já imaginava objetos que se movimentassem sozinhos, sem precisar de escravos.
· A tecnologia moderna permitiu transformar essas ideias antigas em realidade.
🧬 Marco histórico da IA
· 1943: McCulloch e Pitts propõem o primeiro modelo de rede neural artificial (imitando o cérebro).
· 1950: Claude Shannon escreve sobre como programar uma máquina para jogar xadrez.
· 1956: Na Conferência de Dartmouth, o termo "Inteligência Artificial" foi oficialmente usado por John McCarthy.
Linhas de Pensamento da Inteligência Artificial
🧭 Linhas de Pensamento da Inteligência Artificial (IA)
A IA pode ser entendida de quatro maneiras, dependendo de como o sistema pensa ou age, e com que objetivo (imitar humanos ou agir da forma mais racional possível).
	Nº
	Linha de Pensamento
	Enfoque
	O que significa?
	Exemplo
	1
	Pensar como humanos
	Como o cérebro humano pensa
	Cria modelos que tentam imitar o raciocínio humano real. Usa psicologia e cognição.
	Redes neurais que aprendem com observação.
	2
	Pensar racionalmente
	Lógica e raciocínio formal
	O sistema segue regras e lógica matemática para pensar com perfeição.
	Sistemas especialistas.
	3
	Agir como humanos
	Comportamento humano
	O sistema imita ações humanas — como um robô agindo como pessoa.
	Robôs que fazem tarefas humanas.
	4
	Agir racionalmente
	Objetivos bem definidos
	O sistema toma decisões lógicas e eficientes, como um "agente inteligente".
	Agentes inteligentes (como assistentes virtuais).
➡️ Diferença-chave:
· Os sistemas que “pensam” lidam com processos internos (como o raciocínio).
· Os que “agem” lidam com comportamento externo.
· A racionalidade se refere à melhor decisão possível, enquanto “como humanos” busca simular o comportamento humano real.
✅ Explicando cada linha com exemplos:
1️⃣ Sistemas que pensam como seres humanos
· Imitam como as pessoas realmente pensam.
· Baseiam-se em psicologia cognitiva para modelar o pensamento humano.
· Trabalham com o aprendizado por observação, realizando investigações experimentais de seres humanos ou animais.
Exemplo: Redes neurais artificiais que aprendem com observação e tentam replicar o raciocínio humano.
2️⃣ Sistemas que pensam racionalmente
· Focam na lógica e na razão.
· O objetivo é pensar de forma lógica, como um matemático resolveria um problema.
Exemplo: Um sistema de IA que segue regras lógicas formais, como se estivesse resolvendo um problema de xadrez ou um teorema matemático.
3️⃣ Sistemas que agem como seres humanos
· Imita o comportamento visível das pessoas.
· São sistemas que agem como humanos, mesmo que não "pensem" de verdade.
Exemplo famoso: Teste de Turing
· Criado por Alan Turing (1950).
· Se uma máquina conversa com um humano e o engana a ponto de o humano pensar que ela também é humana, ela “passa” no teste.
4️⃣ Sistemas que agem racionalmente
· Focam em agir de forma racional, ou seja, agir da melhor forma possível.
· Tomam decisões baseadas em objetivos e informações disponíveis.
Exemplo: Agentes inteligentes, como assistentes virtuais, que escolhem a melhor ação de acordo com o que sabem.
🎯 Conclusão rápida:
· 🧠 “Pensar” → Foco nos processos internos (como o cérebro funciona).
· 🤖 “Agir” → Foco no comportamento externo (o que o sistema faz).
· 👤 “Como humanos” → Tenta imitar a mente ou ações humanas reais.
· 📈 “Racionalmente” → Tenta atingir o melhor resultado possível, mesmo sem imitar humanos.
🧠 IA e Machine Learning: relação e diferenças
📌 Inteligência Artificial (IA):
· É uma área que abrange uma enorme variedade de áreas.
· A IA tem vários segmentos, incluindo:
· Processamento de linguagem natural (ex: entender textos e falas humanas)
· Sistemas baseados em conhecimento (ex: sistemas especialistas)
· A busca e otimização com os algoritmos genéticos (ex: soluções baseadas em evolução biológica)
· Aprendizado de máquina (ML)
· Machine Learning (ML): É uma das áreas dentro da IA.
	⚠️ Importante! 
Machine Learning ≠ Inteligência Artificial
· ML é apenas uma parte da IA, focada em fazer a máquina aprender com dados.
Conceitos e definições de machine learning
📘 O que é Machine Learning?
· Machine Learning (ML) é uma área da Inteligência Artificial.
· Seu objetivo é ensinar computadores a aprender com dados, sem precisar programar tudo manualmente.
🧪 Definição clássica (Samuel, 1959):
“Machine Learning é o campo de estudo que dá aos computadores a habilidade de aprender sem serem explicitamente programados.”
💡 Isso significa que, em vez de dizer passo a passo o que fazer, você dá exemplos, e a máquina aprende por conta própria.
📚 Definição prática (Weiss & Kulikowski, 1991):
“Um sistema de aprendizado é um programa que toma decisões com base em experiências anteriores (exemplos resolvidos com sucesso).”
🧩 Por que ML é importante?
Antes do ML, os algoritmos precisavam ser totalmente programados.
Isso funciona em jogos simples (como jogo da velha), mas não é viável em tarefas complexas como:
· Tradução de idiomas
· Reconhecimento facial
· Diagnóstico médico
✅ Exemplo: 🎮 Cenário: Criar um programa para jogar Jogo da Velha
Antes do Machine Learning, seria necessário programar todas as regras assim:
1. Se o oponente ocupou duas casas seguidas → Ocupe a terceira
2. Se não, e houver jogada que cria 2 linhas boas → Faça isso
3. Se não, e o centro estiver livre → Pegue o centro
4. Se não, e o oponente pegou uma quina → Pegue a quina oposta
5. E assim por diante...
🔍 Resultado: funciona bem porque o jogo tem poucas possibilidades.
♟️ Exemplo: Xadrez (com ML)
Agora imagine o xadrez:
· Cada jogada tem em média 35 possibilidades.
· Milhões de combinações possíveis.
➡️ Programar manualmente cada jogada é impossível.
🧠 Solução com Machine Learning:
· Ao invés de programar todas as regras, você fornece dados de partidas anteriores., ou seja, alimenta o sistema com outras partidas.
· O algoritmo aprende padrões de vitória, derrota e estratégia.
· Ele começa a prever boas jogadas com base na experiência, sem instruções explícitas.
📊 ML vs Estatística Computacional
· Ambas usam dados para fazer previsões.
· Diferença:
· A estatística tenta entender e explicar os dados.
· O ML quer apenas acertar as previsões, mesmo que não saiba explicar o motivo.
💡 Onde ML está sendo usado?
· Reconhecimento de voz e rosto
· Diagnóstico médico
· Tradução automática
· Pesquisa na internet (Google)
· Sistemas de recomendação (Netflix, Amazon)
· Coleta e análise de dados
· Rastreamento de mensagens de spam
· OrganizaçãoComo o KDD realiza isso?
· Combinando várias técnicas inteligentes, como:
· Métodos matemáticos
· Algoritmos inspirados na biologia (ex: algoritmos genéticos)
· Processos linguísticos (ex: linguagem natural)
· Heurísticas (regras práticas para encontrar soluções eficientes)
Essas técnicas são aplicadas automaticamente ou com mínima intervenção humana para descobrir conhecimento escondido nos dados.
🧩 Conclusão:
· KDD surgiu para resolver o problema do excesso de dados.
· Ele transforma dados brutos em informações relevantes para tomada de decisão.
· A mineração de dados é o coração do KDD, mas o processo envolve muito mais que só rodar algoritmos.
Relacionamento entre KDD, Data Mining e Machine Learning
🧠 1. O que é Machine Learning (Aprendizado de Máquina)?
· É uma área da Inteligência Artificial (IA).
· Objetivo: fazer computadores aprenderem sozinhos com os dados, sem programação explícita.
· Usa algoritmos especiais para identificar padrões e tomar decisões com base em experiências passadas.
· Exemplo de uso: sistemas que recomendam filmes, detectam fraudes ou entendem voz.
💡 Um sistema aprendiz é aquele que toma boas decisões com base em experiências anteriores.
⛏️ 2. O que é Data Mining (Mineração de Dados)?
· É uma etapa dentro do processo de KDD.
· Consiste em usar algoritmos para explorar grandes volumes de dados e descobrir padrões importantes.
· Ajuda a automatizar o que seria um trabalho manual de análise de dados.
· Exemplo: encontrar padrões de compra de clientes em um supermercado para melhorar promoções.
⚠️ A mineração de dados não substitui o analista, mas ajuda a descobrir informações que seriam difíceis de enxergar manualmente.
🔎 3. O que é KDD (Knowledge Discovery in Databases)?
· KDD é o processo completo que transforma dados brutos em conhecimento útil.
· Inclui várias etapas: seleção, preparação, mineração de dados, interpretação e uso dos resultados.
· Envolve o uso de técnicas de Data Mining e Machine Learning para descobrir informações escondidas.
📌 Definição de KDD segundo Fayyad, Piatetsky-Shapiro e Smyth (1996):
· Um processo não trivial que identifica padrões desconhecidos, válidos, úteis e compreensíveis nos dados.
🔁 Relação entre eles 
	Conceito
	Papel no processo
	KDD
	Processo completo de descoberta de conhecimento
	Data Mining
	Etapa do KDD que extrai padrões dos dados
	Machine Learning
	Técnica usada no Data Mining para aprender padrões
🧩 Comparação resumida:
· KDD = processo completo.
· Data Mining = parte do processo que acha os padrões.
· Machine Learning = técnica usada para aprender com os dados e descobrir padrões de forma automatizada.
⚠️ Observação Importante:
· Machine Learning ≠ Data Mining, mas se complementam.
· Ambos buscam extrair conhecimento útil, mas:
· ML foca em aprender com dados para tomar decisões futuras.
· DM foca em encontrar padrões existentes nos dados.
Caracterização do processo de KDD
🧩 O que é o processo de KDD?
O processo de KDD (Knowledge Discovery in Databases) é o caminho completo para transformar dados brutos em conhecimento útil, por meio de várias etapas organizadas.
Esse processo é:
· Iterativo: as etapas se repetem até alcançar um bom resultado.
· Interativo: isto significa que há a interação homem maquina: o analista pode tomar decisões e fazer ajustes ao longo do processo.
🔄 As 9 Etapas do Processo de KDD
A seguir, veja cada etapa explicada de forma simples:
1. Compreensão do domínio
· Entender o problema a ser resolvido e os objetivos do cliente.
· É como entender o contexto do negócio antes de mexer com os dados.
2. Seleção dos dados
· Escolher os dados mais relevantes para o problema.
· Pode ser um conjunto específico ou apenas algumas colunas (variáveis).
3. Limpeza e pré-processamento
· Remover erros, ruídos e dados faltantes.
· Preparar os dados para que os próximos passos funcionem corretamente.
4. Redução e projeção de dados
· Reduzir a quantidade de variáveis ou combinar algumas variáveis em novas.
· Isso facilita o trabalho dos algoritmos e melhora a qualidade dos resultados.
5. Escolha da tarefa de mineração
· Decidir qual técnica será usada, de acordo com o objetivo:
· Ex: classificação, regressão, agrupamento, sumarização etc.
6. Escolha do modelo e da técnica
· Selecionar os algoritmos e parâmetros que serão testados.
· Ex: árvore de decisão, rede neural, k-means etc.
7. Mineração de dados
· Aqui os algoritmos são executados para encontrar padrões nos dados.
· Ex: descobrir que clientes com mais de 60 anos compram mais aos sábados.
8. Interpretação dos padrões
· Verificar se os padrões fazem sentido e se são úteis para o problema.
· Pode incluir visualizações gráficas ou ajustes no processo (voltando para etapas anteriores).
9. Uso do conhecimento
· Aplicar o conhecimento obtido:
· Pode ser usado em sistemas, relatórios ou para apoiar decisões.
· Também pode ser documentado ou comunicado para os responsáveis.
📝 Observação Final:
Embora a mineração de dados (passo 7) seja a parte mais conhecida, todas as etapas são fundamentais para o sucesso do processo de KDD. Pular ou fazer mal alguma etapa compromete os resultados.
Técnicas e ferramentas de KDD
🛠️ O que são técnicas de KDD?
· As técnicas de KDD são ferramentas ou métodos utilizados na etapa de mineração de dados, com o objetivo de extrair padrões e conhecimento úteis de grandes volumes de dados.
· ⚠️ Não existe uma técnica única que resolve todos os problemas. Cada problema exige uma técnica mais adequada, com suas vantagens e limitações.
🔍 Principais Técnicas de KDD
1. Regras de Associação
· Estabelece uma correlação estatística entre atributos de dados e conjunto de dados.
· Ou seja, descobrem relacionamentos entre atributos nos dados.
· Muito usada no varejo, para descobrir produtos que são comprados juntos.
🧾 Exemplo:
Se muitos clientes compram pão e também compram manteiga, pode surgir a regra:
SE comprar pão, ENTÃO provavelmente comprará manteiga.
2. Árvores de Decisão
· Organiza os dados em uma estrutura de árvore, com estágio de decisão (nós) e classes como folhas.
· Serve para classificar dados e tomar decisões com base em perguntas simples.
🌳 Exemplo:
Para decidir se uma pessoa vai à praia:
· SE está sol E não tem vento → Vai à praia
· SE está nublado → Não vai
A árvore guia o caminho com base nas condições.
3. Raciocínio Baseado em Casos (RBC)
· Baseado no método do vizinho mais próximo, combina e compara atributos para estabelecer hierarquia de semelhança. 
· Ou seja, baseia-se em comparar um novo caso com casos anteriores.
· Usa o conceito de “vizinhos mais próximos” (similaridade entre registros).
🤝 Exemplo: Um novo cliente é comparado a outros clientes parecidos, para prever seu comportamento de compra.
4. Algoritmos Genéticos
· São métodos gerais de busca e otimização. 
· Inspirados na evolução biológica: seleção natural, cruzamento, mutação.
· Procuram soluções ótimas entre muitas possibilidades.
🧬 Funcionamento:
· Geração de várias soluções (como indivíduos).
· Seleção das melhores.
· Cruzamento e mutação para criar novas soluções.
· Repetição até encontrar a solução ideal.
5. Redes Neurais Artificiais
· Inspiradas no funcionamento do cérebro humano.
· Usam nós (neurônios artificiais) conectados que aprendem com os dados.
🧠 Exemplo de uso:
· Reconhecimento facial.
· Previsão de demanda.
· Diagnóstico médico.
📊 Tarefas (ou Funcionalidades) do Data Mining
As tarefas definem como os resultados serão apresentados. Elas são classificadas em dois grandes grupos:
🔮 1. Tarefas Preditivas
· Objetivo: prever valores futuros com base em padrões existentes.
· Usadas para tomada de decisão automática.
Exemplos:
· Classificação: prever se um cliente é inadimplente ou não.
· Regressão: prever o valor de venda de uma casa.
· Predição: estimar quanto será a demanda de um produto no mês seguinte.
📌 2. Tarefas Descritivas
· Objetivo: entender melhor os dados, sem previsão. 
· Buscam padrões, visando o suporte à tomada de decisão.
Exemplos:
· Agrupamento (clustering): agrupar clientes por perfil de compra.
· Sumarização:criar um resumo simples de um grande conjunto de dados.
· Regras de Associação: descobrir relações entre produtos ou comportamentos.
· Detecção de desvios (outliers): encontrar comportamentos anormais, como fraudes.
🔗 Ligação entre Técnicas, Tarefas e Algoritmos 
· Técnicas são os métodos usados (ex: árvore de decisão, redes neurais). 
As técnicas de KDD podem ser consideradas ferramentas utilizadas para atender aos propósitos do data mining (DM).
· Tarefas definem o que se quer fazer (ex: prever, agrupar, resumir).
· Algoritmos são as implementações práticas dessas técnicas (ex: ID3, K-Means, Apriori).
As técnicas e ferramentas de data mining tem o objetivo de obter conhecimento em base de dados, utilizando dos métodos de classificação e agrupamento para descobrir conhecimento que esteja implícito.]
Em outras palavras, as ferramentas e técnicas de mineração de dados (data mining) têm por objetivo buscar a classificação e o agrupamento (clusterização) de dados, bem como identificar padrões.
Módulo 2. O processo de KDD
🧠 Diferença entre dados, informação, conhecimento e sabedoria
	Conceito
	Definição
	Dados
	Fatos brutos, números ou símbolos sem interpretação
	Informação
	Dados interpretados, organizados com significado
	Conhecimento
	Uso das informações para entender padrões e tomar decisões
	Sabedoria
	Capacidade de aplicar o conhecimento com bom senso e experiência
· Informações vêm dos dados, e conhecimento vem da mineração dessas informações.
· O processo de KDD é completo, mas só entrega valor de verdade na etapa final de apresentação, onde o conhecimento é aplicado.
· Em sistemas como os da Amazon, modelos como o SVD são usados para prever preferências e sugerir produtos, com base em informações coletadas e refinadas.
Conceitos de Dado, Informação, Conhecimento e Sabedoria (DIKW)
Essa hierarquia é chamada de Pirâmide DIKW (ou também chamada de Pirâmide do conhecimento), onde cada nível representa um grau maior de entendimento e utilidade dos dados.
🔹 1. Dado (Data)
· O que é: Elemento bruto, sem interpretação. Pode ser um número, palavra ou símbolo isolado.
· Não tem significado por si só.
Exemplo: “100”, “2025”, “AB12”, “5 estrelas”
➡️ Sozinhos, esses dados não dizem nada — são apenas valores soltos.
🔹 2. Informação (Information)
· O que é: Dados organizados e interpretados, com contexto.
· Começam a fazer sentido e podem responder perguntas simples, como “o quê?”
Exemplo:
· Dado: “5 estrelas”
· Contexto: Avaliação feita por um cliente em um site de compras
· Informação: “O cliente deu 5 estrelas ao produto X”
➡️ Agora o número tem significado real e útil.
🔹 3. Conhecimento (Knowledge)
· O que é: Conjunto de informações analisadas e cruzadas, que permite entender padrões, relações ou regras.
· Ajuda a responder “como?” e “por que?”
Exemplo:
· Informações:
· Produto X tem média de 5 estrelas.
· Usuários com perfil A compram e avaliam positivamente o produto.
· Conhecimento:
· “Usuários do perfil A tendem a gostar do produto X.”
➡️ É o que sistemas de machine learning fazem ao encontrar padrões úteis.
🔹 4. Sabedoria (Wisdom)
· O que é: É a aplicação consciente e ética do conhecimento.
· Envolve julgamento humano, experiência e bom senso.
· Responde “o que deve ser feito?”
Exemplo:
· Conhecimento: “Usuários do perfil A gostam do produto X”
· Sabedoria: “Vamos recomendar esse produto para novos usuários do perfil A, mas apenas se for útil a eles, considerando suas preferências e evitando excessos.”
➡️ A sabedoria envolve tomar decisões com responsabilidade.
🧠 Conclusão:
· Dado é o ponto de partida (ex: números).
· Informação dá sentido aos dados (ex: avaliação de um produto).
· Conhecimento conecta informações para criar entendimento (ex: padrões de consumo).
· Sabedoria aplica o conhecimento com responsabilidade (ex: decisões estratégicas).
Etapas do processo de KDD
O processo de KDD (Descoberta de Conhecimento em Bases de Dados) é um conjunto de etapas que transforma dados brutos em conhecimento útil.
O processo de KDD é composto por cinco fases, conforme figura:
1. Seleção
2. Pré-processamento
3. Formatação
4. Mineração de dados
5. Interpretação / Avaliação 
🔰 Antes de tudo: Definição do problema
· Antes de iniciar o processo de KDD, é essencial definir o objetivo da análise.
· Ex: descobrir padrões de consumo, prever inadimplência, detectar fraudes etc.
🧱 As 5 Fases do Processo de KDD (segundo Fayyad, Piatetsky-Shapiro e Smyth)
1️⃣ Seleção dos dados
· Escolha de dados relevantes para análise, a partir de várias fontes (bancos, redes sociais, logs, etc.).
· Cria-se um conjunto de dados-alvo.
✅ Exemplo: De um banco de dados de vendas, selecionar apenas:
· Cliente, Produto, Valor da Compra, Data
2️⃣ Pré-processamento e limpeza
· Remove erros e ruídos, como:
· Dados duplicados
· Campos vazios
· Erros de digitação
· Também pode incluir:
· Integração de dados (juntar diferentes fontes)
· Conversões de formatos
✅ Exemplo: Se um campo "sexo" tem "M", "Masculino" e "masc", todos são padronizados para "M".
3️⃣ Transformação dos dados
· Os dados são preparados no formato ideal para serem usados por algoritmos.
· Inclui:
· Normalização
· Agregações
· Criação de variáveis
· Conversão de variáveis contínuas em faixas
✅ Exemplo: Transformar idades em faixas: 18–25, 26–35, 36–50...
4️⃣ Mineração de dados (Data Mining)
· Aplicação dos algoritmos para extrair padrões, regras ou modelos preditivos.
✨ Técnicas mais comuns:
· Classificação: atribui rótulos (ex: cliente inadimplente ou não)
· Regressão: prevê valores numéricos (ex: valor de uma casa)
· Clusterização: agrupa perfis similares (ex: tipos de clientes)
· Associação: descobre co-ocorrência de itens (ex: pão → leite)
· Detecção de anomalias: identifica desvios (ex: fraude)
· Descoberta de sequências: acha padrões temporais (ex: comportamento de compra)
✅ Exemplo – Classificação:
1. Você aplica um algoritmo de árvore de decisão.
2. Ele aprende que:
“Se o cliente ganha > R$5.000 e tem bom histórico, provavelmente não é inadimplente.”
3. Esse padrão será usado para classificar novos clientes.
5️⃣ Interpretação e avaliação
· Análise dos padrões descobertos:
· São úteis?
· São compreensíveis?
· Elimina o que é irrelevante e valoriza o que tem potencial de uso prático.
🧩 Três grandes etapas do processo KDD (segundo Goldschmidt, Bezerra e Passos):
Goldschmidt, Bezerra e Passos (2015), sugerem que as fases do processo KDD sejam agrupadas em três grandes etapas denominadas etapas operacionais do processo KDD:
1. Pré-processamento
2. Mineração de dados
3. Pós-processamento
🔷 1. PRÉ-PROCESSAMENTO
· Compreende todas as funções relacionadas com a captação, organização e tratamento dos dados. 
· Objetivo: A preparação dos dados para os algoritmos de mineração de dados que serão aplicados na etapa seguinte. 
· As principais funções de pré-processamento são:
· Seleção de dados: Escolher atributos ou registros relevantes para análise.
· Limpeza dos dados: Corrigir erros e inconsistências.
· Integração dos dados: Unificar fontes com formatos diferentes.
· Transformação dos dados: Adaptar os dados para os algoritmos (normalização, codificação, etc.). (etapa mais importante)
· Redução de dados: Enxugar a base para torná-la analisável, removendo redundâncias.
🔷 2. MINERAÇÃO DE DADOS
· Fase central do KDD: onde os algoritmos atuam.
· Utiliza técnicas estatísticas, matemáticas e computacionais, que permitem automatizar a busca por padrões e tendencias que não são triviais.
· Os padrões descobertos ajudam na tomada de decisões estratégicas. 
· As tarefas mais comuns aplicadas na prática de mineração de dados incluem:
· Sumarização;
· Classificação;
· Regressão e estimação;
· Predição;
· Agrupamento ou clusterização;
· Associações;
· Detecção de desvios;
· Descoberta de sequências.
🔸 Importante: Um conceito muito importante e muito utilizado em mineração de dados é a noção de medidas de interesse.
· Medidas de interesse:
· Podem ser usadas após a etapa de MD para filtrar os melhores padrões
· Ajudam a ordenar os resultados mais relevantes
·Podem ser usadas para guiar ou restringir o espaço de busca da MD.
🔷 3. PÓS-PROCESSAMENTO
· Visa a interpretação e avaliação dos dados minerados.
· Trata e organiza o conhecimento extraído para uso prático.
· Funções principais desta etapa:
· Elaboração e organização do conhecimento obtido
· Criação de relatórios, dashboards, gráficos
· Conversão em informações acionáveis
· Filtragem de padrões relevantes com base em interesse do usuário
· Há diversas propostas para “minerar” o conhecimento descoberto, ou seja, pós-processar o conhecimento descoberto pela etapa de data mining.
· As propostas se enquadram em duas categorias básicas:
	Método
	Característica
	Objetivo (data-driven)
	Baseado apenas nos dados
	Subjetivo (user-driven)
	Leva em conta o conhecimento prévio do usuário
🧠 Conclusão Geral
· O processo de KDD transforma dados brutos em conhecimento útil.
· Cada etapa tem papel específico:
· Desde a seleção e preparo dos dados, até a mineração e interpretação final.
· A qualidade dos resultados depende muito da qualidade dos dados e de um bom pré-processamento.
· O conhecimento extraído deve ser avaliado e comunicado claramente para ser útil ao negócio.
🎯 Conclusão:
· O KDD é um processo completo, que vai desde o dado bruto até o conhecimento útil.
· Cada etapa tem função específica e fundamental.
· Sem dados bem preparados, mesmo o melhor algoritmo não gera bons resultados.
· A etapa final (apresentação) é onde o valor é percebido pelos usuários finais.
Papel dos usuários no processo de KDD
🧠 O que é o Papel dos Usuários no Processo de KDD?
· No processo de KDD (Descoberta de Conhecimento em Bases de Dados), usuários diferentes têm papéis distintos, conforme o nível da pirâmide de conhecimento onde atuam.
· A pirâmide é dividida em 3 níveis, cada um com usuários específicos e diferentes responsabilidades.
· A Pirâmide de Conhecimento Adaptada ao KDD é mostrada ao lado.
🔢 1. NÍVEL OPERACIONAL (BASE DA PIRÂMIDE)
· Usuário principal: Administrador de banco de dados
· Responsabilidade:
· Gerenciar os dados brutos, registros operacionais do dia a dia.
· Garantir que os dados estejam organizados e acessíveis para os próximos níveis do processo.
· Tipo de dado: bruto, direto das operações (transações, cadastros, logs).
✅ Exemplo: Registrar vendas realizadas, atualizações de estoque, cadastros de clientes.
ℹ️ 2. MINERAÇÃO DE DADOS (NÍVEL INTERMEDIÁRIO)
· Usuário principal: Profissionais de dados (ex: cientistas de dados, analistas)
· Responsabilidade:
· Aplicar algoritmos de mineração de dados para descobrir padrões, regras, tendências e anomalias.
· Transformar dados operacionais em informações úteis.
· Tipo de dado: processado, tratado e com significado.
✅ Exemplo: Detectar que “clientes que compram X também compram Y” com base no histórico de compras.
📘 3. TOMADA DE DECISÃO (TOPO DA PIRÂMIDE)
· Usuário principal: Analistas de negócios e executivos
· Responsabilidade:
· Tomar decisões estratégicas com base nas informações mineradas.
· Formular planos, estratégias e ações empresariais.
· Avaliar ameaças, oportunidades e tendências de mercado.
· Tipo de dado: informações analisadas, com alto valor agregado.
✅ Exemplo: Após análise, decidir aumentar investimento em produtos com alta taxa de recompra ou ajustar preços com base em padrões de comportamento de clientes.
📌 Resumo Final
	Nível da pirâmide
	Tipo de usuário
	Papel principal
	🔢 Operacional
	Administrador de dados
	Gerar, organizar e manter os dados brutos
	ℹ️ Mineração de dados
	Profissionais de dados
	Extrair conhecimento por meio de algoritmos
	📘 Tomada de decisão
	Executivos e analistas
	Usar o conhecimento para definir estratégias e decisões
🧠 Conclusão
· O processo de KDD depende da colaboração entre diferentes tipos de usuários.
· Cada um atua em uma camada da pirâmide, com funções complementares:
· Dados são criados, depois analisados, e por fim, transformados em decisões valiosas.
· O sucesso do KDD está na integração eficiente entre esses papéis.
Módulo 3. Técnicas de mineração de dados
📊 Divisão dos Conjuntos de Dados: Treino, Teste e Validação
· Os dados usados para treinar um modelo de aprendizado de máquina são divididos em partes:
· Treinamento: para o modelo aprender os padrões.
· Teste: para avaliar se o modelo aprendeu corretamente.
· Objetivo: Garantir que o modelo generalize bem e funcione com novos dados.
· Em alguns casos, também se usa um conjunto de validação:
· Serve para ajustar o modelo antes da avaliação final.
· Proporções comuns: 80% treino / 10% validação / 10% teste, ou 70:20:10.
🧪 Exemplo: Você tem 1000 registros de dados.
· 700 vão para o treinamento.
· 200 para a validação (ajustar o modelo).
· 100 para o teste final (avaliar o desempenho).
🧾 Mineração de Textos (ou PLN – Processamento de Linguagem Natural)
· A mineração de dados textuais trata de extrair informações úteis de documentos em texto.
· Também chamada de PLN (Processamento de Linguagem Natural).
· Permite que o computador entenda e interprete a linguagem humana.
· Técnicas comuns incluem:
· Tokens: dividir o texto em palavras.
· Sentenças: identificar o início e fim de frases.
· Sentimentos: analisar emoções expressas no texto.
· n-gramas: grupos de n palavras seguidas (ex: "muito bom").
Conceitos Básicos de Mineração de Dados (MD)
⚡ 1. Por que surgiu a Mineração de Dados?
· Com os avanços da computação, tarefas manuais e lentas de análise de dados foram substituídas por processos rápidos, automáticos e eficientes.
· Quanto mais complexos e ricos os dados coletados, mais potencial existe para extrair insights importantes.
🏢 2. Quem usa a Mineração de Dados?
· Diversos setores aplicam MD para entender melhor seu negócio:
· Varejistas, bancos, telecom, indústrias, seguradoras etc.
· Eles usam MD para descobrir relações ocultas entre dados como:
· Preços, promoções, perfil dos clientes, risco, economia, redes sociais e muito mais.
🧠 3. O que é Mineração de Dados?
· É o uso de técnicas computacionais para analisar grandes volumes de dados.
· Objetivo: descobrir padrões úteis e válidos que não são visíveis à primeira vista.
· É uma parte do processo maior chamado KDD (Descoberta de Conhecimento em Bases de Dados).
🚀 4. Evolução e História
· A MD acompanha a evolução do Big Data e da computação de baixo custo.
· O conceito de análise exploratória de dados surgiu com John Tukey em 1977.
· Foi ele quem deu origem à ideia base da mineração moderna.
📚 5. Definições Clássicas de MD
Diversos autores explicaram o que é MD. Veja algumas visões:
· Sholom & Nitim (1999): é uma cooperação entre humanos e computadores. Os humanos definem objetivos; os computadores procuram padrões.
· Michael & Gordon (1997): é a exploração automática ou semiautomática de grandes volumes de dados.
· Jesus (1999): é uma análise de dados indutiva.
· Bhavani (1999): envolve consultas e extração de padrões desconhecidos e úteis.
· Jiawei & Micheline (2001): é o processo de minerar conhecimento em grandes bases de dados.
🔍 6. Onde a MD se encaixa no processo de KDD?
· A Mineração de Dados é uma etapa dentro do KDD.
· No KDD, os dados são:
1. Preparados
2. Explorados
3. Analisados com técnicas de MD
4. Interpretados
· A MD é a parte onde as ferramentas e algoritmos são aplicados para encontrar padrões.
🧩 7. MD é Multidisciplinar
· A MD combina várias áreas de conhecimento. Ela é uma área científica multidisciplinar.
· A base da Mineração de dados é composta por três disciplinas: 
1. ESTATÍSTICA
· Estuda relações numéricas entre dados.
· É a base da maioria dos métodos em MD.
· Exemplo: médias, desvios, correlações, testes de hipótese.
2. INTELIGÊNCIA ARTIFICIAL (IA)
· Tenta reproduzir a inteligência humana nas máquinas.
· Usa heurísticas (regras práticas para resolver problemas).
· Ao contrário da estatística (que é matemática pura), a IA simula a forma como o ser humano pensa.
3. MACHINE LEARNING (APRENDIZADO DE MÁQUINA)
· É o “casamento” da estatística com a IA.
· Usa algoritmos que aprendem com os dados para prever, classificar ou tomar decisões.· Exemplo: um modelo de ML pode aprender a identificar fraudes em cartões de crédito observando transações passadas.
🎯 8. Finalidade da Mineração de Dados
· Analisar grandes volumes de dados (Big Data).
· Encontrar padrões escondidos e relações não óbvias.
· Usar esses padrões em modelos preditivos ou explicativos.
· Aplicar em diversas áreas: marketing, medicina, finanças, segurança, redes sociais etc.
Algoritmos baseados em modelos preditivos e modelos descritivos
🧠 O que é mineração de dados?
· Mineração de dados (MD) é o processo de explorar grandes volumes de dados.
· Ferramentas de MD identificam automaticamente padrões, anomalias e relações que o usuário não percebeu.
· Tudo isso ocorre com mínima interferência do usuário, ou seja, o sistema atua de forma autônoma.
🤖 Inteligência Artificial nos algoritmos
· As ferramentas de MD usam algoritmos para executar essas análises.
· Esses algoritmos incorporam inteligência artificial, dando “inteligência” ao processo de extração de informações.
🎯 Dois tipos de modelos usados nos algoritmos
A mineração de dados pode seguir dois principais caminhos:
🔮 Modelo Preditivo
· Objetivo: prever valores ou comportamentos futuros com base em dados passados.
· Ex: prever se um cliente vai cancelar um serviço.
🧾 Modelo Descritivo
· Objetivo: entender os dados atuais, identificar grupos, perfis ou padrões.
· Ex: descobrir diferentes perfis de clientes com base no comportamento de compra.
🔁 5. Escolha do Modelo: Preditivo ou Descritivo?
· A escolha entre prever ou descrever depende:
· Dos objetivos do negócio
· Do sistema de mineração de dados utilizado
· Ambos os modelos são aplicados por meio de diversos algoritmos e métodos computacionais.
🔮 MODELO PREDITIVO
· O que é o Modelo Preditivo?
· É uma técnica da área de mineração de dados.
· Objetivo: prever um valor ou uma classe com base em dados passados.
· Ou seja, busca prever resultados futuros com base em padrões já existentes.
· Usa variáveis conhecidas (entrada) para estimar uma variável desconhecida (saída). 
· Funciona como uma “bola de cristal estatística”, ajudando a prognosticar comportamentos ou valores de novos dados.
· Muito usado em:
· Previsão de vendas
· Diagnóstico médico
· Análise de crédito
· Detecção de fraudes
· Subdivisões do Modelo Preditivo
1. CLASSIFICAÇÃO
· Prediz a associação dos dados a categorias específicas (classes).
Exemplo:
· Imagine um sistema que quer prever se uma pessoa vai jogar tênis.
· Ele analisa dados anteriores (como clima, dia da semana, disponibilidade) e aprende o comportamento.
· Com esses padrões, ele estima se a pessoa vai ou não jogar em uma nova situação.
Outros Exemplos: 
· Prever se alguém vai responder a um e-mail.
· Estimar se um cliente tem risco alto ou baixo de crédito.
2. PREDIÇÃO (REGRESSÃO)
· Prediz valores numéricos específicos, por meio da regressão.
Exemplo:
· Um sistema quer prever o valor do aluguel de um imóvel.
· Ele considera dados como localização, tamanho, número de quartos.
· Com base nos padrões anteriores, calcula um valor estimado.
Outros exemplos: 
· Estimar a receita de um cliente no próximo ano.
· Prever em quantos meses um equipamento vai falhar.
3. ESTIMAÇÃO
· Prediz algum valor baseado num padrão já conhecido.
· Ou, seja, estima valores aproximados usando padrões conhecidos.
Exemplo:
· Um sistema sabe que pessoas de certa idade e padrão de gastos geralmente têm um salário X e Y filhos.
· Com esses dados, ele estima o salário e número de filhos de uma nova pessoa com perfil semelhante.
· Algoritmos de modelagem preditiva mais utilizados são: 
· Árvore de decisão
· Regressão 
· Redes neurais artificiais.
1. ÁRVORES DE DECISÃO
· São estruturas em forma de árvore usadas para classificar ou prever.
· Funcionam com regras do tipo “SE... ENTÃO...”.
· Cada nó interno representa uma condição sobre uma variável.
· Cada ramo leva a outra condição ou a uma decisão final (folha).
Exemplo:
Objetivo: prever se uma pessoa compra um produto.
· SE idadeautomática.
· São muito flexíveis e aplicáveis a várias áreas — de saúde a finanças.
🧾 MODELO DESCRITIVO
O que é o Modelo Descritivo?
· É uma abordagem da mineração de dados voltada para investigar o passado.
· Seu objetivo é descrever fatos importantes e validar a qualidade da base de dados.
· Foca em entender o que aconteceu com base nos dados coletados.
Subdivisões do Modelo Descritivo
1. Agrupamento
· Organiza os dados em grupos com base na similaridade entre eles.
· Ajuda a identificar padrões ocultos dentro dos dados.
2. Sumarização
· Cria uma versão resumida e compacta das informações mais relevantes.
· Facilita a interpretação geral de grandes conjuntos de dados.
3. Associação
· Identifica relações entre diferentes atributos dos dados.
· Exemplo prático: descobrir que clientes que compram pão também tendem a comprar manteiga.
Algoritmos mais usados na modelagem descritiva:
1️⃣ Expectation-Maximization (EM)
· Técnica usada para estimar parâmetros de modelos estatísticos, mesmo com dados incompletos.
· Baseia-se na ideia de preencher valores ausentes com base nos dados que estão disponíveis.
· Funciona em duas fases alternadas:
· E (Expectation): estima os valores desconhecidos.
· M (Maximization): atualiza os parâmetros do modelo com base nessas estimativas.
· Repite o processo até convergir para o melhor modelo possível.
💡 Ideal quando há dados faltando na base, pois o EM tenta "preencher as lacunas" usando probabilidade.
2️⃣ K-means (k-Médias)
· Técnica simples e muito popular de agrupamento (clustering).
· Objetivo: dividir os dados em K grupos (clusters) com base na semelhança entre eles.
· Cada grupo é representado por um centro (centróide), que é a média dos pontos no grupo.
🧪 Como funciona:
1. Escolhe-se o número de grupos K.
2. Inicialmente, define-se K centroides aleatórios.
3. Cada dado é atribuído ao centróide mais próximo (medido normalmente pela distância euclidiana).
4. Os centroides são recalculados com base nos grupos formados.
5. Repete-se até que os grupos se estabilizem (não mudem mais).
💡 Muito útil quando se quer agrupar dados similares, como clientes com hábitos parecidos.
3️⃣ Hierárquico (H)
· Cria uma estrutura em forma de árvore de agrupamentos (como um "organograma").
· Possui dois tipos principais:
· Divisivo: começa com todos os dados em um só grupo, e vai dividindo até formar os grupos desejados.
· Aglomerativo: começa com cada instância como um grupo separado e vai juntando os grupos mais semelhantes até atingir o número desejado.
💡 É útil quando se deseja entender a hierarquia entre os dados ou visualizar os agrupamentos de forma mais detalhada (ex: dendrogramas).
🧩 Diferença resumida:
	Tipo de modelo
	Finalidade principal
	Exemplo típico
	Preditivo
	Prever valores ou classes
	Prever risco de inadimplência
	Descritivo
	Entender estrutura ou padrões nos dados
	Agrupar clientes por comportamento
Técnicas de mineração de dados não estruturados
📌 O que é Mineração de Dados?
· É o processo de extrair padrões relevantes de grandes volumes de dados.
· Esses padrões são transformados em conhecimento útil para tomada de decisão.
🧱 Tipos de Dados: Estruturados vs. Não Estruturados
1️⃣ DADOS ESTRUTURADOS:
· Organizáveis em tabelas, com colunas (atributos) e linhas (registros).
· Exemplo: base de pacientes com informações como idade, peso, diagnóstico etc.
💡 Exemplo prático: Com a tabela de pacientes, pode-se usar mineração de dados para encontrar relações como:
“Pacientes com mais de 40 anos e jornada de trabalho > 8 horas têm maior chance de lesão.”
2️⃣ DADOS NÃO ESTRUTURADOS:
· São textos livres, sem formato fixo.
· Exemplo: e-mails, mensagens de chat, artigos científicos, notícias, etc.
· Muito comuns na Internet, empresas e pesquisas.
🧠 O que é Mineração de Texto (MT)?
· É a aplicação da mineração de dados sobre textos não estruturados.
· Tem como objetivo extrair padrões úteis e relevantes, como sentimentos, temas e palavras-chave.
· Considera que:
· Cada texto tem um formato e vocabulário próprios.
· Todos os textos transmitem uma mensagem que precisa ser compreendida.
🔧 Técnicas Usadas na Mineração de Texto
1. PROCESSAMENTO DE LINGUAGEM NATURAL (PLN)
· É um ramo da inteligência artificial que permite que máquinas entendam, interpretem e interajam com a linguagem humana.
🧪 Exemplo: Quando você diz “gostei dessa música” para a Alexa, ela entende, registra sua preferência e responde com uma fala natural — isso é uso de PLN.
2. RECUPERAÇÃO DE INFORMAÇÕES
· É uma técnica que busca processar textos e encontrar quais documentos que respondem a uma pergunta.
· Usa estatísticas ou análise semântica para entender o conteúdo.
3. EXTRAÇÃO DE INFORMAÇÃO
· É a técnica que encontra e coleta partes específicas de um texto com informações relevantes.
· Exemplo: em um texto médico, extrair data, nome do paciente e diagnóstico automaticamente.
🧩 Objetivo da Mineração de Textos
· Identificar padrões não triviais (não óbvios) em textos.
· Tornar a análise computacionalmente viável, mesmo com textos longos e variados.
· Relacionar palavras e conceitos para gerar conhecimento útil.
📈 Relevância da Mineração de Texto
· Aproximadamente 80% das informações das empresas estão em forma de texto.
· Por isso, a mineração de texto tem grande valor comercial.
· Ajuda empresas a analisar e tomar decisões com base em e-mails, relatórios, avaliações de clientes, etc.
	Descoberta de Conhecimento em Bases de Dados (KDD)
· A Descoberta de Conhecimento em Bases de Dados (KDD) é um processo que tem como principal objetivo encontrar informações úteis e padrões escondidos em grandes volumes de dados. 
· Pense nisso como uma "caça ao tesouro" onde o tesouro são padrões que podem nos surpreender ou nos ajudar a tomar decisões, como, por exemplo, identificar um gasto de luz incomum que se repete a cada seis meses em uma empresa.
· Para garantir que essa "caça ao tesouro" seja bem-sucedida, o KDD segue um conjunto de fases e utiliza técnicas e tarefas.
· Tarefas de Mineração: São o "quê" queremos buscar nos dados, ou seja, o tipo de padrão que nos interessa, como classificação, associação, clusterização, regressão ou sumarização.
· Técnicas de Mineração: São o "como" vamos descobrir esses padrões, ou seja, os métodos aplicados a uma tarefa específica. A escolha da técnica depende do problema que queremos resolver.
O processo de descoberta de conhecimento pode ser organizado em quatro passos principais:
1. Identificação do Problema: Entender qual é a questão que a mineração de dados precisa resolver.
2. Escolha da Tarefa: Selecionar a tarefa de mineração de dados mais adequada para o problema e os dados.
3. Escolha da Técnica: Definir a técnica de mineração de dados que será empregada.
4. Escolha do Algoritmo: Selecionar o algoritmo de aprendizado de máquina que será utilizado.
Exemplo: Identificação da Espécie de uma Flor de Íris 
Vamos aplicar esses conceitos através de um exemplo prático para identificar a espécie de uma nova flor de íris:
1. Identificação do Problema: * Objetivo: Descobrir a qual espécie (por exemplo, vicolor, cetosa ou virginica) uma nova flor de íris pertence, considerando suas características de comprimento e largura da pétala. 
2. Escolha da Tarefa: * Tarefa Escolhida: Classificação. 
* Por que Classificação? 
· Porque temos um conjunto de exemplos (a base de dados das flores de íris) que já estão rotulados (ou seja, já sabemos a espécie de cada flor: cetosa, vescicolo e viriginica). 
· A classificação nos permite criar um "classificador" que aprenderá com esses exemplos rotulados.
3. Escolha da Técnica: * Técnica Escolhida: Árvore de Decisão. 
* O que é uma Árvore de Decisão? 
· É como um "mapa de decisões" em formato de árvore. 
· Ela é composta por nós, que são pontos de decisão. 
· Começa com um nó raiz, que é o ponto de partida. 
· A partir do nó raiz, ela se ramifica em "filhos" (subdecisões). 
· Cada nó armazena uma regra. 
· Os nós folha são o final do caminho, representando a decisão final a ser tomada (no nosso caso, a espécie da flor). 
· A belezaaqui é que a construção dessa árvore é automática, feita a partir dos dados de treinamento.
4. Escolha do Algoritmo: * Algoritmo Escolhido: C4.5. 
* Por que C4.5? Ele é uma implementação para construir uma árvore de decisão, usada para tarefas de classificação e também regressão. 
* Como o C4.5 constrói a árvore? 
· Ele começa de cima para baixo (do nó raiz). 
· Em cada etapa, ele identifica o melhor atributo para fazer a próxima divisão (ou seja, para criar o próximo nó). 
· Essa escolha é feita através de testes estatísticos que medem quão bem um atributo classifica os exemplos, usando conceitos como entropia e ganho de informação. 
· Para cada valor possível do atributo escolhido, ele cria um novo ramo (filho) na árvore. 
· Esse processo se repete recursivamente até que a árvore seja capaz de classificar todos os exemplos de treinamento e todos os atributos relevantes tenham sido usados, ou até que um critério de parada seja atingido (como todas as "folhas" serem "puras", ou seja, conterem apenas uma espécie de flor).
5. Construção e Uso da Árvore de Decisão (Exemplo da Flor de Íris em Ação):
Imaginemos que temos um conjunto de dados com exemplos de flores de íris, cada uma com seu comprimento de pétala, largura de pétala e sua espécie já identificada. O algoritmo C4.5 vai analisar esses dados para construir a árvore:
· Passo 1: Definir o Nó Raiz
· O algoritmo C4.5 testa todos os atributos (comprimento e largura da pétala) e seus possíveis valores para encontrar o "corte" que melhor separa as espécies.
· Para este conjunto de dados, o comprimento da pétala com valor de 2,45 cm foi identificado como o melhor ponto de corte. Este será o nó raiz da nossa árvore.
· Passo 2: Criar os Ramos e Nós Filhos:
· Ramo 1: Se o comprimento da pétala for MENOR ou IGUAL a 2,45 cm: 
· Essa região do espaço é considerada "pura" (todos os exemplos aqui pertencem à mesma espécie).
· Então, a árvore para de particionar aqui. Este é um nó folha e a flor é classificada como da espécie Cetosa.
· Ramo 2: Se o comprimento da pétala for MAIOR que 2,45 cm: 
· Essa região não é pura, ou seja, ainda há uma mistura de espécies.
· O algoritmo continua o processo de particionamento, procurando o próximo melhor atributo para dividir essa sub-região. Ele analisa a largura da pétala.
· Passo 3: Continuar os Ramos (Subdecisões):
· Se a largura da pétala for MENOR ou IGUAL a 1,75 cm (dentro do ramo "comprimento > 2,45 cm"): 
· A flor é classificada como da espécie Vicolor.
· Se a largura da pétala for MAIOR que 1,75 cm (dentro do ramo "comprimento > 2,45 cm"): 
· A flor é classificada como da espécie Virginica.
Como a árvore prevê a espécie de uma nova flor?: 
Vamos imaginar que temos uma nova flor de íris com as seguintes características: 
· Comprimento da pétala: 3,57 cm
· Largura da pétala: 2,33 cm
1. A árvore começa pelo nó raiz (Comprimento da Pétala).
2. O comprimento (3,57 cm) é maior que 2,45 cm. Então, seguimos pelo ramo da direita.
3. No próximo nó, avaliamos a largura da pétala.
4. A largura (2,33 cm) é maior que 1,75 cm.
5. Portanto, a árvore de decisão determina que a nova flor é da espécie Virginica.
Este exemplo demonstra como o KDD, através de uma sequência de passos e a aplicação de um algoritmo de aprendizado de máquina (C4.5 para Árvore de Decisão), consegue descobrir padrões nos dados e usá-los para classificar novas informações de forma automática.
TEMA 4. TREINAMENTO DE MODELOS DE APRENDIZADO DE MÁQUINA
Módulo 1. Descrição do treinamento do modelo de máquinas de vetores de suporte
Descrevendo o SVM (Support Vector Machine, em português Máquina de Vetor de Suporte)
📌 O que é o SVM?
· É um modelo de classificação (e regressão) baseado em geometria.
· Apresentado por Vapnik em 1995. 
· Cada observação é representada como um ponto em um espaço.
· Ele separa os dados em grupos (classes) com uma linha (ou plano) de decisão.
· A ideia central é separar os dados em classes traçando uma linha (ou plano) que melhor divide os grupos. 
· O objetivo é escolher a melhor linha que separa as classes com a maior margem possível.
✅ Em Resumo:
· Cada dado é um ponto no gráfico.
· O SVM aprende a separar esses pontos em grupos (classes). 
· Essa separação é chamada de classificação.
· Essa separação pode ser:
· Duas classes: Se temos duas classes, o modelo aprende a traçar uma linha que divide os dois grupos.
Ex: Doentes (positivos) vs. Saudáveis (negativos).
· Várias classes (mais de duas), usando estratégias como:
· Um contra todos (one-vs-all): O SVM cria uma linha que separa uma classe específica contra todas as outras juntas. 
Ex: se temos 3 frutas (maçã, banana, uva), o modelo faz:
· Maçã vs. (banana + uva)
· Banana vs. (maçã + uva)
· Uva vs. (maçã + banana)
· Um contra um (one-vs-one): O SVM cria uma linha que separa os elementos em grupos de classes (multiclassificação um a um), ou seja, compara duas classes por vez. 
Ex: se temos 3 frutas (maçã, banana, uva), o modelo faz:
· Maçã vs. Banana
· Maçã vs. Uva
· Banana vs. Uva
Isso é chamado de um a um (one-vs-one).
· O limite de decisão é a linha que separa as classes.
· O SVM escolhe essa linha com base nos pontos mais próximos da separação, chamados de vetores de suporte.
· A ideia é otimizar (ajustar da melhor forma possível) essa linha para que a separação seja a mais segura e precisa. 
· O SVM (Máquina de Vetor de Suporte) tem esse nome devido aos vetores de suporte que definem as margens e balizam o hiperplano de decisão.
 🧩 Como o SVM funciona?
📌 Passo 1 – PONTO A CLASSIFICAR
· Imagine um plano com pontos de duas cores (duas classes), conforme imagem ao lado.
· Os dados estão representados por formas diferentes:
· Losangos vermelhos (Classe A)
· Círculos azuis (Classe B) 
· O ponto marcado com “?” é um novo dado que precisa ser classificado.
· Ainda não há linha de separação entre os grupos
📌 Passo 2 – PRIMEIRA TENTATIVA DE SEPARAÇÃO
· Um vetor de separação é traçado (linha), para tentar separar as classes.
· Ainda não é a ideal, pois a separação ainda é confusa.
· O algoritmo ainda está testando.
📌 Passo 3 – TESTANDO VÁRIAS SEPARAÇÕES
· O algoritmo SVM testa várias linhas diferentes (V1, V2, ..., VN).
· A meta é encontrar a linha que melhor separa os grupos.
· Essa linha ideal será escolhida com base em um critério: margem máxima. 
· O SVM busca o vetor (linha) que tenha a maior margem entre os pontos das duas classes.
📌 Passo 4 – SOLUÇÃO FINAL DO SVM
· A linha do meio (reta contínua) é o hiperplano de decisão ótimo.
· As linhas pontilhadas são chamadas de vetores de suporte.
· Esses vetores ajudam a definir a margem entre as classes.
· O ponto "NOVO" (antes era “?”) está do lado dos losangos, então é classificado como classe 1. 
· O objetivo é maximizar a margem (distância entre os vetores de suporte e o hiperplano).
✏️ Matemática por trás do SVM (explicada de forma simples):
🔸 Representação dos dados:
· Cada ponto é um par: (Xᵢ, Yᵢ):
· Xᵢ: vetor com características do ponto (ex: altura, peso...).
· Yᵢ: classe (0 ou 1).
· Os dados vêm de uma distribuição desconhecida P(x, y).
· O SVM deve aprender a associar X → Y (classificar corretamente novas entradas).
🔸 Objetivo:
· Aprender uma função que mapeia X → Y corretamente, mesmo para novos dados.
· Ou seja, O SVM aprende a prever a classe Y a partir das características X.
· Isso é feito minimizando o erro de classificação.
🔸 Função de erro (esperada e empírica):
Erro esperado: Impossível calcular diretamente, pois não conhecemos P(X,Y) (a distribuição real dos dados).
Em outras palavras, não dá para calcular diretamente pois a distribuição dos dados, que é desconhecida.
· Erro empírico: é o erro calculado nos dados que temos (conhecidos).
· É a média de erros no conjunto de treino.
· Depende da configuração do modelo (representada por α) e do conjunto de dados.
🔸 Complexidade e Garantia com Dimensão VC:
· É apresentada a Dimensão Vapnik-Chervonenkis (VC):
· Mede a capacidade ou flexibilidade de um modelo.
· Ex: modelos muito flexíveis podem se ajustar demais aos dados (overfitting).
· O SVM buscaminimizar o erro empírico + um termo de complexidade (que evita que o modelo se ajuste demais aos dados de treino).
· Fórmula:
Onde:
· h: dimensão VC
· O: número de exemplos
· k: valor que determina a confiança (1 - k)
· A parte da raiz quadrada é chamada de "termo de complexidade".
· A fórmula de generalização mostra que: 
Erro real ≤ erro no treino + termo de complexidade
· O termo de complexidade (com raiz quadrada) depende da dimensão VC e do número de exemplos.
· Quanto mais complexo o modelo, maior o risco de errar em dados novos.
🎯 Conclusão
· O SVM procura um limite de decisão ótimo, que separe bem as classes com a maior margem possível.
· Para isso, ele minimiza o erro nos dados de treino e controla a complexidade do modelo, evitando que ele se ajuste demais aos dados.
· É uma técnica poderosa para classificação binária, mas também pode ser estendida para multiclasse.
Conclusão em linguagem simples:
· O SVM é como uma régua que tenta dividir duas turmas diferentes no pátio da escola.
· Ele testa várias posições da régua até encontrar a melhor, deixando espaço igual dos dois lados.
· Os alunos mais próximos da régua ajudam a definir essa posição ideal (são os vetores de suporte).
· Assim, novos alunos (ponto “?”) podem ser classificados corretamente com base em onde eles caem em relação à régua.
Tarefas de Aprendizado de Máquina
📌 O que são tarefas de Aprendizado de Máquina?
Assim como nós aprendemos com a experiência, os modelos de machine learning também têm diferentes formas de aprender. As três principais tarefas são:
1. Classificação
· O modelo aprende a identificar categorias ou rótulos.
· Exemplo: “Esse e-mail é spam ou não é?”
· Relacionado à decisão entre classes.
2. Regressão
· O modelo aprende a prever valores numéricos contínuos.
· Exemplo: “Qual será o preço de uma casa com 3 quartos?”
· Ele projeta uma função matemática que se aproxima da realidade.
3. Agrupamento (Clusterização)
· O modelo agrupa dados semelhantes sem usar rótulos previamente definidos.
· Exemplo: “Agrupar clientes com comportamentos de compra parecidos.”
· Baseado em similaridade ou proximidade entre os dados.
📌 Separação dos dados: Linear x Não Linear
Antes de treinar o modelo, é importante visualizar os dados:
· Se eles podem ser separados com uma linha reta (ou plano), dizemos que são linearmente separáveis.
· Se não conseguimos separá-los com uma linha reta, então são não linearmente separáveis.
➤ Classificação Linear: 
· O SVM encontra um hiperplano (uma reta, plano, etc.) que separa os grupos.
· Esse hiperplano é otimizado de forma parecida com uma equação da reta:
· Exemplo: 
	Explicação Detalhada:
🔹 1. O que é um hiperplano?
· Um hiperplano é uma reta em 2D, um plano em 3D, e assim por diante.
· Em machine learning, ele é a fronteira que separa duas classes no espaço de características.
🔹 2. Equação geral do hiperplano no SVM
A equação usada é:
Onde:
· X: vetor de entrada (exemplo de dados com suas características).
· w: vetor de pesos (definido pelo modelo).
· b: termo de bias (viés).
· ⟨X,w⟩: produto escalar entre os vetores X e w.
👉 Isso é muito parecido com a equação da reta , só que em forma vetorial e em qualquer dimensão.
🔹 3. Como isso separa as classes?
O valor de nos diz de que lado do hiperplano o ponto XXX está:
· Se → o ponto está de um lado (classe positiva, por exemplo).
· Se → o ponto está do outro lado (classe negativa, por exemplo).
👉 Esse é o critério de decisão do SVM para a classificação linear.
🔹 4. Por que fala em "limites inferior e superior"?
No SVM, além de separar as classes, o objetivo é maximizar a margem entre elas. Por isso, ele define:
· Um limite superior:
 → para os pontos da classe positiva.
· Um limite inferior:
 → para os pontos da classe negativa.
🔹 Entre esses dois limites, está o hiperplano central:
Os pontos que encostam nesses limites são os vetores de suporte.
✅ Exemplo simples (com 2 características):
Imagine um problema onde classificamos pontos em:
· Classe 1 (círculo)
· Classe -1 (quadrado)
Suponha que:
· Um ponto 
· O modelo calculou 
Vamos calcular:
→ Como deu· Se os dados não forem separáveis por uma linha reta, o SVM usa uma função chamada kernel que transforma os dados para que fiquem separáveis.
· Assim, ele resolve tanto problemas simples quanto complexos.
🔴 Desvantagens do SVM
1. Não fornece “certeza” (probabilidade) naturalmente
· O SVM diz qual é a classe (ex: spam ou não spam), mas não diz quão confiante está nisso.
· Outros modelos, como regressão logística, dizem coisas como: “há 90% de chance de ser spam”.
2. Treinamento pode ser lento com muitos dados
· Se você tiver milhares ou milhões de linhas, o SVM pode demorar muito para treinar.
· Isso ocorre porque ele faz muitos cálculos para encontrar a melhor separação.
3. Sofre se os dados tiverem muitos “ruídos” ou variáveis inúteis
· Se o conjunto tiver muitas colunas irrelevantes, o SVM pode se perder ou criar um modelo muito ajustado aos dados de treino (overfitting).
· Por isso, é necessário regularizar o modelo e ajustar bem os parâmetros.
🧠 Analogias para facilitar:
	Situação
	SVM funciona bem?
	Por quê?
	📷 Imagens com gatos e cachorros
	✅ Sim
	Diferença clara entre as classes → fácil separar com uma linha ou curva.
	📄 Textos curtos sobre vários temas
	✅ Sim
	Mesmo com sobreposição, o kernel ajuda a separar bem os grupos.
	📊 Milhões de registros de vendas
	❌ Cuidado!
	Pode ficar muito lento e confuso com variáveis demais.
🎯 Conclusão rápida:
	✅ Vantagens
	❌ Desvantagens
	Lida bem com muitos atributos
	Treinamento lento com muitos dados
	Usa só os pontos importantes
	Não dá “certeza” (probabilidades) por padrão
	Resolve casos complexos com kernel
	Pode ter overfitting se não for bem ajustado
🎯 Conclusão:
O SVM é um modelo poderoso e preciso, especialmente útil para tarefas de classificação com dados bem separados (ou transformáveis via kernel).
Porém, exige cuidado com o volume de dados, escolha de variáveis e parâmetros, principalmente para evitar excesso de complexidade ou tempo de execução elevado.
Implementando um classificador SVM em Python
📦 1. Preparando o ambiente
· Antes de começar, é necessário instalar/importar as bibliotecas:
· pandas → manipulação de dados.
· numpy → cálculo numérico.
· matplotlib.pyplot → gráficos.
📌 Código Python:
import pandas as pd  # Biblioteca para manipulação de dados em DataFrames
import numpy as np  # Biblioteca para cálculos numéricos
import matplotlib.pyplot as plt  # Biblioteca para visualização de gráficos
🌸 2. Carregando o dataset Íris
· O dataset Íris é um conjunto clássico de machine learning com dados de flores.
· Contém 4 características (features):
· Comprimento e largura da sépala.
· Comprimento e largura da pétala.
· A classe alvo (target) indica a espécie da flor.
📌 Código Python:
from sklearn.datasets import load_iris  # Função para carregar o conjunto de dados Iris
data = load_iris()  # Carrega os dados do conjunto Iris
iris = pd.DataFrame(data['data'], columns=data.feature_names)  # Cria um DataFrame com os dados das flores
target = data.target  # Variável com as classes (espécies) das flores
display(iris)  # Exibe o DataFrame para visualização 
# Imprime:
	
	sepal length (cm)
	sepal width (cm)
	petal length (cm)
	petal width (cm)
	0
	5.1
	3.5
	1.4
	0.2
	1
	4.9
	3.0
	1.4
	0.2
	2
	4.7
	3.2
	1.3
	0.2
	3
	4.6
	3.1
	1.5
	0.2
	4
	5.0
	3.6
	1.4
	0.2
	...
	...
	...
	...
	...
	145
	6.7
	3.0
	5.2
	2.3
	146
	6.3
	2.5
	5.0
	1.9
	147
	6.5
	3.0
	5.2
	2.0
	148
	6.2
	3.4
	5.4
	2.3
	149
	5.9
	3.0
	5.1
	1.8
150 rows × 4 columns
🤖 3. Criando o classificador SVM
· O SVM é chamado de SVC na biblioteca scikit-learn.
· A função SVC(gamma="auto") cria o modelo.
📌 Código Python:
# Importando o algoritmo de SVM
from sklearn.model_selection import cross_val_score  # Função para validação cruzada
from sklearn.svm import SVC  # Importa o classificador SVM
svc = SVC(gamma="auto")  # Instancia o modelo SVM com parâmetro gamma automático (A classe SVC no sklearn tem como padrão a função kernel RBF - base radial)
📊 4. Avaliando o modelo com validação cruzada
· Validação cruzada divide o conjunto de dados em várias partes e testa o modelo em cada uma.
· O resultado é a acurácia média (%) do modelo.
📌 Código Python:
# Testando o modelo 'svc' na nossa base 'iris'
cv_result = cross_val_score(svc, iris, target, cv=10, scoring="accuracy")  # Avalia o modelo usando validação cruzada de 10 folds
# Retorna a acurácia em porcentagem do nosso modelo
print("Acurácia com cross validation:", cv_result.mean() * 100)  # Exibe a média da acurácia dos testes
# Imprime: Acurácia com cross validation: 98.00000000000001
🧪 5. Treinando o modelo e fazendo uma predição
· Após avaliar, podemos treinar o modelo com todos os dados.
· Em seguida, fazemos uma previsão com uma nova flor (valores novos).
📌 Código Python:
svc.fit(iris, target)  # Treina o modelo SVM com os dados completos
# Prediz a que classe pertence uma flor com características específicas
svc.predict([[6.9, 2.8, 6.1, 2.3]])  # Faz uma predição com dados de sépala e pétala
# Imprime: array([2])
👉 Isso retorna o número da classe correspondente à espécie da flor prevista, que neste caso retornou a que a flor pertence a classe 2.
📈 6. Visualizando os dados
· Um gráfico de dispersão é criado usando:
· Eixo X: comprimento da sépala.
· Eixo Y: largura da pétala.
· Cor: espécie (classe).
📌 Código Python:
# Cria um gráfico de dispersão com duas features
plt.scatter(iris['sepal length (cm)'], iris['petal width (cm)'], c=target)  # Gráfico colorido das flores segundo duas características
plt.title('Iris')  # Título do gráfico
plt.show()  # Exibe o gráfico
Esse é o primeiro gráfico (com pontos coloridos):
🗺️ 7. Visualizando os hiperplanos do SVM
· O modelo é treinado com apenas duas features: comprimento da sépala e largura da pétala.
· É gerado um mapa de cores com as regiões de decisão do SVM.
· O gráfico mostra as fronteiras (hiperplanos) que separam as classes.
📌 Código Python:
# Obtém os valores mínimos e máximos das duas features selecionadas
x0_min, x0_max = iris['sepal length (cm)'].min(), iris['sepal length (cm)'].max()  # Faixa da sépala
x1_min, x1_max = iris['petal width (cm)'].min(), iris['petal width (cm)'].max()  # Faixa da pétala
# Calcula as larguras das faixas para criar a malha de pontos
w = x0_max - x0_min  # Diferença entre os extremos da sépala
h = x1_max - x1_min  # Diferença entre os extremos da pétala
# Cria uma malha de pontos com espaçamento regular para visualização
x0, x1 = np.meshgrid(
    np.linspace(x0_min - .1*w, x0_max + .1*w, 300),  # Gera pontos ao longo do comprimento da sépala
    np.linspace(x1_min - .1*h, x1_max + .1*h, 300)   # Gera pontos ao longo da largura da pétala
)
# Treina novamente o modelo usando apenas duas features
svc.fit(iris[['sepal length (cm)', 'petal width (cm)']], target) # Modelo treinado com duas características
# Realiza a predição para cada ponto da malha criada
ypred = svc.predict(np.c_[x0.reshape(-1, 1), x1.reshape(-1, 1)]) # Prediz as classes para os pontos da malha
# Reformata as predições para o formato original da malha
ypred = ypred.reshape(x0.shape)  # Ajusta o formato da matriz de predições
# Plota as áreas de decisão aprendidas pelo modelo
plt.contourf(x0, x1, ypred)  # Mostra as regiões de decisão com cores de fundo
# Adiciona o gráfico de dispersão por cima das regiões de decisão
plt.scatter(iris['sepal length (cm)'], iris['petal width (cm)'], c=target, s=64, edgecolors='k')  # Gráfico com as flores e contorno
plt.title('Iris')  # Título do gráfico final
plt.show()  # Exibe o gráfico final
 Esse é o segundo gráfico, mostrando as regiões de decisão do SVM:
 
🔍 Observações importantes:
· O SVM aprendeu bem os limites entre as espécies de flor.
· Mesmo com alguns outliers (pontos entre as fronteiras), o modelo ignora estrategicamente para não superajustar (overfitting).
· Isso melhora a capacidade de generalização do classificador.
· Visualmente, percebemos que os dados não são separados por linhas retas — as classes têm uma separação curva ou irregular.
📉 Por que o problema não é linearmente separável?· Em um problema linearmente separável, é possível traçar uma linha reta (ou plano) que divide perfeitamente as classes.
· No gráfico apresentado, vemos que:
· Algumas flores da mesma classe estão misturadas com outras.
· Portanto, nenhuma linha reta consegue separar perfeitamente as classes.
· Por padrão o SVC escolhe a função radial como kernel de decisão para executar o algoritmo, o que favorável neste caso, uma vez que este problema não é linearmente separável:
· svc = SVC(gamma="auto")  # Instancia o modelo SVM com parâmetro gamma automático (A classe SVC no sklearn tem como padrão a função kernel RBF - base radial)
· Devido ao uso do kernel radial é possível ver as separações não lineares no gráfico, formando essas curvas.
📊 Alterando o kernel para Linear:
· Mudando o kernel para linear, conforme código abaixo observa-se que há uma queda na acurácia, devido ao fato desse problema não ser linearmente separável e tentarmos impor um classificador linear: 
# Importando o algoritmo de SVM
from sklearn.model_selection import cross_val_score  # Função para validação cruzada
from sklearn.svm import SVC  # Importa o classificador SVM
svc = SVC(gamma="auto", kernel="linear")  # Instancia o modelo SVM com parâmetro gamma linear
# Testando o modelo 'svc' na nossa base 'iris'
cv_result = cross_val_score(svc, iris, target, cv=10, scoring="accuracy")  # Avalia o modelo usando validação cruzada de 10 folds
# Retorna a acurácia em porcentagem do nosso modelo
print("Acurácia com cross validation:", cv_result.mean() * 100)  # Exibe a média da acurácia dos testes
# Imprime: Acurácia com cross validation: 97.33333333333334
# Treina novamente o modelo usando apenas duas features
svc.fit(iris[['sepal length (cm)', 'petal width (cm)']], target)  # Modelo treinado com duas características
# Realiza a predição para cada ponto da malha criada
ypred = svc.predict(np.c_[x0.reshape(-1, 1), x1.reshape(-1, 1)])  # Prediz as classes para os pontos da malha
# Reformata as predições para o formato original da malha
ypred = ypred.reshape(x0.shape)  # Ajusta o formato da matriz de predições
# Plota as áreas de decisão aprendidas pelo modelo
plt.contourf(x0, x1, ypred)  # Mostra as regiões de decisão com cores de fundo
# Adiciona o gráfico de dispersão por cima das regiões de decisão
plt.scatter(iris['sepal length (cm)'], iris['petal width (cm)'], c=target, s=64, edgecolors='k')  # Gráfico com as flores e contorno
plt.title('Iris')  # Título do gráfico final
plt.show()  # Exibe o gráfico final
Gráfico gerado forçando a classificação linear:
🔁 O que acontece quando forçamos um kernel linear?
📌 Trecho do código:
svc = SVC(gamma="auto", kernel="linear")  # Instancia o modelo SVM com parâmetro gamma linear
· Aqui, você diz ao SVM: “Use apenas linhas retas para separar os dados.”
· Como o problema não é linear, o modelo tem mais dificuldade de separar corretamente as classes.
· Resultado: queda na acurácia (o modelo erra mais).
Mesmo assim, o modelo obteve 97,33% de acurácia, o que mostra que:
· As duas features escolhidas ainda têm um bom poder de separação,
· Mas não tão bom quanto com o kernel radial (que se adapta melhor à curvatura dos dados).
🧱 Diferença visual: Kernel Radial vs Linear
1. Com Kernel Radial (RBF) – padrão do SVM
· As regiões de decisão são curvas e adaptadas à distribuição real dos dados.
· O modelo se molda ao formato dos dados, conseguindo separar melhor as classes.
· Ideal para problemas não linearmente separáveis, como este caso do dataset Íris.
· ✅ Melhor generalização e maior acurácia.
2. Com Kernel Linear (forçado)
· As fronteiras de decisão são linhas retas.
· Não consegue capturar bem as regiões mais complexas entre as classes.
· Apesar de ainda acertar muitos pontos, tem mais chance de erro nos limites.
· Útil para problemas mais simples ou quando velocidade é prioridade.
⚠️ Implicações de forçar a classificação linear:
	Consequência
	Explicação
	🔻 Menor acurácia
	A linha reta não acompanha a forma real dos dados, então o modelo erra mais.
	📉 Menor capacidade de generalização
	O modelo pode não aprender bem casos mais complexos ou variados.
	⚖️ Pode ser útil em casos simples
	Se os dados forem quase lineares, usar o kernel linear pode ser mais rápido e suficiente.
	⏱️ Treinamento mais rápido
	Modelos lineares são mais leves e rápidos, úteis em bases grandes.
✅ Conclusão:
· Com poucas linhas de código, conseguimos:
· Importar dados.
· Criar e avaliar um modelo SVM.
· Visualizar os resultados graficamente.
· O SVM é poderoso mesmo com poucas features bem escolhidas.
· Além disso, ressalta-se nem todo problema pode ser bem resolvido com separação linear.
· O kernel radial (RBF) permite que o SVM crie fronteiras curvas, adaptando-se melhor a dados reais.
· Forçar uma separação linear simplifica demais a tarefa e pode reduzir o desempenho do modelo.
	Característica
	Kernel Radial (RBF)
	Kernel Linear
	Forma da separação
	Curvas
	Retas
	Adaptação a dados complexos
	Excelente
	Limitada
	Tempo de execução
	Um pouco maior
	Mais rápido
	Acurácia no caso do Íris
	Maior 
	Menor (se o problema não for linearmente separável e ainda sim ser forçado a classificação linear)
	Uso ideal
	Problemas com separação curva/complexa
	Problemas com separação clara e linear
Módulo 2. Descrição do treinamento do modelo de árvores de decisão
Descrevendo a árvore de decisão
📌 O que é uma Árvore de Decisão?
· É um dos modelos de classificação mais fáceis de entender.
· Funciona como uma árvore invertida, começando da raiz até chegar nas folhas.
· É construída com base nos atributos dos dados.
🧠 Como funciona a Árvore de Decisão?
1. Começa pela raiz (topo da árvore):
· Nela estão todos os exemplos do conjunto de treinamento.
2. Escolhe o melhor atributo para dividir os dados:
· Essa escolha é feita com base em medidas de separação de forma iterativa (como ganho de informação ou índice Gini).
· O atributo escolhido cria novos ramos (filhos).
3. Cria novos nós para cada valor possível do atributo:
· Os dados são divididos conforme esse atributo e alocados nos nós filhos.
4. Repete o processo de forma recursiva:
· Cada nó filho é tratado como uma nova raiz.
· O processo continua até que não seja mais possível dividir (quando os dados estão totalmente separados ou homogêneos).
5. As folhas da árvore indicam a classe final:
· Quando o algoritmo para, a decisão (classificação) é tomada na folha.
📦 Exemplo simplificado:
Imagine que queremos classificar se uma fruta é maçã ou laranja com base em cor e peso:
1. Todos os dados estão na raiz.
2. O algoritmo percebe que "cor" separa melhor os dados:
· Cria dois ramos: "vermelho" → maçã, "laranja" → laranja.
3. Se "cor" não for suficiente, ele olha o "peso".
4. Vai criando ramos até chegar em decisões claras.
🎯 Características importantes:
· Aceita tanto dados categóricos quanto numéricos:
· 👉 Isso o torna versátil.
· Não precisa converter variáveis categóricas para números.
· Simples de entender e interpretar:
· Fácil visualizar o “caminho da decisão”.
· Bom para explicar para pessoas não técnicas.
· Compatível com técnicas de árvore:
· Pode usar poda, busca binária, balanceamento, etc.
· Isso melhora o desempenho e evita overfitting (modelo que memoriza os dados ao invés de generalizar).
✅ Conclusão:
· A árvore de decisão é intuitiva, poderosa e adaptável.
· É ideal para quem precisa de classificadores transparentes, que expliquem como a decisão foi tomada.
· Apesar de simples, pode ser aprimorada com técnicas de análise de árvores para ser ainda mais eficiente.
Treinando e visualizando a árvore de decisão
📌 Como a árvore aprende?
· A árvore de decisão aprende escolhendo o melhor atributo para separar os dados em cada etapa.
· Essa escolha é feita com base na otimização de uma função de custo.
🔍 Funções de custo usadas
1. Entropia: mede a bagunça dos dados
· Entropia mostra o quanto os dados estão misturados.
· Ou seja, a entropia mede a impureza dos dados, ou seja, a mede a falta de homogeineidade dos dados de entrada em relação a sua classificação.· Quanto mais misturados (ex: metade “Sim”, metade “Não”), maior a entropia.
· Ou seja, quanto maior a entropia, mais heterogênea é a amostra.
· Se todos os exemplos forem iguais, a entropia = 0 (sem bagunça).
· Fórmula: Dado um conjunto S, de classes i com proporções p, a entropia é expressa pela fórmula:
Onde: é a proporção de cada classe no conjunto.
2. Ganho de Informação: mede a melhora da separação
· O Ganho de informação depende do conceito de entropia. 
· Calcula quanto a entropia diminui se usarmos esse atributo para dividir os dados.
· Logo. o atributo que maximiza o ganho de informação é escolhido para fazer a divisão.
· Em outras palavras: É uma medida que diz o quanto um atributo ajuda a separar os dados de forma mais organizada.
· Se um atributo separa muito bem os exemplos em grupos parecidos (por exemplo, só “Sim” de um lado e só “Não” do outro), ele tem alto ganho de informação.
· Se um atributo não ajuda muito na separação (os grupos ainda ficam misturados), ele tem baixo ganho de informação.
· O atributo com maior ganho é escolhido para fazer a divisão.
· Fórmula: Temos A como atributo analisado, v como possíveis valores do atributo A, S como o conjunto de todos os atributos e Sv como o subconjunto de S, em que A = v.
🧠 Então o que significa “maximizar o ganho de informação”?
Significa que:
· A árvore testa todos os atributos disponíveis.
· Calcula o ganho de informação de cada um.
· Escolhe o que tiver o maior ganho, ou seja, o que melhor organiza os dados naquele momento.
🔁 Esse processo se repete em cada etapa, até que:
· Os dados estejam bem separados, ou
· Não haja mais atributos para dividir.
📦 Exemplo simples:
Imagine um conjunto de frutas com as colunas:
· Cor
· Peso
· Tipo (banana, maçã)
Se a coluna “cor” separar as frutas perfeitamente entre banana (amarelo) e maçã (vermelho), então o ganho de informação da cor será alto, e a árvore escolherá “cor” como primeira divisão.
🧪 Exemplo: "Jogar Tênis?"
Tabela com exemplos de dias e se a pessoa jogou tênis ou não
	Dia
	Aspecto
	Clima
	Umidade
	Vento
	Jogar tênis
	1
	Sol
	Quente
	Elevada
	Fraco
	N
	2
	Sol
	Quente
	Elevada
	Forte
	N
	3
	Nuvens
	Quente
	Elevada
	Fraco
	S
	4
	Chuva
	Ameno
	Elevada
	Fraco
	S
	5
	Chuva
	Fresco
	Normal
	Fraco
	S
	6
	Chuva
	Fresco
	Normal
	Forte
	N
	7
	Nuvens
	Fresco
	Normal
	Fraco
	S
	8
	Sol
	Ameno
	Elevada
	Fraco
	N
	9
	Sol
	Fresco
	Normal
	Fraco
	S
	10
	Chuva
	Ameno
	Normal
	Forte
	S
	11
	Sol
	Ameno
	Normal
	Forte
	S
	12
	Nuvens
	Ameno
	Elevada
	Forte
	S
	13
	Nuvens
	Quente
	Normal
	Fraco
	S
	14
	Chuva
	Ameno
	Elevada
	Forte
	N
✅ Etapas do treinamento da árvore
Etapa 1 – Calcular Entropia Total
· Total de dias: 14
· “Sim”: 9
· “Não”: 5
Calculando as proporções:
· 
· 
Aplicando na fórmula de Entropia:
Vamos calcular cada parte:
· 
· 
· 
· 
· Entropia(S) = 0.940
Etapa 2 – Calcular ganho de informação de cada atributo:
· v(Umidade) = Elevada → [3 positivos, 4 negativos] → E = 0.985
· v(Umidade) = Normal → [6 positivos, 1 negativo] → E = 0.592
· Ganho(S, Umidade) = 0.940 - (7/14)*0.985 - (7/14)*0.592 = 0.151 
· Ganho(S, Umidade) =0.151
· Ganho(S, Vento) =0.048
· Ganho(S, Aspecto) =0.247 ← ✅ Maior ganho
· Ganho(S, Temp) =0.029
🔎 Escolhe-se “Aspecto” como a raiz da árvore.
Etapa 3 – Divisão por valores do atributo "Aspecto"
· Aspecto = Nuvem → Todos os dados são “Sim” → cria folha direta ✔️
· Aspecto = Sol → precisa ser dividido → calcula-se ganho:
· Ganho(Ssol,Humidade)=0.970-(3/5)0.0 - 2/5(0.0) = 0.970 ← melhor
· Ganho(Ssol,Clima)=0.970-(2/5)0.0 - 2/5(1.0) - (1/5)0.0 = 0.570
· Ganho(Ssol,Vento)=0.970 - (2/5)1.0 - 3/5(0.918) = 0.019
· Aspecto = Chuva → melhor divisão: Vento
Etapas seguintes
· Após cada divisão, o algoritmo recalcula os ganhos nos subconjuntos e continua o processo até:
· Cada grupo ser puro (todos Sim ou todos Não).
· Ou não restarem atributos para dividir.
Resultado final: Temos a seguinte árvore de decisão:
🧮 Árvore de Regressão
· A lógica da árvore continua parecida, mas agora a variável de saída é numérica. 
· Em vez de prever Sim/Não, a árvore pode prever números (ex: temperatura, nota, lucro). 
· Nesse caso:
· A classe vira um valor numérico.
· A árvore tenta minimizar o erro entre o valor real e o valor previsto.
· Em cada folha, a saída pode ser uma média dos valores daquele grupo.
· Esse tipo de árvore é chamada de árvore de regressão.
· Em vez de Entropia e Ganho de Informação, usamos:
· Erro Quadrático Médio (MSE)
· Ou outro desvio, como Meia-Poisson
· No final, cada folha tem um valor médio, e não um rótulo (Sim/Não).
🧩 CART – Modelo híbrido
· CART = Classification and Regression Trees
· Proposto por Breiman et al. (1998).
· Capaz de lidar com classificação e regressão no mesmo modelo.
· É a base de muitos algoritmos modernos como o Random Forest.
✅ Conclusão
· A árvore de decisão escolhe os melhores atributos passo a passo, sempre buscando reduzir a impureza (entropia).
· É simples de entender, eficaz e explicável.
· Pode ser usada tanto para classificação (rótulos) quanto regressão (valores numéricos).
· A visualização gráfica ajuda muito a entender o processo de decisão.
Identificando e configurando os hiperparâmetros da árvore de decisão
✅ O que são hiperparâmetros?
· São configurações manuais que influenciam o comportamento do modelo de aprendizado.
Exemplo geral: escolher quantos andares uma árvore pode crescer, ou quantos dados ela precisa para tomar uma decisão.
· Eles não são aprendidos automaticamente, e sim definidos pelo programador antes do treinamento.
📌 Por que hiperparâmetros são importantes?
· Eles ajudam a controlar a complexidade da árvore.
· Se mal configurados, podem causar:
· Underfitting: árvore simples demais, não aprende bem.
· Overfitting: árvore complexa demais, aprende até o “ruído” dos dados.
🧩 Principais hiperparâmetros da árvore de decisão
1. Altura da árvore (ou profundidade máxima)
· Controla quantos níveis (camadas) a árvore pode ter.
· Se for muito profunda, o modelo pode decorar os dados (overfitting).
· Se for muito rasa, pode errar padrões importantes (underfitting).
Exemplo:
· Profundidade = 3 → a árvore pode ter até 3 perguntas antes de chegar à decisão final.
· Profundidade = None (padrão) → a árvore cresce até não conseguir mais separar.
2. Número máximo de características por nó
· Controla quantos atributos (colunas) o nó pode considerar ao escolher o melhor para dividir os dados.
Exemplo:
· Se temos 10 colunas e limitamos a análise a 3, o nó só pode escolher entre essas 3.
· Isso força a árvore a não olhar tudo ao mesmo tempo, o que pode evitar que ela fique muito "viciada" em certos atributos.
🔧 Se não encontrar um bom divisor com essa limitação, a árvore ignora a restrição e olha todas as colunas.
3. Número máximo de folhas
· Limita quantas folhas finais a árvore pode ter (folhas = decisões finais).
Por que isso é útil?
· Evita que a árvore crie muitos ramos pequenos e desequilibrados.
· Força a árvore a organizar melhor suas divisões internas, criando uma estrutura mais equilibrada.
4. Tamanho mínimo de amostras por folha
· Define quantos exemplos precisam existir para criar uma folha.
Exemplo:
· Valor = 1 (padrão): só cria a folha quando o grupo tem exatamente a mesma classe.
· Valor = 5: só cria a folha se houver pelo menos 5 exemplos naquele grupo.
· Valor = 0.1: aceita criar a folha se houver 10% dos dados naquele grupo.
🔁 Isso ajuda a árvore a:
· Ser mais flexível com outliers (valores fora do padrão).
· Não se preocupar tanto com pequenas exceções.
⚙️ Como configurar hiperparâmetros corretamente?
✋Atenção: Não é adivinhação nem chute!
O processo deve ser:
1. Testar várias combinações de hiperparâmetros (ex: com profundidade 3, depois 5, depois 10...).
2. Treinar e medir o desempenho de cada combinação com métricas (ex: acurácia).
3. Escolher a combinação que dá o melhor resultado.
Esse processo é chamado de tuning de hiperparâmetros (ajuste fino).
🧠 Comentário final:
· O uso adequado dos hiperparâmetros faz o modelo:
· Aprender melhor.
· Ser mais rápido.
· Ser mais confiávele classificação de informações 
· Deteção de fraudes na internet
Desafios do aprendizado de máquina
· Embora o Machine Learning traga muitos avanços, ele também enfrenta vários desafios importantes que precisam ser considerados ao aplicar essa tecnologia.
· Desafios do Machine Learning:
· Desafio 1: Qualidade dos dados
· Desafio 2: Generalização 
· Desafio 3: Profissionais especializados 
· Desafio 4: Ética
· Desafio 5: Envenenamento de dados
🔹 Desafio 1: Qualidade dos dados
· Por que é importante? O algoritmo aprende com os dados fornecidos. Se os dados forem ruins, o modelo aprenderá errado.
· Problemas comuns:
· Dados incompletos, confusos ou desorganizados.
· Dificuldade em padronizar dados como textos, imagens, sons, vídeos.
· ⚠️ Consequência: Projetos podem falhar antes mesmo de começarem, se os dados forem mal estruturados.
🔹 Desafio 2: Generalização
· O que é? Um bom modelo deve funcionar bem com novos dados, não só com os dados de treino.
· Problema comum: O overfitting, que acontece quando:
· O modelo aprende demais os detalhes do treino (como se decorasse).
· Mas não funciona bem com dados novos.
· 🧠 Ideal: O modelo deve aprender padrões gerais, e não casos específicos demais.
🔹 Desafio 3: Profissionais especializados
· O que é? Desenvolver sistemas de ML exige uma equipe multidisciplinar, incluindo:
· Programadores
· Estatísticos
· Cientistas de dados
· Pessoas que conheçam o negócio da empresa
· Dificuldade: Encontrar pessoas com esse perfil completo e comunicativo não é fácil.
🔹 Desafio 4: Ética
· O problema: Algoritmos de ML nem sempre consideram valores éticos.
· Exemplo prático: Um algoritmo criado para aumentar o PIB pode:
· Cortar verbas de escolas ou hospitais
· Ignorar causas sociais, ambientais ou direitos humanos
· 🧠 Solução: É preciso incluir ética nas decisões dos sistemas, mas isso é complexo, pois os valores mudam com o tempo e variam entre culturas.
🔹 Desafio 5: Envenenamento de dados
· O que é? O modelo pode ser treinado com dados maliciosos ou distorcidos acidentalmente ou por conduta duvidosa; este último caso é geralmente chamado de “envenenamento”.
· Nome disso: “Data poisoning” (envenenamento dos dados).
✅ Exemplo real: Chatbot da Microsoft (caso Tay)
1. A Microsoft criou um robô que aprendia a conversar no Twitter.
2. Pessoas mal-intencionadas ensinaram o bot a dizer palavrões e frases ofensivas.
3. O projeto teve que ser cancelado em menos de 24 horas.
🔍 Lição: Se a fonte de aprendizado for ruim, o modelo aprende coisas ruins também.
📌 Conclusão
Os desafios do ML envolvem:
· Garantir dados confiáveis
· Evitar excessos de personalização
· Ter profissionais capacitados
· Lidar com questões éticas e de segurança
Módulo 2. Métodos de aprendizagem de máquina
Aprendizado de Máquina
📌 Definição Geral
· Segundo Mitchell (1997), um computador “aprende” quando:
· Seu desempenho em uma tarefa “T” melhora com a experiência “E”, conforme uma métrica de desempenho “P”.
· ➡️Em outras palavras: Para realizar uma tarefa “T”, um computador aprenderá a partir de uma experiência “E”, procurando melhorar uma métrica de desempenho “P” (performance).
· Os algoritmos de ML atingem um determinado objetivo, aprendendo a partir de um grande volume de dados, que são as suas experiências.
🧠 Estrutura básica do aprendizado de máquina:
	Elemento
	Significado
	Exemplo prático
	T
	Tarefa a ser realizada
	Prever o resultado de um jogo de futebol
	E
	Experiência (dados usados no aprendizado)
	Dados de jogos anteriores: escalações, resultados, etc.
	P
	Métrica usada para medir o desempenho
	Porcentagem de acertos nas previsões
✅ Outros exemplos práticos:
· Tarefa (T): Diagnosticar se um tumor é benigno ou maligno
· Experiência (E): Imagens de exames (raio-x, tomografia, etc.)
· Desempenho (P): Porcentagem de diagnósticos corretos
➡️ Conclusão: quanto mais exemplos (dados), melhor o aprendizado e mais preciso o modelo.
📊 Aprendizado de máquina
· O Aprendizado de máquina usa algoritmos para aprender com dados.
· Os programas de computador aprendem com seus erros e melhoram com o tempo.
· O objetivo é fazer previsões e tomar decisões confiáveis e repetíveis
🔎 Tipos de Métodos de Aprendizado
· Os algoritmos de aprendizado de máquina podem ser categorizados conforme o tipo de aprendizagem.
Aprendizado Supervisionado
📌 O que é?
· É um tipo de aprendizado de máquina em que o algoritmo aprende com dados rotulados, ou seja, sabemos a resposta correta (a saída) para cada exemplo (entrada).
🔄 Como funciona?
👉 Fase 1 – Treinamento:
· Na primeira fase ocorre a formulação do modelo, chamada de treinamento.
· O algoritmo recebe exemplos com entrada e saída conhecidas.
· Ele aprende os padrões que ligam entrada → saída.
👉 Fase 2 – Teste:
· Na fase de teste, o modelo é usado para identificar corretamente os dados de fora do conjunto de treinamento e não rotulados. 
· Ou seja, o algoritmo recebe novos dados (sem rótulo) e tenta prever a saída correta com base no que aprendeu.
✅ Exemplo: Identificação de veículos
Imagine uma base de dados com imagens de veículos, já rotuladas com seu tipo:
	Imagem
	Tipo (Rótulo)
	Foto 1: 🏍️
	Moto
	Foto 2: 🚗
	Carro
	Foto 3: 🚛
	Caminhão
	Foto 4: 🚌
	Ônibus
1. O algoritmo analisa as imagens e os rótulos.
2. Aprende características que definem cada tipo de veículo.
3. Depois, recebe uma nova imagem (sem rótulo) e tenta classificar corretamente como moto, carro, etc. 
🧮 Tipos de problemas em aprendizado supervisionado
	Tipo
	O que faz?
	Exemplo prático
	Classificação
	Prever um conjunto finito de rótulos (categoria), com base em entradas
	Prever se um cliente é inadimplente ou não
	Regressão
	Prever um valor numérico contínuo
	Estimar o valor de aluguel de um imóvel
· Resumindo: Se o rótulo é um número real, a tarefa chama-se regressão. Se o rótulo vem de um conjunto finito e não ordenado, então a tarefa chama-se classificação.
🟢 Exemplo de classificação:
Objetivo: Prever se um cliente será inadimplente.
Entradas (variáveis):
· Limite de crédito
· Número de pedidos
· Valor médio por pedido
Saída (rótulo): Inadimplente (Sim/Não)
➡️ O modelo aprende a identificar padrões em clientes que já são inadimplentes
➡️ Depois, ele prediz o risco de inadimplência de novos clientes.
🔵 Exemplo de regressão:
Objetivo: Estimar o preço de aluguel de um imóvel.
Entradas:
· Tamanho da casa
· Quantidade de quartos
· Tem garagem? (Sim/Não)
· Banheiro reformado? (Sim/Não)
Saída: Preço do aluguel (ex: R$ 2.300,00)
➡️ O modelo aprende com imóveis já alugados.
➡️ Com base nas características de um novo imóvel, estima seu valor de aluguel.
🎯 Conclusão
· O aprendizado supervisionado é ótimo para prever algo conhecido, desde que você tenha exemplos rotulados para ensinar o modelo.
· Ele funciona bem para problemas de classificação (categorias) ou regressão (números reais).
Aprendizado de Máquina Não Supervisionado
📌 O que é?
· É um tipo de aprendizado em que o algoritmo aprende com dados que NÃO estão rotulados.
· 👉 Isso significa que não sabemos as respostas corretas (saídas).
O algoritmo tenta descobrir padrões, grupos ou estruturas escondidas nos dados por conta própria.
🧠 Como funciona?
· Recebe dados de entrada sem rótulos (ex: apenas imagens, números, textos).
· Analisa semelhanças, diferenças e relações entre os dados.
· Agrupa ou organiza os dados em categorias (clusters) ou identifica padrões repetitivos.
✅ Exemplo: Imagens de veículos sem rótulo
	Imagem
	Rótulo (conhecido)?
	Foto 1: 🏍️
	❌
	Foto 2: 🚗
	❌
	Foto 3: 🚛
	❌
	Foto 4: 🚌
	❌
Como o algoritmo atua:
1. Analisa as características visuais de cada imagem (ex: forma, tamanho, cor).
2. Agrupa as imagens em clusters (grupos) baseados em semelhanças.
3. Exemplo de resultado:
· Cluster A → imagens parecidas com motos
· Cluster B → imagens parecidas com carros
· Cluster C → caminhões
📌 Sem saber os rótulos, o algoritmo descobre padrões automaticamente!
🛍️ Exemplo: Perfil de consumidores em um mercado
Desafio: O mercado quer entender o comportamento dos clientes, mas não sabe de antemão quemem novos dados.
· Uma das variações mais populares da árvore é a CART (Classification and Regression Tree), que já implementa internamente todos esses controles.
Implementando a árvore de decisão em Python
✅ O que vamos fazer?
· Criar uma árvore de decisão para classificar flores usando o famoso conjunto de dados Íris.
· Avaliar o modelo com validação cruzada.
· Visualizar a árvore final com um gráfico gerado automaticamente.
🧰 Bibliotecas necessárias
Antes de começar, precisamos importar as seguintes bibliotecas:
import matplotlib.pyplot as plt  # Importa biblioteca para plotar gráficos e visualizar a árvore
from sklearn.datasets import load_iris   # Carrega o conjunto de dados de flores Íris
from sklearn.model_selection import cross_val_score  # Permite avaliar o modelo usando validação cruzada
from sklearn.tree import DecisionTreeClassifier, plot_tree  # Importa o classificador de árvore de decisão e a função para desenhá-la
🧪 Passo 1: Criar o classificador com profundidade controlada
clf = DecisionTreeClassifier(max_depth=3, random_state=0)  # Cria o modelo de árvore com profundidade máxima 3 e estado aleatório fixo
· max_depth=3: limita a profundidade da árvore a 3 níveis (ajuda a evitar overfitting).
· random_state=0: garante reprodutibilidade (resultados iguais toda vez que o código roda).
📊 Passo 2: Avaliar o modelo com validação cruzada
iris = load_iris()                # Carrega os dados e as classes das flores
accuracy = cross_val_score(clf, iris.data, iris.target, cv=10).mean()  # Aplica validação cruzada com 10 divisões para avaliar o modelo
print(f'Acurácia: {accuracy:.2%}')
# Imprime: Acurácia: 96.00%
· Carrega o conjunto de dados Íris.
· Aplica validação cruzada com 10 divisões (cv=10) para medir a acurácia média do modelo (Acurácia: 96.00%).
🧠 Passo 3: Treinar e visualizar a árvore
clf.fit(iris.data, iris.target) # Treina o classificador com os dados das flores
plot_tree(clf, filled=True)   # Desenha a árvore de decisão com preenchimento para facilitar visualização
plt.show()                   # Exibe o gráfico com a árvore na tela
· plot_tree(filled=True) pinta os nós da árvore de acordo com a classe predominante.
· plt.show() exibe o gráfico gerado (como o que você enviou).
🌳 Explicando o gráfico da árvore 
📌 Como ler o gráfico?
Cada retângulo é um nó da árvore. Veja o que cada linha representa:
· X[3]· Cada amostra treina um modelo (C1, C2, ..., C6).
· As decisões desses modelos são combinadas.
✅ Conclusão
· Modelos incorporados aumentam a robustez, precisão e estabilidade do aprendizado.
· Em vez de depender de um único modelo, aproveitamos o conhecimento coletivo de vários modelos.
· As três abordagens principais são:
· Votação: parecer de todos os modelos sobre o mesmo dado.
· Empilhamento: saída de um modelo alimenta o próximo.
· Bagging: amostras aleatórias para treinar modelos paralelos.
Treinamento da Floresta Aleatória (Random Forests)
🌳 O que são Florestas Aleatórias?
· Criadas por Leo Breiman (2001).
· São conjuntos (comitês) de árvores de decisão. 
· Surgiram para corrigir um problema nas árvores de decisão que cresciam demais e se tornavam “viciadas” nos dados de treino (sobreajuste).
· Isso aumentava a variância e diminuía o viés — como plantas tentando crescer no escuro, distorcendo-se no processo.
· O tipo de incorporação que a Floresta Aleatória utiliza é Bagging e votação.
· Objetivo: evitar o sobreajuste (overfitting) causado por árvores individuais muito complexas.
❗ Problema que elas resolvem
· Árvores de decisão isoladas podem:
· Crescer demais.
· Aprender padrões errados ou aleatórios.
· Ter baixa generalização.
· A floresta aleatória ajuda a reduzir o risco de superajuste, mantendo um bom desempenho.
🔍 Exemplo ilustrativo:
Assim como uma planta cresce distorcida em busca de luz (estiolamento), uma árvore de decisão pode crescer “torta” tentando aprender tudo — inclusive o que não faz sentido.
🔁 Como funciona o treinamento da Floresta Aleatória?
1. Temos um conjunto de dados () e rótulos/classificações ().
2. Sorteiam-se amostras com reposição dos dados — ou seja, o mesmo dado pode aparecer mais de uma vez.
3. Cada amostra forma um “mini conjunto” para treinar uma árvore da floresta.
4. Cada árvore é treinada com esse subconjunto de forma independente, usando o mesmo algoritmo de árvore de decisão.
5. Tomada de decisão: 
· Um novo elemento é apresentado.
· Cada árvore dá seu parecer (classificação ou valor).
6. Combinação dos pareceres:
· O comitê da floresta decide o resultado final, conforme o caso:
· Classificação: por votação da maioria.
· Regressão: pela média das saídas numéricas.
🧩 Exemplo visual do processo (em 6 etapas):
1. Escolher o tipo de modelo base (estimador).
2. Replicar o modelo (várias árvores).
3. Criar subconjuntos dos dados.
4. Treinar cada árvore com seu subconjunto.
5. Fazer previsão de uma nova entrada.
6. Combinar os pareceres (votação ou média).
❓ E quanto à explicabilidade?
· Árvores individuais: explicáveis.
· Fácil de entender: seguimos o caminho da raiz até a folha (decisão final)
· Florestas Aleatórias: pouco explicáveis.
· Difícil acompanhar: muitas árvores, caminhos diversos.
· Necessário verificar o critério do comitê (votação simples, ponderada etc).
· Isso complica a explicação de como uma decisão foi tomada.
⚠️ Cuidados com o uso de Random Forests
· Difícil de interpretar o motivo de uma decisão.
· Pode ser um problema em áreas sensíveis como:
· Saúde
· Crédito
· Justiça
🌟 Variante das Florestas Aleatória
· Uma variante é a Extra Trees (Extremely Randomized Trees)
· Parecidas com as florestas aleatórias, mas com diferenças:
· Não usa bagging: todas as árvores recebem o conjunto completo.
· A escolha dos pontos de corte (split dos nós) são escolhidos de forma totalmente aleatória, não pelo melhor ganho de informação.
 Exemplo:
· Em árvores padrão, escolhemos o melhor atributo para dividir os dados.
· Em Extra Trees, essa escolha é feita sem analisar o ganho de informação, ou seja de forma aleatória.
✅ Conclusão
	Técnica
	Vantagem Principal
	Desvantagem Principal
	Random Forest
	Alta precisão e redução do overfitting
	Baixa explicabilidade
	Árvore de Decisão
	Fácil de entender e explicar
	Pode sobreajustar
	Extra Trees
	Mais aleatoriedade → menos correlação entre árvores
	Ainda menos explicável que Random Forest
Identificando e configurando os hiperparâmetros da Floresta Aleatória
🌳 O que são hiperparâmetros da Floresta Aleatória?
· Hiperparâmetros são configurações que ajustam o comportamento do modelo antes do treinamento.
· A Floresta Aleatória herda os hiperparâmetros da Árvore de Decisão (por exemplo: profundidade máxima, número mínimo de amostras por folha etc.).
🔧 Hiperparâmetro exclusivo da Floresta Aleatória
· n_estimators (número de estimadores):
· Define quantas árvores a floresta terá.
· Quanto mais árvores:
· Maior a diversidade de decisões.
· Melhor capacidade de generalização.
· Menor risco de viés.
· Mas há um limite! Muitas árvores:
· ⚠️ Aumentam o custo computacional.
· ⚠️ Podem dificultar a convergência da votação final (votação não convergir).
📌 Resumo:
	Nº de Árvores
	Vantagem
	Risco
	Poucas
	Mais rápido
	Pode ter viés ou overfitting
	Muitas
	Mais genérico, robusto
	Mais lento, difícil de explicar
⚙️ Como configurar hiperparâmetros corretamente?
Etapas com exemplo (representadas como “plantio de árvores”):
🌱 1ª Árvore – Definir a grade de parâmetros (Grid Search)
· Montamos uma matriz:
· Cada coluna = um hiperparâmetro (ex: n_estimators, max_depth...)., ou seja representa um parâmetro a ser ajustado
· Cada linha = uma combinação de valores desses parâmetros.
🌿 2ª Árvore – Testar as combinações com validação cruzada
· Treinamos o modelo com cada linha da matriz.
· Aplicamos validação cruzada para avaliar desempenho. 
· A validação cruzada ajuda a garantir que os resultados não estejam viciados.
🌳 3ª Árvore – Avaliar os resultados
· Para cada modelo treinado, registramos:
· Métricas como: acurácia, medida F, tempo de treino, curva ROC, etc.
· Esses resultados vão em colunas adicionais da matriz.
🌲 4ª Árvore – Selecionar a melhor configuração
· Escolhemos a linha (combinação) que teve melhor desempenho nas métricas.
· Essa será a configuração final de hiperparâmetros.
📈 Importância da configuração
· Florestas Aleatórias geralmente têm ótimos resultados em métricas de classificação:
· Acurácia
· Medida F
· Curva ROC
· Devido a explicabilidade ser reduzida, é essencial configurar os hiperparâmetros com cuidado, pois
· Evitamos o sobreajuste (overfitting - modelo muito específico)
· Aumentamos a confiabilidade do modelo
· Compensamos a falta de explicabilidade natural da técnica
✅ Conclusão
· Ajustar os hiperparâmetros melhora o desempenho e reduz o risco de erros.
· O processo deve ser planejado e testado com validação cruzada.
· Mesmo sendo forte e eficiente, a Floresta Aleatória precisa de cuidados no ajuste para garantir bons resultados e transparência.
Implementando a Floresta Aleatória em Python
🧰 Bibliotecas Necessárias
Para usar a Floresta Aleatória em Python, você precisa importar:
import pandas as pd               # Manipulação de dados
from matplotlib import pyplot as plt  # Visualização gráfica
from sklearn.tree import plot_tree    # Visualização de árvores
from sklearn.ensemble import RandomForestClassifier  # Modelo Floresta Aleatória
from sklearn.datasets import make_classification     # Geração de dados fictícios
🔍 Etapas da Implementação
✅ 1. Gerar os dados de treino
Usamos um dataset artificial para problemas de classificação:
X, y = make_classification(n_samples=1000,          # Número de amostras geradas = 1000
                           n_features=4,            # Total de atributos = 4
                           n_informative=2,         # Número de atributos úteis para classificação = 2
                           n_redundant=0,           # Número de atributos redundantes (zero neste caso)
                           random_state=0,          # Semente para reprodutibilidade
                           shuffle=False)           # Não embaralha os dados gerados
✅ 2. Visualizar o conjunto de dados
Para entender melhor os dados utilizados:
# Une os dados de atributos e rótulos em um único DataFrame para visualização ou análise
pd.concat([pd.DataFrame(X,columns=['atr1','atr2','atr3','atr4']), # Cria um DataFrame com os atributos
           pd.DataFrame(y, columns=['class'])], axis=1)    # Junta os rótulos de classe como nova coluna
# Imprime:
	
	atrl1
	atrl2
	atrl3
	atrl4
	class
	0
	-1.668532
	-1.299013
	0.274647
	-0.603620
	0
	1
	-2.972883
	-1.088783
	0.708860
	0.422819
	0
	2
	-0.596141
	-1.370070
	-3.116857
	0.644452
	0
	3
	-1.068947
	-1.175057
	-1.913743
	0.663562
	0
	4
	-1.305269
	-0.965926
	-0.154072
	1.193612
	0
	...
	...
	...
	...
	...
	...
	995
	-0.383660
	0.952012
	-1.738332
	0.707135
	1
	996
	-0.120513
	1.172387
	0.030386
	0.765002
	1
	997
	0.917112
	1.105966
	0.867665
	-2.256250
	1
	998
	0.100277
	1.458758
	-0.443603
	-0.670023
	1
	999
	1.041523
	-0.019871
	0.152164
	-1.940533
	1
1000 rows × 5 columns
✅ 3. Criar o modelo de Floresta Aleatória 
clf = RandomForestClassifier(n_estimators=5,    # Número de árvores na floresta = 5
                             max_depth=2,       # Profundidade máxima de cada árvore = 2
                             random_state=0)    # Semente para consistência nos resultados
✅ 4. Treinar o modelo
clf.fit(X, y)     # Treina o modelo de floresta aleatória com os dados gerados
✅ 5. Fazer uma predição
Predizer a classe para um novo exemplo [0, 0, 0, 0]:
print(clf.predict([[0,0,0,0]])) # Faz uma previsão usando os valores [0,0,0,0] como entrada e imprime
# Imprime: [1]]
Explicação:
· Usando os dados [0, 0, 0, 0] como entrada, o modelo retorna uma classe prevista = 1.
✅ 6. Verificar a importância de cada atributo
Você pode descobrir quais atributos (colunas) foram mais importantes para as decisões da floresta:
print(clf.feature_importances_)   # Exibe a importância relativa de cada atributo no modelo
# Imprime: [0.31461261 0.65327124 0.02774319 0.00437296]
Explicação:
· Mostra o peso que cada atributo teve nas decisões das árvores.
· Quanto maior o valor, mais importante é o atributo
· Neste caso o atributo 2 é o mais importante para as decisões da floresta.
✅ 7. Visualizar as árvores da floresta
Cada árvore será exibida separadamente:
for tf in clf.estimators_:               # Percorre todas as árvores (estimadores) da floresta
    print("-----------------------------")      # Imprime separador visual entre as árvores
    plot_tree(tf, filled=True)                  # Plota a estrutura da árvore com cores nos nós
    plt.show()                                  # Exibe a árvore plotada
Visualização da Floresta Aleatória:
Alterado o parâmetro max_depth de 2 para 5, no código:
· Isso terá os seguintes efeitos diretos no comportamento da Floresta Aleatória:
clf = RandomForestClassifier(n_estimators=5,        # Número de árvores na floresta
                             max_depth=5,           # Profundidade máxima de cada árvore
                             random_state=0)        # Semente para consistência nos resultados
clf.fit(X, y)                           # Treina o modelo de floresta aleatória com os dados gerados
print(clf.feature_importances_)         # Exibe a importância relativa de cada atributo no modelo
# Imprime: [0.12094732 0.78976479 0.0626415 0.02664639]
for tf in clf.estimators_:              # Percorre todas as árvores (estimadores) da floresta
    print("-----------------------------")         # Imprime separador visual entre as árvores
    plot_tree(tf, filled=True)                  # Plota a estrutura da árvore com cores nos nós
    plt.show()                                  # Exibe a árvore plotada
O que muda com max_depth=5?
· Garante maior profundidade nas árvores.
· Cada árvore poderá crescer até 5 níveis em vez de 2.
· Isso permite que as árvores façam mais divisões, capturando padrões mais complexos nos dados.
Vantagens:
1. Melhor capacidade de aprendizado
· Pode capturar relações mais detalhadas entre os atributos e a classe.
· Útil se os dados forem mais complexos.
2. Maior precisão nos dados de treino
· As árvores se ajustam melhor ao conjunto de treinamento.
Desvantagens:
1. Risco maior de sobreajuste (overfitting)
· As árvores podem se ajustar demais ao ruído do treino.
· Resultado: ótimo desempenho no treino, mas piora no teste (dados novos).
2. Mais custo computacional
· Árvores maiores consomem mais tempo e memória para treinar e fazer previsões.
✅ Recomendação ideal do número de estimadores (n_estimators) em modelos incorporados como Random Forests:
📌 1. O que é n_estimators?
· Representa o número de árvores (ou modelos base) em um ensemble, como uma Floresta Aleatória.
· Quanto maior esse número:
· ➕ Mais diversidade e estabilidade nas previsões.
· ➖ Mais custo computacional.
📘 2. Recomendações da literatura e da prática:
✅ Faixa recomendada: entre 100 e 500 árvores
· Entre 300 e 500 estimadores costuma ser uma escolha eficaz e segura.
· Essa faixa é mencionada em várias fontes como:
· Scikit-Learn documentation
· Artigos de Breiman (criador do Random Forest)
· Livros como "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow"
Motivos para essa faixa:
· A curva de ganho de performance tende a estabilizar após certo ponto.
· A partir de ~300 árvores, o ganho de acurácia ou robustez costuma ser pequeno.
· Mais que 500 árvores:
· Custo de tempo/memória pode não compensar o ganho.
	n_estimators
	Precisão (acurácia)
	Observações
	10
	88%
	Pode ser instável
	100
	91%
	Já é robusto
	300
	92.1%
	Boa estabilidade
	500
	92.2%
	Ganho muito pequeno
	1000
	92.2%
	Praticamente o mesmo de 500
⚠️ Cuidado: o ideal varia conforme o problema
· Dados muito ruidosos → mais árvores podem ajudar.
· Dados simples → 100–200 árvores já podem ser suficientes.
· Em grandes bases de dados, usar 300 a 500 é um bom ponto de partida.
🧠 Atenção:
· A literatura recomenda frequentemente usar entre 300 e 500 árvores como ponto ideal de equilíbrio entre desempenho e custo.
· Porém, o ideal é sempre ajustar com validação cruzada para o seu problema específico.
✅ Conclusão Final
· A implementação de uma Random Forest com scikit-learn é simples, eficiente e poderosa.
· Podemos:
· Treinar e prever com poucas linhas de código.
· Analisar a importância dos atributos.
· Visualizar cada árvore individual da floresta.
Módulo 4. Descrição do treinamento do modelo de redução de Dimensionalidade
Conceito de redução de dimensionalidade
🔹 O que é Dimensionalidade?
· Dimensionalidade = número de características (features) em um conjunto de dados.
· Exemplo: Se estamos analisando frutas com base em cor, peso, sabor, tamanho, temos 4 dimensões.
🎯 Por que reduzir a dimensionalidade?
· Menor custo computacional (tempo e memória).
· Modelos mais rápidos e eficientes.
· Melhor desempenho do classificador (ou, ao menos, não piora).
· Evita redundâncias e dados irrelevantes.
· Útil quando temos poucos dados disponíveis (economia de informação útil).
😱 Maldição da Dimensionalidade
· Quanto mais dimensões, mais difícil fica o processamento e o aprendizado.
· Modelos podem ficar confusos com muitas variáveis, especialmente se forem pouco relevantes.
· É como tentar entender um texto com informações demais, sendo que apenas algumas importam.
🧠 Analogia simples:
· Em uma leitura dinâmica, focamos nos pontos-chave.
· Em uma compra, analisamos os detalhes essenciais, não os cosméticos.
· O modelo também funciona melhor quando vê apenas o que realmente importa.
🔧 Formas de reduzir a dimensionalidade:
1. Extração de características
· Cria novas características a partir das originais (combinações).
· Exemplo: PCA (Análise de Componentes Principais).
· ❗ Desvantagem: perde o significado original dos dados (dificulta interpretação humana).
2. Seleção de características
· Escolhe as melhores características com base em algum critério (como importância para o modelo).
· Exemplo: manter só “peso” e “sabor”, ignorando “cor” e “tamanho”.
· ✅ Mantém o sentido original dos dados, só oculta o que é menos relevante.
⚠️ Cuidado com o excesso!
· Reduzir demais pode prejudicar a qualidade das previsões.
· Modelos ficam “ingênuos” e usam critérios bobos ou irrelevantes.
🧪 Exemplo didático:
❌ "Vai chover porque cocei o joelho."
✅ "Vai chover porque: céu nublado, verão e frente fria prevista."
Análise de ComponentesPrincipais (PCA)
🔹 O que é PCA (Principal Component Analysis)?
· É uma técnica de redução de dimensionalidade.
· Do tipo extração de características (gera novas variáveis a partir das originais).
· Muito usada por ser simples, rápida, linear e não paramétrica (não depende de distribuição estatística).
🎯 Objetivo da PCA
· Reduzir o número de variáveis mantendo o máximo possível da variação (informação) dos dados.
· Gera novas variáveis (componentes principais) que são combinações das variáveis originais.
· Essas novas variáveis são independentes entre si (ortogonais) e ordenadas por importância (variância explicada).
📊 Como a PCA funciona? 
1. Centraliza os dados (média zero).
2. Calcula a matriz de covariância dos dados.
3. Extrai os autovalores e autovetores da matriz de covariância.
4. Ordena os autovetores (componentes principais) com base nos autovalores (maior variância primeiro).
5. Projeta os dados nesses novos vetores (componentes) para reduzir a dimensionalidade.
📐 Analogia Geométrica
· Imagine pontos espalhados em um plano.
· PCA “gira” o plano para encontrar a direção onde os dados têm maior variação.
· A primeira componente principal é a direção com maior variação, a segunda é perpendicular à primeira, e assim por diante.
🧮 Exemplo Matemático Simplificado:
Suponha uma matriz de dados Mᵗ (dados transpostos):
· Cada linha = uma observação.
· Cada coluna = uma característica (ex: altura, peso, idade).
Aplicando a decomposição:
· W: autovetores da matriz de covariância → novas direções (componentes principais).
· Σ: valores singulares (escala de importância das direções).
· Vᵗ: rotação dos dados.
Transformação:
 
· Wₓ: apenas os X primeiros componentes mais importantes (com maior variância).
· Resultado: uma nova matriz C com menos dimensões, mas com máxima informação possível.
⚙️ Características Técnicas Importantes
✅ Vantagens:
· Reduz ruído e redundância.
· Simples de implementar (presente em bibliotecas como sklearn).
· Torna dados mais fáceis de visualizar (2D ou 3D).
❌ Desvantagens:
· Sensível à escala dos dados (por isso, normalização é obrigatória).
· Não lida bem com dados não lineares.
· Pode perder a interpretabilidade (as novas variáveis não têm significado direto).
· Custo computacional alto com muitas dimensões.
⚠️ Importância da Normalização
· Se uma variável tem valores muito maiores que outras (ex: renda vs. idade), ela pode dominar a PCA.
· Por isso, é essencial normalizar os dados (padronizar para média 0 e desvio padrão 1).
📌 Resumo Final
· PCA é uma técnica linear e explicável para reduzir variáveis mantendo a variância.
· Transforma os dados para um novo espaço mais simples de trabalhar.
· Útil para visualização, compressão de dados e aceleração de modelos.
· Mas precisa de dados bem preparados (escalados e centralizados).
Redução de Dimensionalidade Não Linear através da Incorporação Linear Local (LLE)
🔍 O que é LLE (Local Linear Embedding)?
· LLE é uma técnica de redução de dimensionalidade não linear (NLDR).
· Muito útil quando os dados têm formas curvas ou complexas que não podem ser "achatadas" com métodos lineares como a PCA.
· Ideal para preservar a estrutura local dos dados (isto é, a relação entre vizinhos próximos).
📌 Como o LLE funciona? (Etapas principais)
1. Identifica os vizinhos locais:
· Para cada ponto nos dados, encontra os K vizinhos mais próximos (usando, por exemplo, a distância euclidiana).
2. Calcula pesos de reconstrução:
· Cada ponto é representado como uma combinação linear dos seus vizinhos.
· O objetivo é encontrar os pesos que melhor "reconstroem" o ponto usando seus vizinhos.
Função de erro:
· Essa função mede o quão bem cada ponto é reconstruído pelos seus vizinhos.
· Restrições:
· Somatório dos pesos .
· se não for vizinho de .
3. Mapeia os dados em um novo espaço de menor dimensão:
· Depois de calcular os pesos em alta dimensão, o LLE procura um novo conjunto de pontos (em menor dimensão) que preserve esses mesmos pesos.
Nova função de erro:
🎯 Intuição do LLE (com exemplo simples)
Imagine um cachorro andando com uma coleira presa a um ponto fixo:
· Mesmo que ele ande em círculos (movimento não linear), a distância dele em relação ao ponto central muda de forma contínua.
· O LLE tenta preservar a relação local do cachorro com seu ponto de apoio (vizinhos), independentemente do formato do trajeto.
⚙️ Parâmetro importante: K (número de vizinhos)
· Define quantos vizinhos cada ponto deve considerar.
· Pode ser escolhido como hiperparâmetro e ajustado com testes.
· Influencia fortemente o resultado final e o custo computacional.
✅ Vantagens do LLE
· Excelente para dados com estruturas não lineares.
· Preserva bem a geometria local dos dados.
· Funciona melhor que Kernel PCA em alguns casos.
❌ Desvantagens
· Pouco explicável (difícil entender o que as novas dimensões significam).
· Alto custo computacional com grandes conjuntos de dados ou alta dimensionalidade.
· Sensível à escolha de K (número de vizinhos).
🧠 Resumo final
· LLE é um método não linear que:
· Reconstrói cada ponto usando seus vizinhos (com pesos).
· Projeta os dados em um novo espaço de menor dimensão, mantendo as relações locais.
· É ideal para reduzir dados com padrões curvos, mas exige cuidado com parâmetros e interpretação.
Implementando PCA em Python
🧠 O que é PCA?
· PCA (Análise de Componentes Principais) é uma técnica de redução de dimensionalidade.
· Ela transforma os dados originais em novas variáveis (componentes principais), mantendo o máximo de informação (variância).
· Muito útil quando há muitas colunas (features) e queremos simplificar o modelo sem perder muita informação.
CÓDIGO 1. PCA com 3 componentes principais (Gráfico 3D)
import numpy as np  # Importa NumPy para operações numéricas
import pandas as pd  # Importa pandas para trabalhar com dataframes
from sklearn import decomposition  # Importa módulo de decomposição (PCA)
from sklearn import datasets  # Importa datasets embutidos no scikit-learn
from sklearn.datasets import load_iris  # Outra forma de carregar o dataset Iris
import plotly.express as px  # Importa plotly.express para criar gráficos interativos
import webbrowser  # Importa o módulo que permite abrir URLs no navegador padrão do sistema
# Carrega o dataset Iris da biblioteca do scikit-learn
iris = datasets.load_iris()
# Cria um DataFrame com os dados das flores e nomeia as colunas
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Cria um objeto PCA para reduzir a dimensionalidade para 3 componentes
pca = decomposition.PCA(n_components=3, random_state=0)
# Ajusta o PCA aos dados originais
pca.fit(iris_df)
# Transforma os dados originais nos componentes principais
pca_df = pd.DataFrame(pca.transform(iris_df), columns=['pca1', 'pca2', 'pca3'])
# Adiciona a coluna "target" com os rótulos de cada amostra
pca_df['target'] = iris.target
# Cria um gráfico de dispersão 3D com os componentes principais
fig = px.scatter_3d(
    pca_df,         # DataFrame contendo os dados transformados
    x='pca1',       # Componente principal 1 no eixo X
    y='pca2',       # Componente principal 2 no eixo Y
    z='pca3',       # Componente principal 3 no eixo Z
    color='target') # Cores de acordo com a classe (espécie da flor)
fig.write_html("temp-plot1.html") # Salva o gráfico como HTML
webbrowser.open("temp-plot1.html") # Abre o HTML no navegador
CÓDIGO 2. PCA com 2 componentes principais (Gráfico 2D)
import numpy as np  # Importa NumPy para operações numéricas
import pandas as pd  # Importa pandas para trabalhar com dataframes
from sklearn import decomposition  # Importa módulo de decomposição (PCA)
from sklearn import datasets  # Importa datasets embutidos no scikit-learn
from sklearn.datasets import load_iris  # Outra forma de carregar o dataset Iris
import plotly.express as px  # Importa plotly.express para criar gráficos interativos
import webbrowser # Importa o módulo que permite abrir URLs no navegador padrão do sistema
# Carrega o dataset Iris da biblioteca do scikit-learn
iris = datasets.load_iris()# Cria um DataFrame com os dados das flores e nomeia as colunas
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
# Cria um objeto PCA para reduzir a dimensionalidade para 3 componentes
pca = decomposition.PCA(n_components=2, random_state=0)
# Ajusta o PCA aos dados originais
pca.fit(iris_df)
# Transforma os dados originais nos componentes principais
pca_df = pd.DataFrame(pca.transform(iris_df), columns=['pca1', 'pca2'])
# Adiciona a coluna "target" com os rótulos de cada amostra
pca_df['target'] = iris.target
# Cria um gráfico de dispersão 3D com os componentes principais
fig = px.scatter(
    pca_df,         # DataFrame contendo os dados transformados
    x='pca1',       # Componente principal 1 no eixo X
    y='pca2',       # Componente principal 2 no eixo Y
    color='target') # Cores de acordo com a classe (espécie da flor)
# Salva o gráfico como HTML
fig.write_html("temp-plot2.html")
# Abre o HTML no navegador
webbrowser.open("temp-plot2.html")
🧠 Etapas Comuns nos Dois Códigos
1. Importação de bibliotecas
As bibliotecas usadas em ambos os códigos são usadas para:
· Manipular dados (numpy, pandas)
· Carregar o dataset Iris (datasets)
· Aplicar PCA (decomposition)
· Criar gráficos interativos (plotly.express)
· Abrir o gráfico gerado no navegador (webbrowser)
2. Carregamento do Dataset Iris
# Carrega o dataset Iris da biblioteca do scikit-learn
iris = datasets.load_iris()
# Cria um DataFrame com os dados das flores e nomeia as colunas
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
· Carrega os dados de 150 flores, com 4 características cada (comprimento e largura de sépala e pétala).
· Converte para um DataFrame para facilitar o manuseio.
3. Aplicação do PCA
# Cria um objeto PCA para reduzir a dimensionalidade para 3 componentes
pca = decomposition.PCA(n_components=2, random_state=0)
# Ajusta o PCA aos dados originais
pca.fit(iris_df)
# Código 1:
pca_df = pd.DataFrame(pca.transform(iris_df), columns=['pca1', 'pca2', 'pca3'])
# Código 2:
pca_df = pd.DataFrame(pca.transform(iris_df), columns=['pca1', 'pca2'])
· Cria o modelo PCA para transformar os dados em 2 ou 3 componentes principais.
· Esses componentes representam os eixos mais importantes (de maior variância) nos dados.
4. Adição dos rótulos (espécies de flores)
# Adiciona a coluna "target" com os rótulos de cada amostra
pca_df['target'] = iris.target
· Adiciona a informação sobre a espécie da flor (0, 1 ou 2) no novo DataFrame para podermos usar como cor no gráfico.
🖼️ Diferenças entre os dois códigos
	Código
	Componentes
	Tipo de gráfico
	Visualização
	1
	3
	scatter_3d (3D)
	Gráfico 3D rotacionável
	2
	2
	scatter (2D)
	Gráfico plano 2D
5. Criação do gráfico interativo
fig = px.scatter_3d(...) # Código 1 → 3D
fig = px.scatter(...) # Código 2 → 2D
· Utiliza as colunas pca1, pca2 e pca3 para criar o gráfico.
· A cor é definida pela coluna target, ou seja, a espécie da flor.
6. Salvamento e abertura do gráfico
fig.wfig.write_html("temp-plot1.html") # Salva o gráfico como HTML
webbrowser.open("temp-plot1.html") # Abre o HTML no navegador
· Salva o gráfico como um arquivo HTML.
· Abre automaticamente no navegador padrão.
✅ Conclusão Didática
· O PCA permite reduzir a complexidade dos dados, mantendo as informações mais relevantes.
· Os dois códigos aplicam PCA ao conjunto Iris:
· Um para visualização 3D (mais intuitiva em algumas análises),
· Outro para visualização 2D (mais simples e rápida).
· O uso do Plotly permite criar gráficos interativos, ideais para explorar visualmente agrupamentos ou padrões nos dados.
	Se quiser gerar os gráficos e as métricas:
Código 1: Com 3 componentes principais 
import numpy as np
import pandas as pd
from sklearn import decomposition, datasets, model_selection
from sklearn.metrics import confusion_matrix, accuracy_score
import plotly.express as px
import webbrowser
# Carrega o dataset Iris
iris = datasets.load_iris()
X = iris.data
y = iris.target
# Divide os dados em treino e teste para avaliação
X_train, X_test, y_train, y_test = model_selection.train_test_split(
    X, y, test_size=0.3, random_state=0
)
# Aplica PCA com 3 componentes
pca = decomposition.PCA(n_components=3, random_state=0)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
# Treinamento de um classificador simples para gerar métricas
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(random_state=0)
clf.fit(X_train_pca, y_train)
y_pred = clf.predict(X_test_pca)
# Exibe métricas no terminal
print("\n------------------ MÉTRICAS (3 Componentes) ------------------")
print("Matriz de Confusão:\n", confusion_matrix(y_test, y_pred))
print("Acurácia:", accuracy_score(y_test, y_pred))
print("Variância Total:", X_train_pca.var())
for i in range(X_train_pca.shape[1]):
    print(f"Variância da Componente {i+1}:", X_train_pca[:, i].var())
print("---------------------------------------------------------------")
# Aplica PCA aos dados originais completos para visualização
pca_result = pca.fit_transform(X)
explained_variance = pca.explained_variance_ratio_ * 100  # Em porcentagem
# Cria DataFrame para o gráfico
pca_df = pd.DataFrame(pca_result, columns=['pca1', 'pca2', 'pca3'])
pca_df['target'] = y
# Gera gráfico interativo 3D com paleta Dark24
fig = px.scatter_3d(
    pca_df,
    x='pca1',
    y='pca2',
    z='pca3',
    color=pca_df['target'].astype(str),
    color_discrete_sequence=px.colors.qualitative.Dark24
)
# # Gera gráfico interativo 3D sem a paleta Dark24
# fig = px.scatter_3d(
#     pca_df,
#     x='pca1',
#     y='pca2',
#     z='pca3',
#     color='target'
# )
# Define proporções iguais nos eixos
fig.update_layout(scene=dict(aspectmode='cube'))
# Salva e abre no navegador
fig.write_html("grafico_pca_3d.html")
webbrowser.open("grafico_pca_3d.html")
Código 2: Com 2 componentes principais
import numpy as np
import pandas as pd
from sklearn import decomposition, datasets, model_selection
from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.linear_model import LogisticRegression
import plotly.express as px
import webbrowser
# Carrega o dataset Iris
iris = datasets.load_iris()
X = iris.data
y = iris.target
# Divide os dados em treino e teste
X_train, X_test, y_train, y_test = model_selection.train_test_split(
    X, y, test_size=0.3, random_state=0
)
# Aplica PCA com 2 componentes
pca = decomposition.PCA(n_components=2, random_state=0)
X_train_pca = pca.fit_transform(X_train)
X_test_pca = pca.transform(X_test)
# Treina um classificador para avaliação
clf = LogisticRegression(random_state=0)
clf.fit(X_train_pca, y_train)
y_pred = clf.predict(X_test_pca)
# Exibe métricas no terminal
print("\n------------------ MÉTRICAS (2 Componentes) ------------------")
print("Matriz de Confusão:\n", confusion_matrix(y_test, y_pred))
print("Acurácia:", accuracy_score(y_test, y_pred))
print("Variância Total:", X_train_pca.var())
for i in range(X_train_pca.shape[1]):
    print(f"Variância da Componente {i+1}:", X_train_pca[:, i].var())
print("---------------------------------------------------------------")
# Aplica PCA nos dados completos para visualização
pca_result = pca.fit_transform(X)
# Cria DataFrame com os componentes principais
pca_df = pd.DataFrame(pca_result, columns=['pca1', 'pca2'])
pca_df['target'] = y
# Gera gráfico interativo 2D com Plotly
fig = px.scatter(
    pca_df,
    x='pca1',
    y='pca2',
    color=pca_df['target'].astype(str),
    color_discrete_sequence=px.colors.qualitative.Dark24
)
# Salva e abre o gráfico no navegador
fig.write_html("grafico_pca_2d.html")
webbrowser.open("grafico_pca_2d.html")
TEMA 5 - REDES NEURAIS E APRENDIZADO PROFUNDO
Módulo 1. Etapas do treinamento de redes neurais profundas
Problemas dos gradientes
🧠 Estrutura de uma Rede Neural
· A rede neural é composta por neurônios conectados por sinapses. 
· Sinapses são conexões que permitem a propagação de sinais entre neurônios.
· Cada conexão tem:
· Entrada: representada por x₁, x₂, ..., xₙ.
· Peso: representadopor wⱼ₁, wⱼ₂, ..., wⱼₙ.
· Bias: constante que ajusta a ativação de um neurônio, ou seja, é o viés, uma constante que ajuda a rede a se ajustar melhor aos dados. É uma constante que dá flexibilidade para um melhor desempenho da Rede Neural.
· Função de propagação: 
· É calculada com:
· O resultado é passado para a função de ativação.
· Função de ativação: transforma em uma saída .
⚙️ Funções de Ativação Comuns 
1. Linear: 
· Fórmulas: 
· Derivada: 
· Gráfico: reta crescente ou decrescente (dependendo de α).
· Simples, mas limitada (não introduz não-linearidade).
2. Sigmoide (logística): 
· Fórmulas: 
· Derivada: 
· Mapeia valores entre 0 e 1. Muito usada em classificações binárias.
· Problema: tende a dissipação de gradiente (vanishing gradiente).
3. Tangente hiperbólica (Tanh): 
· Fórmulas: 
· Derivada: 
· Mapeia valores entre -1 e 1. Mais centrada que a sigmoide.
4. ReLU (Rectified Linear Unit): 
· Fórmulas: 
· Derivada: 
· Rápida e eficiente, mas pode "matar neurônios" (zero gradiente).
🎯 Objetivo do Treinamento de Redes Neurais
· Ajustar pesos para que a saída da rede se aproxime do valor esperado 
· A função erro (função de custo) mede a diferença entre os dois:
· Saída esperada (ŷ)
· Saída da rede (y).
· O objetivo é minimizar o erro, ou seja, a função de erro deve tender a zero.
· Se for muito deferente de zero, quer dizer que a rede neural não funciona bem.
🔁 Treinamento com Backpropagation (Retropropagação)
· Algoritmo principal de ajuste dos pesos:
Entrada de dados
 
Repita
 Calcule 
 Calcule Erro()
 Calcule os gradientes 
 Faça 
 Faça 
Até que Erro()· η: taxa de aprendizado
· : gradiente da função de custo
· Desvantagem: pode ser lento com muitos dados.
2. Gradiente de Descida Estocástico (Stochastic Gradient Descent - SGD)
· Atualiza os pesos usando apenas uma parte dos dados (batch) por vez.
· Vantagens:
· Treinamento mais rápido.
· Pode escapar de mínimos locais (lugares ruins na função de erro).
3. Gradiente Acelerado de Nesterov (NAG)
· Usa uma previsão do próximo passo antes de calcular o gradiente.
· Fórmulas: 
 
· : fator de momento (ajuda a manter a direção)
· Faz um "salto", depois corrige se errar — como prever o próximo passo.
· Vantagem: acelera a convergência de forma mais inteligente.
🧰 Outros Otimizadores Populares
· Momentum: acumula gradientes passados para ganhar velocidade.
· AdaGrad: adapta a taxa de aprendizado para cada peso.
· RMSProp: corrige problemas do AdaGrad com atualizações mais estáveis.
· Adam: combinação de Momentum + RMSProp (muito usado).
· Nadam: Adam com o passo antecipado do Nesterov.
⚠️ Problemas ao usar otimizadores inadequados
· Treinamento muito lento.
· O modelo pode ficar preso em mínimos locais (pontos ruins).
· Pode não convergir (não encontrar uma boa solução).
✅ Importância da Escolha do Otimizador
· Um bom otimizador:
· Acelera o aprendizado.
· Melhora o desempenho final do modelo.
Uso de regularização para evitar sobreajuste
🤖 O que é Overfitting?
· Overfitting acontece quando o modelo aprende demais os detalhes do conjunto de treino, inclusive ruídos e exceções, e por isso não generaliza bem para novos dados (teste).
· O oposto é o underfitting, quando o modelo é simples demais e não consegue aprender nem o básico.
🛠️ Formas de Evitar o Overfitting
1. Regularização L1 e L2
· Consiste em adicionar um termo à função de custo que penaliza pesos muito grandes.
· Objetivo: reduzir a complexidade do modelo, tornando-o mais generalizável.
📌 L1 – Least Absolute Deviations (LAD)
· Penaliza pela soma dos valores absolutos dos pesos.
· Fórmula do termo:
· Vantagem: reduz muitos pesos a zero, promovendo sparsidade (o modelo usa menos variáveis irrelevantes), por isso é o é preferível.
📌 L2 – Least Squares Error (LSE)
· Penaliza pela soma dos quadrados dos pesos.
· Fórmula do termo:
· O não tem um desempenho muito bom em conjuntos de dados que possui muitos outliers. Logo, é menos eficaz, pois os quadrados ampliam muito valores extremos dos outliers. 
2. Dropout	
· Dropout é uma técnica usada durante o treinamento da rede neural para evitar overfitting.
· Funciona desligando aleatoriamente alguns neurônios (exceto os da saída) em cada iteração. 
· Isso ajuda a evitar que a rede dependa demais de alguns neurônios específicos, reduzindo o risco de overfitting, e forçando-a a distribuir o aprendizado.
· A taxa de dropout (p) define a chance de um neurônio ser ignorado (geralmente é p = 0,5 → 50% de chance).
· Em cada rodada de treino, a rede funciona como se fosse uma versão menor dela mesma.
· Durante o teste ou uso real, todos os neurônios são usados, mas com ajuste nos valores.
· Benefícios:
· Evita dependência excessiva de neurônios específicos.
· Força o modelo a generalizar melhor.
· Atua como uma forma de regularização aleatória.
 Exemplo:
· Imagine uma rede com 6 neurônios ocultos.
· Em uma iteração, 3 deles são desligados (dropout).
· A rede treina com os 3 restantes.
· Na próxima iteração, outros 3 podem ser desligados.
· Isso faz a rede aprender com diferentes combinações de neurônios a cada vez.
3. Parada Antecipada (Early Stopping)
· Parada antecipada é uma técnica que interrompe o treinamento quando o modelo para de melhorar em um conjunto de validação.
· Evita que o modelo continue treinando e acabe decorando os dados de treino (overfitting).
· Funciona assim:
· Durante o treinamento, o modelo é testado em um conjunto de validação.
· Se o desempenho no conjunto de validação parar de melhorar, o treino é interrompido.
· Isso evita que o modelo aprenda ruídos.
· Vantagens:
· Reduz o risco de overfitting.
· Economiza tempo de computação.
· Melhora a generalização do modelo (funciona melhor com novos dados).
✅ Conclusão
· Overfitting é um problema comum e prejudica a capacidade de generalização do modelo.
· Técnicas como regularização (L1/L2), dropout e early stopping são formas eficazes de:
· Simplificar o modelo,
· Evitar exageros no treinamento,
· Melhorar a performance em dados novos.
Módulo 2. Aprendizado por reforço
🧠 O que é Aprendizado por Reforço?
· É um tipo de aprendizado de máquina baseado em tentativa e erro.
· O agente interage com um ambiente, recebe recompensas e aprende a agir melhor com o tempo.
· O objetivo é maximizar a recompensa total acumulada.
🧩 Componentes do Aprendizado por Reforço
1. Agente
· É quem toma decisões.
· Executa ações no ambiente buscando recompensas.
2. Ambiente
· Onde o agente atua.
· Reage às ações do agente, devolvendo novos estados e recompensas.
3. Estado (eₜ)
· Representa a situação atual do agente.
· Pode incluir posição, condições do ambiente, presença de obstáculos, etc.
4. Ação (aₜ₊₁)
· Escolha feita pelo agente em cada estado.
5. Recompensa (rₜ, rₜ₊₁...)
· Valor recebido após uma ação.
· Positiva: se a ação foi boa.
· Negativa: se foi ruim.
· Pode ser imediata ou atrasada.
🧭 Elementos da Estratégia de Aprendizado
6. Política (π)
· É a estratégia do agente.
· Mapeia estados para ações com base nas recompensas esperadas.
7. Valor (V)
· Recompensa esperada a longo prazo a partir de um estado.
· Leva em conta a qualidade do caminho futuro.
8. Função valor
· Mede o valor total da recompensa esperada a partir de um estado.
· O agente quer maximizá-la.
9. Valor Q (Qπ(e, a))
· Valor esperado para um par estado-ação.
· Ajuda o agente a saber qual ação é melhor em cada estado.
🎯 Objetivo Final do Aprendizado por Reforço: Aprender uma política ótima que maximiza a soma das recompensas ao longo do tempo.
📌 Exemplo: Imagine um robô em um labirinto:
· Estado: sua posição atual.
· Ação: mover para cima, baixo, esquerda ou direita.
· Recompensa: +10 se encontrar a saída, -1 se bater na parede.
· Com o tempo, ele aprende que certas ações em certos lugares o levam à maior recompensa.
Políticas de rede neural
🎯 O que é uma Política de Rede Neural?
· É uma regra de decisão usada pelo agente para escolher uma ação com base no estado atual do ambiente.
· A política é representada por um conjunto de funções: 
· Cada função ​ define qual ação o agente deve tomar no instante , dado o estado : 
· Onde ​ é o conjunto de ações possíveis para o estado .
📌 Tipos de Políticas
· Política Estacionária:
· Não muda com o tempo, ou deja, é independente do tempo.
· Sempre toma a mesma ação para um mesmo estado.
· Exemplo: Sempre que ver o estado “vermelho”, o agente para.
· Política Não Estacionária:
· Muda com o tempo, ou seja, varia com o tempo.
· O agente pode tomar ações diferentes para o mesmo estado em tempos diferentes.
✅ Políticas Admissíveis
· São as políticas que podem ser representadas por redes neurais e utilizadas no aprendizado por reforço.
🧠 Como otimizar uma política?
Existem duas abordagens principais (e uma terceira híbrida):
1. Métodos baseados em valor
· Otimizam a função valor , que estima o retorno esperado ao tomar a ação no estado .
· O objetivo é encontrar a melhor política 
Onde o "*" representa a solução ótima. Como nesses algoritmos trabalhamos com soluções aproximadas, a política ótima pode ser representada por:
Onde o símbolo " ≈ " é usado para representar o erro de aproximação.
· Algoritmos comuns:
· Q-learning
· DQN (Deep Q-Network)
✅ Vantagens:
· Mais eficientes com os dados.
· Menor variância nas estimativas.
⚠️ Desvantagens:
· Nem sempre convergem para a solução ótima.
· Limitados a ações discretas (por padrão).
2. Métodos baseados em política
· Atualizam a política diretamente, de forma iterativa.
· A função política recebe o estado e retorna uma ação.
✅ Vantagens:
· Funcionam com ações contínuas, discretas ou mistas.
· Possuem convergência local para a política ótima.
⚠️ Desvantagens:
· Alta variância.
· Poucoeficientes em termos de uso de amostras.
Algoritmos comuns:
· Gradiente de Política
· TRPO (Trust Region Policy Optimization)
· Métodos Evolutivos
3. Método Ator-Crítico (Actor-Critic)
· Combina valor + política:
· O crítico avalia a ação com base na função valor.
· O ator ajusta a política com base no feedback do crítico.
· Vantagem: Unifica os pontos fortes dos dois métodos anteriores.
🧪 Exemplo: Imagine um agente que dirige um carro em uma pista:
· Estado: posição na pista.
· Ação: virar à esquerda, seguir reto, virar à direita.
· Política estacionária: sempre virar à esquerda em curvas.
· Política não estacionária: no começo vira à esquerda, depois aprende que seguir reto dá mais recompensa e muda a ação.
Aprendizado por diferenças temporais e Q-learning
🧠 O que são Funções Valor?
· Funções que avaliam o quão boa é uma ação ou estado.
· valor esperado do estado seguindo a política .
· : valor esperado ao realizar a ação no estado , seguindo .
· 👉 As funções valor são como mapas que ajudam o agente a entender quão bom é um estado ou uma ação.
· 👉 Ou seja: “Se eu estiver no estado e fizer a ação , o que posso esperar ganhar no futuro?”
⏳ O que é Aprendizado por Diferenças Temporais (TD)?
· Método para atualizar as funções valor com base em experiências parciais, sem precisar esperar pela recompensa final.
· 👉 Ou seja: É um método de aprendizado por reforço onde o agente aprende a cada passo, em vez de esperar até o final do episódio.
· 🔄 Problema: Se não usarmos TD, o agente só aprende no final de um episódio. Isso seria lento e ineficiente.
· 💡 Solução TD: Com TD, o agente atualiza seus valores logo após cada passo, com base na recompensa imediata + estimativa do próximo estado.
· 🔢 Fórmula de atualização do TD: 
Explicando os termos:
· : valor atual do estado.
· ​: recompensa que o agente acabou de receber.
· : estimativa do valor do próximo estado.
· : taxa de aprendizado (quão rápido o agente aprende).
· : fator de desconto (quanto o agente se importa com recompensas futuras).
✅ Vantagem: o agente aprende passo a passo, sem precisar esperar o episódio terminar.
🧭 Tipos de Algoritmos por Política
1. Dentro da política (on-policy)
· Aprende usando apenas dados da política atual.
· Menos eficiente em uso de dados (tem que descartar o que já aprendeu ao mudar de política).
· Exemplo: Sarsa, métodos TD tradicionais.
2. Fora da política (off-policy)
· Aprende usando dados de qualquer política, mesmo que tenham sido gerados por outro comportamento.
· Mais eficiente com dados, pois reaproveita experiências anteriores.
· Mais eficiente, mas exige mais memória.
· Exemplo: Q-learning
Resumindo:
	Tipo de Método
	Princípio
	Métodos dentro da política (On-policy)
	Aprende com a própria política que está executando (experiência real).
	métodos fora da política (Off-policy)
	Aprende com uma política diferente da que está executando (ações hipotéticas).
🔁 Políticas com Exploração
· Por que explorar❓ Se o agente sempre fizer a ação com maior recompensa conhecida, ele pode nunca descobrir ações melhores. 
· Logo, evitam sempre escolher a melhor ação estimada (exploram novas ações).
· Tipos de políticas com exploração:
· ε-greedy:
· Com probabilidade : faz a melhor ação conhecida (gananciosa).
· Com probabilidade ε: escolhe uma ação aleatória (exploração).
· ε-soft: Garante que todas as ações tenham alguma chance de serem escolhidas.
· Softmax: Atribui probabilidade às ações de forma proporcional ao valor delas.
💡 O que é Q-learning?
· Q-learning é um algoritmo de aprendizado por reforço fora da política.
· Ele aprende os valores das ações em cada estado (função Q) e escolhe a melhor ação com base nisso.
· Usa a função valor de ação Q(E, A) para aprender o melhor comportamento.
· Fórmula de atualização: 
Explicando:
· : estado atual.
· ​: ação atual.
· ​: recompensa recebida.
· : melhor valor estimado para o próximo estado.
· : taxa de aprendizado (quão rápido o agente aprende).
· : fator de desconto (quanto o agente se importa com recompensas futuras).
· Atualiza os valores com base na melhor ação possível no estado seguinte.
⚙️ Algoritmo Q-learning passo a passo:
Iniciar 
Para 
 Iniciar o estado 
 Repetir
 Escolher uma ação a do estado e usando uma política derivada de 
 Calcular
 Atualizar o estado 
Até que seja um estado terminal
1. Inicializa Q(E, A) com valores aleatórios.
2. Para cada episódio:
· Escolhe um estado inicial.
· Enquanto não chegar a um estado final:
1. Escolhe uma ação a com base em ε-greedy.
2. Observa a recompensa R e o próximo estado .
3. Atualiza usando a fórmula acima.
4. Vai para o novo estado .
3. Repete até o aprendizado convergir.
📘 Exemplo Simples (ε-greedy): Suponha que o agente esteja em um estado onde pode:
· Ação 1 → Q = 8
· Ação 2 → Q = 5
Se :
· 90% de chance de escolher Ação 1 (maior Q).
· 10% de chance de explorar (escolher aleatoriamente entre ações).
📊 Tabela Comparativa: On-policy vs Off-policy
	Característica
	On-policy
	Off-policy
	Aprende com
	A política realmente usada
	Uma política ideal (alvo)
	Base das atualizações
	Ações de fato realizadas
	Ações hipotéticas / não realizadas
	Exemplo clássico
	SARSA
	Q-Learning
	Exploração vs Exploração
	Aprende com decisões que incluem erro
	Aprende com decisões otimizadas
	Política de comportamento
	Igual à política usada para aprender
	Diferente da política usada para aprender
	Uso comum
	Quando se deseja aprender com o próprio comportamento
	Quando se deseja aprender a política ótima sem segui-la ainda
	Vantagem
	Mais realista com o comportamento atual
	Mais eficiente para aprender políticas ótimas
	Desvantagem
	Pode demorar mais para aprender a política ideal
	Pode ser menos realista em ambientes ruidosos
🧠 Exemplo simples: Imagine um robô que aprende a andar:
· On-policy (SARSA): o robô testa andar de um jeito aleatório e aprende com esse jeito (mesmo que esteja errando).
· Off-policy (Q-learning): o robô testa andar de um jeito aleatório, mas aprende como seria o melhor jeito de andar, mesmo sem tê-lo tentado ainda.
Utilizando o algoritmo DQN
✅ O que é o DQN?
· DQN (Deep Q-Network) é um algoritmo de Aprendizado por Reforço Fora da Política.
· Ele é uma versão aprimorada do Q-learning que usa uma rede neural para estimar os valores Q, ao invés de uma tabela.
· Isso é útil quando há muitos estados e ações, tornando inviável criar uma tabela Q tradicional.
❗ Por que usar DQN?
· Em muitos problemas reais (como jogos, robôs, etc.), o número de combinações de estados e ações é enorme.
· Armazenar todas essas combinações em uma tabela não é prático nem eficiente.
· O DQN resolve isso usando redes neurais para aproximar a função .
🧠 Técnicas principais do DQN
1. Experience Replay (Repetição de Experiências)
· As experiências vividas pelo agente são armazenadas em um buffer de memória.
· Cada experiência é uma tupla: 
· Durante o treinamento:
· Um lote aleatório dessas experiências é usado para treinar a rede neural.
· Isso quebra a correlação entre as experiências e melhora a estabilidade do aprendizado.
✅ Vantagens:
· Permite aprendizado com experiências passadas variadas.
· Evita que a rede aprenda apenas com situações recentes.
2. Rede Alvo (Target Network)
· Uma segunda rede neural é usada como referência estável para calcular o valor-alvo.
· Essa rede tem os mesmos parâmetros da rede Q, mas só é atualizada periodicamente (ex: a cada 1000 iterações).
· Isso evita oscilações no aprendizado.
🔄 Resumo passo a passo do Algoritmo DQN
Iniciar com valores aleatórios para os pesos 
Iniciar a memória B com o método Experience Replay
Iniciar o procedimento de exploração Eaxplorar(.)
 Para faça
Explorar(.), Atualizar 
Fim
Saída 
1. Inicializa a rede Q com pesos aleatórios θ.
2. Inicializa o buffer de experiências (replay memory B).
3. Começa a explorar o ambiente com uma política (ex: ε-greedy).
4. Para cada episódio (ou iteração):
· Coleta uma nova experiência e armazena no buffer B.
· Seleciona um lote aleatório de experiências do buffer.
· Calcula o valor alvo(linha 5): 
(usando a rede-alvo com pesos antigos θ−\theta^-θ−).
· Atualiza os pesos da rede Q (linha 6) minimizando o erro entre:
· e 
Usando gradiente descendente estocástico.
· Repete a exploração e continua o ciclo.
🧪 Exemplo Didático (Simplificado)
Imagine um agente jogando "Flappy Bird":
· Estado: posição do pássaro, altura do cano.
· Ações: pular ou não pular.
· Recompensa: +1 se passar um cano, -10 se bater.
Com DQN:
· O agente armazena as experiências no buffer:
· Ex: ("posição X", "pular", "+1", "nova posição Y")
· Treina a rede neural com várias dessas experiências aleatórias.
· A cada certo número de passos, atualiza a rede-alvo.
· Usa uma política ε-greedy: às vezes explora ações novas.
Com o tempo, o agente aprende uma rede Q que indica a melhor ação para cada estado.
✅ Conclusão
· O DQN é uma forma moderna e poderosa de aplicar Q-learning com redes neurais.
· Ele resolve problemas complexos com muitos estados e ações, como jogos, navegação de robôs, etc.
· Os dois grandes truques para manter a estabilidade são:
· Experience Replay (memória de experiências).
· Rede Alvo (para evitar atualizações instáveis).
Módulo 3. Redes neurais de convolução (CNN) e recorrentes (RNN) 
🎯 O que é Aprendizado de Máquina?
· É uma técnica usada para criar modelos capazes de aprender com dados.
· Os algoritmos usam exemplos de treinamento para:
· Encontrar padrões.
· Construir um modelo.
· Fazer previsões sobre dados novos.
🧠 Redes Neurais Profundas (DNN)
· DNN = Deep Neural Network (Rede Neural Profunda).
· Composta por várias camadas ocultas.
· Aprendem sozinhas as características dos dados durante o treinamento.
· Fluxo dos dados: da entrada até a saída (feedforward), sem retorno de informação.
📌 Aplicações:
· Reconhecimento de imagem: Aprende a detectar pixels, bordas, texturas.
· Reconhecimento de texto: Aprende caracteres, palavras e frases automaticamente.
🧱 Tipos de Arquitetura em Aprendizado Profundo
🔹 A) DNN – Rede Neural Profunda (Feedforward)
· Os dados fluem apenas para frente.
· É usada em classificações simples, onde os dados não têm sequência (como imagens estáticas ou textos isolados).
· Treinada com aprendizado supervisionado (usa exemplos com respostas certas).
🔹 B) RNN – Rede Neural Recorrente
· Ideal para dados sequenciais ou temporais, como texto, áudio e séries temporais.
· Possui ciclos internos, o que dá a ela uma memória de curto prazo.
· O estado oculto armazena informações do tempo anterior.
🧮 Fórmula: 
Onde:
· U: pesos da entrada para a camada oculta.
· W: pesos entre os estados ocultos.
· V: representa os pesos entre a camada de entrada e saída.
· entrada no tempo t.
· : função de ativação (tanh ou ReLU).
· ​: estado oculto atual.
⚠️ Desafio da RNN: sofre com desvanecimento do gradiente em sequências longas.
✅ Solução: usar a arquitetura LSTM (Long Short-Term Memory), que memoriza melhor informações de longo prazo.
🔹 C) CNN – Rede Neural Convolucional
· Usada principalmente para imagens, mas também para:
· Vídeos
· Reconhecimento de voz
· Processamento de linguagem natural
· CNN + LSTM → Exemplo: gerar legendas automáticas para imagens.
🧱 Estrutura básica da CNN:
1. Camada de Convolução: Detecta padrões locais, como bordas ou formas em uma imagem.
2. Camada de Pooling: Reduz o tamanho dos dados, mantendo as informações mais importantes.
3. Camada Totalmente Conectada: É responsável por tomar decisões finais, como classificar a imagem.
✅ Vantagens:
· Usa conectividade local e compartilhamento de parâmetros, o que reduz a quantidade de cálculos e melhora a eficiência.
📌 Resumo Final – Comparação entre Arquiteturas
	Arquitetura
	Uso Principal
	Tem memória?
	Tipo de dados
	Contexto Ideal
	Exemplo Prático
	DNN
	Classificação geral
	❌ Não
	Dados fixos (ex: imagem, texto simples)
	Dados tabulares e estruturados
	Previsão de churn
	RNN
	Texto, fala, séries temporais
	✅ Sim
	Dados sequenciais
	Dados visuais (imagens, vídeos)
	Tradução automática, séries temporais
	CNN
	Imagens, vídeos, linguagem
	❌ Não
	Dados com estrutura espacial (ex: pixels)
	Dados sequenciais/temporais
	Diagnóstico por imagem
🧪 Exemplo ilustrativo (conceitual):
Imagine que você está ensinando um sistema de IA a:
· DNN: Classificar se uma imagem é de um gato ou cachorro.
· CNN: Identificar as orelhas, olhos, focinho em imagens para classificar melhor.
· RNN: Ler uma frase e prever a próxima palavra com base no contexto anterior.
Treinando RNN
🧠 O que é uma RNN?
· RNN (Rede Neural Recorrente) é um tipo de rede que:
· Processa sequências de dados (ex: frases, sons, séries temporais).
· Tem memória interna: a saída atual depende da entrada atual e também das anteriores.
🔄 Como a RNN é treinada?
· O treinamento é parecido com o de redes normais (ANN), mas com uma diferença importante:
· A mesma rede é usada várias vezes, uma para cada instante de tempo (compartilhando os mesmos pesos).
· O algoritmo usado é o BPTT (Backpropagation Through Time), que significa retropropagação ao longo do tempo.
📐 Como a RNN funciona?
Para cada tempo :
1. Entrada (xₜ): O que entra na rede naquele instante.
2. Estado oculto (Sₜ): Guarda a "memória" de entradas anteriores.
3. Saída (Yₜ): Resultado gerado no tempo t.
Fórmulas:
· Estado: 
· Saída: 
Onde:
· ​: pesos da entrada.
· W_s​: pesos das conexões entre estados ocultos.
· ​: pesos da saída.
· ​: funções de ativação (como tanh, ReLU).
📉 Cálculo do Erro
Usa-se o erro quadrático:
· : valor esperado (desejado).
· saída da rede.
🔁 Exemplo: Retropropagação no tempo t = 3
A ideia é ajustar os pesos e ​ para que o erro no tempo 3 (E₃) diminua.
A) Ajuste de ​:
· Como o erro depende da saída, que depende do estado, que depende dos pesos:
· Deriva-se ​ em relação a usando a regra da cadeia.
B) Ajuste de ​:
· O estado atual ​ depende do anterior ​, que depende de ​, e assim por diante.
· A derivada envolve vários termos:
· ​, etc.
C) Ajuste de ​:
· O processo é parecido, mas agora analisando como a entrada em t = 3, t = 2 e t = 1 afeta o estado ​.
✅ O que você precisa entender:
· Para ajustar os pesos, o erro em t = 3 é propagado de volta no tempo para t = 2, t = 1… Esse é o coração do BPTT.
⚠️ Problemas no BPTT
1. Desvanecimento do Gradiente (Vanishing Gradient)
· O gradiente vai ficando muito pequeno conforme voltamos no tempo.
· Resultado: a rede esquece o que ocorreu muito tempo atrás.
2. Explosão do Gradiente (Exploding Gradient)
· O gradiente pode crescer demais, causando instabilidade no treinamento.
✅ Soluções
🔸 LSTM (Long Short-Term Memory)
· Uma arquitetura que melhora a memória de longo prazo.
· Resolve o problema do desvanecimento do gradiente.
🔸 Clipping (Recorte do Gradiente)
· Quando o gradiente é muito grande, ele é limitado (cortado) para evitar explosões.
· Isso é feito comparando sua norma com um limite máximo.
🎯 Resumo Final
	Conceito
	Explicação simples
	RNN
	Rede que lembra entradas passadas (tem memória).
	BPTT
	Ajusta os pesos voltando no tempo.
	Pesos
	 e ​ ajustados usando derivadas.
	Problemas
	Gradiente muito pequeno (esquece) ou muito grande (instável).
	Soluções
	LSTM e clipping (recorte de gradiente).
RNN profundas
🧠 O que são RNNs Profundas (DRNNs)?
· As RNNs profundas são uma evolução das redes neurais recorrentes tradicionais (RNNs). Elas são indicadas para problemas com dados sequenciais complexos, como fala, texto, vídeo, etc.
🔑 Características principais:
1. Várias camadas empilhadas (deep learning):
· Cada camada aprende um nível diferente de informação:
· Camadas iniciais → aprendem padrões simples.
· Camadas superiores → capturam padrões mais complexos.
2. Preservam memória ao longo do tempo:
· As conexões recorrentes permitem que a rede "lembre" de informações passadas.
· A saída de um neurônio pode retornar para ele mesmo ou para outras unidades da mesma camada.
🧱 Como as DRNNs funcionam?
· Em vez de uma só camada de memória, as DRNNs têm várias camadas de estados ocultos empilhados.
· Isso aumenta o poder da rede para capturar padrões temporais complexos.
🧠 LSTM – Long Short-Term MemoryUma das arquiteturas mais usadas dentro de DRNNs é a LSTM, que foi criada para resolver problemas das RNNs tradicionais, como o desvanecimento do gradiente.
🔸 LSTMs têm 4 partes principais (portas e memória):
1. Célula de memória (Cₜ):
· Guarda as informações principais da sequência.
· Permite o fluxo contínuo dos dados ao longo do tempo.
2. Porta de entrada:
· Decide quais informações novas vão entrar na célula.
3. Porta de esquecimento:
· Decide quais informações antigas devem ser apagadas.
4. Porta de saída:
· Decide quais informações vão ser enviadas para a próxima etapa.
⚙️ Exemplo:
Imagine que você quer treinar uma LSTM para prever a próxima palavra em uma frase:
Etapa 1 – Recebe a palavra atual (entrada xₜ)
→ A porta de entrada decide o que guardar na memória.
Etapa 2 – A memória anterior (Cₜ₋₁) é atualizada
→ A porta de esquecimento apaga o que não é mais útil.
Etapa 3 – A nova memória (Cₜ) é usada
→ A porta de saída decide o que mandar como resposta (ex: qual palavra vem depois).
📌 Benefícios das LSTMs
· Conseguem memorizar informações por longos períodos.
· Evitam problemas comuns em RNNs simples:
· Desvanecimento de gradiente (quando o modelo “esquece” rapidamente).
· Funcionam muito bem com:
· Previsão de séries temporais
· Tradução automática
· Reconhecimento de fala
· Geração de texto
📋 Resumo final – comparação simples
	Tipo de Rede
	Camadas empilhadas?
	Lembra longo prazo?
	Problema que resolve
	RNN tradicional
	❌ Não
	⚠️ Limitado
	Desvanecimento de gradiente
	DRNN (RNN profunda)
	✅ Sim
	⚠️ Um pouco melhor
	Representação mais rica dos dados
	LSTM (dentro de DRNN)
	✅ Sim
	✅ Sim
	Memória de longo prazo + estabilidade
Processamento de linguagem natural
🧠 O que é Processamento de Linguagem Natural (PLN)?
· É uma área da Inteligência Artificial que ensina computadores a entenderem, interpretarem e gerarem linguagem humana (como textos e falas).
· Utiliza técnicas de aprendizado profundo, como redes neurais, para processar e analisar grandes volumes de texto.
🧱 Como as redes neurais lidam com a linguagem?
1. RNNs (Redes Neurais Recorrentes) e CNNs (Redes Convolucionais) tratam o texto como sequências de palavras (ex: frases).
2. A linguagem tem uma estrutura hierárquica:
· Letras → formam palavras
· Palavras → formam frases
· Frases → formam parágrafos
🌳 Redes Neurais Recursivas
· Inspiradas na estrutura em árvore da linguagem. 
· Funcionam de forma hierárquica, combinando significados aos poucos.
🧾 Exemplo: Frase: "PLN é incrível!"
· Primeiro, combina as palavras "é" + "incrível" → cria uma representação intermediária p1.
· Depois, combina "PLN" com p1 → cria p2, que representa o sentido completo da frase.
Isso ajuda a rede a entender o contexto geral, e não só palavra por palavra.
📊 Aplicações mais comuns de PLN
1. Tradução automática
· Exemplo: traduzir "Como vai você?" para "How are you?" sem ajuda humana.
2. REN (Reconhecimento de Entidades Nomeadas)
· Identifica nomes de pessoas, lugares, organizações etc.
· Ex: No texto "Ana mora em São Paulo e trabalha no Google", o sistema reconhece:
· "Ana" → pessoa
· "São Paulo" → lugar
· "Google" → organização
3. Classificação automática de textos
· Organiza textos em categorias predefinidas.
· Ex: Categorizar uma notícia como "esporte", "política", "tecnologia" etc.
4. Análise de sentimentos
· Determina se um texto expressa emoção positiva, negativa ou neutra.
· Ex: "Adorei o produto" → sentimento positivo
5. Sistemas de perguntas e respostas
· Ex: Você pergunta “Quem descobriu o Brasil?” e o sistema responde “Pedro Álvares Cabral”.
· Muito usado em assistentes virtuais (chatbots).
6. Extração de informação
· Busca informações relevantes e específicas em textos.
· Ex: Ler um artigo e extrair nomes de medicamentos mencionados.
7. Sumarização automática
· Gera um resumo automático de um texto grande.
· Ex: Ler uma notícia e produzir um parágrafo com o essencial.
8. Busca semântica
· Entende o significado por trás da pergunta, não apenas palavras-chave.
· Ex: Você procura “remédio para dor de cabeça” e o sistema encontra “analgésicos como dipirona ou paracetamol”.
🔁 Reutilização de RNNs
· Uma RNN treinada com muitos textos pode ser reaproveitada para tarefas como classificação de sentimentos, pois já aprendeu muito do idioma.
· Isso é feito com camadas pré-treinadas que são ajustadas para uma nova tarefa.
✅ Conclusão
O PLN permite que máquinas entendam linguagem humana de maneira inteligente e eficiente, com redes neurais que aprendem o significado e o contexto dos textos. Isso é essencial para assistentes virtuais, tradutores, análises de sentimento, filtros de conteúdo, entre outros.
Módulo 4. Simulação com TensorFlow e AWS SageMaker
Simulação com TensorFlow
✅ O que é o TensorFlow?
· Plataforma de código aberto criada pelo Google.
· Usada para computação numérica e modelagem de machine learning (ML).
· É atualmente uma das bibliotecas mais populares para aprendizado profundo (deep learning).
· Conta com grande comunidade, boa documentação e muitos exemplos disponíveis.
🧰 Principais APIs do TensorFlow
1. tf.data
· Manipula grandes volumes de dados.
· Faz leitura de diferentes formatos.
· Permite transformações complexas nos dados.
2. tf.keras
· Interface de alto nível para criar e treinar modelos de redes neurais.
· Simplifica a construção de arquiteturas profundas.
3. tf.estimators
· Fornece métodos para treinar, avaliar e fazer previsões com modelos.
4. API Distribution Strategy
· Permite treinamento distribuído em várias GPUs, máquinas ou TPUs.
📚 Outras bibliotecas populares de aprendizado profundo
Mesmo que o TensorFlow seja o mais usado, outras opções também são úteis:
	Biblioteca
	Criador
	Destaques
	Keras
	Open Source
	Interface amigável, funciona com TensorFlow, CNTK, Theano
	PyTorch
	Facebook AI
	Concorrente direto do TensorFlow, fácil para pesquisa e protótipos
	MXNet
	Apache
	Suporte a várias linguagens de programação
	CNTK
	Microsoft
	Suporte a Python, C++, C#, Java
💻 Como usar o TensorFlow facilmente?
· A forma mais prática é via Google Colab, pois o TensorFlow já vem instalado.
· Basta abrir um notebook online e começar a codar sem configurar nada localmente.
🧪 Exemplos práticos com TensorFlow
Vamos apresentar dois exemplos que usam o TensorFlow com as seguintes características:
Exemplo 1: Classificação de imagens de dígitos com CNN (Convolutional Neural Network)
· 📌Objetivo: Treinar um modelo de rede neural convolucional (CNN) para reconhecer dígitos manuscritos (de 0 a 9), usando o banco de dados MNIST.
· MNIST é um banco de dados de dígitos manuscritos usado com bastante frequência para treinar vários sistemas de processamento de imagem.
✅ Etapas do exemplo CNN com TensorFlow 
1. Baixar o conjunto de dados MNIST
· O MNIST contém:
· 60.000 imagens de treino
· 10.000 imagens de teste
· Cada imagem representa um dígito de 0 a 9 (28x28 pixels, tons de cinza).
import tensorflow as tf  # Importa a biblioteca principal do TensorFlow
import tensorflow_datasets as tfds  # Importa conjuntos de dados prontos, incluindo o MNIST
# Carrega o conjunto MNIST dividido entre treino e teste, em formato numpy
(x_treino, y_treino), (x_teste, y_teste) = tfds.as_numpy(
    tfds.load('mnist', split=['train', 'test'], batch_size=-1,
              as_supervised=True, shuffle_files=True)
)
2. Visualizar uma imagem
· Mostra o rótulo (y_treino) e a imagem (x_treino) no índice escolhido.
import matplotlib.pyplot as plt  # Biblioteca para visualização de imagens e gráficos
img_index = 8888  # Índice da imagem que será visualizada (até 60.000 imagens disponíveis)
print("O dígito na imagem:", y_treino[img_index])  # Exibe o rótulo da imagem selecionada
plt.imshow(x_treino[img_index].reshape(28, 28), cmap='Greys')  # Mostra a imagem em escala de cinza
📷 Resultado exibido:
· Antes de treinar a CNN, precisamos verificar como os dados estão organizados (ou seja, seu formato).
· Usamos o comando abaixo para descobrir isso.
# Retorna a forma do conjunto de imagens de treino
x_treino.shape  
📷 Resultado exibido:compra o quê.
O que o algoritmo faz:
1. Analisa registros de compras.
2. Agrupa clientes por comportamento de compra:
· Grupo 1: compra vinho + queijo
· Grupo 2: compra carvão + carne
· Grupo 3: compra leite + fralda
O que isso permite?
· Organizar prateleiras de forma estratégica.
· Criar promoções específicas para cada perfil de cliente.
⚒️ Técnicas comuns:
	Técnica
	O que faz?
	Clusterização
	Agrupa dados semelhantes (ex: perfis de clientes)
	Regras de associação
	Descobre itens que são comprados juntos
	Redução de dimensionalidade
	Simplifica dados mantendo os padrões importantes
💡 Benefício principal:
· Permite descobrir padrões escondidos em bases de dados sem respostas prontas.
· Muito útil em situações em que não há rótulos disponíveis ou em que não sabemos quantos grupos existem.
🎯 Conclusão
· No aprendizado não supervisionado, o sistema não recebe respostas certas, mas tenta entender os dados por conta própria.
· Ideal para exploração de dados, descoberta de padrões e organização automática.
Aprendizado Semissupervisionado
📌 O que é?
· É um tipo de aprendizado de máquina que combina dados rotulados (com resposta) e dados não rotulados (sem resposta).
· 👉 Útil quando temos poucos dados rotulados, mas muitos dados não rotulados.
🧠 Como funciona?
1. Começa com um pequeno conjunto de dados rotulados, que ajuda o algoritmo a entender os padrões iniciais.
2. Depois, usa esses padrões para "adivinhar" os rótulos dos dados não rotulados.
3. Por fim, ajusta o modelo com base em todos os dados disponíveis (rotulados + os que ele mesmo rotulou).
✅ Exemplo: Identificação de veículos com poucos rótulos
Situação: Você tem 100 imagens de veículos, mas só 20 têm rótulo: 
	Imagem
	Rótulo (tipo de veículo)
	Foto 1: 🏍️
	Carro
	Foto 2: 🚗
	Moto
	Foto 3: 🚛
	Caminhão
	Foto 4: 🚌
	Ônibus
	...
	...
	Foto 21–100
	❓ (sem rótulo)
Etapas do aprendizado:
1. O algoritmo aprende com as 20 imagens rotuladas.
2. Em seguida, analisa as outras 80 imagens e tenta adivinhar seus rótulos, com base no que aprendeu.
3. Depois, ajusta o modelo usando todas as 100 imagens para melhorar a precisão.
🧪 Aplicações reais:
	Área
	Exemplo prático
	Saúde
	Diagnosticar exames com poucos casos rotulados
	Vídeo
	Classificar cenas em vídeos com poucos trechos marcados
	Texto e imagem
	Organizar documentos ou imagens em categorias
🧩 Por que é importante?
· Rotular dados manualmente é caro e demorado.
· O aprendizado semissupervisionado reduz esse esforço, aproveitando bem os dados que temos.
· Ele combina o melhor do aprendizado supervisionado (precisão com rótulos) com a abundância de dados não rotulados.
🎯 Conclusão:
· O aprendizado semissupervisionado é ideal quando você:
· Tem poucos dados rotulados (com resposta).
· Tem muitos dados não rotulados.
· Ele usa ambos para treinar um modelo mais completo e eficiente.
Aprendizado por Reforço (Reinforcement Learning)
📌 O que é?
· É um tipo de aprendizado de máquina inspirado no comportamento humano e animal:
· Aprender por meio de tentativas e erros, recebendo recompensas ou punições com base nas ações tomadas.
🧠 Como funciona?
· O algoritmo é chamado de agente.
· Ele interage com um ambiente, fazendo ações.
· A cada ação, ele recebe um feedback:
· Se a ação for boa → Recompensa
· Se for ruim → Punição
· Com o tempo, o agente aprende quais ações trazem melhores recompensas.
✅ Exemplo: Adestrar um cachorro
1. Você diz: “Senta!”
2. Se o cachorro se sentar:
· 🟢 Ganha um biscoito (recompensa)
3. Se ele não obedecer:
· 🔴 Não ganha nada (punição leve)
4. Repetindo isso, ele aprende:
“Sentar = Biscoito!” → Vai repetir a ação certa
🚗 Exemplo: Carro autônomo
1. O carro está em uma pista com obstáculos.
2. A cada manobra:
· Desviar = 🟢 ganha pontos (recompensa)
· Bater = 🔴 perde pontos (punição)
3. Com o tempo, o carro aprende:
“Desviar sempre que tiver um obstáculo”
Resultado: condução mais segura e eficiente
⚖️ Conceitos importantes:
	Conceito
	O que significa?
	Agente
	Quem aprende e toma decisões (ex: robô, carro, programa)
	Ambiente
	Onde o agente atua (ex: pista, jogo, mundo simulado)
	Ação
	O que o agente faz (ex: andar, virar, parar)
	Recompensa
	Resultado da ação (positivo ou negativo)
	Política
	Estratégia de ação do agente: o que ele faz em cada situação
⚖️ Exploration vs Exploitation 
· Exploration: busca testar ações novas (talvez melhores)
· Exploitation: busca repetir ações que já deram certo antes
🔁 Um bom agente equilibra essas duas estratégias para aprender e melhorar.
🧠 Conclusão:
· O aprendizado por reforço é ótimo para:
· Robôs
· Jogos
· Sistemas que tomam decisões sequenciais
· Ele aprende com base na experiência e sem precisar de rótulos como nos métodos supervisionados.
🧠 Resumo sobre os Tipos de Aprendizado de Máquina
	Tipo de Aprendizado
	Usa dados rotulados?
	Objetivo principal
	Supervisionado
	✅ Sim
	Classificar ou prever com base em exemplos
	Não supervisionado
	❌ Não
	Encontrar padrões ou agrupamentos
	Semissupervisionado
	⚠️ Alguns
	Aprender melhor com poucos rótulos
	Por reforço
	🚫 Não (usa ações)
	Aprender com recompensas e punições
Módulo 3. Diferenciação de problemas de aprendizado de máquina por saída
Modelos analíticos de aprendizado de máquina
📌 O que são?
· São fórmulas matemáticas ou estatísticas que representam o conhecimento aprendido a partir dos dados.
· ➡️ Em outras palavras, são as estruturas que o algoritmo constrói para tomar decisões ou fazer previsões.
🧠 Como funcionam?
Durante o treinamento, o algoritmo:
1. Analisa os dados de entrada e saída.
2. Identifica padrões e relações entre as variáveis.
3. Cria um modelo matemático que resume esse conhecimento.
Depois, esse modelo é usado para:
· Classificar novos exemplos
· Prever valores
· Tomar decisões
🧮 Exemplo: Prever valor de aluguel
Imagine que você quer prever o valor do aluguel com base no tamanho da casa:
Etapas:
1. Você fornece ao algoritmo dados como:
	Tamanho (m²)
	Aluguel (R$)
	50
	1.200
	70
	1.500
	100
	2.000
2. O algoritmo aprende a relação entre tamanho e valor e cria um modelo como:
Aluguel = 20 × Tamanho + 200
3. Agora, se você digitar:
· Tamanho = 80 → Previsão: 20 × 80 + 200 = R$ 1.800
📌 Esse é um modelo analítico simples de regressão linear.
🔎 Características dos modelos analíticos
	Característica
	Significado
	Generalização
	Capacidade de funcionar bem com novos dados
	Interpretação
	O quão compreensível é o modelo para humanos
	Precisão
	O quanto as previsões do modelo se aproximam da realidade
	Complexidade
	O quão simples ou complicado é o modelo matemático
⚖️ Tipos de modelos: Simples vs Complexos
	Tipo de modelo
	Exemplo
	Vantagem
	Desvantagem
	Simples
	Regressão linear
	Fácil de entender e aplicar
	Pode não capturar padrões complexos
	Complexos
	Redes neurais profundas
	Altamente precisos
	Difíceis de interpretar
🎯 Conclusão
· Os modelos analíticos são o coração da inteligência dos sistemas de ML.
· Eles transformam dados em conhecimento prático.
· A escolha entre modelos simples ou complexos depende do:
· Tipo de problema
· Quantidade e qualidade dos dados
· Nível de precisão e explicação desejado
Modelo Preditivo
📌 Definição Geral do Modelo Preditivo:
· Utilizado no aprendizado supervisionado.
· Tem como foco prever rótulos ou valores desconhecidos com base em dados anteriores.
· Pode ser aplicado a dois tipos de problemas:
· Classificação (saídas discretas/categóricas)
· Regressão (saídas contínuas/numéricas)
🟢 CLASSIFICAÇÃO
📌 O que é?
· Problemas em que o objetivo é prever a qual categoria (classe) algo pertence.
· A saída é discreta, ou seja, um rótulo como: “sim” ou “não”, “positivo” ou “negativo”, “aprovado” ou “reprovado”.
🧪 Exemplos:
· Diagnóstico médico (doente ou saudável)
· Resultado de aluno (aprovado ou reprovado)
· Decisão binária (sim/não)
✅ Exemplo: Jogar ou não jogar tênis
Imagine uma base de dados composta de seis registros para prever se uma pessoa irá ou não jogar tênis com base nas condições climáticas.
Base de dados (exemplo com 6 registros):
	Tempo
	Temperatura· O resultado (60000, 28, 28, 1) significa:
· 60000: número de imagens de treino;
· 28, 28: cada imagem tem 28x28 pixels;
· 1: é uma imagem em tons de cinza (1 canal de cor).
3. Normalizar os dados
🔧 Etapas realizadas:
A. Conversão dos dados para ponto flutuante (float32):
· As imagens originalmente estão com valores inteiros de 0 a 255.
· Ao converter para float32, permitimos fazer cálculos com decimais (ex: 0.3, 0.8...), o que é essencial para normalização e treino.
# Converte os valores das imagens para float32
x_treino = x_treino.astype('float32')
x_teste = x_teste.astype('float32')
B. Normalização dos pixels (valores entre 0 e 1):
· Dividimos todos os pixels por 255 para que fiquem na escala de 0 a 1.
· Isso ajuda o modelo a aprender melhor e mais rápido, pois evita valores muito altos.
# Normaliza os valores dos pixels (de 0-255 para 0-1)
x_treino /= 255
x_teste /= 255
# Exibe informações sobre os dados de treino e teste
print('Forma de x_treino:', x_treino.shape)
print('Quantidade de imagens em x_treino:', x_treino.shape[0])
print('Quantidade de imagens em x_teste:', x_teste.shape[0])
· Os dados agora estão no formato ideal para serem usados na rede neural convolucional (CNN).
· Também imprimimos a forma e a quantidade de imagens de treino e teste para conferência.
📷 Resultado exibido:
4. Construir a CNN
· Arquitetura do modelo:
· Camada convolucional (Conv2D): extrai padrões.
· MaxPooling: reduz a dimensão.
· Flatten: achata para camada densa.
· Dense (camadas totalmente conectadas).
· Dropout: evita overfitting.
· Softmax: define a classe final (0 a 9).
# Importa os componentes necessários para construir uma rede neural
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D
# Inicializa o modelo sequencial da CNN
model = Sequential()
model.add(Conv2D(28, kernel_size=(3, 3), input_shape=(28, 28, 1)))  # Camada de convolução com 28 filtros
model.add(MaxPooling2D(pool_size=(2, 2)))  # Reduz a dimensionalidade por meio de agrupamento
model.add(Flatten())  # Achata os dados para conectá-los às camadas densas
model.add(Dense(128, activation=tf.nn.relu))  # Camada totalmente conectada com ativação ReLU
model.add(Dropout(0.2))  # Evita overfitting descartando 20% dos neurônios aleatoriamente
model.add(Dense(10, activation=tf.nn.softmax))  # Camada de saída com 10 classes (0 a 9)
5. Compilar e treinar o modelo
· Define otimizador, função de perda e métrica (acurácia).
· Treina por 10 épocas com os dados.
# Compila o modelo com otimizador Adam e função de perda categórica
model.compile(
    optimizer='adam',
    loss='sparse_categorical_crossentropy',
    metrics=['accuracy']
)
# Treina o modelo usando os dados de treino
model.fit(x=x_treino, y=y_treino, epochs=10)
6. Avaliar o modelo
· Mede a precisão (accuracy) e a função de perda (loss) com os dados de teste.
# Avalia a performance do modelo nos dados de teste
model.evaluate(x_teste, y_teste)
📊 Resultado obtido:
· Loss: 0.0632
· Accuracy: 98.43%
Modelo muito eficaz!
7. Fazer uma predição
· Escolhe uma imagem de teste e pede ao modelo prever o número.
· Exibe a imagem e a previsão do modelo.
# Faz a previsão sobre uma imagem de teste
img_pred_index = 1000  # Índice da imagem que será usada para teste
plt.imshow(x_teste[img_pred_index].reshape(28, 28), cmap='Greys')  # Exibe a imagem
pred = model.predict(x_teste[img_pred_index].reshape(1, 28, 28, 1))  # Faz a predição com a CNN
print("Nosso modelo CNN prevê que o dígito na imagem é:", pred.argmax())  # Exibe o resultado da predição
📷 Resultado exibido: A imagem é do número 5, e o modelo acertou a previsão.
8. Salvar o modelo treinado
· Cria uma pasta e salva o modelo completo (estrutura + pesos).
# Cria um diretório para salvar o modelo treinado
!mkdir -p modelo_salvo
model.save('modelo_salvo/classificador_digitos')  # Salva o modelo para uso futuro
🧠 Resumo final
· A CNN treinada foi capaz de reconhecer dígitos com mais de 98% de precisão.
· Todo o processo foi feito com TensorFlow/Keras.
· Ideal para aplicações básicas de classificação de imagem.
Exemplo 2: Análise de sentimento com RNN (Recurrent Neural Network – Rede Neural Recorrente)
· 📌 Objetivo: Construir uma RNN para classificar automaticamente se uma crítica de filme é positiva ou negativa, usando dados do IMDB(resenhas de filmes)..
✅ Etapas do exemplo CNN com TensorFlow 
1. Importações iniciais
· tensorflow e tensorflow_datasets são as bibliotecas principais.
· tensorflow_datasets já fornece o conjunto de dados IMDB pronto para uso.
import tensorflow as tf  # Biblioteca para criação e treinamento de modelos de machine learning
import tensorflow_datasets as tfds  # Acesso a conjuntos de dados prontos para uso
2. Carregamento dos dados
# Carrega o dataset IMDb Reviews com codificação subwords8k e informações extras
dataset, info = tfds.load('imdb_reviews',
                          with_info=True,
                          as_supervised=True)
· with_info=True: traz metadados úteis, como tamanho do vocabulário.
3. Tamanho do vocabulário
# Recupera o codificador de texto utilizado no dataset
encoder = info.features['text'].encoder
print('Tamanho do vocabulário: {}'.format(encoder.vocab_size))  # Imprime o tamanho do vocabulário
print(encoder)  # Exibe informações sobre o codificador
📷 Resultado exibido:
· Saída: 8185, ou seja, há 8.185 subpalavras no vocabulário.
4. Preparação dos dados
📌 Divisão: treino e teste.
# Separa o conjunto de dados em treino e teste
dataset_treino, dataset_teste = dataset['train'], dataset['test']
📌 Embaralhamento e padding:
BUFFER_SIZE = 10000  # Quantidade de amostras para embaralhar
BATCH_SIZE = 64  # Tamanho do lote de treinamento
dataset_treino = dataset_treino.shuffle(BUFFER_SIZE) # Embaralha os dados de treino para evitar padrões indesejados
dataset_treino = dataset_treino.padded_batch(BATCH_SIZE) # Agrupa os dados de treino em lotes com padding automático
dataset_teste = dataset_teste.padded_batch(BATCH_SIZE) # Agrupa os dados de teste em lotes com padding automático
· padded_batch: garante que todas as sequências tenham o mesmo tamanho.
5. Construção da arquitetura da rede
· Importação de camadas e componentes:
# Importa os componentes para construir a rede neural
from tensorflow.keras.models import Sequential # Importa a classe Sequential para criar modelos de rede neural camada por camada
from tensorflow.keras.layers import Dense, Embedding, Bidirectional, Dropout, LSTM # Importa camadas que serão usadas na construção da rede
from tensorflow.keras.losses import BinaryCrossentropy # Importa a função de perda binária para problemas de classificação binária
from tensorflow.keras.optimizers import Adam # Importa o otimizador Adam, que ajusta os pesos da rede durante o treinamento
6. Definição do Modelo e Preenchimento em Camadas
# Define a arquitetura do modelo sequencial
model = Sequential([
    Embedding(encoder.vocab_size, 64),  # Camada de embedding transforma palavras em vetores
    Bidirectional(LSTM(64, return_sequences=True)),  # LSTM bidirecional com saída de sequência
    Bidirectional(LSTM(32)),  # Segunda camada LSTM bidirecional
    Dense(64, activation='relu'),  # Camada totalmente conectada com ativação ReLU
    Dropout(0.5),  # Reduz overfitting descartando neurônios aleatórios
    Dense(1)  # Camada de saída com 1 unidade (classificação binária)
])
model.summary()  # Exibe resumo da arquitetura do modelo
📷 Resultado exibido: 
📌 model.summary(): visualização da arquitetura com detalhes, como: número de parâmetros e estrutura.
📌 Visualização Gráfica da arquitetura do modelo: 
· Também pode ser exibida com uma visualização gráfica:
# Gera visualização gráfica da arquitetura do modelo
tf.keras.utils.plot_model(model)
📷 Resultado exibido:
7. Compilar e Ajustar (Treinar) o Modelo
📌 Compilação
# Compila o modelo com função de perda binária e otimizador Adam
model.compile(
    loss=BinaryCrossentropy(from_logits=True),
    optimizer=Adam(1e-4),
    metrics=['accuracy'])
· Função de perda: BinaryCrossentropy, usada para problemas de classificação binária (positivo ou negativo).
· Otimizador: Adam, com taxa de aprendizado 1e-4 (0.0001), ajuda a ajustar os pesos do modelo.
· Métrica: Acurácia (mede quantas previsões o modelo acertou).
📌 Ajuste do Modelo (Treinamento)
# Treina o modelo por 3 épocas com dados de validação
history = model.fit(
    dataset_treino,
    epochs=3,
    validation_data=dataset_teste,
    validation_steps=30
)
· Treina o modelo por 3 épocas (3 ciclos completos sobre os dados).
· Usa os dados de teste para validação durante o treinamento.
8. Avaliação do Modelo
📌 Avaliação com dados de teste
# Avalia o modelo com os dados de teste
test_loss, test_acc = model.evaluate(dataset_teste)
print('Teste de Perda: {}'.format(test_loss))  # Exibe a perda nos testes
print('Teste de Acurácia: {}'.format(test_acc))  # Exibe a acurácia nos testes
· Perda (loss): mede o erro do modelo.
· Acurácia (accuracy): mostra a porcentagem de acertos.
📷 Resultado exibido:
Teste de Perda: 0.468
Teste de Acurácia: 0.855
✅ Isso indica que o modelo acerta 85,5% das vezes nas avaliações.
9. Fazer Predições com Novos Comentários
📌 Função para aplicar padding (completar o tamanho do comentário)
# Função para adicionar padding ao comentário codificado até atingir tamanho fixo
def padding_comentario(comentario_codificado, tamanho_padding):
    zeros = [0] * (tamanho_padding - len(comentario_codificado))  # Cria zeros extras
    comentario_codificado.extend(zeros)  # Adiciona zeros ao final
    return comentario_codificado  # Retorna o comentário com padding aplicado
· Garante que o tamanho da entrada do comentário seja padronizado (64 palavras).
📌 Função para codificar o comentário
# Codifica um comentário usando o encoder e aplica padding
def comentario_encoder(comentario):
    comentario_codificado = padding_comentario(encoder.encode(comentario), 64)  # Codifica + padding
    comentario_codificado = tf.cast(comentario_codificado, tf.float32)  # Converte para float32
    return tf.expand_dims(comentario_codificado, 0)  # Expande a dimensão para ajuste ao modelo
· Codifica o comentário com base no vocabulário e aplica padding.
📌 Comentário de exemplo (em inglês)
# Comentário de exemplo para teste
comentario_matrix = 'O filme é muito bom. Me fez pensar em como os avanços em aprendizado de máquina vão influenciar a vida da humanidade. Quero assistir outros filmes do mesmo tipo.'
📌 Fazer a predição com o modelo
# Faz a predição do modelo usando o comentário codificado
r = model.predict(comentario_encoder(comentario_matrix))
# Função lambda que interpreta a saída do modelo e define o resultado como 'Positiva' ou 'Negativa'
resultado = lambda x: 'Avaliação Positiva' if x > 0.5 else 'Avaliação Negativa'
print(resultado(r[0])) # Exibe o resultado da avaliação com base na predição do modelo
📷 Resultado exibido:
· O modelo retorna um número:
· Se maior que 0.5 → positivo
· Se menor ou igual a 0.5 → negativo
· Resultado no exemplo: Avaliação Positiva
📌 Resumo final
· O TensorFlow é ideal para criar, treinar e implantar modelos de ML, especialmente deep learning.
· Ele possui ferramentas poderosas e flexíveis, mesmo para grandes conjuntos de dados e arquiteturas complexas.
· Outras bibliotecas como PyTorch e Keras também são relevantes, e podem até ser combinadas ao TensorFlow.
· O Google Colab facilita o uso por iniciantes, já que não precisa de instalação local.
Simulação com AWS SageMaker
📌 O que é o Amazon SageMaker?
· É um serviço de aprendizado de máquina (ML) da Amazon Web Services (AWS).
· Permite criar, treinar e implantar modelos de ML em um ambiente integrado e hospedado na nuvem.
· É pago por minuto de uso, mas existe uma versão gratuita com recursos limitados.
🎯 O que o SageMaker permite fazer?
No SageMaker Studio, o ambiente de desenvolvimento da plataforma, você pode:
· ✅ Preparar dados (limpeza e organização).
· ✅ Construir modelos (definir a arquitetura).
· ✅ Treinar e ajustar os modelos.
· ✅ Implantar o modelo / deploy do projeto (tornar ele acessível para gerar previsões).
🔍 Casos de uso comuns do SageMaker:
O site oficial da Amazon mostra exemplos práticos onde o SageMaker pode ser aplicado:
· 🔧 Manutenção preditiva (ex.: prever falhas em máquinas).
· 👁️ Visão computacional (ex.: reconhecer imagens).
· 🚗 Direção autônoma (ex.: processar imagens para carros).
· 🚨 Detecção de fraudes (ex.: em transações bancárias).
· 💳 Risco de crédito (ex.: prever inadimplência).
· 📄 Análise de documentos (ex.: extrair dados de PDFs).
· 👥 Rotatividade de clientes (ex.: prever cancelamento).
· 📦 Previsão de demanda (ex.: estimar vendas).
· 🎯 Recomendações personalizadas (ex.: Netflix, Amazon).
🛠️ Etapas para criar um projeto no SageMaker:
A Amazon oferece um tutorial prático com 7 etapas para montar um projeto de ML:
Etapa 1: Acessar o console do Amazon SageMaker
· Entrar na plataforma via navegador para iniciar o projeto.
Etapa 2: Criar uma instância de notebook
· Um notebook Jupyter será usado para programar o modelo.
Etapa 3: Preparar os dados
· Pré-processar os dados (limpeza, transformação) no notebook.
Etapa 4: Treinar o modelo
· Usar os dados para ensinar o modelo a identificar padrões.
Etapa 5: Implantar o modelo
· Publicar o modelo em um endpoint (ponto de acesso online) para usá-lo em tempo real.
Etapa 6: Avaliar o modelo
· Verificar desempenho e precisão do modelo treinado.
Etapa 7: Encerrar os recursos
· ⚠️ Importante! Se não encerrar a instância, haverá cobrança automática. É necessário finalizar o uso manualmente.
TEMA 6. PROJETO DE SISTEMAS DE APRENDIZADO DE MÁQUINA
Projeto de Sistemas de Aprendizado de Máquina
· Envolve várias etapas que vão desde a coleta de dados até a avaliação de modelos.
· Está fortemente relacionado ao processo de KDD (Descoberta de Conhecimento em Bases de Dados).
· O objetivo é transformar dados brutos em conhecimento útil por meio de modelos inteligentes.
Módulo 1. O entendimento do negócio e dos dados
Processo CRISP-DM
O que é o CRISP-DM?
· CRISP-DM significa Cross Industry Standard Process for Data Mining (Processo Padrão Entre Setores Para Mineração De Dados).
· É um modelo padrão usado em projetos de mineração de dados e aprendizado de máquina.
· Organiza o processo em etapas bem definidas, facilitando a condução de projetos complexos. 
Natureza Cíclica e Incremental
· O processo não termina na implantação (deployment) do modelo.
· Cada ciclo gera aprendizados que são usados para melhorar e evoluir o sistema.
· O círculo externo do modelo representa esse caráter contínuo, onde novas funcionalidades são adicionadas com o tempo.
Primeiras etapas do CRISP-DM
São abordadas duas etapas fundamentais do CRISP-DM:
a) Entendimento do Negócio (Business Understanding)
· Objetivo: compreender profundamente o problema a ser resolvido.
· Perguntas-chave:
· Qual é o objetivo do projeto?
· Quais são os indicadores de sucesso?
· Quais decisões precisam ser apoiadas pelo modelo?
b) Entendimento dos Dados (Data Understanding)
· Objetivo: analisar os dados disponíveis para verificar se são úteis e suficientes para resolver o problema.
· Atividades comuns:
· Coleta inicial de dados
· Análise exploratória (verificar tipos, padrões, valores faltantes)
· Identificação de problemas como dados desbalanceados ou inconsistentes
✅ Resumo Final
O CRISP-DM é um processo cíclico, incremental e estruturado, usado em projetos de Machine Learning e KDD. Ele começa com o entendimento do negócio e dos dados, etapas essenciais para definir corretamente o problema e avaliar se os dados disponíveis são adequados para resolvê-lo. A melhoria contínua é uma característica essencial do modelo.
As etapas de entendimento do negócio
1. Entendendo o Problema
Antes de usar algoritmos ou construir modelos, é essencial entender o problema real que o projeto busca resolver.
Etapas:
· Levantamento de Requisitos:
· Reuniões com os stakeholders (clientes, usuários, gestores) para entender a demanda do projeto.
· Podem ser usadas:
· Técnicas clássicas de engenhariade requisitos.
· Métodos ágeis como Design Thinking para identificar as dores e necessidades do cliente.
· Reunião com Especialistas:
· Conversar com quem entende do assunto (domínio) e dos processos internos da organização.
· Documento de Validação:
· Após entender o problema, cria-se um documento com a descrição do problema.
· Esse documento deve ser validado pelos stakeholders, para garantir que todos estão alinhados.
2. Levantamento Bibliográfico
Depois de entender o problema, é hora de pesquisar o que já existe na literatura técnica/científica sobre o tema.
Etapas:
· Definir palavras-chave relacionadas ao problema.
· Identificar o tipo de tarefa de aprendizado de máquina:
· Classificação ou clusterização?
· Aprendizado supervisionado, não supervisionado, semissupervisionado ou por reforço?
· Pensar na abordagem de solução:
· Modelo preditivo: prevê algo futuro?
· Modelo diagnóstico: explica causas?
· Modelo exploratório: busca padrões ocultos?
3. Montando a String de Busca
Com as palavras-chave organizadas em 3 eixos:
· Eixo do problema
· Eixo da tarefa de aprendizado de máquina
· Eixo da solução (opcional)
A string de busca tem esta forma:
( OR ) AND ( OR OR ) AND ( OR OR )
Essa string de busca significa que o motor de busca escolhido procurará artigos, links, trabalhos e soluções que abordem o contexto do projeto definido pelas cláusulas conjuntivas (separadas por AND) e que contenham pelo menos um dos termos de cada eixo (palavras-chaves separadas por OR).
Exemplo: Essa string procurará trabalhos relacionados que utilizem Árvores de Decisão no Âmbito de Finanças.
(Classificação) AND (Finanças) AND (Árvores de Decisão)
· Busca estudos que envolvam classificação em finanças usando árvores de decisão.
Exemplo: Essa string procurará trabalhos relacionados de aprendizado supervisionado que utilizem algum modelo preditivo para fazer análise de ações (Stock Analysis).
(Supervised Learning) AND (Stock Market OR Stocks OR Financial Forecasting) AND (Predictive Models)
· Busca trabalhos sobre aprendizado supervisionado aplicado à previsão de ações usando modelos preditivos.
✅ Dica: sempre use os termos em inglês para ter acesso a um número maior de trabalhos.
4. Realizando a Busca
· Use ferramentas como:
· Google Scholar
· IEEE, ACM, Elsevier (se tiver acesso)
· Se os resultados forem:
· Demais: adicione mais cláusulas AND (restrinja).
· De menos: reduza as cláusulas ou adicione sinônimos com OR.
🎯 Um número razoável: ~100 trabalhos inicialmente, para filtrar os mais relevantes depois.
5. Análise dos Trabalhos Relacionados
Procure identificar:
1. Bases de dados utilizadas
2. Características (features) mais importantes
3. Algoritmos mais eficazes
4. Métricas usadas para avaliar os modelos
5. Melhores resultados (ex: maior acurácia)
6. Montagem do Plano do Projeto
Com base em tudo o que foi levantado, cria-se um plano de ação, que deve conter:
· O problema
· A tarefa de aprendizado de máquina
· O modelo a ser usado
· A métrica de avaliação
· Um valor base de comparação
· Um esboço da solução proposta (seguindo CRISP-DM ou KDD)
📌 Esse plano será usado e atualizado ao longo de todo o projeto.
✅ Resumo Final
As etapas de entendimento do negócio são fundamentais para garantir que o projeto de aprendizado de máquina resolva o problema certo da maneira mais eficaz. Isso envolve conversas com pessoas-chave, pesquisa sobre o estado da arte e organização clara das informações antes de começar a modelagem. O CRISP-DM ajuda a manter esse processo estruturado e confiável.
A coleta de dados
🔍 O que é a coleta de dados?
· É o processo de captura e medição de informações ou variáveis de interesse.
· Feita de forma sistemática para:
· Responder perguntas de pesquisa.
· Testar hipóteses.
· Avaliar resultados.
🧩 Tipos de Dados
a) Dados Qualitativos
· Descritivos ou nominais, geralmente não numéricos.
· Exemplos: textos, frases, nomes de instituições, profissões.
· Características:
· Respostas abertas (sem opção fixa).
· Mais exploratórios, ideais para entender motivações, opiniões ou experiências.
· Bons para mapear fenômenos complexos.
· Métodos de coleta:
· Entrevistas
· Grupos de discussão
· Grupos de foco
· Vantagens: ajudam a entender o porquê de um fenômeno.
· Desvantagens: custosos, demorados e com resultados limitados aos grupos pesquisados.
b) Dados Quantitativos
· São dados numéricos, tratados por fórmulas e cálculos.
· Características:
· Medem escalas: nominal, ordinal, intervalar ou proporcional.
· Resultam de medições sistemáticas de fenômenos.
· Facilitam automatização e análise estatística.
· Métodos de coleta:
· Surveys (questionários estruturados)
· Queries (consultas a bancos de dados)
· Scrapers (robôs que extraem dados da web)
· Relatórios automáticos
· Vantagens: mais baratos, rápidos e automatizáveis.
⚠️ Integração entre qualitativos e quantitativos
· É comum combinar os dois tipos de dados.
· Exemplos:
· Um relatório pode conter:
· Quantitativos: renda, número de familiares, despesas.
· Qualitativos: endereço, sobrenome, nome da escola, grau de instrução.
· Uma entrevista pode gerar dados numéricos e descritivos ao mesmo tempo.
✅ Resumindo:
A coleta de dados é uma etapa essencial em qualquer projeto de pesquisa ou aprendizado de máquina. Ela pode gerar dados qualitativos (mais descritivos e profundos) ou quantitativos (mais objetivos e mensuráveis). Cada tipo tem seus métodos, vantagens e limitações. Em muitos casos, o ideal é combinar ambos os tipos para obter uma visão mais completa do problema estudado.
3. Quanto Obtenção dos Dados
a) Dados Primários
· Definição: Dados coletados diretamente da fonte, por você ou sua equipe.
· Características:
· Inéditos e autênticos: nunca foram publicados antes.
· Sem interferência externa: considerados mais puros.
· Fontes comuns:
· Surveys (levantamentos)
· Experimentos
· Questionários
· Entrevistas
· Vantagens:
· São específicos para o problema que se quer resolver.
· Podem ser recoletados se for necessário aumentar a amostra.
· ✅ Resumo rápido: Você coleta os dados pensando no seu projeto.
b) Dados Secundários
· Definição: Dados que já foram coletados e publicados por outras pessoas ou instituições.
· Características:
· Já passaram por processo de tratamento ou análise.
· Podem conter viés ou interferência humana.
· Fontes comuns:
· Livros, artigos, registros públicos
· Biografias, jornais, censos, bancos de dados
· Vantagens:
· Economia de tempo e recursos: não é preciso coletar tudo do zero.
· Ideal quando não se pode obter os dados diretamente.
· Responsabilidade sobre os dados é do produtor original.
· ✅ Você aproveita dados que já existem.
💡 Exemplo prático comparativo
Imagine que você quer estudar os hábitos alimentares de estudantes universitários:
· Usando dados primários: você cria um questionário e aplica aos alunos da sua universidade.
· Usando dados secundários: você utiliza os dados de um artigo publicado por outra universidade sobre o mesmo tema.
✅ Resumo:
	Tipo de Obtenção de Dados
	Descrição 
	Dados primários
	Você coleta direto da fonte; são mais confiáveis, mas exigem mais esforço.
	Dados secundários
	Já estão prontos e são mais práticos, mas podem não estar 100% alinhados com sua necessidade.
🧪 Métodos de Coleta de Dados Primários
🔹 Coleta de Dados Primários: Você mesmo coleta os dados diretamente da fonte. São dados inéditos, autênticos e “puros” — ainda não passaram por nenhum outro tratamento.
🧪 Métodos principais:
1. Questionário
· Conjunto de perguntas com respostas previamente definidas.
· Foco em objetividade e padronização.
· Pode abordar:
· Variáveis individuais (idade, gênero, escolaridade)
· Escalas agregadas (ex: nível de satisfação de 1 a 5)
· 📌 Exemplo: “Qual sua faixa etária?”
· ( ) 18-25
· ( ) 26-35
· ( ) 36-45
2. Entrevista
· Semelhante ao questionário, mas com interação direta (presencial, telefone ou online).
· Pode ser:
· Estruturada (com roteiro fixo)
· Semiestruturada
· Livre/desestruturada
· Ideal para dados qualitativos com perguntasabertas.
3. Grupos de Foco
· Pequeno grupo homogêneo discute um tema específico.
· Incentiva troca de experiências entre participantes.
· Excelente para aprofundar o entendimento de comportamentos ou percepções.
4. Survey (Levantamento)
· Questionário estruturado aplicado a grupos maiores.
· Método quantitativo.
· Permite generalizar resultados se o grupo for representativo.
5. Estudo de Caso
· Observação profunda de um fenômeno em seu contexto real.
· Pode gerar tanto dados qualitativos quanto quantitativos.
· Foco em compreensão detalhada.
6. Amostragem de Atividade
· Coleta de dados sistemática e periódica em sistemas computacionais.
· Muito usada na área de tecnologia e computação.
· Exemplo: monitorar a atividade de servidores a cada 10 minutos por 1 semana.
🗃️ Métodos de Coleta de Dados Secundários
🔹 Coleta de Dados Secundários: São dados já coletados e publicados por terceiros. Exigem menos esforço, mas oferecem menos controle.
🗃️ Fontes comuns:
· Repositórios públicos online:
· Kaggle – datasets prontos para uso, voltados à ciência de dados.
· UCI (University of California Irvine) – datasets organizados por tarefa de aprendizado (classificação, regressão, etc.).
· IBGE, dados abertos governamentais.
· Artigos científicos:
· Muitas vezes contêm datasets nas seções 2 ou 3, junto da metodologia.
· Use o Google Scholar para encontrar artigos relevantes.
· Patentes:
· Também podem mencionar as fontes dos dados utilizados.
· Consulte no Google Patents.
🔍 Dicas para uso eficiente:
· Sempre defina uma boa string de busca (com palavras-chave bem escolhidas).
· Use motores de busca internos dos repositórios (Kaggle/UCI) ou ferramentas como Google Scholar.
· Evite baixar todos os dados de um repositório sem critério — escolha apenas os que se alinham ao seu problema.
	Tipo
	Quem coleta?
	Vantagens
	Exemplos/Ferramentas
	Primários
	Você
	Autenticidade, foco no problema
	Entrevistas, questionários, estudos de caso
	Secundários
	Terceiros
	Economia de tempo e recursos
	Kaggle, UCI, Google Scholar, IBGE
✅ Resumo Final
A coleta de dados é a base de qualquer projeto de aprendizado de máquina ou análise de dados. Pode ser feita de forma qualitativa (mais descritiva e exploratória) ou quantitativa (mais objetiva e numérica), e com dados primários (diretamente coletados) ou secundários (já existentes). O método ideal depende do objetivo, tempo e recursos disponíveis. O uso de boas ferramentas de busca e uma string bem construída ajudam a encontrar os dados certos com mais eficiência.
Módulo 2. A preparação dos dados
A etapa de preparação dos dados
🧩 Etapa de Preparação dos Dados (Data Preparation)
· Faz parte do processo KDD e da metodologia CRISP-DM.
· É realizada após entender o problema e os dados.
· Envolve duas atividades principais:
· Limpeza dos dados: remover erros, dados duplicados, valores ausentes ou inconsistentes.
· Pré-processamento: transformar os dados em um formato adequado para o treinamento do modelo (ex: normalizar, converter categorias em números, etc.).
· Objetivo: garantir que os dados estejam prontos, limpos e confiáveis para a próxima etapa — modelagem com algoritmos de aprendizado de máquina.
✅ Resumo Final
A etapa de preparação dos dados é essencial para transformar dados brutos em dados limpos, organizados e prontos para treinar modelos de aprendizado de máquina. Ela inclui atividades como limpeza, transformação, codificação e normalização, e garante que os dados estejam de qualidade e compatíveis com os algoritmos escolhidos.
Conhecendo os dados
🔍 Objetivo de Conhecer os Dados
· Depois de coletar os dados, é essencial entender e conhecer suas características.
· Isso ajuda a:
· Verificar se os dados estão adequados ao plano de ação.
· Decidir se é preciso aplicar ajustes ou transformações.
· Escolher os melhores modelos e técnicas de análise ou machine learning.
📊 Técnicas para conhecer os dados
1. Extração de Estatísticas Descritivas
· O que é: Calcular medidas que resumem os dados de forma numérica.
· Principais métricas:
· Média: valor central.
· Variância: quanto os valores se afastam da média, ou seja, o quanto os dados variam em relação à média.
· Desvio padrão: dispersão dos dados em torno da média.
· Para que serve?
· Ver se os dados são consistentes e regulares.
· Identificar valores extremos ou muita variação.
📌 Exemplo: Se a média de salários em uma empresa for R$ 2.000 e o desvio padrão for R$ 1.900, os dados variam muito. Isso pode indicar a presença de outliers (valores muito diferentes dos demais).
2. Análise da Distribuição dos Dados
· O que é: Verificar como os dados estão distribuídos.
· Importância:
· Ajuda a saber que tipo de modelo ou teste estatístico aplicar.
· Identifica padrões ou comportamentos específicos dos dados.
· Importante para fazer correlações entre os dados.
📌 Exemplos comuns:
· Distribuição normal (curva em forma de sino):
· Muitos testes estatísticos exigem essa forma.
· Se os dados seguem essa curva, dizemos que têm normalidade.
· Exemplo: altura de pessoas ou notas em uma prova.
· Distribuição de Poisson:
· Frequente em séries temporais (como número de ligações por hora, acessos a um site, etc.).
· Indica dados com eventos por tempo.
🧮 Indicadores usados:
· Skewness (assimetria):
· Valor > 0: cauda maior à direita (assimetria positiva).
· Valor 10.000)
	Remover nulos (Remover registros duplicados ou estudar origem
📌 Exemplo 
· Base com 20.000 registros e 500 com valores nulos (2,5%):
· Pode-se remover os 500 registros.
· Base com 500 registros e 50 com dados faltantes (10%):
· Melhor tentar preencher ou refazer coleta.
· Dados repetidos em 2 registros:
· Elimine para evitar redundância.
Análise exploratória
🎯 O que é a análise exploratória?
· É uma pré-análise feita antes da preparação final dos dados e do treinamento do modelo.
· Combina o conhecimento dos dados, resolução de valores nulos e começa a experimentar e visualizar os dados.
· Objetivo: verificar se nossas teorias sobre o problema se confirmam nos dados.
🔄 O que fazemos na análise exploratória?
· Estudamos a correlação entre os dados, especialmente entre os atributos e o atributo alvo (variável que queremos prever).
· Avaliamos como os dados se distribuem no espaço (usando técnicas de redução de dimensionalidade).
· Identificamos quais características são mais importantes para o modelo.
· Definimos se usaremos modelos lineares ou não lineares.
📊 Principais gráficos usados na análise exploratória
	Tipo de gráfico
	Uso principal
	Gráfico de linha
	Ver distribuição ou comportamento no tempo (relação temporal)
	Gráfico de dispersão (scatterplot)
	Ver correlação entre variáveis numéricas e distribuição no espaço
	Boxplot
	Ver variância, distribuição e comparar grupos
	Histograma
	Ver distribuição de variáveis numéricas
	Gráfico de barra
	Ver distribuição de variáveis categóricas e identificar outliers
🛠️ Ferramentas para visualização
· Tableau, Power BI, Google Analytics, Kibana: ferramentas para criar dashboards interativos.
· Python (com bibliotecas como Plotly, Seaborn e Matplotlib) ou R para criar gráficos direto no código.
⚙️ Como operacionalizar a análise exploratória
· Operacionalizando a análise exploratória, podemos criar pipelines para: 
· Extração de estatísticas descritivas.
· Testes de correlação (ex: Pearson, Spearman).
· Plotagem dos gráficos.
As imagens abaixo, mostram esta estratégia via linguagem de programação (Python ou R):
 
· Histograma: mostra a frequência dos valores de uma variável. Por exemplo, distribuição de alturas das pessoas que segue uma curva normal.
· Scatterplot (gráfico de dispersão): mostra a relação entre duas variáveis. Por exemplo, no famoso conjunto de dados Iris, que analisa diferentes características das flores para classificá-las.
💡 Dicas para criação de gráficos em dashboards
· No eixo Y, coloque uma variável numérica ou uma agregação (ex: média).
· No eixo X, coloque variáveis categóricas, datas ou números.
· Use cores para destacar a distribuição do atributo alvo ou outro eixo.
· Isso ajuda a visualizar padrões e confirmar se o problema é linear ou não.
Preparação dos dados para a fase de treinamento
🎯 Objetivo da preparação
· Após a análise exploratória, precisamos organizar e adaptar os dados para o modelo de aprendizado de máquina.
· Essa etapa inclui:
· Escolha ou adaptação dos dados ao modelo a ser treinado.
· Padronização e organização dos dados para o formato exigido pelo algoritmo.
📦 Adaptação conforme o modelo
a) Sistemas de recomendação / Regras de associação
· Exigem que os dados sejam agrupados, como "cestas de compras".
· Cada grupo (ex: compras do cliente 123) recebe um identificador e um rótulo.
🔍 Exemplo: Cliente comprou os itens [arroz, feijão, óleo] → sistema aprende que quem comprou arroz e feijão também tende a comprar óleo.
b) Redes neurais
· Exigem que:
· Os dados sejam numéricos.
· Os dados sejam divididos em batchs (lotes) de tamanho definido.
· O modelo seja treinado em épocas (ciclos de aprendizado com o mesmo conjunto).
c) Processamento de linguagem natural (PLN)
· Textos precisam ser transformados em números por meio de:
· Bag of Words (saco de palavras): cria uma matriz esparsa, onde:
· Linhas representam os documentos.
· Colunas representam a presença/quantidade das palavras.
⚙️ Técnicas para otimizar o treinamento
a) Remoção de outliers
· Outliers (valores fora do padrão) podem prejudicar o modelo.
· Usamos a análise do intervalo interquartil (IQR):
📌 Como funciona:
1. Calcula-se o Q1 (25%) e o Q3 (75%) da distribuição.
2. Calcula-se o IQR = Q3 - Q1.
3. Registros que estão fora do intervalo:
· Menores que Q1 – 0.5 × IQR
· Maiores que Q3 + 0.5 × IQR → São removidos.
b) Normalização de atributos
· Evita que variáveis com escalas diferentes dominem o aprendizado.
· Técnica comum: MinMax Scaling
· A escala MinMax ajuda a remover vícios de escala do modelo, o objetivo é normalizar os valores num intervalo predeterminado, para otimizar o processo de treinamento, de modo a não viciar o modelo em certas escalas numéricas. 
🔍 Exemplo:
· Valor original: 70
· Mínimo: 50
· Máximo: 100
· Cálculo:
· Variação: normalizar em intervalo [-1, 1], útil para dados com distribuição negativa, neutra ou positiva.
✅ Resumo prático
	Etapa
	O que fazer
	Adaptar ao modelo
	Organizar os dados conforme o tipo (recomendação, rede neural etc.)
	Tratar outliers
	Usar o intervalo interquartil para detectar e remover
	Normalizar atributos
	Aplicar MinMax Scaling para padronizar a escala numérica
	Converter textos em números
	Usar vetorização (ex: Bag of Words)
	Organizar em batches (lotes)
	Para redes neurais, definir tamanho dos lotes para cada época
Demonstração em Python
📌 Demonstração em Python – Pré-processamento com o Dataset Iris
1. Importação das bibliotecas necessárias
Para análise e visualização de dados, é preciso importar bibliotecas:
import pandas as pd                 # Importa a biblioteca Pandas para manipulação de dados
import numpy as np                 # Importa a biblioteca NumPy para cálculos numéricos
import plotly.express as px        # Importa a Plotly Express para visualizações interativas
import seaborn as sb               # Importa o Seaborn para visualizações estatísticas 
import matplotlib.pyplot as plt    # Importa o Matplotlib para gráficos 
from sklearn.datasets import load_iris         # Carrega o dataset Iris da biblioteca scikit-learn
from sklearn.preprocessing import MinMaxScaler # Importa o escalonador MinMax para normalização dos dados
from sklearn.decomposition import PCA                # Importa o PCA para redução de dimensionalidade
from sklearn.model_selection import train_test_split # Importa para separação de dados em treino e teste 
2. Carregando o dataset Iris
· Objetivo: Preparar o dataset para análise.
· O dataset iris vem da biblioteca sklearn e já é muito utilizado em aprendizado de máquina.
Etapas:
iris = load_iris()                # Carrega o dataset Iris em formato de dicionário
3. Adicionando rótulos de classe
· Em vez de usar códigos numéricos (0, 1, 2), cria-se uma coluna com os nomes das classes (ex: ‘setosa’, ‘versicolor’, ‘virginica’).
Código:
def label(x):                     # Função para converter código da classe em nome da classe
    labels = iris.target_names    # Lista de nomes das classes (espécies)
    return labels[x]              # Retorna o nome correspondente ao índice
# Criação do DataFrame principal com os dados do Iris
iris_df = pd.DataFrame(iris.data, columns=iris.feature_names) # Converte os dados em DataFrame com nomes das features
iris_df['class_codes'] = iris.target            # Adiciona a coluna com os códigos das classes (0, 1, 2)
iris_df['class'] = iris_df['class_codes'].apply(lambda x: label(x))  # Cria coluna com os nomes das classes
4. Visualizando os dados: boxplot e histograma
· Boxplot: mostra distribuição e presença de outliers.
· Histograma: mostra frequência dos valores em faixas (bins).
Código:
# Criação de boxplots e histogramas para cada coluna do DataFrame
for c in iris_df.columns:                                      
    boxfig = px.box(iris_df, x=c, color='class', title='Boxplot of ' + c) # Cria boxplot para a feature atual
    boxfig.show()         # Mostra o boxplot interativo
    histfig = px.histogram(iris_df, x=c, color='class', title='Histogram of ' + c) # Cria histograma para a feature atual
    histfig.show()# Mostra o histograma
📷 Resultado exibido:
 
5. Normalização com MinMaxScaler
· Objetivo: Trazer todos os atributos para a mesma escala (entre 0 e 1), para evitar que atributos com números maiores influenciem mais o modelo.
· Por que isso é importante? Muitos algoritmos de aprendizado de máquina funcionam melhor quando os dados estão na mesma escala.
Código:
num_columns = iris_df.select_dtypes(include=np.number)   # Seleciona apenas as colunas numéricas
to_standardize = num_columns.columns.tolist()           # Lista os nomes dessas colunas
to_standardize.remove('class_codes')              # Remove 'class_codes' da lista para não normalizar
scaler = MinMaxScaler((0,1))                      # Cria o objeto de normalização com intervalo de 0 a 1
iris_df[to_standardize] = scaler.fit_transform(iris_df[to_standardize]) # Aplica a normalização nas colunas selecionadas
⚠️ Observação importante:
· Nem todos os atributos devem ser normalizados.
· Não normalize atributos categóricos, mesmo que sejam numéricos (ex: códigos, idade, rankings).
6. Matriz de dispersão (scatter matrix)
· Mostra relações entre todos os atributos.
· Ajuda a verificar correlações ou padrões visuais nos dados.
Código:
fig = px.scatter_matrix(iris_df, color='class')   # Cria uma matriz de dispersão colorida pelas classes
fig.show()                                         # Mostra a matriz de dispersão interativa
📷 Resultado exibido:
7. Redução de dimensionalidade com PCA
· Objetivo: Reduzir o número de atributos mantendo o máximo de informação possível.
· PCA transforma os dados originais em novas variáveis (componentes principais).
· Aqui, reduzimos para 2 componentes (2 dimensões).
Código:
pca_comp = 2                         # Define o número de componentes principais para PCA
pca = PCA(n_components=pca_comp)     # Cria o objeto PCA com 2 componentes
feature_columns = [c for c in iris_df.columns if c not in ['class','class_codes']] # Seleciona colunas para PCA
pca_iris_df = iris_df[feature_columns]    # Cria o DataFrame com apenas as colunas numéricas padronizadas
pca_iris_df = pd.DataFrame(pca.fit_transform(pca_iris_df), columns=['pc_' + str(i) for i in range(0, pca_comp)]) # Aplica o PCA e cria novo DataFrame com os componentes principais
pca_iris_df['class_codes'] = iris_df['class_codes'] # Adiciona de volta a coluna com os códigos das classes
✅ Resumo prático das etapas
	Etapa
	Descrição
	Carregamento do dataset
	Usa load_iris() da sklearn
	Rotulagem das classes
	Converte códigos em nomes usando .apply()
	Visualização
	Geração de boxplots e histogramas com plotly
	Normalização
	Usa MinMaxScaler para padronizar escalas numéricas
	Correlação visual
	Usa scatter_matrix para entender relações entre variáveis
	Redução de dimensionalidade
	Aplica PCA para reduzir atributos e facilitar análises futuras
Módulo 3. A modelagem e o treinamento de modelos
A etapa de modelagem
Etapa de Modelagem – CRISP-DM
· O que é? Fase do processo de KDD (Descoberta de Conhecimento em Dados) onde se escolhe o modelo e os algoritmos de aprendizado de máquina.
· Principais atividades:
· Seleção do modelo: define-se o tipo de modelo (ex: regressão, árvore de decisão, redes neurais).
· Escolha dos algoritmos: decide-se qual técnica será usada para treinar o modelo.
· Treinamento do modelo: o modelo aprende a partir dos dados de treinamento.
· Validação do modelo: verifica-se o desempenho com dados de teste/validação, para garantir que ele funcione corretamente.
Criação dos conjuntos de treinamento, teste e validação
📚 Criação dos conjuntos de dados para aprendizado de máquina
🧠O processo de aprendizado de máquina é semelhante ao ensino de um estudante:
· Primeiro ele aprende (treinamento),
· Depois faz exercícios (teste),
· Por fim, passa por uma avaliação realista (validação).
📂 Divisão do conjunto de dados
Dividimos o conjunto original em três partes principais:
· 🔹 Treinamento (Train):
· Onde o modelo aprende os padrões dos dados.
· Usa-se cerca de 70% dos dados.
· 🔹 Teste (Test):
· Avalia se o modelo está aprendendo corretamente.
· Modelo pode errar e ser ajustado.
· Usa-se cerca de 15% (quando há validação) ou 30% (se não houver validação).
· 🔹 Validação (Validation):
· Simula o comportamento no "mundo real".
· Avaliação final antes de colocar o modelo em produção.
· Também costuma ter 15% dos dados.
🧠 Separação entre características e alvo
· Nos conjuntos de treinamento, teste e validação:
· Treinamento: o modelo recebe características (x) e alvo (y) para aprender.
· Teste/Validação: o modelo recebe apenas as características (X) e tenta prever o alvo. Depois, comparamos com o valor real para avaliar o desempenho.
Quando há um conjunto de validação presente, a proporção comumente adotada na literatura é:
· Treinamento (train): 70%
· Validação (validation): 15%
· Teste (test): 15%
Essa divisão permite que:
· O modelo aprenda com o conjunto de treino.
· Seja ajustado com base no desempenho no conjunto de validação.
· Seja avaliado de forma final com o conjunto de teste, que simula dados “novos”.
🧪 Importância da estratificação
· Estratificação: técnica usada para garantir que os subconjuntos (treino, teste, validação) tenham a mesma proporção das classes que o conjunto original.
· Isso é essencial, principalmente:
· Em problemas de classificação multiclasse (mais de duas classes).
· Em regressão, para evitar que os dados com valores maiores dominem o aprendizado.
⚖️ Desequilíbrio entre classes/valores
· Quando há desequilíbrio, o modelo pode aprender de forma enviesada, favorecendo a classe ou valor mais comum.
· ✅ Solução possível: Reamostragem de equalização (balanceamento):
· Ex: usar a mesma quantidade de exemplos de cada classe (igualando ao menor grupo).
· ⚠️ Limitações da equalização:
· Pode remover dados importantes, gerando perda de informação.
· Pode afastar o modelo da realidade, dificultando a generalização.
Definição do algoritmo e configuração de arquitetura
📌 Definição do algoritmo (modelo)
A escolha depende de dois fatores principais:
· Estado da arte: verificar quais algoritmos são usados em trabalhos semelhantes.
· Compatibilidade com os dados: garantir que os dados funcionem bem com o algoritmo escolhido.
⚖️ Como escolher entre vários modelos compatíveis
· Na pesquisa/acadêmico: testa-se todos e escolhe-se o que tiver melhor desempenho nas métricas.
· Na indústria: aplica-se a Navalha de Ockham:
· Preferir o modelo mais simples com desempenho similar aos mais complexos.
✅ Exemplo:
· Rede Neural Convolucional: 82% de acurácia
· Floresta Aleatória: 80% ou 81%
· Escolheríamos a Floresta Aleatória, pois é mais simples e tem desempenho próximo.
🛠️ Configuração de arquitetura (Hiperparâmetros - Ajuste fino)
· Depois de escolher o modelo, é preciso ajustar seus hiperparâmetros, que influenciam o desempenho.
· Isso é feito por meio de experimentos onde se testam várias combinações de parâmetros.
· A configuração de arquitetura de hiperparâmetros possui dois objetivos:
· Aprendizado otimizado (maior acerto possível)
· Eficiência prática, especialmente em uso industrial (modelo rápido e leve).
🧪 O que é ajuste de hiperparâmetros
· É testar várias combinações de parâmetros do modelo para ver qual é a melhor.
· Isso é feito por meio de experimentos sistemáticos, como o GridSearch.
✅ Como funciona:
1. Cria-se uma tabela com várias combinações de hiperparâmetros.
2. Cada linha é um teste com um conjunto diferente.
3. Compara-se o desempenho (ex: acurácia, erro).
4. Escolhe-se a melhor configuração.
Exemplo: No caso de redes neurais, varia-se, por exemplo:
· Número de camadas ocultas (ex: 2, 3)
· Número de neurônios por camada (ex: 32, 64)
· Função de ativação (ex: ReLU, sigmoid)
· Número de épocas (ex: 50, 100)
· Taxa de aprendizado
➡️ O processo é o mesmo: testar combinações, medir desempenho e escolher a melhor configuração.
🧪 Exemplo de ajuste com GridSearch (busca em grade)
Usamos ferramentas como GridSearchCV da biblioteca scikit-learn. Ele:
1. Gera automaticamente essa tabela (o grid de parâmetros)2. Treina o modelo com cada combinação
3. Avalia o desempenho com validação cruzada
4. Retorna os melhores hiperparâmetros
Análise do processo de treinamento e o aprendizado
🧪 Treinamento e Teste Inicial
· O modelo é treinado com o conjunto de treinamento.
· Em seguida, é testado com o conjunto de testes.
· Avaliamos com métricas (como acurácia):
· Se for acima de 50%, o modelo começou a aprender.
· Se atingir ou superar o estado da arte, o modelo é consistente ou excelente.
· Se não atingir bons resultados, é preciso voltar ao pré-processamento.
✅ Validação:
· Testa-se o modelo com o conjunto de validação, usando os mesmos critérios.
· Se aprovado, o modelo pode ser colocado em produção.
· Em produção, o modelo deve ser monitorado constantemente para evitar erros que afetem o negócio.
🔁 Problema do Viés de Divisão
· Mesmo com divisão aleatória, pode haver viés (os dados podem não representar bem todas as classes).
· Solução: usar Validação Cruzada (Cross Validation).
📌 Como funciona a Validação Cruzada (exemplo com k = 5):
1. Divide o conjunto de dados em 5 partes.
2. Treina com 4 partes e testa com a parte restante.
3. Repete isso 5 vezes, mudando a parte de teste.
4. A média dos resultados é a métrica final.
⚠️ Atenção: Se k for muito grande, pode haver superajuste (modelo aprende demais os dados específicos, perde capacidade de generalização).
🧠 Explicabilidade e Regras de Negócio
· Se possível, extraia a lógica do modelo (função ou estrutura de decisão).
· Mostre aos stakeholders (decisores do negócio) para verificar se faz sentido para a realidade da empresa.
· Isso faz parte da área de explicabilidade de modelos, especialmente importante para modelos complexos como redes neurais.
Avaliação do Treinamento do Modelo
🔍 Por que avaliar o modelo?
· Para saber se o modelo realmente aprendeu e consegue generalizar (ou seja, tomar boas decisões com dados novos).
· Avaliação pode ser feita:
· Em produção (modelo já em uso no dia a dia).
· Em pré-produção (ambiente de testes que simula a realidade).
👨‍⚕️ Avaliação com Especialistas
· Muito comum em modelos de classificação.
· O modelo faz previsões e especialistas acompanham, corrigem e avaliam os resultados.
✅ Vantagens:
· Modelo está sempre ajustado e pode ser corrigido em tempo real.
⚠️ Desvantagens:
· Alto custo (precisa de pessoas acompanhando).
· Risco de sobreajuste (modelo aprende demais os exemplos específicos e perde generalização).
📊 Métricas de Avaliação (antes da produção)
· Usadas para liberar uma versão inicial do modelo.
· Mas não garantem que ele funcionará perfeitamente no mundo real, pois os dados de teste são só uma amostra.
🔁 Importância do Monitoramento Contínuo
· O modelo pode errar após algum tempo em produção.
· Por isso, é importante:
· Monitorar constantemente.
· Aceitar erros como parte do processo.
· Ajustar e melhorar continuamente.
♻️ Processo Cíclico
· Avaliar, ajustar e reavaliar fazem parte do ciclo natural dos métodos de descoberta de conhecimento (como o CRISP-DM e o KDD).
Demonstração em Python
🧪 Demonstração em Python – Treinamento com Random Forest
📦 1. Bibliotecas utilizadas
from sklearn.model_selection import train_test_split  # Importa função para dividir os dados em treino e teste
from sklearn.ensemble import RandomForestClassifier   # Importa o classificador de Floresta Aleatória
· Essas bibliotecas ajudam a dividir os dados e treinar o modelo de aprendizado de máquina.
📊 2. Divisão dos dados: treino e teste
# Seleciona as colunas de características, excluindo a coluna 'class_codes' (alvo)
feature_columns = [c for c in pca_iris_df.columns if c != 'class_codes']
# Divide os dados em conjunto de treino (80%) e teste (20%)
X_train, X_test, y_train, y_test = train_test_split(
    pca_iris_df[feature_columns],  # Dados de entrada (features)
    pca_iris_df['class_codes'],    # Rótulos (classes)
    test_size=0.2,                 # Proporção do conjunto de teste: 20%
    random_state=0                 # Semente para garantir reprodutibilidade
)
· Objetivo: separar os dados em 80% para treinamento e 20% para teste.
· X_train, X_test: contêm as características (atributos) dos dados.
· y_train, y_test: contêm as classes alvo (as espécies de flor, no caso).
💡 Dica
· Como o dataset Iris tem apenas 150 registros, não é indicado criar também um conjunto de validação.
· Em datasets maiores, a divisão ideal é: treino, teste e validação.
🌲 3. Treinamento com Floresta Aleatória (Random Forest)
# Cria o modelo de Floresta Aleatória com profundidade máxima de 2
clf = RandomForestClassifier(max_depth=2, random_state=0)
# Treina o modelo com os dados de treino
clf.fit(X_train, y_train)
· Aqui o modelo é treinado com os dados de treino (X_train, y_train).
· max_depth=2: define a profundidade máxima das árvores (limita a complexidade).
· random_state=0: garante reprodutibilidade dos resultados.
🧪 4. Avaliação do modelo
# Avalia a acurácia do modelo com os dados de teste e imprime o resultado
print(clf.score(X_test, y_test))
# Imprime: 0.9333333333333333
clf.feature_importances_ # Retorna um array com a importância relativa de cada feature no modelo treinado (válido para modelos como árvores de decisão, Random Forest, etc.)
# Imprime: array([0.67391862, 0.32608138])
· A função score mostra o desempenho (acurácia) do modelo com os dados de teste.
· A saída será um número entre 0 e 1, representando a porcentagem de acertos do modelo.
· No caso deste exemplo, a Acurácia obtida foi de 93%
· clf.feature_importances_:
· Retorna um array com a importância de cada variável (feature) no modelo treinado.
· Indica quanto cada feature contribuiu para a decisão do modelo.
· A soma dos valores é igual a 1 (ou 100%).
· Exemplo:
array([0.67, 0.33]) → A 1ª feature foi mais importante que a 2ª.
· A primeira feature (por exemplo, pc_0) teve 67.39% de importância na decisão final.
· A segunda feature (por exemplo, pc_1) teve 32.61% de importância.
✅ Resumo final
· O código demonstra o ciclo básico de aprendizado de máquina:
1. Separar dados;
2. Treinar o modelo;
3. Avaliar desempenho.
Módulo 4. Avaliação de resultados
Avaliação de resultados e a implantação do sistema
· Na fase de avaliação do CRISP-DM, os resultados do modelo são testados e validados para verificar se atendem aos objetivos do projeto. 
· Já na etapa de implantação, o sistema é colocado em produção (liberado para uso real). 
· Ele pode ser atualizado futuramente com novas funcionalidades, conforme novas necessidades surgirem.
Tipos de teste
✅ Tipos de Teste em Aprendizado de Máquina
📌 1. Teste A/B
· Definição: Técnica onde se divide o público (ou dados) em dois grupos:
· Um grupo recebe a solução A.
· O outro grupo recebe a solução B (ou nenhuma).
· Objetivo: Comparar os resultados entre os dois grupos e avaliar qual solução é mais eficaz.
· Uso prático: Base da divisão entre conjunto de treino, teste e validação em machine learning.
📌 2. Testes de Hipóteses
· Objetivo: Verificar se a diferença entre dois modelos (ou tratamentos) é estatisticamente significativa.
· Ferramenta-chave: P-Value (valor-p)
· Representa a probabilidade de um resultado tão extremo ocorrer por acaso, assumindo que a hipótese nula é verdadeira.
📋 Passo a passo do teste de hipótese aplicado a modelos de ML:
1. Instanciar dois modelos:
· Um com a solução 1.
· Outro com a solução 2.
2. Executar um laço experimental (ex: 1000 rodadas):
· Em cada rodada:
· Separar 90% dos dados aleatoriamente.
· Treinar os modelos com validação cruzada.
· Armazenar os resultados de desempenho.
3. Após as rodadas:
· Verificar se os resultados seguem distribuição normal (teste de normalidade).
4. Aplicar o teste estatístico adequado:
· Se distribuição normal: usar testes paramétricos.
· Se distribuição não normal: usar o teste de Wilcoxon.
5. Interpretar o P-Value:
· Se P 0.05 → não existe diferença significativa → Os modelos têm desempenho equivalentes
6. Identificar o melhor modelo:
· Comparar a médiados desempenhos → o maior valor indica o melhor modelo.
🔍 Exemplo didático:
Suponha que, após as 1000 rodadas:
· Modelo 1 teve média de acerto de 84%.
· Modelo 2 teve média de acerto de 85%.
Se a diferença for estatisticamente significativa (P 90%):
· Apesar de possíveis, valores muito altos podem indicar que o modelo está "decorando" os dados de treino (overfit).
🧪 4. Como testar a generalização na prática?
· Testar o modelo em dados reais ou novos que nunca foram usados no treinamento.
· Avaliar se ele mantém o bom desempenho fora do ambiente de treino.
⚙️ 5. Atenção com hiperparâmetros
· Modelos mais complexos (como redes neurais e modelos incorporados) precisam de uma boa configuração de hiperparâmetros.
· Se mal configurados:
· Tendem ao overfit.
· Perdem a capacidade de generalizar.
✅ Resumo Final
	Conceito
	Explicação simples
	Generalização
	Acertar em exemplos novos, nunca vistos
	Sobreajuste (Overffit)
	Decorar os dados de treino sem aprender de verdade
	Medida F (F1-Score)
	Mostra equilíbrio entre precisão e recall
	Valores altos (>90%)
	Desconfiar: pode ser overfit
	Dados reais
	Usar para testar a capacidade real de generalização
	Hiperparâmetros
	Devem ser bem ajustados para evitar sobreajuste
Finalização do processo do CRISP-DM ou KDD
✅ Fase Final do Processo CRISP-DM ou KDD — Implantação do Modelo
📌 1. O que foi feito até aqui?
· Etapas anteriores:
· Coleta dos dados
· Limpeza dos dados
· Pré-processamento
· Preparação dos dados
· Treinamento dos modelos
🚀 2. Última etapa: Implantação
· É o momento de colocar o modelo em produção, ou seja, integrá-lo aos processos reais da empresa.
· O modelo passa a ser usado de forma prática no dia a dia da organização.
🛠️ 3. Cuidados na implantação
· Assim como qualquer outro software, é necessário:
· Definir métricas de monitoramento (ex: desempenho, erros, acertos).
· Usar práticas de CI/CD:
· Continuous Integration (Integração Contínua): garantir que mudanças no código não quebrem o sistema.
· Continuous Delivery (Entrega Contínua): facilitar atualizações automáticas e seguras.
📊 4. Testes específicos para modelos· Antes de liberar o modelo para todos os usuários (rollout), é importante fazer:
· Testes de hipótese → verificam se o modelo é realmente melhor que outro ou do que nenhum modelo.
🤝 5. Alinhamento com a área de negócios
· É fundamental comunicar-se com a equipe de negócios para:
· Definir o tempo de suporte que o cientista de dados dará ao modelo.
· Planejar quem ficará responsável por monitorar e re-treinar o modelo após esse período.
🔁 6. Após a implantação
· O modelo não é "eterno":
· Pode perder desempenho com o tempo.
· Será necessário reiniciar o processo (desde a coleta até o re-treinamento), seguindo o ciclo do CRISP-DM novamente.
✅ Resumo Final
	Etapa
	O que significa
	Implantação
	Colocar o modelo em uso no mundo real
	Monitoramento
	Acompanhar o desempenho com métricas e alertas
	CI/CD
	Garantir que o sistema seja atualizado com segurança
	Testes de hipótese
	Validar se o modelo realmente traz melhorias
	Alinhamento com negócios
	Combinar tempo de suporte e próximos responsáveis pelo modelo
	Reinício do ciclo
	O modelo pode precisar ser refeito com novos dados no futuro
Demonstração em Python
✅ Resumo Didático — Demonstração em Python com Floresta Aleatória
🌲 1. Retreinamento com Validação Cruzada
· Utilizou-se o modelo Random Forest (Floresta Aleatória).
· Foi aplicado cross_val_score com 5 divisões (cv=5).
· A métrica usada foi f1_weighted, ideal para:
· Classificação multiclasse (mais de duas classes).
· Situações com classes desbalanceadas (mesmo que não seja o caso).
· Medida F (F1) = média harmônica entre precisão e recall.
# Realiza validação cruzada com 5 folds usando F1 score ponderado como métrica
cv_result = cross_val_score(clf, pca_iris_df[feature_columns], 
                            pca_iris_df['class_codes'], cv=5, scoring='f1_weighted')
Resultado:
· Impressão da média e desvio padrão das pontuações:
print("CV Result: ", cv_result.round(3)) # Exibe os resultados da validação cruzada arredondados para 3 casas decimais
print("CV Mean: ", round(cv_result.mean(), 3))   # Mostra a média dos scores obtidos nos folds
print("CV Std: ", round(cv_result.std(), 3))     # Mostra o desvio padrão dos scores obtidos nos folds
# Imprime:
# CV Result: [0.865 0.933 0.933 0.9 1. ]
# CV Mean: 0.926
# CV Std: 0.045
· CV Result: [0.865 0.933 0.933 0.9 1. ] → indica a performance medida em cada fold, ou seja, as pontuações individuais (scores) do modelo para cada uma das 5 divisões (folds) da validação cruzada, arredondadas para 3 casas decimais.
· CV Mean: 0.926 → Aqui é apresentado, a média das pontuações nos 5 folds, ou seja, o desempenho geral esperado do modelo na validação cruzada. Logo, em média, o modelo tem 92,6% de desempenho (medido pela métrica usada).
· CV Std: 0.045 → Aqui é apresentado o desvio padrão das pontuações, que indica a variação ou consistência do desempenho entre os folds. Logo, os resultados variam em torno de 4,5% da média; valores baixos indicam que o modelo é estável. 
📊 2. Matriz de Confusão
· Objetivo: Visualizar os acertos e erros do modelo nas predições.
· São comparados:
· Valores reais (y_true) com
· Valores previstos (y_pred).
# Avaliação do classificador com conjunto de teste
y_true = y_test.values                       # Obtém os valores reais das classes
y_pred = clf.predict(X_test)                 # Obtém as previsões do classificador
cm = confusion_matrix(y_true, y_pred)        # Gera a matriz de confusão entre valores reais e previstos
print(cm)
# Imprime:
[[11  0  0]
 [ 0 11  2]
 [ 0  0  6]]
🖼️ 3. Visualização com Plotly
· Usado imshow do Plotly para exibir a matriz de confusão de forma gráfica.
# Cria os rótulos dos eixos para visualização da matriz de confusão
x_labels = ['Pred ' + str(c) for c in pca_iris_df['class_codes'].unique()] # Rótulos do eixo X (previsões)
y_labels = ['True ' + str(c) for c in pca_iris_df['class_codes'].unique()] # Rótulos do eixo Y (classes reais)
# Exibe a matriz de confusão com Plotly de forma interativa
px.imshow(
    cm,
    labels=dict(x="Predictions", y="Ground Truth"),  # Define os nomes dos eixos
    x=x_labels,                                      # Aplica os rótulos no eixo X
    y=y_labels                                       # Aplica os rótulos no eixo Y
)
📷 Resultado exibido:
Interpretação da Matriz de Confusão: 
· A matriz é quadrada e mostra:
· Linhas = valores reais.
· Colunas = valores previstos pelo modelo.
O que tem dentro das células?
· Cada número mostra quantas vezes o modelo fez aquela combinação.
· Exemplo: se na linha "True 1" e coluna "Pred 2" aparece 2 → o modelo errou 2 vezes, prevendo classe 2 para dados que eram da classe 1.
✅ Acertos ficam na diagonal!
· Quando o valor está na diagonal (linha e coluna da mesma classe), significa que o modelo acertou.
· Quanto mais valores na diagonal, melhor o desempenho.
❌ Erros ficam fora da diagonal
· Qualquer valor fora da diagonal representa uma confusão do modelo, ou seja, erro.
🔹 Linha “True 0” (classe real 0):
· Coluna “Pred 0” → modelo acertou ao prever classe 0 para dados da classe 0.
· Coluna “Pred 1” ou “Pred 2” (se houver valor) → modelo errou, confundiu classe 0 com 1 ou 2.
🔹 Linha “True 1” (classe real 1):
· Coluna “Pred 1” → acerto: modelo previu corretamente a classe 1.
· Coluna “Pred 0” ou “Pred 2” → erro: o modelo achou que os dados da classe 1 eram da classe 0 ou 2.
🔹 Linha “True 2” (classe real 2):
· Coluna “Pred 2” → acerto: modelo identificou corretamente a classe 2.
· Coluna “Pred 0” ou “Pred 1” → erro: confundiu classe 2 com outra.
✅ Resumo:
· Valores na diagonal (True X x Pred X) = acertos.
· Valores fora da diagonal = erros.
· Cada linha mostra o que o dado realmente é, e cada coluna mostra o que o modelo achou que era.
📏 4. Extração das Métricas
· Cálculo das principais métricas com sklearn e criação de um dicionário com os resultados:
# Calcula métricas de desempenho do classificador
f1 = f1_score(y_true, y_pred, average='weighted')        # F1-score ponderado
pr = precision_score(y_true, y_pred, average='weighted') # Precisão ponderada
re = recall_score(y_true, y_pred, average='weighted')    # Revocação ponderada
accr = accuracy_score(y_true, y_pred)                    # Acurácia
# Cria um dicionário com todas as métricas calculadas e já arredondadas
metrics = {
    "f_measure": round(f1, 3),
    "precision": round(pr, 3),
    "recall": round(re, 3),
    "accuracy": round(accr, 3)
}
print(metrics)  # Exibe o dicionário com as métricas de desempenho
# Imprime: {'f_measure': 0.935, 'precision': 0.95, 'recall': 0.933, 'accuracy': 0.933}
✅ Métricas de Desempenho do Modelo
· f_measure (F1-Score): 0.935 → Equilíbrio entre precisão e recall. Indica que o modelo é bem balanceado nas predições.
· precision: 0.95 → Das predições positivas feitas pelo modelo, 95% estavam corretas.
· recall: 0.933 → Das situações que realmente eram positivas, o modelo acertou 93,3%.
· accuracy: 0.933 → O modelo acertou 93,3% de todas as previsões, considerando todas as classes.
Esses valores mostram que o modelo teve excelente desempenho geral, com alta taxa de acertos e boa consistência entre as métricas.
💾 5. Salvando e Reutilizando o Modelo com Pickle
· Salvar o modelo treinado, Carregar o modelo salvo e Usar o modelo carregado:
# Persistência do classificador com pickle
import pickle  # Importa biblioteca para salvar/carregar objetos em disco
# Salva o classificador treinado em um arquivo binário
with open('my_dumped_classifier.pkl', 'wb') as fid:
    pickle.dump(clf, fid)
# Recarrega o classificador salvo
with open('my_dumped_classifier.pkl', 'rb') as fid:
    clf_loaded = pickle.load(fid)
# Realiza uma previsão com o classificador carregado (primeira amostra do teste)
clf_loaded.predict(X_test[0:1])
# Imprime: array([2])
🔄 Persistência com Pickle
· pickle.dump(clf, fid) → Salva o modelo clf treinado em um arquivo binário (.pkl), para uso posterior.
· pickle.load(fid) → Carrega o modelo salvo do arquivo, sem precisar reentreinar.
· clf_loaded.predict(X_test[0:1]) → array([2]) → O modelocarregado fez uma previsão para a primeira amostra do conjunto de teste e previu que ela pertence à classe 2.
Observações:
· O modelo pode ser executado localmente ou na nuvem.
· Alternativa: joblib, com funcionamento similar ao pickle.
✅ Resumo Final
	Etapa
	O que foi feito
	Retreinamento com validação
	Usou cross_val_score com métrica f1_weighted
	Avaliação com matriz
	Criou e visualizou a matriz de confusão com plotly.imshow()
	Métricas do modelo
	Calculadas com sklearn: F1, precisão, recall e acurácia
	Armazenamento do modelo
	Usou pickle para salvar e carregar o modelo treinado
Apresente um resumo didático de forma simples, clara e fácil de entender do texto abaixo em forma de tópicos. Se, e somente se, houver exemplos, explique-os passo a passo de forma clara, objetiva e didática:
Demonstração em Python
Vamos continuar nosso experimento do módulo 3. Agora, com a floresta aleatória instanciada, faremos o retreinamento dela utilizando a validação cruzada. Desta vez, porém, usaremos como parâmetro de métrica o 'f1_weighted', que é o indicador de que a validação cruzada utiliza a medida F para medir o modelo.
Dica: Recomendamos o uso da medida F porque é a média harmônica entre precisão e recall. Além disso, ela deve ser ponderada, pois o nosso problema é uma classificação multiclasse (mais de duas classes possíveis) e, também, pelo fato de considerar o desequilíbrio entre classes, que não é o caso do exemplo em questão, mas, por via de dúvidas, é sempre bom usar.
Existem outros indicadores, como o f1_micro e f1_macro, também necessários quando lidamos com classificação não binária. A diferença entre um e outro é que o macro leva em conta as predições por classe, enquanto o micro considera as predições globais.
cv_result = cross_val_score(clf, pca_iris_df[feature_columns],
pca_iris_df['class_codes'], cv=5,scoring='f1_weighted')
print("CV Result: ", cv_result.round(3))
print("CV Mean: ", round(cv_result.mean(), 3))
print("CV Std: ", round(cv_result.std(),3))
Após essa etapa, mergulharemos a fundo nos resultados, começando por montar a matriz de confusão. Para isso, precisaremos dos valores verdadeiros, ou seja, os valores reais do conjunto de teste, e faremos uma simulação de predições das observações do conjunto de testes. Assim, temos o nosso ground truth (verdade fundamental) nos valores reais e os valores estimados gerados a partir das predições. Quando podemos dividir o dataset em treino, teste, e validação, o conjunto de validação deve ser usado aqui.
y_true = y_test.values
y_pred = clf.predict(X_test)
cm = confusion_matrix(y_true, y_pred)
Construída a matriz de confusão, vamos visualizá-la. Para isso, utilizaremos o seguinte código:
x_labels = ['Pred '+str(c) for c in pca_iris_df['class_codes'].unique()]
y_labels = ['True '+str(c) for c in pca_iris_df['class_codes'].unique()]
px.imshow(
    cm,
    labels=dict(x="Predictions", y="Ground Truth"),
    x=x_labels,
    y=y_labels
)
Para a visualização da matriz de confusão, foi necessário estabelecermos os rótulos da visualização, de predição e de valor real. Isso serve para interpretarmos a validação. Para a visualização em si, utilizamos o plotly e a função imshow, que basicamente serve para imprimir dados matriciais, desde imagens até matrizes simples.
 
A matriz gerada pelo scikit-learn é uma matriz quadrada i,j com tamanho igual ao número de classes que o problema tem. Sendo que as linhas (i) representam os dados reais (grounded truth), enquanto as colunas (j) representam as predições, como podemos ver na imagem a seguir.
Matriz de confusão. Gerado pela demonstração em Python.
Interpretando a matriz pela escala apresentada à direita da imagem, ao passar o cursor por cima dos quadrantes, podemos ver os valores exatos. Veja que a floresta aleatória funciona perfeitamente para predizer a classe 0, porém, para a classe 1 e 2, houve uma pequena confusão: o modelo errou 2 predições que foram preditas como 2, mas na realidade eram 1. Ainda assim, o resultado foi bastante satisfatório, mesmo para um exemplo didático.
 
Para fins de registro, extrairemos as métricas do modelo. Com o sklearn, isso pode ser feito da seguinte maneira:
f1 = f1_score(y_true, y_pred, average='weighted')
pr = precision_score(y_true, y_pred, average='weighted')
re = recall_score(y_true, y_pred, average='weighted')
accr = accuracy_score(y_true, y_pred)
metrics = {
    "f_measure": round(f1,3),
    "precision": round(pr,3),
    "recall": round(re,3),
    "accuracy": round(accr,3)
}
print(metrics)
Assim, teremos os resultados para apresentar tanto para pesquisa quanto para clientes.
O dicionário de métricas deverá ter o seguinte formato: `{'f_measure': 0.935, 'precision': 0.95, 'recall': 0.933, 'accuracy': 0.933}`
Concluído o processo, basta implantar o modelo. Existem diversos modos de se fazer isso e cada um depende muito do ambiente em que será implantado. Mas, antes de qualquer coisa, precisamos salvar o modelo e, para isso, usaremos o pickle.
import pickle
# save the classifier
with open('my_dumped_classifier.pkl', 'wb') as fid:
    pickle.dump(clf, fid)
# load it again
with open('my_dumped_classifier.pkl', 'rb') as fid:
    clf_loaded = pickle.load(fid)
clf_loaded.predict(X_test[0:1])
O pickle persistirá o modelo no caminho declarado. Para instanciar o modelo treinado, basta fazer o pickle.load. Assim, qualquer um que tiver o arquivo pkl será capaz de rodar o modelo localmente ou na nuvem, dependendo do esquema de publicação da nuvem desejada. Existe, ainda, a alternativa com o joblib, que é praticamente igual.
image4.jpeg
image94.png
image95.png
image96.png
image97.png
image98.png
image99.png
image100.png
image101.png
image102.png
image103.png
image5.jpeg
image104.png
image105.jpeg
image6.png
image7.png
image8.png
image9.png
image10.png
image11.png
image12.png
image13.jpeg
image14.jpeg
image15.png
image16.png
image17.jpeg
image18.png
image19.jpeg
image20.jpeg
image21.png
image22.jpeg
image23.png
image24.png
image25.png
image26.png
image27.png
image28.png
image29.png
image30.png
image31.png
image32.png
image33.png
image34.png
image35.png
image36.png
image37.jpeg
image38.jpeg
image39.jpeg
image40.jpeg
image41.png
image42.png
image43.png
image44.png
image45.png
image46.png
image47.png
image48.jpeg
image49.png
image50.png
image51.png
image52.png
image53.png
image54.png
image55.png
image56.png
image57.png
image58.png
image59.png
image60.png
image61.png
image62.png
image63.png
image1.jpeg
image64.png
image65.png
image66.png
image67.png
image68.png
image69.png
image70.jpeg
image71.png
image72.png
image73.png
image2.jpeg
image74.png
image75.png
image76.png
image77.png
image78.jpeg
image79.png
image80.png
image81.png
image82.png
image83.png
image3.jpeg
image84.png
image85.png
image86.png
image87.png
image88.png
image89.png
image90.jpeg
image91.jpeg
image92.png
image93.pngUmidade
	Vento
	Jogar Tênis (sim/não)?
	Ensolarado
	Quente
	Alta
	Fraco
	Não
	Ensolarado
	Quente
	Alta
	Forte
	Não
	Nublado
	Quente
	Alta
	Fraco
	Sim
	Chuvoso
	Moderada
	Alta
	Fraco
	Sim
	Ensolarado
	Moderada
	Normal
	Normal
	Sim
	Chuvoso
	Quente
	Alta
	Forte
	Não
	Chuvoso
	Quente
	Normal
	Fraco
	?
Como o modelo atua:
1. Analisa os dados rotulados (tempo, temperatura, umidade, vento).
2. Aprende os padrões que levam ao “sim” ou “não”.
3. Ao receber uma nova situação (linha 7), prediz se deve jogar tênis ou não.
📌 O modelo classifica a nova situação com base nas anteriores.
	Resumo Didático de Machine Learning na Prática
· O Aprendizado de Máquina (Machine Learning) é uma técnica da Inteligência Artificial (IA) que permite que máquinas aprendam através de exemplos, assim como os seres humanos. 
· A IA já faz parte do nosso dia a dia, em ações como a classificação automática de e-mails como spam, o reconhecimento facial no Facebook ou as sugestões de produtos em compras online.
· A resolução de problemas de classificação usando Machine Learning segue um princípio fundamental: fornecer vários exemplos à máquina e indicar a ela o que cada um representa. A partir disso, a máquina é capaz de identificar padrões e realizar classificações por conta própria.
Vamos entender como isso funciona na prática com um exemplo didático:
· Passo 1: Definição do Problema
· O primeiro passo é ter clareza sobre o que se deseja classificar.
· Exemplo Prático: Queremos identificar o que é um gato. Por eliminação, se o bichinho não for um gato, ele será classificado como cachorro.
· Para diferenciar um gato de um cachorro, é crucial selecionar características (atributos) que realmente os distinguem. Características muito similares, como ter quatro patas, não ajudam e devem ser evitadas.
· Características (Atributos) Escolhidas para o Exemplo: 
1. É fofinho.
2. Tem orelhinha pequena.
3. Faz miau.
· As respostas a essas perguntas são traduzidas numericamente: "sim" é 1 e "não" é 0.
· Passo 2: Criação dos Datasets (Conjuntos de Dados)
· As informações coletadas devem ser traduzidas para uma linguagem que a máquina consiga entender.
· Para isso, utilizamos o framework Weka, um software livre de mineração de dados que usa o formato AFF (um arquivo de texto que descreve instâncias e seus atributos).
· Dataset de Treinamento (bichinho.aff): 
3. Este arquivo contém os dados de exemplos que o modelo vai aprender, já com as suas classes (rótulos) definidas.
3. No exemplo, foram usadas seis imagens: três gatinhos e três cachorrinhos.
3. Para cada imagem, foram registradas as respostas (1 para sim, 0 para não) para as três características (fofinho, orelhinha pequena, faz miau), e cada instância foi rotulada como "gato" ou "cachorro".
3. Como os dados são representados (visão simplificada): 
4. Um gato pode ser representado como (1, 1, 1) para "fofinho", "orelha pequena", "faz miau", e classificado como "gato".
4. Um cachorro pode ser representado como (0, 0, 0) para essas mesmas características, e classificado como "cachorro".
4. É importante notar que nem todos os gatos ou cachorros se encaixam perfeitamente nos "1"s ou "0"s em todas as características, o que torna o aprendizado mais robusto.
· Dataset de Teste (bichinho desconhecido.aff): 
4. Este é um segundo arquivo com o mesmo formato, mas a classe dos bichinhos é desconhecida (marcada com um ponto de interrogação ?). É para essas instâncias que o modelo fará a predição.
· Passo 3: Criação do Modelo e Realização das Predições
· Nesta fase, as técnicas de Machine Learning são aplicadas para construir e usar o modelo preditivo.
· Existem diversos algoritmos, como SVM, Árvore de Decisões, KNN, e para este exemplo, o Naive Bayes (Nave Base) foi escolhido.
· O algoritmo Naive Bayes é baseado em probabilidades e tem como objetivo calcular a probabilidade de uma amostra desconhecida pertencer a cada uma das classes possíveis, prevendo a classe mais provável.
· Exemplo Prático com o Weka (Passos no Software): 
1. Abrir a ferramenta Weka e clicar no botão "Explorer".
2. Na aba "Pré-processar", carregar o dataset de treinamento (bichinho.aff). O Weka exibirá os atributos e a quantidade de instâncias por classe (3 gatos, 3 cachorros).
3. Mudar para a aba "Classificar".
4. Nesta aba, escolher o algoritmo "Naive Bayes".
5. Iniciar o processo de treinamento: o Weka processa o dataset de treinamento e cria o modelo.
6. Verificar o Resultado do Treinamento: O Weka mostra que a acurácia do modelo é de 100%, o que indica que ele classificou corretamente todas as instâncias que usou para aprender.
7. Realizar o Teste (Fazer Predições em Dados Novos): 
· No Weka, selecionar a opção para fornecer um novo dataset para teste.
· Carregar o dataset de teste (bichinho desconhecido.aff).
· Iniciar o processo: o modelo treinado agora usará seu conhecimento para classificar os bichinhos desconhecidos.
8. Analisar os Resultados da Predição: 
· Primeira instância: Classificada como gato, com uma confiança de predição próxima a 100%.
· Segunda instância: Classificada como cachorro, mas com uma confiança de predição de aproximadamente 50% (o que significa que a classificação não foi tão "garantida" pelo algoritmo).
· Terceira instância: Classificada como gato, com uma confiança de predição de 100%.
Este exemplo simples e prático demonstra como um algoritmo de Machine Learning, como o Naive Bayes, pode ser usado para prever e classificar novos registros que não possuem um rótulo definido, com base no que ele aprendeu de exemplos anteriores.
🐱🐶 Classificador: Gato ou Cachorro – Usando Naive Bayes em Python
# Passo 1: Importar bibliotecas
from sklearn.naive_bayes import GaussianNB
import pandas as pd
# Passo 2: Criar o dataset de treinamento
# Atributos: [fofinho, orelhinha_pequena, faz_miau]
# Classes: "gato" ou "cachorro"
X_treinamento = [
    [1, 1, 1],  # Gato
    [1, 0, 1],  # Gato
    [0, 1, 1],  # Gato
    [0, 0, 0],  # Cachorro
    [0, 1, 0],  # Cachorro
    [1, 0, 0],  # Cachorro
]
y_treinamento = [
    "gato",
    "gato",
    "gato",
    "cachorro",
    "cachorro",
    "cachorro"
]
# Passo 3: Criar e treinar o modelo com Naive Bayes
modelo = GaussianNB()
modelo.fit(X_treinamento, y_treinamento)
# Passo 4: Criar dataset de teste (sem rótulo)
# Queremos prever a classe (gato ou cachorro)
X_teste = [
    [1, 1, 1],   # Deve ser gato
    [0, 0, 0],   # Deve ser cachorro
    [1, 0, 0]    # Incerto (pode dar gato ou cachorro)
]
# Passo 5: Fazer predições
predicoes = modelo.predict(X_teste)
probabilidades = modelo.predict_proba(X_teste)
# Passo 6: Mostrar resultados
for i, (pred, prob) in enumerate(zip(predicoes, probabilidades), 1):
    print(f"Bichinho {i}: Classificado como '{pred}'")
    print(f"Confiança (probabilidades): {dict(zip(modelo.classes_, prob))}\n")
# Saída:
# Bichinho 1: Classificado como 'gato'
# Confiança (probabilidades): {'cachorro': 0.0, 'gato': 1.0}
# Bichinho 2: Classificado como 'cachorro'
# Confiança (probabilidades): {'cachorro': 1.0, 'gato': 0.0}
# Bichinho 3: Classificado como 'cachorro'
# Confiança (probabilidades): {'cachorro': 1.0, 'gato': 0.0}
🔵 REGRESSÃO
📌 O que é?
· Problemas em que o objetivo é prever um valor numérico específico.
· A saída é contínua, como: preço, altura, peso, tempo, etc.
🧪 Exemplos:
· Prever o preço de um produto
· Estimar altura ou peso de uma pessoa
· Calcular valor de venda de imóveis
✅ Exemplo: Preço de venda de uma casa
Base de dados: Imagine uma base de dados de casas do mercado imobiliário.
	Tamanho da casa (m2)
	Tamanho do lote (m2)
	Qtd. quartos
	Granito (sim ou não)
	Banheiro reformado
(sim ou não)
	Preço de venda
	353
	919
	6
	0
	0
	R$ 205.000,00
	325
	1.006
	5
	1
	1
	R$ 224.900,00
	403
	1.015
	5
	0
	1
	R$ 197.900,00
	240
	1.415
	4
	1
	0
	R$ 189.900,00
	220
	960
	4
	0
	1
	R$ 195.000,00
	353
	1.999
	6
	1
	1
	R$ 325.000,00
	298
	936
	5
	0
	1
	R$ 230.000,00
	320
	967
	5
	1
	1
	?
Como o modelo atua:
1. Analisa os imóveis anteriores com seus preços.
2. Aprende como as características influenciam o preço.
3.Para o novo imóvel (última linha), prevê o valor aproximado de venda.
📌 A saída é um número real estimado.
⚠️ Diferença entre Classificação e Regressão
	Característica
	Classificação
	Regressão
	Tipo de saída
	Discreta (categorias)
	Contínua (valores numéricos)
	Exemplo de saída
	"Sim"/"Não", "Aprovado"/"Reprovado"
	R$ 230.000, altura = 1,72m
	Tipo de problema
	Qual categoria?
	Qual valor?
ℹ️ Observação importante:
· Nem sempre "número" significa regressão.
· Exemplo: valores como 0 e 1 podem representar classes:
· 0 = Reprovado
· 1 = Aprovado
· Mesmo sendo números, o modelo está classificando, não prevendo valores contínuos.
	Regressão Linear: Previsão de Valores com Aprendizado de Máquina
· A Regressão Linear é uma das técnicas estatísticas mais fundamentais e amplamente usadas na análise de dados e aprendizado de máquina. Seu principal objetivo é modelar a relação entre variáveis para prever um valor.
O que é Regressão Linear?
· Permite modelar a relação entre uma variável dependente (aquela que queremos prever ou entender) e uma ou mais variáveis independentes (aquelas que influenciam a variável dependente).
· Procura encontrar a "melhor linha reta" (para uma variável independente) ou o "melhor plano/hiperplano" (para múltiplas variáveis independentes) que se ajuste aos dados, minimizando o erro.
Conceitos Chave:
· Variável Dependente (Y): É o que se deseja prever.
Exemplo: O preço de uma casa.
·  Variáveis Independentes (X): São as variáveis que influenciam ou se relacionam com a variável dependente.
Exemplo: A área da casa, o número de quartos, a distância até o centro da cidade.
· Relação Linear: A Regressão Linear assume que existe uma relação direta e linear entre as variáveis.
Tipos de Regressão Linear:
· Regressão Linear Simples: Utilizada quando há apenas uma variável independente.
· Regressão Linear Múltipla: Utilizada quando há mais de uma variável independente.
Importância e Limitações:
· Importância: É valorizada pela sua simplicidade e facilidade de interpretação. Os coeficientes da regressão indicam diretamente a influência de cada variável independente no resultado.
Exemplo: Em um modelo de preço de casa, o coeficiente da área da casa mostra quanto o preço aumentará, em média, para cada metro quadrado adicional.
· Limitações: Assume uma relação linear (que pode não ser real). É sensível a "outliers" (valores discrepantes) e pode ser afetada por "multicolinearidades" (alta correlação entre as variáveis independentes).
-------------------------------------------------------------------------------- 
· Exemplo Prático: Previsão do Valor de Venda de uma Casa (Passo a Passo)
· O processo de usar a Regressão Linear para prever o valor de uma casa envolve coleta de dados, treinamento do modelo e, finalmente, a previsão.
Passo 1: Coleta de Dados
· Primeiro, é necessária uma base de dados com características de imóveis e seus respectivos valores de venda.
· Características das Variáveis Independentes (X):
1. Área em metros quadrados
2. Número de quartos
3. Distância até o centro da cidade em quilômetros
4. Idade da casa em anos
· Variável Dependente (Y):
1. Valor de venda do imóvel em milhares
· Esses dados são usados para o treinamento, permitindo que o modelo aprenda a relação entre as características e os valores de venda.
Passo 2: Treinamento do Modelo
· Nesta fase, o modelo de regressão linear é construído e "aprende" a partir dos dados coletados.
Passo 3. Implementação em Código Python:
# Passo 1: Importar bibliotecas
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Passo 2: Dados de exemplo
dados = {
    'Área (m^2)': [100, 150, 90, 120, 110],
    'Quartos': [3, 4, 2, 3, 2],
    'Distância até o centro (Km)': [5, 3, 7, 2, 6],
    'Idade (anos)': [10, 5, 12, 8, 6],
    'Valor de venda (reais)': [500000, 700000, 400000, 550000, 450000],
}
# Passo 3: Convertendo em DataFrame
df = pd.DataFrame(dados)
# Passo 4: Dividindo os dados em variáveis independentes (X) e dependente (y)
X = df[['Área (m^2)', 'Quartos', 'Distância até o centro (Km)', 'Idade (anos)']]
y = df['Valor de venda (reais)']
# Passo 5: Dividindo os dados em conjunto de treino e teste
X_treino, X_teste, y_treino, y_teste = train_test_split(X, y, test_size=0.2, random_state=42)
# Passo 6: Criando o modelo de regressão linear
modelo = LinearRegression()
# Passo 7: Treinando o modelo
modelo.fit(X_treino, y_treino)
# Passo 8: Previsão de valor de venda para uma casa específica
casa_para_vender = pd.DataFrame({
    'Área (m^2)': [130],
    'Quartos': [3],
    'Distância até o centro (Km)': [4],
    'Idade (anos)': [7]
})
valor_previsto = modelo.predict(casa_para_vender)
print(f"O valor previsto de venda é: R$ {valor_previsto[0]:,.2f}")
# Saída: O valor previsto de venda é: R$ 459,606.99
Manutenção do Modelo:
·  É crucial retreinar o modelo caso haja qualquer modificação ou evolução nos dados de treinamento, para garantir que ele continue fiel e preciso nas suas previsões. A avaliação contínua do modelo é uma prática comum no aprendizado de máquina.
🎯 Conclusão geral:
· Um modelo preditivo aprende com dados rotulados para fazer previsões futuras.
· Ele pode ser usado para:
· Classificação → prever categorias
· Regressão → prever valores
· Saber qual tipo de saída você quer obter define o tipo de problema e o tipo de modelo a ser usado.
Modelo Descritivo
📌 O que é?
· Um modelo descritivo é usado para entender padrões e relações nos dados, sem necessariamente prever algo.
· Ele não prevê o futuro, mas explica o que está acontecendo ou aconteceu no passado.
· 👉 O foco é descrever o comportamento dos dados, encontrar grupos, associações ou tendências.
🧠 Diferença entre modelo preditivo e descritivo:
	Modelo Preditivo
	Modelo Descritivo
	Prever uma resposta desconhecida
	Entender padrões ocultos
	Usa aprendizado supervisionado
	Usa aprendizado não supervisionado
	Ex: Prever inadimplência
	Ex: Agrupar perfis de clientes similares
🔍 Técnicas comuns usadas em modelos descritivos:
1. Clusterização (agrupamento):
· Agrupa dados semelhantes.
· Ex: separar clientes em perfis com base em seus hábitos de compra.
2. Regras de associação:
· Descobre quais itens são comprados juntos.
· Ex: quem compra pão costuma também comprar queijo.
✅ Exemplo passo a passo: Carrinho de supermercado
Situação:
Um supermercado quer entender o comportamento de compra dos clientes.
Base de dados (simplificada):
	Cliente
	Itens comprados
	A
	Pão, Queijo
	B
	Pão, Manteiga
	C
	Pão, Queijo, Manteiga
	D
	Leite, Pão
	E
	Leite, Queijo
Etapas:
1. O modelo descritivo analisa os itens comprados juntos.
2. Ele encontra padrões, como:
· "Quem compra pão, também compra queijo em 80% dos casos."
· "Quem compra leite, às vezes compra manteiga."
3. Isso ajuda o supermercado a:
· Organizar melhor os produtos nas prateleiras
· Criar promoções específicas
📌 Aqui, nada está sendo previsto. O modelo descreve padrões de comportamento com base nos dados passados.
🎯 Conclusão
· Modelos descritivos ajudam a compreender os dados e tomar decisões mais estratégicas.
· Muito usados em:
· Marketing
· Varejo
· Pesquisa de mercado
· Eles são fundamentais para descobrir informações úteis sem precisar de rótulos ou previsões futuras.
Modelo descritivo
🧠 O que é um Modelo Descritivo?
· Usado em aprendizado de máquina não supervisionado.
· Trabalha com dados não rotulados, ou seja, sem respostas conhecidas.
· O foco é identificar padrões e similaridades entre os dados.
· Não prevê resultados; apenas descreve comportamentos ocultos nos dados.
🚦 Características do Aprendizado Não Supervisionado:
· Descobre padrões previamente desconhecidos.
· É útil quando não sabemos as respostas de antemão.
· Ideal para problemas reais, em que nem sempre há dados rotulados.
· Não usa variáveis de saída (rótulos).
🔍 Principais Categorias de Problemas:
1. Clustering (Agrupamento)
2. Estimativas de Densidade
3. Redução de Dimensionalidade (mencionada, mas não detalhada no trecho)
🟢 CLUSTERING(Agrupamento)
📌 O que faz?
· Agrupa os dados com base em semelhanças entre eles.
· Os grupos formados são chamados de clusters.
· Ajuda a entender perfis ou comportamentos ocultos.
❗ Pode detectar anomalias:
· Pontos que não se encaixam bem em nenhum grupo.
· Útil para:
· Identificar fraudes
· Encontrar erros de entrada
· Detectar peças com defeito
✅ Exemplo: Clientes da concessionária BMW
Cenário:
· A BMW quer entender o comportamento dos visitantes usando dados históricos.
· O algoritmo analisa os dados e forma 5 grupos (clusters) com perfis diferentes:
	Cluster
	Perfil
	Comportamento observado
	0
	Sonhadores
	Só olham os carros. Não compram. Entram pouco na loja.
	1
	Amantes do M5
	Vão direto ao modelo M5, ignoram outros, mas compram pouco (52%).
	2
	Jogados fora
	Comportamento inconsistente. Sem padrão relevante.
	3
	Bebês da BMW
	Sempre compram. Financiamento certo. Gostam do M5 ou Z4.
	4
	Começando com a BMW
	Foco no modelo 3-series. 50% financiam, 32% fecham a compra.
🧩 Análises possíveis:
· Cluster 1: Baixa taxa de compra → Enviar mais vendedores à seção do M5.
· Cluster 4: Clientes com foco claro → Relaxar regras de financiamento do 3-series pode aumentar vendas.
	Clusterização: Agrupando Dados por Semelhança
A Clusterização, também conhecida como agrupamento, é uma técnica fundamental no aprendizado de máquina não supervisionado. Isso significa que ela trabalha com dados que não possuem rótulos ou categorias pré-definidas.
Qual o objetivo da Clusterização?
· Seu objetivo principal é agrupar um conjunto de objetos (dados) de forma que aqueles que estão no mesmo grupo (ou cluster) sejam mais semelhantes entre si do que com os objetos de outros grupos.
· Essa "semelhança" é geralmente definida com base nas características ou atributos dos objetos.
Conceitos Chaves:
· Clusters: São os conjuntos de dados agrupados que compartilham características comuns. Idealmente, membros de um cluster são muito parecidos uns com os outros e muito diferentes dos membros de outros clusters.
· Variáveis de Entrada: São as características ou atributos dos dados que os algoritmos de clusterização consideram para decidir como agrupá-los. Podem ser numéricas ou categóricas.
· Medidas de Distância ou Similaridade: A formação dos clusters depende de como se mede a "proximidade" ou "similaridade" entre os pontos de dados. Uma medida comum é a distância Euclidiana, que quantifica quão próximos os pontos estão.
Método Principal: Algoritmo K-Means
· O K-Means é um dos algoritmos de clusterização mais populares e fáceis de entender.
· Ele agrupa os dados em um número pré-definido de clusters.
· Seu objetivo é minimizar a variação (diferenças) dentro de cada cluster (tornando os membros do cluster muito parecidos) e maximizar a variação entre clusters diferentes (tornando os clusters bem distintos entre si).
Importância e Desafios:
· Importância: É uma ferramenta valiosa para explorar a estrutura dos dados e descobrir padrões ocultos sem a necessidade de rótulos prévios. Ela permite rotular uma base de dados sem nenhum conhecimento prévio ou intervenção humana, e esses clusters podem ser futuras classes para algoritmos supervisionados.
· Desafios: Incluem a escolha do número correto de clusters para os dados, a definição da medida de similaridade mais apropriada e a interpretação significativa dos clusters formados.
Exemplo Prático: Segmentação de Clientes de uma Loja (Passo a Passo)
O exemplo apresenta a clusterização com um exemplo prático de segmentar clientes de uma loja com base em seus hábitos de compra.
Passo 1: Coleta de Dados
· Inicialmente, coleta-se uma base de dados simples com informações de clientes.
· Características dos dados: Incluem a idade do cliente, a renda anual (em milhares) e uma pontuação de gastos (de 1 a 100). A pontuação de gastos é um valor atribuído com base em critérios como frequência e valor gasto.
· Exemplo: Uma tabela com clientes, suas idades, rendas anuais e pontuações de gastos.
Passo 2: Pré-processamento de Dados (se necessário)
· Os dados são limpos e normalizados, se for preciso. Isso pode envolver lidar com dados ausentes ou converter tipos de dados.
Passo 3: Escolha do Método de Clusterização
· Para este exemplo, o algoritmo K-Means é escolhido por ser popular.
Passo 4: Determinação do Número Ótimo de Clusters
· Um dos desafios da clusterização é definir quantos clusters devem ser formados. Para isso, utiliza-se o Método do Cotovelo (Elbow Method).
Como funciona o Método do Cotovelo: 
1. O algoritmo K-Means é executado para diferentes números de clusters (por exemplo, de 1 a 5).
2. Para cada número de clusters, calcula-se o WCSS (Within-Cluster Sum of Squares), que é a soma dos quadrados das distâncias de cada ponto ao centro do cluster mais próximo. O WCSS mede o quão "compactos" são os clusters.
3. Os valores de WCSS são armazenados.
4. Gera-se um gráfico com o número de clusters no eixo X e o WCSS no eixo Y.
5. No gráfico, procura-se por um ponto de "cotovelo", que é onde a diminuição do WCSS começa a desacelerar significativamente. Esse ponto indica o número ótimo de clusters.
6. No exemplo: O "cotovelo" é identificado no número 3, indicando que 3 clusters seriam os mais adequados para esses dados.
Passo 5: Treinamento do Modelo
· Com o número ótimo de clusters (3, neste caso) definido, o modelo K-Means é treinado usando os dados de exemplo.
· A função fit_predict é usada para treinar o modelo e fazer as previsões dos clusters para cada instância.
Passo 6: Análise e Visualização dos Resultados
· Uma nova coluna, "cluster", é adicionada ao DataFrame (tabela de dados) original.
· Essa coluna indica a qual cluster cada instância (cliente) pertence.
· Interpretação: É possível observar que a base de dados foi separada em três clusters (0, 1, 2) de acordo com suas características e semelhanças. Por exemplo, um cluster pode representar "jovens de alta renda com alta pontuação de gastos", enquanto outro pode ser "idosos de renda média com baixa pontuação de gastos".
Código Python para o Exemplo:
# Passo 1: Importar bibliotecas
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# Passo 2: Dados de exemplo
dados = {
    'Idade': [25, 30, 35, 40, 45],
    'Renda Anual (milhares)': [40, 30, 35, 60, 55],
    'Pontuação de gastos': [30, 40, 50, 20, 30]
}
df = pd.DataFrame(dados)
print(df)
 Idade Renda Anual (milhares) Pontuação de gastos
0 25 40 30
1 30 30 40
2 35 35 50
3 40 60 20
4 45 55 30
# Passo 3: Utilizando o método Elbow para encontrar o número ótimo de clusters
wcss = []
for i in range(1, 5):
    kmeans = KMeans(n_clusters=i, init='k-means++', n_init=10, random_state=42)
    kmeans.fit(df)
    wcss.append(kmeans.inertia_)
# Passo 4: Plotando o método Elbow
plt.plot(range(1, 5), wcss, marker='o')
plt.title('Método Elbow')
plt.xlabel('Número de Clusters')
plt.ylabel('WCSS')
plt.grid(True)
plt.show()
# Passo 5: Treinando o modelo K-Means
kmeans = KMeans(n_clusters=3, init='k-means++', n_init='auto', random_state=42)
y_kmens = kmeans.fit_predict(df)
# Passo 6: Adicionando a coluna de clusters ao DataFrame
df['Cluster'] = y_kmens
print(df)
 Idade Renda Anual (milhares) Pontuação de gastos Cluster
0 25 40 30 2
1 30 30 40 0
2 35 35 50 0
3 40 60 20 1
4 45 55 30 1
Em suma, a clusterização é uma poderosa ferramenta de aprendizado de máquina não supervisionado que permite descobrir estruturas e agrupar dados por semelhança, mesmo sem informações prévias (rótulos) sobre eles.
	
🟡 ESTIMATIVAS DE DENSIDADE
📌 O que faz?
· Identifica regiões densas de dados (onde hámais pontos concentrados).
· Baseado em estatística e na ideia de função densidade de probabilidade.
· Usa a técnica de ɛ-vizinhança (agrupamento por proximidade).
A ɛ-vizinhança de um ponto p é o conjunto de pontos contidos em um círculo de raio ɛ, centrado em p.
· Permite formar grupos com formatos variados, não só círculos ou retângulos.
✅ Exemplo: Análise química de vinhos italianos
1. Cada vinho é descrito por várias características químicas (ex: acidez, açúcar, álcool).
2. Cada amostra é representada como um ponto em um espaço com várias dimensões (n-dimensional).
3. O modelo mede quão próximos estão os pontos entre si.
4. Pontos densamente agrupados formam regiões (grupos).
5. Assim, é possível identificar tipos de vinho com composições químicas semelhantes.
 
· Pontos azuis = dados já conhecidos (vinhos analisados), ou seja, representam os 100 vinhos cultivados na região da Itália (pontos azuis) e distribuídos em um espaço bidimensional, de acordo com os resultados da análise química.
· Ponto laranja = novo vinho que será agrupado com base em semelhança com os dados anteriores, representado pelo ponto p=(20, 20).
· Com o ɛ = 5; nesse caso, com um raio de 5, encontraremos 19 pontos no espaço de 100, conforme se pode ver figura do centro
· Se diminuirmos o valor de ɛ, menor será o número de vizinhos de p. Se o ɛ = 2,5 significa que teremos uma área do círculo menor e com apenas 4 vizinhos, como na figura do lado direito.
· A densidade é calculada pela divisão da massa pelo volume (Densidade = Massa / Volume). Sendo assim, para o caso de ɛ = 5, temos o volume como a área do círculo (A=πr²), π(5)². Dessa forma, Massa/Volume será igual a 19 pontos/π(5)².
	Estimativa de Densidade: Compreendendo a Distribuição dos Dados
· A Estimativa de Densidade é uma técnica fundamental no aprendizado de máquina não supervisionado. 
· Seu principal objetivo não é agrupar dados ou prever valores específicos, mas sim modelar e entender como os dados estão distribuídos no espaço de suas características.
O que é Estimativa de Densidade?
· É uma técnica que busca criar um modelo que representa a distribuição de probabilidade dos dados.
· Permite identificar onde os pontos de dados estão mais concentrados e onde são mais esparsos (distribuídos).
· Em termos simples, ela tenta responder: "quão comum são pontos de dados como este?".
Tipos e Métodos Principais:
· Estimativa de Densidade Kernel (KDE): É uma das técnicas mais populares. 
· Usa funções chamadas "kernels" para suavizar a contagem de pontos de dados em uma região.
· Resulta em uma estimativa contínua da densidade de probabilidade.
· Modelos Paramétricos: Assumem que a distribuição dos dados segue uma forma conhecida (ex: normal, exponencial) e os parâmetros dessa distribuição são aprendidos a partir dos dados.
· Modelos Não Paramétricos: Diferente dos paramétricos, não assumem uma forma predefinida para a distribuição dos dados. Isso os torna mais flexíveis, mas podem ser menos precisos com dados limitados.
Aplicações da Estimativa de Densidade:
· Detecção de Anomalias: Ao entender a distribuição "normal" dos dados, é possível identificar pontos que se desviam significativamente, sendo considerados anomalias ou outliers.
· Visualização de Dados: Ajuda a criar visualizações mais informativas, destacando áreas de alta e baixa concentração de pontos.
· Filtragem de Dados: Pode ser usada para transformar ou filtrar dados antes da aplicação de outros métodos de aprendizado de máquina.
· Análise Exploratória de Dados (AED): Revela características importantes dos dados, como a presença de subgrupos ou padrões interessantes.
Importância e Desafios:
· Importância: É crucial para lidar com dados complexos e multidimensionais, onde a relação entre as características não é facilmente perceptível. Permite uma compreensão mais profunda e intuitiva dessas relações.
· Desafios: Incluem a escolha do método correto, lidar com alta dimensionalidade dos dados e interpretar os resultados de forma significativa, especialmente em contextos complexos.
Exemplo Prático: Estimativa de Densidade de Altura e Peso (Passo a Passo)
Exemplo de como usar a Estimativa de Densidade Kernel (KDE) para entender a distribuição conjunta de altura e peso em um grupo de pessoas.
Passo 1: Coleta de Dados
· É o primeiro passo. Para este exemplo, são coletados dados de alturas e pesos de um grupo de pessoas.
· Exemplo: Uma tabela com pares de altura e peso para diferentes indivíduos.
Passo 2: Pré-processamento de Dados
· Antes de aplicar o modelo, é importante verificar se os dados coletados precisam de limpeza, transformação ou normalização. Isso garante que os dados estejam no formato ideal para o modelo.
Passo 3: Aplicação do Modelo (KDE)
· Utiliza-se o KDE para estimar a densidade de probabilidade desses dados de altura e peso.
· O KDE irá suavizar os dados, criando uma superfície contínua de densidade.
Passo 4: Análise e Visualização dos Resultados
· Após a aplicação do KDE, os resultados são visualizados em um gráfico de contorno de densidade (um tipo de mapa de calor). A interpretação desse gráfico é crucial: 
1. Eixos do Gráfico: 
· O eixo X (horizontal) representa a altura (em centímetros).
· O eixo Y (vertical) representa o peso (em quilogramas).
2. Linhas de Contorno: 
· As linhas desenhadas no gráfico representam locais de densidade constante.
· A densidade é maior no interior dos contornos e diminui à medida que nos afastamos para as bordas externas. Cada linha circunda uma região onde os pontos de dados têm aproximadamente a mesma densidade estimada.
3. Centros de Densidade: 
· As áreas onde os contornos são mais densos e próximos uns dos outros indicam onde há uma maior concentração de pontos de dados. No exemplo, podem aparecer dois "picos" ou grupos principais de densidade.
4. Distribuição dos Dados: 
· Os contornos mais externos delimitam as áreas onde os dados se tornam mais esparsos.
· Se os contornos forem alongados ou inclinados, isso pode indicar uma correlação entre as duas variáveis (altura e peso).
5. Correlação: 
· Se as linhas de contorno formam elipses inclinadas da parte inferior esquerda para a superior direita, isso sugere uma correlação positiva. No exemplo, isso significa que indivíduos mais altos tendem a ser mais pesados.
· Se as elipses estivessem inclinadas da superior esquerda para a inferior direita, isso sugeriria uma correlação negativa.
6. Anomalias: 
· Áreas onde não há contornos ou onde os contornos são muito esparsos podem indicar regiões de baixa densidade. Isso pode ser interpretado como anomalias ou dados atípicos na distribuição conjunta.
7. Intensidade da Cor: 
· A intensidade da cor dentro dos contornos geralmente representa a altura do pico da função de densidade.
· Cores mais escuras ou mais intensas geralmente indicam uma maior densidade de pontos, enquanto cores mais claras indicam menor densidade.
Como o Exemplo é Implementado:
# Passo 1: Importar bibliotecas
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# Passo 2: Dados de exemplo
dados = {
    'Altura': [170, 180, 175, 160, 165],
    'Peso': [65, 80, 75, 60, 55]
}
df = pd.DataFrame(dados)
# Passo 3. Aplicando KDE
sns.kdeplot(x=df['Altura'], y=df['Peso'], cmap='Reds', bw_adjust=0.5)
Em resumo, a estimativa de densidade, especialmente com KDE, fornece uma representação visual intuitiva da distribuição conjunta de variáveis, permitindo identificar padrões, correlações e anomalias nos dados.
	
REDUÇÃO DIMENSIONAL
📌 O que é?
· Técnica usada para reduzir a quantidade de variáveis (atributos) em um conjunto de dados.
· É útil quando temos muitos dados com variáveis redundantes ou correlacionadas.
· O objetivo é manter a informação mais importante, eliminando o que é repetitivo ou irrelevante.
⚠️ Problema: Overfitting
· Quando há muitas variáveis, o modelo pode:
· Aprender demais os dados de treino (decorar).
· Ter desempenho ruim em dados novos (teste).
· Isso é chamado de overfitting: o modelo acerta no treino, mas erra no mundo real.
🧠Como a Redução Dimensional ajuda?
· Simplifica o modelo.
· Reduz o tempo de processamento.
· Evita o overfitting.
· Melhora a generalização do modelo para novos dados.
🔧 Principais Técnicas:
1️⃣ PCA – Análise de Componentes Principais
· Técnica linear, simples, rápida e estatística.
· Transforma variáveis correlacionadas em componentes principais não correlacionados.
· Reduz o espaço de N variáveis para M, onde Mquando:
· Não temos rótulos (respostas conhecidas)
· Queremos entender comportamentos ou grupos
· Muito usado em:
· Marketing
· Análise de clientes
· Segurança e detecção de fraudes
Pesquisa científica
TEMA 3 - NOÇÕES GERAIS DE MINERAÇÃO DE DADOS
Introdução 
📊 Crescimento Exponencial dos Dados
· A consultoria IDC estima que a produção e replicação de dados no mundo dobra a cada dois anos.
· Em 2013, existiam cerca de 4,4 zettabytes de dados.
· A projeção para 2020 era de 44 zettabytes, ou seja, dez vezes mais dados.
🏢 Desafio para Empresas
· Empresas de todos os setores precisam armazenar grandes volumes de dados.
· O armazenamento foi em grande parte solucionado.
· Nova questão: como utilizar esses dados para aumentar a competitividade?
⛏️ Surgimento da Mineração de Dados
· A mineração de dados surgiu como resposta ao excesso de informações disponíveis.
· Objetivo: extrair valor e padrões úteis dos dados armazenados.
🧠 Conceito de KDD (Knowledge Discovery in Databases)
· A mineração de dados é uma etapa dentro do processo de KDD.
· KDD é o processo de descoberta de conhecimento a partir de grandes bases de dados.
Módulo 1. A Descoberta de Conhecimento em Bases de Dados (KDD) 
💡 O que é KDD ?
· KDD significa Descoberta de Conhecimento em Bases de Dados (Knowledge Discovery in Databases).
· É um processo completo que envolve várias etapas:
· Seleção dos dados
· Limpeza e pré-processamento
· Transformação
· Mineração de dados
· Avaliação e apresentação dos resultados
· 📌 A mineração de dados é apenas uma etapa dentro do processo de KDD.
🔍 Diferença entre KDD, Mineração de Dados e Aprendizado de Máquina
	Conceito
	Definição
	KDD
	Processo completo para extrair conhecimento útil a partir de grandes volumes de dados.
	Mineração de Dados
	Etapa do KDD onde se descobrem padrões ocultos nos dados com algoritmos.
	Aprendizado de Máquina (ML)
	Área da IA que cria algoritmos para identificar padrões, classificar e prever com base nos dados.
📌 Resumo:
· KDD → processo completo 
· Data Mining → etapa
· Machine Learning → ferramenta
🎯 Função da Classificação e Regressão no KDD
· 📌 KDD é o processo de descobrir conhecimento útil a partir de grandes conjuntos de dados.
· Dentro dele, a etapa de mineração de dados usa algoritmos de aprendizado de máquina, como:
✅ CLASSIFICAÇÃO
· O que faz? Atribui rótulos (categorias) aos dados com base em suas características.
· Exemplo: Classificar um ponto de perfuração como "viável" ou "não viável" para extração de petróleo.
✅ REGRESSÃO
· O que faz? Estima valores numéricos contínuos com base nos dados.
· Exemplo: Prever o volume estimado de petróleo que pode ser extraído de um ponto.
🔁 Resumindo
· Classificação → responde "o quê" (rótulo ou classe).
· Regressão → responde "quanto" (valor numérico).
Ambas ajudam o KDD a gerar conhecimento prático a partir dos dados.
🤖 Conceitos principais explicados
📌 Mineração de Dados:
· Descoberta de padrões ocultos nos dados, com base em estatísticas ou algoritmos.
· Realizada depois que os dados estão limpos e preparados.
📌 Aprendizado de Máquina (Machine Learning):
· Subárea da IA.
· Implementa algoritmos para que máquinas aprendam e tomem decisões com base nos dados.
· Tipos: supervisionado, não supervisionado e por reforço.
📌 Inteligência Artificial (IA):
· Campo mais amplo que engloba o aprendizado de máquina.
· Objetivo: criar sistemas que simulem o comportamento humano (tomar decisões, aprender, se adaptar).
· Usa:
· Aprendizado de máquina (para aprender com dados)
· Lógica e raciocínio (para pensar)
· KDD (para extrair valor dos dados)
🧠 Conclusão Geral
· IA é o campo geral que busca criar sistemas inteligentes.
· Para isso, usa o aprendizado de máquina, que depende de dados.
· A matéria-prima são os dados, e o objetivo é refiná-los até obter conhecimento útil.
· Os dados são organizados, tratados e analisados por meio do processo de KDD, que inclui a mineração de dados.
· Cada conceito tem seu papel, mas todos estão interligados e trabalham juntos. 
 Visão Geral e Histórico de KDD
📌 O que é KDD?
· KDD significa Descoberta de Conhecimento em Bases de Dados.
· É um processo completo que transforma grandes volumes de dados em conhecimento útil.
· Inclui várias etapas: selecionar, limpar, transformar, minerar e interpretar os dados.
🧠 KDD x Mineração de Dados:
· A mineração de dados (data mining) é apenas uma etapa do processo de KDD.
· KDD é o processo maior; a mineração é a fase em que se descobrem padrões nos dados.
📜 Histórico do KDD por Década:
🕰️ Década de 1960:
· O termo “arqueologia de dados” era usado: a ideia era explorar dados em busca de correlações sem hipóteses prévias.
· Dados começaram a ser armazenados em computadores (fitas, discos, bancos de dados).
· Surgem os primeiros sistemas para armazenamento confiável de grandes volumes de dados.
🕰️ Década de 1980:
· O foco era o acesso aos dados.
· Surgem tecnologias como:
· Bancos de Dados Relacionais (RDBMS)
· Linguagem SQL
· Conectividade ODBC
· Começa o uso de Sistemas de Apoio à Decisão (SAD), que ajudam gestores a tomar decisões com base em dados.
🕰️ Década de 1990:
· Surgem os Data Warehouses (armazéns de dados):
· Grandes repositórios projetados para cruzar e analisar dados.
· Uso de OLAP (análise online) para permitir consultas analíticas sobre os dados.
· Começa a percepção de que nem toda a informação armazenada é usada — muitos dados são esquecidos.
· Aumenta a necessidade de técnicas mais inteligentes para transformar dados em conhecimento.
🧪 Aplicações do KDD
1. Área Comercial:
· Empresas acumulam grandes volumes de dados (compras, cartões, navegação, etc.).
· Mineração de dados ajuda a descobrir padrões de comportamento dos clientes e prever tendências.
2. Ciências e Pesquisa:
· Coleta e geração de dados em alta velocidade (ex: sensores, satélites, telescópios).
· Muitas vezes, os métodos tradicionais não conseguem lidar com a quantidade e complexidade dos dados.
📈 Leis que impulsionam o KDD
Leis de Moore:
1. Capacidade de processamento (CPU, memória) dobra a cada 18 meses.
2. Armazenamento em disco dobra a cada 10 meses.
➡️ Isso gera um descompasso: produzimos dados muito mais rápido do que conseguimos analisar.
📚 Exemplo prático: A Biblioteca do Congresso (EUA), que possui atualmente cerca de 15 milhões de objetos digitais, com aproximadamente 7 petabytes em dados armazenados.
🤖 Como a IA se relaciona com KDD?
Automação x Inteligência Artificial:
· As técnicas usadas na Mineração de Dados (Data Mining) automatizam a descoberta de padrões nos dados.
· Isso é feito com estruturas inteligentes, que simulam habilidades humanas como:
· Compreensão da linguagem
· Percepção
· Raciocínio
· Aprendizado
· Resolução de problemas
➡️ Objetivo: Criar modelos computacionais inteligentes capazes de encontrar conhecimento escondido nos dados dos bancos de dados.
🧠 Surgimento do KDD
· O conceito de KDD (Knowledge Discovery in Databases) surgiu para representar todo o processo de descoberta de conhecimento útil a partir dos dados.
· O termo foi criado em 1989, no 1º workshop de KDD, por Gregory Piatetsky-Shapiro.
🔍 KDD x Data Mining
· Segundo Fayyad, Piatetsky-Shapiro e Smyth (1996):
· KDD é o processo completo, composto por várias etapas (seleção, limpeza, transformação, mineração e interpretação).
· A mineração de dados (Data Mining) é apenas uma dessas etapas, responsável por modelar e descobrir padrões nos dados.
🔄 Natureza do Processo KDD
O processo de KDD é:
Iterativo
· As etapas são realizadas em sequência, em que o resultado de uma etapa depende da outra.
· Às vezes é necessário voltar e repetir uma etapa para melhorar os resultados.
Interativo
· O analista pode intervir no processo, ajustando os métodos, avaliando os resultados e fazendo escolhas. 
· Cada etapa do processo pode ser repetida inúmeras vezes.
🎯 Objetivo do KDD
· Extrair informações e padrões relevantes em grandes volumes de dados que:
· Sejam não triviais (não óbvios),
· Desconhecidos previamente,
· E que possam ser úteis para a tomada de decisões.
🔧

Mais conteúdos dessa disciplina