🤖 Processo de Machine Learning

Entenda como nossa IA prevê preços de imóveis

📋 Visão Geral do Projeto

O Habita AI é uma plataforma de machine learning que prevê preços de imóveis com base em características como:

1
Objetivo

Treinar um modelo de machine learning capaz de estimar o preço de um imóvel com base em suas características, utilizando dados históricos de Bangalore, Índia.

2
Abordagem

Utilizamos Regressão Linear (scikit-learn) para criar um modelo que estabeleça relações lineares entre as features e o preço final do imóvel.

3
Resultado

O modelo alcançou aproximadamente 82% de acurácia em validação cruzada 5-fold, permitindo previsões confiáveis de preços imobiliários.

🔄 Pipeline de Machine Learning
1
📥 Carregamento de Dados

Arquivo: bengaluru_house_prices.csv

Quantidade: ~13.000 registros de imóveis

Período: Dados históricos de Bangalore (2017–2019)

Colunas: area, price, bhk, bath, balcony, location

import pandas as pd df = pd.read_csv('bengaluru_house_prices.csv') df.shape # (13.320, 8)
2
🧹 Limpeza de Dados

Remoção de NaN: Excluímos registros com dados incompletos

Tratamento de tipos: Conversão para tipos apropriados (int, float)

Análise inicial: Estatísticas descritivas e distribuições

df.isnull().sum() # Verificar NaN df.drop(df[df.isnull().any(axis=1)].index, inplace=True) df.info() # Tipos de dados
3
🔍 Análise Exploratória (EDA)

Distribuições: Histogramas, box plots, scatter plots

Correlações: Relações entre features e preço

Outliers iniciais: Identificação de anomalias nos dados

Padrões: Insights sobre o mercado imobiliário

4
🏗️ Engenharia de Features

price_per_sqft: Criar feature de preço por metro quadrado

Normalização de BHK: Categorizar tipos de imóveis

Conversão de unidades: Área em sqft, preço em Crores

df['price_per_sqft'] = df['price'] * 100000 / df['area']
5
⚠️ Remoção de Outliers

Técnica 1 — Por localização: Remover valores muito discrepantes por bairro

Técnica 2 — Desvio padrão: Excluir dados fora de 3σ

Técnica 3 — IQR: Remover valores em quartis extremos

Resultado: Dataset reduzido, porém mais consistente

6
🔢 Redução de Dimensionalidade

Locations raras: Agrupar localizações com poucos registros em "other"

One-Hot Encoding: Converter locations categóricas em 245 features binárias

X = pd.get_dummies(df[['area_sqft', 'bath', 'bhk', 'location']]) # Resultado: 248 features (3 numéricas + 245 binárias)
7
✂️ Train-Test Split

Proporção: 80% treinamento / 20% teste

Objetivo: Avaliar performance em dados não vistos

Random state: Reprodutibilidade dos resultados

from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 )
8
🔍 GridSearchCV — Ajuste de Hiperparâmetros

Algoritmos testados:

  • Linear Regression ✅ Melhor
  • Lasso Regression
  • Ridge Regression

Validação cruzada: 5-fold | Métrica: R² score

9
💾 Serialização do Modelo

Formato: Pickle (Python object serialization)

Arquivo: banglore_home_prices_model.pickle

Configuração: columns.json com lista de features

import pickle with open('model.pickle', 'wb') as f: pickle.dump(model, f) print("Modelo salvo com sucesso!")
⚙️ Técnicas de Machine Learning
Regressão Linear

Definição: Modelo que estabelece relação linear entre features e target

Equação: y = β₀ + β₁x₁ + β₂x₂ + … + βₙxₙ

Por que usar: Simples, interpretável, rápido e eficaz

Quando usar: Relações lineares, dados tabulares estruturados

One-Hot Encoding

Objetivo: Converter variáveis categóricas (location) para numéricas

Processo: Criar coluna binária (0 ou 1) para cada categoria

# Antes location = "Bangalore" # Depois (one-hot) Bangalore = 1, Mumbai = 0, Delhi = 0
GridSearchCV

Objetivo: Encontrar melhores hiperparâmetros automaticamente

Como funciona: Testa todas as combinações de parâmetros

Validação cruzada: Garante escolhas robustas e generalizáveis

K-Fold Cross Validation

Definição: Dividir dados em K partes, treinar/testar K vezes

Vantagem: Melhor uso dos dados, reduz variância de performance

K utilizado: 5 folds | Score final: Média das 5 rodadas

Feature Scaling

Técnica: Normalizar ou padronizar features

Motivo: Algoritmos sensíveis a escala funcionam melhor normalizados

Métodos: StandardScaler, MinMaxScaler

📊 Métricas de Performance
R² Score: 82%
MAE: ~45 Lakhs
RMSE: ~67 Lakhs
R² Score — Coeficiente de Determinação

Definição: Proporção da variância explicada pelo modelo

Fórmula: R² = 1 − (SS_res / SS_tot)

Interpretação: 82% — o modelo explica 82% da variação de preços

Faixa: 0 a 1 (quanto mais próximo de 1, melhor)

MAE — Mean Absolute Error

Definição: Média dos erros absolutos entre previsão e real

Fórmula: MAE = (1/n) × Σ|y_real − y_pred|

Interpretação: Em média, as previsões erram por ~45 Lakhs

Vantagem: Unidade interpretável e fácil de entender

RMSE — Root Mean Square Error

Definição: Raiz quadrada do erro quadrático médio

Fórmula: RMSE = √[(1/n) × Σ(y_real − y_pred)²]

Interpretação: Penaliza erros grandes mais que o MAE (~67 Lakhs)

Validação Cruzada — 5-Fold
Fold R² Score Desempenho
Fold 10.81
81%
Fold 20.83
83%
Fold 30.82
82%
Fold 40.81
81%
Fold 50.82
82%
Média0.818 ± 0.008✅ Consistente
📁 Informações do Dataset
Fonte e Origem

Fonte: Kaggle — Bangalore House Prices

Localização: Bangalore, Índia

Período: Dados históricos de 2017–2019

Universo: ~13.320 propriedades após limpeza

Colunas e Features

price — Preço em Crores INR

area_sqft — Área em pés quadrados

bhk — Número de quartos

bath — Número de banheiros

balcony — Número de varandas

location — Bairro (245+ valores únicos)

Estatísticas Descritivas
Preço (Crores): Mín: 0.1 | Máx: 100 | Média: 1.25 | Mediana: 0.75 Área (sqft): Mín: 300 | Máx: 10.000 | Média: 1.500 | Mediana: 1.200 BHK: 1 bhk: 22% | 2 bhk: 45% | 3 bhk: 25% | 4+ bhk: 8% Banheiros: Min: 1 | Máx: 8 | Média: 1.8
Localizações Principais

245+ bairros únicos em Bangalore, incluindo:

Electronic City Rajaji Nagar Koramangala Whitefield Hebbal Bannerghatta BTM Layout JP Nagar
Desafios dos Dados

📊 Distribuições enviesadas — Preços não uniformemente distribuídos

🏘️ Desequilíbrio de localidades — Alguns bairros têm muito mais registros

⚠️ Outliers significativos — Imóveis muito caros ou muito baratos

🇮🇳 Contexto indiano — Preços e medidas no padrão indiano (Crores, sqft)