Software de Kardex e Estoque

Kardex Tauro

O software de gestão de estoque Kardex Tauro® foi projetado para gerenciar seu armazém ou depósito de forma eficiente e pode ser aprendido em um curto período de tempo.

O Kardex Tauro é gratuito para uso não comercial.
Não requer conexão com a internet e funciona no Windows.

Código Python: previsão de demanda com uma rede simples (comparada com a média móvel)

Código Python: previsão de demanda com uma rede simples (comparada com a média móvel)

Quem cuida de um depósito convive com a mesma pergunta no fim de todo mês: quanto vou vender no mês que vem? Comprar demais deixa o dinheiro parado na prateleira e o galpão cheio de mercadoria que ninguém pede; comprar de menos faz faltar produto justo no dia em que o cliente aparece. O programa que acompanha este artigo responde a essa pergunta com números, não com palpite: lê vinte e quatro meses de vendas de um arquivo de texto, calcula duas previsões — a média móvel de três meses, o método clássico que todo mundo conhece, e uma rede neural pequenina — e compara as duas para dizer, com dados, qual delas errou menos. Foi escrito para donos de negócio, contadores e almoxarifes que querem entender o que existe por trás de um número de previsão sem virar programador.

⬇ Baixar o código (ZIP)
Arquivo do ZIPPara que serve
pronostico_demanda.pyO programa completo, comentado em português linha por linha. É o único arquivo que se executa.
datos/ventas_mensuales.csvVinte e quatro meses de vendas de exemplo, com o mês e as unidades vendidas. O Excel abre e você pode trocar pelos seus próprios números.
salida_ejemplo.txtA saída real do programa, exatamente como aparece na tela, para comparar com a sua.
LEIAME.mdAs instruções do pacote: como executar, o que significa cada coluna e as dúvidas mais comuns.

O que o programa faz

O programa não adivinha e não tem opinião sobre o seu negócio: ele aprende com o passado da própria série e depois se mede contra um método simples, para que você julgue se o esforço vale a pena. Passo a passo, é isto o que acontece:

  1. Lê o arquivo datos/ventas_mensuales.csv e guarda a lista de meses com a quantidade de unidades vendidas em cada um: vinte e quatro linhas no total.
  2. Leva a série inteira para uma escala entre zero e um. Parece técnico, mas é puro bom senso: a rede trabalha confortável com números pequenos e, se receber as unidades cruas, as contas explodem.
  3. Monta as amostras de treino: cada mês vira um exemplo em que as entradas são os três meses anteriores e a resposta certa é o mês atual. Assim o programa não decora: ele aprende a relação entre o que aconteceu e o que veio depois.
  4. Cria uma rede de três entradas, quatro neurônios na camada oculta e uma saída. Os pesos iniciais são números sorteados, mas com semente fixa: é isso que faz o programa dar sempre o mesmo resultado, hoje e daqui a um ano.
  5. Treina a rede duas mil vezes sobre as mesmas amostras, corrigindo os pesos um pouquinho a cada passada, sempre na direção que reduz o erro.
  6. Calcula em paralelo a previsão da média móvel de três meses: a média simples dos três meses anteriores. É o método que todo mundo monta no Excel e serve de régua para medir.
  7. Compara os dois métodos exatamente sobre os mesmos meses: vinte e um meses têm histórico suficiente para serem avaliados; os três primeiros não, porque faltam meses anteriores.
  8. Imprime quanto cada um errou, diz qual venceu e deixa a tabela completa em um arquivo que abre no Excel.

Como executar

Você precisa de uma única coisa instalada: o Python 3.11 ou superior, que se baixa de graça no site oficial do Python e se instala com avançar, avançar, avançar. Depois disso, os passos são estes:

  1. Descompacte o ZIP em qualquer pasta; a área de trabalho serve, não importa onde ele fique.
  2. Abra o terminal: no Windows, menu Iniciar, digite cmd e entre; no Mac, o aplicativo Terminal.
  3. Digite cd seguido do caminho da pasta onde você descompactou o pacote e pressione Enter.
  4. Digite python pronostico_demanda.py e pressione Enter.

Não há mais nada para instalar: o programa usa apenas o que vem de fábrica no Python, então não há bibliotecas para baixar nem dependências que quebrem. Se o sistema avisar que python não existe, tente py no Windows ou python3 no Mac e no Linux. Quando terminar, além do resumo na tela, você vai encontrar um arquivo novo dentro da pasta salida.

O código, explicado

O programa cabe em uma tela e está comentado da primeira à última linha. Estas são as partes que vale a pena entender, sem entrar em matemática pesada.

