Como era antes
À mão, na tela de categorização do admin: busca por palavra, marca os checkboxes, escolhe a categoria no modal. A busca é por início de nome, então uma categoria quase nunca sai numa rodada só — os itens de bomboniere vêm de dezenas de palavras diferentes.
E os 528 estavam todos ativos, um quarto deles com estoque. Não é catálogo velho esquecido: é produto à venda que não aparece para quem navega.
O que eu fiz
Um classificador treinado nos 31.503 produtos que já tinham categoria, escrevendo pela API em lote — 72 chamadas em vez de 528 cliques.
Duas decisões valeram os pontos de acerto:
- Média não serve para categoria multimodal. "Casa e decoração" tem vaso, balde e cortina; um ponto médio único borra isso e passa a atrair qualquer coisa. Comparar com os produtos reais mais próximos resolve.
- A primeira palavra do nome é o tipo do produto neste cadastro. Sem peso extra nela, um queijo artesanal foi parar em Cafés — porque o nome trazia o nome de uma região cafeeira. Com o peso, os 31 queijos foram 31 de 31.
O resultado da escrita foi conferido de três formas independentes: a fila de não categorizados foi a zero, o hash do log de escrita bate com o mapeamento planejado, e os itens conferidos aparecem na vitrine pública.
O que mudou
A fila zerou e a revisão humana dos casos duvidosos aplicou 66 correções. O erro não era aleatório — eram dez padrões nomeáveis, e a calibragem de confiança se provou: das correções da primeira leva, só três estavam na faixa em que o modelo declarava saber. O erro se concentra onde o modelo diz que não sabe, que é o que torna a faixa alta utilizável sem revisão.
O que ainda não é resultado, e por isso está escrito aqui: o efeito comercial se mede em outubro, sobre a coorte congelada dos 437 que estavam em zero. E a fila volta a encher — todo produto novo entra sem categoria, e rodar de novo ainda é manual.