Trader transforma RAG e RandomForest em sinais BUY/SELL: 62% de acerto em 59 registros
Um desenvolvedor transformou um RAG de notícias em LLMs locais em um pipeline que emite sinais BUY/SELL/NEUTRAL para ações da Bolsa de Moscou. As notícias são vinculadas a tickers e convertidas em features diárias, enquanto um RandomForest calibrado entrega uma probabilidade e a lista de notícias que sustentam o sinal. Em 59 registros, a precisão média foi de 62%, mas o teste tem apenas 45 exemplos. O próprio autor chama a avaliação de preliminar.
Processado por IA de Habr AI; editado por Hamidun News
Muita gente sabe acoplar um LLM a um feed de notícias e obter um «analista inteligente». Bem mais raro é alguém mostrar com honestidade o que acontece depois: quando não se trata de resumir notícias, mas de prever o preço. O autor de um projeto no Habr deu continuidade ao seu experimento com RAG e o levou até sinais de trading com explicações. Veja o que vale a pena aproveitar dessa história.
Um pipeline no lugar de três tarefas concorrentes
A primeira versão do sistema executava em paralelo três tarefas em segundo plano: classificação, extração de entidades e enriquecimento. Cada uma carregava seu próprio modelo na memória da GPU, e o Ollama descarregava e carregava pesos o tempo todo. Quando a base cresceu de 12 para 37 mil artigos, isso ficou caro demais.
A solução é simples: um único pipeline. O artigo passa por classificação, filtro de lixo, avaliação do impacto no mercado, NER, sumarização e embedding. Se o filtro decide que a notícia é sobre esporte ou cultura, ela é marcada como skipped, e nem mais um segundo de GPU é gasto com ela. A lição é universal: primeiro uma triagem barata, depois o modelo caro.
As configurações do Ollama também foram ajustadas à mão. O autor permitiu manter dois modelos na memória (Qwen 14B e BGE-M3), definiu paralelismo 6 e prendeu tudo a uma única Tesla P100. Com o valor 8, a memória chegava ao teto e as requisições caíam por timeout. A segunda placa não é usada de propósito: quando as camadas se espalham entre GPUs, a velocidade cai de 3 a 5 vezes por causa da transferência de dados via PCIe.
Da notícia ao sinal
Exemplo: o NER encontra «Sber» no texto. Um dicionário de sinônimos, alimentado pela API da Bolsa de Moscou, o converte no ticker SBER. Para cada dia e ticker são calculadas features: a soma das direções das notícias (+1 para positiva, −1 para negativa), o número de notícias, a volatilidade de 5 e 20 dias e o volume médio negociado. Em seguida, um RandomForest com calibração Platt scaling entrega BUY, SELL ou NEUTRAL e uma probabilidade, e a API retorna ainda a lista de notícias que influenciaram a decisão. No Streamlit, isso vira um terminal com candles e evidências expansíveis.
Um detalhe curioso: para o Alfa-Bank, que não é negociado em bolsa, foi criado um ticker fictício, ALFAMOCK. As notícias se acumulam antecipadamente e, depois do IPO, o ticker será simplesmente substituído.
Onde tudo quebra
O mais valioso do artigo é a análise das falhas. A tentativa de adicionar decaimento temporal tornou a feature fracionária (0,85 em vez de 1), e a precisão caiu de 52% para 36%. Com 55 registros, isso é apenas ruído, então a ideia foi adiada até haver mais de 200 registros.
Outro caso: o VKCO recebeu BUY com 64% de confiança em meio a notícias neutras. O modelo simplesmente aprendeu que o mercado sobe em 55% dos casos. O autor rejeitou um filtro rígido do tipo «sem pressão, logo NEUTRAL» por considerá-lo um disfarce do sintoma e planejou features de dominância, também só após acumular dados. A dívida técnica está registrada e documentada.
A validação usa o método walk-forward: a janela de treino desliza no tempo para não acertar por acaso um período «sortudo». O esquema-alvo é de 30 dias de treino e 7 de teste, mas por enquanto funciona uma versão reduzida 14/3/3. O resultado é uma precisão média de 62% (mediana de 67%) em 45 exemplos de teste.
O que fazer com isso
Não encare os 62% como uma estratégia de trading: a amostra é minúscula, comissões e slippage não foram consideradas, e o modelo pode facilmente aprender ruído. O valor do projeto está em outro lugar. É um bom modelo de arquitetura: um filtro inicial para economizar GPU, saída explicável com fontes, probabilidades calibradas e registro honesto das decisões em ADRs. Se você está montando um pipeline semelhante com modelos locais, vale adotar a abordagem de ajuste do Ollama e o hábito de medir o efeito de cada feature antes de mantê-la. O código da parte pública está aberto no GitHub.
- 8 de nov. de 2026Ajuste fino reduziu o viés político do Qwen de 84,6% para 15%
- 8 de nov. de 2026Mago Studio reúne cinco etapas da produção de vídeo com IA em um computador local
- 8 de nov. de 2026Uber revela: agentes de IA pediram apenas 4 corridas em um trimestre de 320 milhões de operações
- 8 de nov. de 2026OpenPetCam: câmera de US$ 12 com firmware de código aberto é ensinada a vigiar um cachorro
Perguntas frequentes sobre a notícia
O que se sabe sobre Um pipeline no lugar de três tarefas concorrentes?
A primeira versão do sistema executava em paralelo três tarefas em segundo plano: classificação, extração de entidades e enriquecimento. Cada uma carregava seu próprio modelo na memória da GPU, e o Ollama descarregava e carregava pesos o tempo todo. Quando a base cresceu de 12 para 37 mil artigos, isso ficou caro demais. A solução é simples: um único pipeline. O artigo passa por classificação, filtro de lixo, avaliação do impacto no mercado, NER, sumarização e embedding.
O que se sabe sobre Da notícia ao sinal?
Exemplo: o NER encontra «Sber» no texto. Um dicionário de sinônimos, alimentado pela API da Bolsa de Moscou, o converte no ticker SBER. Para cada dia e ticker são calculadas features: a soma das direções das notícias (+1 para positiva, −1 para negativa), o número de notícias, a volatilidade de 5 e 20 dias e o volume médio negociado. Em seguida, um RandomForest com calibração Platt scaling entrega BUY, SELL ou NEUTRAL e uma probabilidade, e a API retorna ainda a lista de notícias que influenciaram a decisão.
Onde tudo quebra?
O mais valioso do artigo é a análise das falhas. A tentativa de adicionar decaimento temporal tornou a feature fracionária (0,85 em vez de 1), e a precisão caiu de 52% para 36%. Com 55 registros, isso é apenas ruído, então a ideia foi adiada até haver mais de 200 registros. Outro caso: o VKCO recebeu BUY com 64% de confiança em meio a notícias neutras. O modelo simplesmente aprendeu que o mercado sobe em 55% dos casos.
Test Frontier LLMs & Autonomous Agents in One Workspace
Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.
O essencial da IA — uma vez por semana
Sete histórias que realmente importaram, escolhidas a dedo. Sem ruído nem releases.
Pronto! Verifique seu e-mail para a confirmação.