Skip to main content

Como funciona

Cada artigo recebe um score personalizado para cada usuario, baseado em:
  1. Base Score — qualidade intrinseca do artigo (0-100), calculado pela IA
  2. Bonus de preferencias — setores, topicos, keywords e watchlist do usuario
  3. Afinidades aprendidas — feedback (likes/dislikes) que ajusta scores ao longo do tempo
  4. Multiplicadores — urgencia, breaking news, exclusividade, decaimento temporal

Formula

finalScore = (baseScore + sectorBonus + topicBonus + keywordBonus + watchlistBonus + learnedBonus)
             × urgencyMultiplier
             × recencyMultiplier

Bonus por Tipo

TipoMatch no tituloMatch no conteudoMatch secundario
Setor+15 pts+5 pts
Topico+10 pts+3 pts
Keyword+12 pts+5 pts
Watchlist (ticker)+20 pts+20 pts
Cada bonus e multiplicado pelo peso individual (configurado pelo usuario) e pelo multiplicador global da categoria.

Multiplicadores Configuraveis

Configure via PUT /api/users/preferences:
{
  "relevanceSettings": {
    "sectorMultiplier": 1.5,
    "topicMultiplier": 1.5,
    "keywordMultiplier": 2.0,
    "watchlistMultiplier": 3.0,
    "breakingNewsMultiplier": 2.5,
    "exclusiveMultiplier": 2.0,
    "recencyDecayEnabled": true,
    "recencyDecayHours": 24
  }
}

Afinidades Aprendidas

O sistema aprende com o feedback do usuario:
AcaoAjuste de afinidade
Like+2 pontos por keyword/entidade
Dislike-3 pontos por keyword/entidade
Leitura+0.5 pontos
Afinidades de keywords sao aplicadas com peso de 15% e entidades com 25% sobre o score.

Decaimento Temporal

Se recencyDecayEnabled = true:
  • Artigos dentro do periodo configurado: score integral
  • Apos o periodo: perde 10% a cada 24h
  • Score minimo: 30% do original

Match Reasons

Cada artigo no feed inclui matchReasons explicando porque e relevante:
{
  "matchReasons": [
    { "type": "sector", "value": "FIN", "baseWeight": 15, "multiplier": 1.5, "finalWeight": 22.5 },
    { "type": "keyword", "value": "petrobras (titulo)", "baseWeight": 12, "multiplier": 2.0, "finalWeight": 24.0 },
    { "type": "watchlist", "value": "PETR4", "baseWeight": 20, "multiplier": 3.0, "finalWeight": 60.0 }
  ],
  "multiplierBreakdown": {
    "baseScore": 72,
    "sectorBonus": 22.5,
    "topicBonus": 0,
    "keywordBonus": 24.0,
    "watchlistBonus": 60.0,
    "learnedBonus": 3.2,
    "urgencyMultiplier": 1.0,
    "recencyMultiplier": 1.0,
    "finalScore": 181.7
  }
}

Deduplicacao

Artigos com 90%+ de similaridade (Jaccard) em keywords/entidades sao filtrados para nao enviar noticias repetidas ao mesmo usuario dentro de 48 horas.