Machine Learning nos Negócios: Modelos, Dados e Métricas de Avaliação

Introdução
A inteligência artificial deixou de ser um conceito futurista para se tornar uma ferramenta cotidiana nas organizações. Entre as diversas técnicas de IA, o Machine Learning (ML) destaca‑se por permitir que sistemas aprendam a partir de dados históricos e façam previsões ou decisões automatizadas. No contexto empresarial, isso significa otimizar processos, reduzir custos, melhorar a experiência do cliente e descobrir oportunidades de receita antes invisíveis.
Entretanto, transformar um problema de negócio em um projeto de ML bem‑sucedido requer mais do que escolher um algoritmo aleatoriamente. É preciso:
Este artigo apresenta, de forma estruturada, como conduzir cada uma dessas etapas, trazendo exemplos de código em Python que podem ser executados imediatamente. Ao final, você terá um roteiro completo para iniciar projetos de ML que realmente entregam valor ao negócio.
1. Escolhendo o modelo certo para o problema de negócio
Os problemas empresariais costumam se enquadrar em três categorias principais:
| Tipo de problema | Exemplo de negócio | Algoritmos típicos |
|---|---|---|
| Classificação | Detectar fraude em transações | Regressão logística, árvores de decisão, Gradient Boosting, Redes Neurais |
| Regressão | Prever demanda de estoque | Regressão linear, Random Forest Regressor, XGBoost |
| Agrupamento | Segmentar clientes por comportamento | K‑means, DBSCAN, Agglomerative Clustering |
1.1. Quando usar regressão logística vs. árvore de decisão
- Regressão logística: ideal quando a relação entre variáveis independentes e a probabilidade do evento é aproximadamente linear. Produz probabilidades bem calibradas e é interpretável.
- Árvore de decisão: captura interações não lineares e regras de decisão simples de entender (“se receita > R$ 10 mil, então…”). Porém, pode ser mais propensa a overfitting sem poda.
1.2. Ferramentas de apoio à escolha
O Scikit‑learn oferece a classe GridSearchCV, que permite testar combinações de hiperparâmetros e comparar modelos usando validação cruzada (cross‑validation). Abaixo, um snippet que compara dois classificadores para um problema de churn:
# -- coding: utf-8 --
import pandas as pd
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_auc_score
Carrega dataset fictício
df = pd.read_csv('churn.csv')
X = df.drop('churn', axis=1)
y = df['churn']
Divisão treino / teste
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
Padronização (necessária para regressão logística)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
Definição de grades de hiperparâmetros
param_grid_lr = {'C': [0.01, 0.1, 1, 10]}
param_grid_dt = {'max_depth': [3, 5, 7, None],
'min_samples_split': [2, 5, 10]}
Busca em grade para cada modelo
grid_lr = GridSearchCV(LogisticRegression(solver='lbfgs', max_iter=500),
param_grid_lr, cv=5, scoring='roc_auc')
grid_dt = GridSearchCV(DecisionTreeClassifier(),
param_grid_dt, cv=5, scoring='roc_auc')
grid_lr.fit(X_train_scaled, y_train)
grid_dt.fit(X_train, y_train) # Árvores não precisam de escala
print('Melhor AUC (LogReg):', grid_lr.best_score_)
print('Melhor AUC (Árvore):', grid_dt.best_score_)
O código acima demonstra como:
- Separar dados em treino e teste de forma estratificada;
- Escalar atributos numéricos apenas quando necessário;
- Avaliar modelos usando a métrica AUC‑ROC (ver seção 3).
2. Preparação de dados e engenharia de atributos
A qualidade dos dados determina a qualidade do modelo. Mesmo o algoritmo mais sofisticado falhará se alimentado por informações incompletas ou ruidosas.
2.1. Tratamento de valores ausentes
import numpy as np
Exemplo de preenchimento simples
df['idade'].fillna(df['idade'].median(), inplace=True)
Estratégia avançada: imputação por KNN
from sklearn.impute import KNNImputer
imputer = KNNImputer(n_neighbors=5)
df_numeric = df.select_dtypes(include=[np.number])
df_imputed = pd.DataFrame(imputer.fit_transform(df_numeric),
columns=df_numeric.columns)
2.2. Codificação de variáveis categóricas
Para algoritmos que exigem entrada numérica, converta categorias em vetores binários (one‑hot) ou em valores inteiros (label encoding). O Pandas get_dummies simplifica o processo:
categorical_cols = ['cidade', 'plano']
df_encoded = pd.get_dummies(df, columns=categorical_cols, drop_first=True)
2.3. Criação de atributos (feature engineering)
A arte de feature engineering consiste em transformar variáveis brutas em informações que o modelo consiga explorar. Exemplos comuns:
- Tempo de relacionamento:
dias_cliente = (data_atual - data_adesão).days - Relação entre duas colunas:
ratio_gasto = gasto_total / numero_transacoes - Agrupamento de categorias raras: agrupar cidades com menos de 100 clientes em “Outros”.
# Criação de atributo de tempo de relacionamento
df['data_adesão'] = pd.to_datetime(df['data_adesão'])
df['dias_cliente'] = (pd.Timestamp('today') - df['data_adesão']).dt.days
Razão gasto / transações
df['ratio_gasto'] = df['gasto_total'] / df['numero_transacoes'].replace(0, np.nan)
df['ratio_gasto'].fillna(0, inplace=True)
2.4. Normalização e padronização
Algoritmos baseados em distância (KNN, SVM) são sensíveis à escala dos atributos. Use StandardScaler ou MinMaxScaler para garantir que todas as variáveis contribuam igualmente.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_features = scaler.fit_transform(df_encoded)
3. Métricas de avaliação alinhadas ao objetivo de negócio
A escolha da métrica deve refletir o custo real de erros para a empresa. Algumas situações típicas:
| Problema | Métrica recomendada | Por quê | |----------|---------------------|---------| |


