Machine Learning para Previsão de Demanda: Guia Prático

Prever demanda com precisão é um dos maiores desafios de qualquer operação industrial ou comercial. Estoque demais significa capital parado; estoque de menos gera vendas perdidas. Machine Learning oferece uma abordagem científica para esse problema, usando dados históricos para projetar o futuro com acurácia muito superior aos métodos tradicionais.

Este guia apresenta conceitos práticos e exemplos de código para que empresas de médio porte possam começar a implementar modelos preditivos, sem precisar de uma equipe de cientistas de dados.

Fundamentos da previsão de demanda

Por que métodos tradicionais falham?

Planilhas Excel com médias móveis ou projeções lineares funcionam em cenários estáveis. Mas a realidade é diferente:

Machine Learning consegue capturar essas complexidades porque aprende padrões diretamente dos dados, sem que você precise programar cada regra manualmente.

"O melhor modelo de previsão é aquele que erra de forma previsível. Com ML, você não apenas melhora a acurácia, mas também quantifica a incerteza."

Tipos de previsão

Preparando seus dados

A qualidade do modelo depende diretamente da qualidade dos dados. Antes de pensar em algoritmos, organize sua base:

Dados essenciais

Dados complementares (features)

Dica importante

Dados faltantes são comuns. Dias sem vendas devem ter registro com valor zero, não linha ausente. Dados inconsistentes (vendas negativas, datas futuras) precisam ser tratados antes de modelar.

Estrutura de dados recomendada

import pandas as pd

# Estrutura básica de dados para previsão
dados = pd.DataFrame({
    'data': pd.date_range('2022-01-01', '2024-12-31'),
    'produto_id': 'SKU-001',
    'quantidade': [...],  # vendas diárias
    'preco': [...],
    'promocao': [...],  # 0 ou 1
    'feriado': [...],   # 0 ou 1
})

# Features de tempo
dados['dia_semana'] = dados['data'].dt.dayofweek
dados['mes'] = dados['data'].dt.month
dados['semana_ano'] = dados['data'].dt.isocalendar().week

Algoritmos para começar

Existem dezenas de algoritmos de ML para séries temporais. Recomendamos começar pelos mais acessíveis e com bom custo-benefício:

1. Prophet (Meta/Facebook)

Desenvolvido pelo Facebook, é ideal para quem está começando. Lida automaticamente com sazonalidade, feriados e outliers.

from prophet import Prophet

# Preparar dados no formato do Prophet
df = dados[['data', 'quantidade']].rename(
    columns={'data': 'ds', 'quantidade': 'y'}
)

# Criar e treinar modelo
modelo = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    daily_seasonality=False,
    seasonality_mode='multiplicative'
)
modelo.fit(df)

# Criar dataframe futuro
futuro = modelo.make_future_dataframe(periods=30)

# Fazer previsões
previsao = modelo.predict(futuro)

# Visualizar
modelo.plot(previsao)
modelo.plot_components(previsao)

2. XGBoost / LightGBM

Algoritmos de gradient boosting são poderosos quando você tem muitas features. Requerem mais preparação mas oferecem alta acurácia.

from sklearn.model_selection import train_test_split
import lightgbm as lgb

# Features
features = ['dia_semana', 'mes', 'semana_ano',
            'preco', 'promocao', 'feriado',
            'lag_7', 'lag_30', 'media_movel_7']

X = dados[features]
y = dados['quantidade']

# Dividir treino/teste
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, shuffle=False
)

# Treinar modelo
modelo = lgb.LGBMRegressor(
    n_estimators=500,
    learning_rate=0.05,
    max_depth=6
)
modelo.fit(X_train, y_train)

# Avaliar
from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error

y_pred = modelo.predict(X_test)
print(f"MAE: {mean_absolute_error(y_test, y_pred):.2f}")
print(f"MAPE: {mean_absolute_percentage_error(y_test, y_pred)*100:.1f}%")

3. ARIMA / SARIMA

Modelos estatísticos clássicos, bons para séries simples e como baseline de comparação.

from statsmodels.tsa.statespace.sarimax import SARIMAX

