Analogamente aos conceitos teóricos apresentados anteriormente, vamos explorar um exemplo prático que ilustra perfeitamente a aplicação dos modelos lineares. Afinal, compreender a relação entre horas de estudo e desempenho em provas constitui um cenário ideal para demonstrar estes princípios.
Contexto do Problema
Primeiramente, consideremos um conjunto de dados fictícios representando 20 alunos. Ademais, temos duas variáveis principais: horas de estudo (variável independente) e notas na prova (variável dependente). Similarmente à formulação matemática discutida, buscamos encontrar a relação linear entre estas variáveis.
Estrutura dos Dados
Conforme o exemplo, os dados seguem um padrão crescente onde, naturalmente, maior tempo de estudo correlaciona-se com melhor desempenho. Entretanto, é importante notar que mesmo em dados simulados existe uma variação realística.
Implementação Prática
Posteriormente à coleta dos dados, implementamos o modelo utilizando scikit-learn. Decerto, esta biblioteca oferece uma interface consistente para treinamento e avaliação de modelos de machine learning.
Estrutura Matemática do Modelo
Primeiramente, a formulação básica segue a equação linear tradicional \(y = mx + b\), porém adaptada ao contexto estatístico. Similarmente à notação do scikit-learn, temos componentes bem definidos.
Componentes Principais do Modelo Linear
- Variável Independente (X): Também conhecida como feature ou preditora
- Variável Dependente (y): Conhecida como target ou variável resposta
- Coeficientes (coef_): Representam os pesos de cada feature
- Intercepto (intercept_): Valor base quando todas as features são zero
- Função de Perda: Mede o erro entre previsões e valores reais
Detalhamento dos Componentes
1. Matriz de Features (X)
Conforme nosso exemplo, a matriz X contém as horas de estudo de cada aluno. Afinal, esta é a variável que utilizamos para fazer previsões. No scikit-learn, X deve estar no formato 2D, mesmo para uma única feature.
2. Vetor Target (y)
Corresponde às notas das provas que desejamos prever. Decerto, esta é a variável que o modelo aprenderá a estimar com base nas features.
3. Coeficientes (coef_)
Representam a inclinação da reta de regressão. No exemplo, indica quantos pontos na prova são ganhos por cada hora adicional de estudo. Igualmente importante, coeficientes maiores indicam features mais influentes.
4. Intercepto (intercept_)
Constitui o ponto onde a reta cruza o eixo y. Entretanto, sua interpretação prática pode ser limitada, pois representa um valor teórico quando X é zero.
Exemplo prático : Horas de Estudo vs Nota na Prova
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# -*- coding: utf-8 -*- """ EXEMPLO DIDÁTICO PARA ENSINO MÉDIO Regressão Linear Simples: Horas de Estudo vs Nota na Prova """ import matplotlib.pyplot as plt import numpy as np from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score print("=" * 60) print("REGRESSÃO LINEAR - EXEMPLO DIDÁTICO") print("Horas de Estudo vs Nota na Prova") print("=" * 60) # 🎯 CRIANDO NOSSO PRÓPRIO DATASET (DADOS FICTÍCIOS) # Vamos simular dados de 20 alunos # Feature (variável independente): Horas de estudo horas_estudo = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]) # Target (variável dependente): Nota na prova (0-10) notas_prova = np.array([2.5, 3.0, 3.8, 4.2, 4.7, 5.1, 5.5, 6.0, 6.3, 6.8, 7.1, 7.4, 7.7, 8.0, 8.2, 8.5, 8.7, 9.0, 9.2, 9.5]) # Mostrar os dados em uma tabela simples print("\n📊 DADOS DOS ALUNOS:") print("Aluno | Horas Estudo | Nota Prova") print("-" * 35) for i in range(len(horas_estudo)): print(f"{i+1:2d} | {horas_estudo[i]:2d} horas | {notas_prova[i]:4.1f}") # 🔍 ANÁLISE EXPLORATÓRIA SIMPLES print("\n" + "=" * 50) print("ANÁLISE EXPLORATÓRIA DOS DADOS") print("=" * 50) print(f"→ Média de horas de estudo: {np.mean(horas_estudo):.1f} horas") print(f"→ Média das notas: {np.mean(notas_prova):.1f}") print(f"→ Maior nota: {np.max(notas_prova):.1f} (estudou {horas_estudo[np.argmax(notas_prova)]} horas)") print(f"→ Menor nota: {np.min(notas_prova):.1f} (estudou {horas_estudo[np.argmin(notas_prova)]} horas)") # 📈 PREPARANDO OS DADOS PARA A REGRESSÃO # Precisamos transformar para formato 2D (requisito do scikit-learn) X = horas_estudo.reshape(-1, 1) # Feature: Horas de estudo y = notas_prova # Target: Notas # 🎯 CRIANDO E TREINANDO O MODELO DE REGRESSÃO LINEAR modelo = LinearRegression() modelo.fit(X, y) # Fazendo previsões com o modelo notas_previstas = modelo.predict(X) # 📊 RESULTADOS DO MODELO print("\n" + "=" * 50) print("RESULTADOS DA REGRESSÃO LINEAR") print("=" * 50) print(f"📍 EQUAÇÃO DA RETA:") print(f" Nota = {modelo.coef_[0]:.3f} × Horas + {modelo.intercept_:.3f}") print(f"\n📈 COEFICIENTE (INCLINAÇÃO): {modelo.coef_[0]:.3f}") print(" → A cada 1 hora adicional de estudo, a nota aumenta em {:.3f} pontos".format(modelo.coef_[0])) print(f"\n📉 INTERCEPTO: {modelo.intercept_:.3f}") print(" → Se estudar 0 horas, a nota esperada seria {:.3f} (interpretação teórica)".format(modelo.intercept_)) print(f"\n🎯 QUALIDADE DO AJUSTE (R²): {r2_score(y, notas_previstas):.3f}") print(" → O modelo explica {:.1f}% da variação nas notas".format(r2_score(y, notas_previstas) * 100)) # 🎯 FAZENDO PREVISÕES - EXEMPLOS PRÁTICOS print("\n" + "=" * 50) print("PREVISÕES DO MODELO") print("=" * 50) horas_exemplos = [0, 5, 10, 15, 20, 25] print("Quantas horas você vai estudar? Veja a nota prevista:") print("-" * 45) for horas in horas_exemplos: nota_prevista = modelo.predict([[horas]])[0] if nota_prevista > 10: nota_prevista = 10.0 # Limitando a nota máxima em 10 print(f"→ {horas:2d} horas de estudo → Nota prevista: {nota_prevista:5.1f}") |
Análise dos Resultados
Certamente, os resultados demonstram uma relação positiva clara entre horas de estudo e desempenho. O coeficiente angular da reta indica quantos pontos na prova são ganhos, em média, por cada hora adicional de estudo.
Interpretação dos Parâmetros
- Coeficiente angular: Representa a taxa de variação da nota em relação ao tempo de estudo
- Intercepto: Corresponde ao valor teórico da nota com zero horas de estudo
- R²: Mede a proporção da variabilidade explicada pelo modelo
Contudo, é fundamental compreender que este é um modelo simplificado pois modelos lineares observam apenas uma característica (feature) e no nosso exemplo observamos a relação do tempo de estudo para a obtenção da nota (objetivo). Embora capture a tendência geral, não considera fatores importantes como qualidade do estudo ou conhecimento prévio.
Considerações Finais
Inegavelmente, este exemplo ilustra perfeitamente o poder dos modelos lineares para identificar e quantificar relações entre variáveis. Analogamente, poderíamos aplicar a mesma metodologia para diversos outros cenários.
Portanto, dominar estes conceitos básicos proporciona uma base sólida para explorar técnicas mais avançadas de machine learning e análise de dados.