Confiabilidade ML - italostatonato/stock-screener-automation GitHub Wiki
Confiabilidade dos modelos ML
Revisado em 15/09/2026 contra src/ml_confidence.py e src/exporter.py.
Três medidas distintas
Maturidade dos dados mede a extensão do histórico: dias entre o primeiro e o último snapshot divididos pelo horizonte, limitada a 100%. O exporter usa sete dias nesse cálculo. Ter 100% de maturidade não comprova capacidade preditiva.
Confiabilidade preditiva é uma pontuação heurística de cobertura e desempenho. O mínimo atual é uma janela válida, e a meta de cobertura é cinco janelas. O valor fica em zero quando não há a janela mínima. Ele não é uma probabilidade calibrada de acerto nem uma autorização para substituir o ranking oficial.
Exibição da projeção de retorno usa outra regra: pelo menos três janelas do mesmo modelo, tipo de ativo e horizonte; retorno finito e magnitude de até 50%. Uma confiabilidade positiva não libera por si só a projeção.
Fórmula implementada
Para cada linha de performance com uma ou mais janelas:
clip(x) = limitar x ao intervalo [0, 1]
cobertura = clip(Janelas_Validas / 5)
hit = clip((Hit_Rate_Top20 - 0,50) / 0,15)
ic = clip(Spearman_IC / 0,30)
alpha = clip(Alpha_vs_Score_Top / 0,03)
Confiabilidade_Pct = 100 × (0,40 × cobertura + 0,25 × hit
+ 0,25 × ic + 0,10 × alpha)
Métricas ausentes contribuem zero. Para o baseline Score Top, o componente
alpha é fixado em 0,50, pois comparar o baseline consigo mesmo não mede ganho
adicional. O resultado é arredondado a duas casas decimais.
Os níveis são Não mensurável sem janela mínima ou com pontuação zero,
Baixa abaixo de 40%, Média de 40% até menos de 70%, e Alta a partir de 70%.
O resumo global usa o maior score entre as linhas elegíveis, incluindo o
baseline; não é a média de todos os modelos.
Horizontes e limites
O treino operacional e o exporter usam 7d. build_ml_confidence_summary()
filtra os candidatos ao resumo global por horizon_days, incluindo o líder
e a contagem de janelas. por_modelo conserva todas as linhas com seu próprio
Horizonte. Métricas de 30d não elevam a confiabilidade global de 7d.
Detalhes em Pipeline ML.
O bloqueio de projeções é definido em src/exporter.py por
ML_MIN_VALID_WINDOWS = 3 e ML_MAX_ABS_EXPECTED_RETURN = 0.50. O valor bruto
é mantido para auditoria; retorno_esperado_exibicao recebe null quando a
regra não é atendida. O JSON informa retorno_esperado_horizonte,
projecao_confiavel, projecao_outlier, janelas_validas_modelo,
min_janelas_validas_projecao e motivo_projecao. O retorno médio previsto
usa modelo_projecao: Ensemble; sua liberação depende das janelas desse
modelo, não das de modelo_lider por ativo.
Saída no JSON
modelos_ml.confiabilidade contém:
status,horizonte_diasemensagem;maturidade_dados_pcteconfiabilidade_preditiva_pct;nivel_confiabilidadeemodelo_mais_confiavel;janelas_validas_max,min_janelas_validasetarget_janelas_validas;primeiro_snapshot,ultimo_snapshot,dias_historicoeqtd_snapshots;por_modelo, com classe, modelo, horizonte, métricas e componentes da fórmula.
O resumo fica Aquecendo quando nenhuma linha atinge o mínimo e Ativo quando
há alguma elegível. Esses estados descrevem disponibilidade de cálculo, não
validação conclusiva da estratégia.