Modelos ML - italostatonato/stock-screener-automation GitHub Wiki
Modelos ML
Revisado em 15/09/2026 contra main.py, src/dataset_builder.py,
src/ml_models.py e src/exporter.py.
Entradas e modo sombra
O ranking oficial continua sendo o Top N de src/scorer.py e src/filters.py.
Os modelos geram rankings experimentais, previsões e métricas sem promover
automaticamente um modelo ao lugar do score.
O treino acompanha a execução semanal ou o acionamento manual. Os históricos acumulam snapshots por data de coleta. Os horizontes em dias abaixo indicam prazos de retorno futuro, não a frequência de coleta ou treinamento.
data/lake/snapshots/YYYY-MM-DD/
→ data/ml/historico_fiis.parquet
→ data/ml/historico_acoes.parquet
→ data/ml/dataset_fiis.parquet
→ data/ml/dataset_acoes.parquet
Os datasets contêm features numéricas e targets para 7, 30, 60 e 90 dias
corridos. Para cada ativo, o target usa a primeira observação disponível em
data igual ou posterior à data de origem mais o horizonte. Um retorno rotulado
7d pode cobrir mais de sete dias quando há lacunas entre coletas.
Sem observação futura, o target permanece nulo. Tickers ausentes/vazios e
preços não positivos ou infinitos são descartados. A feature Aprovado_Filtro
inclui tanto Rank #N quanto os aprovados fora do Top N. Históricos inválidos
interrompem a construção para não reutilizar silenciosamente um dataset antigo. São retornos entre preços dos
snapshots, diferentes da série ajustada do motor de backtest separado.
Horizontes realmente executados
run_ml_pipeline(), main.py e scripts/rebuild_from_lake.py usam 7d.
O exporter declara 7d como principal e 30d como estratégico; targets de 30,
60 e 90 dias permanecem disponíveis para experimentos separados.
Cada previsão recebe Horizonte. A persistência deduplica por data, classe,
ticker e horizonte, permitindo guardar previsões 7d e 30d do mesmo ativo.
src/ml_horizons.py identifica previsões antigas apenas quando as colunas de
retorno permitem determinar um único horizonte; casos ambíguos ficam
indefinido. Scores supervisionados de outro horizonte não entram na
avaliação de 7d. O baseline Score Top independe de horizonte.
O ranking exibido usa previsões da mesma data e horizonte do snapshot. Sem correspondência, usa o baseline atual. Previsões históricas de 30d e JSONs publicados são preservados; a correção não fabrica previsões passadas de 7d. Por isso, o painel pode voltar ao estado de aquecimento.
scripts/refresh_ml_7d_primary_from_docs.py é um alias de compatibilidade
para o rebuild canônico do lake. Não reconstrói o universo a partir do Top N
dos JSONs nem altera snapshots do dashboard. Os scripts apply_ml_* apenas
informam que as migrações já foram incorporadas, sem modificar arquivos.
Na reconstrução, rentabilidade do período e taxas de administração e
performance de FIIs são normalizadas: snapshots antigos usam texto com %,
os novos usam frações numéricas. A conversão ocorre nos derivados e preserva
as partições originais do lake.
Treinamento e modelos
A data mais recente recebe as previsões. O treino usa linhas de datas
anteriores com target preenchido e Data_Futura_* até a data prevista.
Datas de realização ausentes suspendem o treino para evitar uso de informação futura. O mínimo operacional é de 20 linhas
treináveis e uma data anterior, definido por MIN_TRAIN_ROWS e
MIN_TRAIN_DATES. Isso permite iniciar o experimento e não representa
maturidade estatística.
Modelos disponíveis quando suas bibliotecas carregam e o treino conclui:
- Score Top, baseline;
- Ridge Regression;
- Random Forest;
- Extra Trees;
- XGBoost;
- LightGBM;
- CatBoost;
- Ensemble, média dos scores dos modelos supervisionados disponíveis.
Os retornos previstos são convertidos em percentis para ordenação. O retorno
esperado agregado é a média das previsões disponíveis, identificada por
modelo_projecao: Ensemble. As janelas do Ensemble liberam essa projeção.
modelo_lider indica
o modelo com maior score para aquele ativo; não é uma promoção baseada no
melhor desempenho fora da amostra. Falhas de bibliotecas ou treino ficam nos
logs e podem deixar apenas parte dos modelos ou o baseline disponível.
Saídas e métricas
data/ml/model_predictions_fiis.parquet
data/ml/model_predictions_acoes.parquet
data/ml/model_performance.parquet
A avaliação cruza previsões registradas com targets já observados. Uma janela é uma data de previsão com pelo menos cinco ativos avaliáveis para o modelo. O Top 20 dessa avaliação pode conter menos de 20 ativos se faltarem dados.
As métricas são retorno médio do Top 20, proporção de retornos positivos
(Hit_Rate_Top20), correlação de postos (Spearman_IC), diferença de retorno
contra Score Top (Alpha_vs_Score_Top) e Janelas_Validas.
Janelas sobrepostas não constituem períodos independentes de uma carteira.
performance_historica preserva data de previsão, data do resultado e número
de ativos; essas janelas não devem ser compostas como retorno acumulado.
Status e proteção de projeções
Sem dados suficientes, a interface pode mostrar Sem dados, Baseline ou
Aquecendo. A disponibilidade operacional Ativo não comprova robustez.
A exibição marca modelos supervisionados com menos de três janelas como
Em validação.
A confiabilidade começa em uma janela válida, com meta de cobertura de cinco. A projeção de retorno só é exibida com três janelas do mesmo modelo, classe e horizonte e valor finito dentro de ±50%. O ranking experimental pode permanecer visível enquanto a projeção está oculta. Fórmula e limites estão em Confiabilidade ML.
Evoluções pendentes
Separar treino e previsão e avaliar estabilidade, turnover e desempenho em mais ciclos são próximos passos. Ainda não existe regra implementada de promoção automática do modelo mais confiável ao ranking oficial.