# ==========================================================================
#  PREVISÃO DE DEMANDA COM UMA REDE SIMPLES
#  Código Python didático para estoque · Kardex Tauro · kardex-tauro.muisca.co
#  O que faz: lê 24 meses de vendas de datos/ventas_mensuales.csv, treina à mão
#  uma rede de 3 entradas, 4 neurônios ocultos e 1 saída, e compara com a média
#  móvel de 3 meses; deixa a tabela e a previsão em salida/pronostico.csv
# ==========================================================================

import csv                                      # csv: ler e escrever arquivos separados por vírgulas (o Excel abre direto)
import math                                     # math: a função exponencial que a curva sigmoide precisa
import random                                   # random: sorteio com semente fixa, para o resultado se repetir sempre

Esse cabeçalho diz em palavras para que serve o arquivo e de onde vêm os dados, e traz as bibliotecas: tudo o que é importado vem com o Python, então não há nada exótico para instalar. Esse hábito de explicar o arquivo logo na primeira linha é o que você mesmo vai agradecer daqui a um ano.

Depois vêm juntos os números que governam o experimento, cada um com a sua explicação ao lado. Ficam no alto, e não escondidos no meio do código, porque são justamente os que você vai querer mexer: mude a semente e verá outro resultado; reduza as épocas e verá a previsão perder precisão.

# Os números que governam a rede: semente, taxa, épocas, informe e forma
SEMILLA = 7          # Semente fixa: com o mesmo dado o resultado é sempre o mesmo
TASA = 0.1           # Taxa de aprendizagem: quanto cada peso se corrige em cada amostra
EPOCAS = 2000        # Épocas: quantas voltas completas se dão às 21 amostras
INFORME = 250        # A cada quantas épocas se imprime o erro médio da rede
REZAGO = 3           # Entradas da rede: os 3 meses anteriores
OCULTAS = 4          # Neurônios ocultos: nem tão poucos que não aprenda, nem tantos que decore
VENTANA = 3          # Meses que a média móvel considera, para comparar método com método

Em seguida vêm duas funções de três linhas que sustentam todo o resto. A primeira leva a série para uma escala confortável — o intervalo de zero a um — e a segunda é a curva do neurônio, essa que comprime qualquer número para esse mesmo intervalo. Sem essas duas funções, as contas vão para o infinito e o programa não aprende nada.

def escalar(valores: list[float]) -> tuple:
    """Leva a série ao intervalo 0..1 (min-max): assim a rede trabalha com números pequenos."""
    minimo, maximo = min(valores), max(valores)
    rango = maximo - minimo
    # Se toda a série tivesse o mesmo valor o intervalo seria zero: o 0 evita dividir por zero
    return [(valor - minimo) / rango for valor in valores], minimo, maximo


def sigmoide(suma: float) -> float:
    """Sigmoide: comprime qualquer número no intervalo 0..1 (a curva do neurônio)."""
    return 1.0 / (1.0 + math.exp(-suma))

Aí está o coração da coisa: cada vez que a rede vê um mês de exemplo, compara a sua resposta com o dado real, mede a diferença e move cada peso um pouquinho contra o erro. É só isso. Repetido duas mil vezes, esse movimento é o que chamamos de aprender.

            # Descida do gradiente: cada peso se move um pouco contra o erro
            for j in range(OCULTAS):
                red["w_salida"][j] += TASA * delta_salida * ocultas[j]
            red["b_salida"] += TASA * delta_salida

E por fim a régua com que tudo é medido: a média móvel de três meses, que é a conta que qualquer um faria à mão, e o cálculo do erro absoluto médio de cada método exatamente sobre os mesmos meses. Esse detalhe é a chave de uma comparação honesta: se cada método fosse medido em meses diferentes, a comparação não valeria nada.

def promedio_movil(unidades: list[float], indice: int) -> float:
    """Previsão da média móvel: a média dos meses anteriores a esse mês."""
    return sum(unidades[indice - VENTANA:indice]) / VENTANA
    evaluados = [fila for fila in filas if fila["promedio"] is not None]
    error_pm = sum(abs(fila["unidades"] - fila["promedio"]) for fila in evaluados) / len(evaluados)
    error_rd = sum(abs(fila["unidades"] - fila["red"]) for fila in evaluados) / len(evaluados)

O que você vai ver na tela

A primeira coisa que o programa imprime é o que ele leu e com que forma a rede vai trabalhar:

Meses lidos: 24
Rede neural: 3 -> 4 -> 1 (sigmoide)
Janela da média móvel: 3 meses
Intervalo da série: 150,00 a 310,00 unidades

Depois ele mostra o andamento do treino a cada duzentas e cinquenta voltas. Esse detalhe é mais útil do que parece: o erro cai rápido no começo e depois empaca, e ver isso com os próprios olhos explica por que se escolhem duas mil épocas e não vinte mil.