# Modelo SARIMA com sazonalidade semanal
modelo = SARIMAX(
    dados['quantidade'],
    order=(1, 1, 1),           # (p, d, q)
    seasonal_order=(1, 1, 1, 7) # (P, D, Q, s)
)
resultado = modelo.fit()

# Previsão
previsao = resultado.forecast(steps=30)

Métricas de avaliação

Como saber se seu modelo é bom? Use múltiplas métricas:

Cuidado

Nunca avalie o modelo com os mesmos dados usados para treinar. Use sempre dados que o modelo nunca viu (teste ou validação cruzada temporal).

Benchmark: batendo a média móvel

Um modelo de ML só vale a pena se superar métodos simples. Compare sempre com:

# Baseline: média móvel de 4 semanas
dados['baseline'] = dados['quantidade'].rolling(28).mean().shift(1)

# Seu modelo precisa ter MAPE menor que isso
baseline_mape = mean_absolute_percentage_error(
    dados['quantidade'].iloc[28:],
    dados['baseline'].iloc[28:]
) * 100
print(f"MAPE Baseline: {baseline_mape:.1f}%")

Implementação na prática

Arquitetura recomendada

  1. Extração de dados: Conecte ao ERP/banco de dados com Python ou N8N
  2. Preparação: Script de limpeza e feature engineering
  3. Treinamento: Retreine modelos semanalmente ou mensalmente
  4. Previsão: Gere previsões e salve em banco de dados
  5. Visualização: Dashboard no Power BI ou Metabase

Fluxo automatizado com N8N

// Workflow N8N para previsão semanal
1. Trigger: Cron (toda segunda às 6h)
2. Query MySQL: Extrai vendas da semana anterior
3. HTTP Request: Envia para API Python
4. API Python: Executa modelo e retorna previsões
5. MySQL: Salva previsões na tabela forecast
6. Slack: Notifica equipe com resumo

API de previsão simples

# api.py - FastAPI para servir previsões
from fastapi import FastAPI
from pydantic import BaseModel
import joblib

app = FastAPI()
modelo = joblib.load('modelo_demanda.pkl')

class PedidoPrevisao(BaseModel):
    produto_id: str
    dias: int = 30

@app.post("/prever")
def prever(pedido: PedidoPrevisao):
    # Carregar dados do produto
    dados = carregar_dados(pedido.produto_id)

    # Gerar previsão
    previsao = modelo.predict(dados, steps=pedido.dias)

    return {
        "produto_id": pedido.produto_id,
        "previsao": previsao.tolist(),
        "intervalo_confianca": calcular_intervalo(previsao)
    }

Casos de uso por segmento

Indústria Têxtil

A indústria têxtil de Blumenau tem desafios específicos:

Solução: Modelos por família de produto + ajuste manual de lançamentos. Use histórico de produtos similares para prever novos itens.

Distribuição e Atacado

Solução: Modelos XGBoost com features de promoção e eventos. Integração com sistema de compras para sugestões automáticas.

Varejo e E-commerce

Solução: Modelos por canal + agregação. Incorporar dados de preço de concorrentes quando disponíveis.

Erros comuns a evitar

Próximos passos

Para começar sua jornada com ML para previsão de demanda:

  1. Organize seus dados: Exporte histórico de vendas do ERP em formato limpo
  2. Escolha um produto piloto: Comece com um SKU de alto volume e histórico estável
  3. Implemente Prophet: Use o código deste artigo como ponto de partida
  4. Compare com baseline: Seu modelo precisa superar a média móvel
  5. Automatize: Crie pipeline de retreinamento e atualização

A Blumenau TI oferece consultoria especializada em implementação de modelos preditivos. Podemos ajudar desde a estruturação dos dados até a integração com seus sistemas. Entre em contato para um diagnóstico inicial gratuito.

Lucas Junges

Lucas Junges

Fundador & CTO, Blumenau TI

Especialista em automação e análise de dados. Ajuda empresas da região a implementar soluções de IA que geram resultados mensuráveis.

Pronto para prever o futuro do seu negócio?

Agende uma conversa gratuita e descubra como Machine Learning pode otimizar suas operações.

Agendar diagnóstico gratuito