TREINAMENTO: 2000 épocas, taxa 0,10, semente 7
  Época 500/2000 · erro médio (escala 0-1) 0,093869
  Época 1000/2000 · erro médio (escala 0-1) 0,086684
  Época 2000/2000 · erro médio (escala 0-1) 0,078619

E fecha com o veredicto, que é o que você veio buscar:

RESUMO: QUEM ERRA MENOS
  Meses avaliados (os que têm 3 meses de histórico): 21
  Erro absoluto médio da média móvel de 3 meses: 17,32 unidades
  Erro absoluto médio da rede neural 3-4-1: 12,58 unidades
  Previsão de 2028-01 - média móvel de 3 meses: 300,33 unidades
  Previsão de 2028-01 - rede neural 3-4-1: 289,71 unidades

O programa também salva a tabela completa em salida/pronostico.csv, com uma linha por mês e quatro colunas: o mês, as unidades reais, a previsão da média móvel e a da rede. O Excel abre esse arquivo e dá para montar um gráfico e ver com os próprios olhos onde as duas linhas se separam.

O resultado, contado sem exagero

Com os dados de exemplo o veredicto é claro, mas modesto: nos vinte e um meses avaliados, a média móvel errou em média 17,32 unidades por mês e a rede, 12,58. A rede venceu, sim, mas por pouco: menos de cinco unidades por mês numa série que anda entre 150 e 310 unidades. Para o mês seguinte os dois métodos também ficam próximos: a média móvel aponta para 300,33 unidades e a rede para 289,71. É isso que existe, nem mais nem menos: com vinte e quatro meses de histórico, a rede venceu a média por pouco, e esse resultado basta para continuar testando com os seus próprios dados, não para acreditar que ela adivinha o futuro.

Vale ter claro o que é essa rede antes de entregar a ela uma decisão de compra. Não é um programa que entende de vendas nem um oráculo: é uma regra que se ajusta sozinha. Imagine uma regra escrita com uma vintena de números; toda vez que a regra erra, esses números se deslocam um pouco para onde o erro diminui, até pararem na posição em que erram o mínimo possível. Nada além disso. Por isso o programa se compara com a média móvel: porque uma regra que se ajusta sozinha só vale a pena se vence a regra fixa que você já usava.

Erros comuns e conselhos

  • Mudar os dados e nunca mais olhar o erro. O programa imprime sempre o erro dos dois métodos. Se ao carregar as suas vendas a rede ficar pior que a média, não há nada quebrado: os seus dados simplesmente não se entregam a uma rede tão pequena. Fique com a média e siga trabalhando.
  • Tratar a previsão como promessa. Uma previsão é uma estimativa com erro, e o programa diz esse erro com todas as letras. Use o número para planejar compras e conversar com fornecedores, não para assinar compromisso de entrega.
  • Histórico curto demais. Com doze meses a rede quase não tem de onde aprender e a média móvel também não se mede bem. Este programa foi pensado para dois anos ou mais.
  • Esconder a sazonalidade. Se o seu negócio vende o triplo em dezembro, três meses de histórico não bastam para a rede ver o pico chegando. Carregue dois ou três anos completos e refaça a comparação.
  • Mexer na semente para melhorar o resultado. Se você troca a semente até a rede vencer, não está mais medindo: está fazendo trapaça. Deixe a semente fixa e aceite o veredicto, vença quem vencer.
  • Não conferir o arquivo de dados antes de rodar. Os cabeçalhos do CSV e o separador decimal precisam ser consistentes; se o Excel gravou os meses em outra ordem ou em outro formato, o programa vai ler outra coisa.

Quando isso não basta

Este programa é um bom ponto de partida e uma ótima maneira de entender uma previsão sem depender de ninguém, mas fica curto quando o negócio cresce. Aqui existe uma série só, um produto e uma pasta de arquivos: não há usuários, nem depósitos, nem histórico de quem mexeu em quê.

Quando o estoque já não cabe numa planilha — centenas de itens, vários depósitos e movimentações todos os dias — e quando você quer a previsão, o ponto de pedido e o movimento do dia no mesmo lugar, é aí que o Kardex Tauro faz o que um script não faz. A ideia de fundo não muda: a rede continua sendo a mesma regra que se ajusta sozinha, só que agora roda sobre dados organizados e com cópia de segurança. Comece pelo programa gratuito para entender o método e organizar a ficha de estoque; o software completo é para quando o Excel e os scripts já não bastam.

⬇ Baixar o código (ZIP)

Baixe o ZIP, troque o arquivo de dados pelas suas próprias vendas dos últimos dois anos e olhe o resumo. Se a rede vencer a média por pouco, boa notícia: você já tem um método de previsão medido com os seus números, e sabe de quanto ele costuma errar.

Compartilhar
Link copiado
Microsoft Store da Microsoft StoreBaixar grátis
Chatea por WhatsApp