victorn

Rangsorolási algoritmusok a közösségi médiában: így működnek az intelligens hír- és kommentfolyamok

Merüljünk el a tartalmak rendezésének matematikai alapjaiban a Wilson-képlet és a Reddit-féle hotness példáján keresztül.

A modern közösségi híraggregátorokban és a felhasználói tartalmakra (UGC) épülő platformokon kritikus fontosságú a tartalmak megfelelő sorrendbe rendezése. Az egyszerű időrendi vagy szavazatszám szerinti rendezés nem működik: az új, jó minőségű anyagok elsüllyednek az áradatban, a régi, megosztó bejegyzések pedig továbbra is a lista élén maradnak.

A közösségi médiaprojektek többsége általában két fejlett rangsorolási algoritmust használ:

  1. Wilson-konfidenciaintervallum (Wilson Score Interval) – a kommentek intelligens rangsorolásához
  2. „Forróság” algoritmus (Hotness) – a történetek dinamikus rendezéséhez

Nézzük meg mindkettőt részletesen.

***

1. rész: Wilson-konfidenciaintervallum a kommentekhez

             p + z²/(2n) - z√[p(1-p)/n + z²/(4n²)]
confidence = ─────────────────────────────────────
                    1 + z²/n

A számtani átlag problémája

Képzeljünk el két kommentet:

  • A komment: 10 pozitív és 0 negatív szavazat (100% pozitív)
  • B komment: 950 pozitív és 50 negatív szavazat (95% pozitív)

Ha az átlagos értékelés alapján rendeznénk, az A komment kerülne előrébb, noha a B komment 95-ször több pozitív szavazatot kapott, és az értékelése statisztikailag sokkal megbízhatóbb.

A megoldás a Wilson-intervallum.

Hogyan működik?

A Wilson-képlet a binomiális eloszlás konfidenciaintervallumának alsó határát számítja ki. Egyszerűbben fogalmazva arra a kérdésre válaszol, hogy „mekkora az a legkisebb értékelés, amelyet adott bizonyossággal garantálni tudunk?”

function wilson_score(int $score, int $flags): float
{
    $ups = $score + $flags;
    $downs = $flags;
    $n = $ups + $downs;
    
    if ($n === 0) {
        return 0.0;
    }
    
    // Z-érték a 80%-os konfidenciaintervallumhoz
    $z = 1.281551565545;
    $p = $ups / $n; // A pozitív szavazatok aránya
    
    // Wilson-képlet
    $zSquared = $z * $z;
    $left = $p + (1 / (2 * $n) * $zSquared);
    $right = $z * sqrt(($p * ((1 - $p) / $n)) + ($zSquared / (4 * $n * $n)));
    $under = 1.0 + ((1.0 / $n) * $zSquared);
    
    $confidence = ($left - $right) / $under;
    
    return max(0.0, min(1.0, $confidence));
}

A legfontosabb paraméterek

  • $z = 1.281551565545 – a 80%-os konfidenciaintervallumhoz tartozó Z-érték (a Reddit 1,28-at használ)
  • $p – a pozitív szavazatok aránya (pozitív szavazatok / összes szavazat)
  • $n – az összes szavazat száma

Miért jobb ez?

Példaszámítás:

Komment Pozitív szavazatok Jelentések Pozitív arány Wilson-pontszám
A 10 0 100% 0,722
B 950 50 95% 0,938
C 3 0 100% 0,463

A 100%-os értékelés ellenére az A és C komment kisebb Wilson-pontszámot kap a kevés szavazat miatt. A 95%-os, de sokkal több szavazattal rendelkező B komment kerül előrébb – ez igazságosabb.

A megközelítés előnyei

Védelem a manipuláció ellen: az új, mindössze 1–2 szavazatos kommentek nem kerülnek rögtön az élre
Statisztikai megbízhatóság: figyelembe veszi a minta nagyságát
Automatikus spamszűrés: a jelentések erősen csökkentik a pontszámot
Egyensúly az új és a minőségi között: a jó kommentek a szavazatok gyűjtésével fokozatosan emelkednek fel

***

2. rész: Hotness algoritmus a történetekhez

hotness = -((sign × log₁₀(max(|score|, 1)) + seconds / 45000) + Σ hotness_mod_tags)

Az időrendi rendezés problémája

Az egyszerű időrendi sorrend – vagyis amikor az új bejegyzések vannak felül – figyelmen kívül hagyja a tartalom minőségét. Az összesített pontszám szerinti rendezés ezzel szemben a régi bejegyzéseknek kedvez, amelyeknek egyszerűen több idejük volt szavazatokat gyűjteni.

A megoldás egy összetett „forrósági” mutató.

Hogyan működik?

Az algoritmus a pontszám logaritmusát ötvözi az időbeli lecsengéssel:

function calculate_hotness(int $score, string $createdAt): float
{
    // A pontszám logaritmikus skálája
    $order = log10(max(abs($score), 1));
    
    // Előjel (pozitív/negatív pontszám)
    $sign = $score > 0 ? 1 : ($score < 0 ? -1 : 0);
    
    // Időszámítási alap (2005. december 8. – a Reddit indulása)
    $epoch = strtotime('2005-12-08');
    $seconds = strtotime($createdAt) - $epoch;
    
    // Végső képlet: (a pontszám logaritmusa) + (idő / lecsengési állandó)
    return round(($sign * $order) + ($seconds / 45000), 7);
}

A képlet részei

1. Logaritmikus skála (log10)

score = 10    → order = 1
score = 100   → order = 2
score = 1000  → order = 3
score = 10000 → order = 4

A logaritmus megakadályozza, hogy a rendkívül népszerű tartalmak mindent uraljanak. A 10 és 100 szavazat közötti különbség fontosabb, mint az 1000 és 1010 közötti.

2. Időkomponens (seconds / 45000)

  • 45 000 másodperc ≈ 12,5 óra – a „forróság” felezési ideje
  • Minden bejegyzés időbeli bónuszt kap, amely az idő múlásával csökken
  • Az új anyagok automatikusan előnyt élveznek

3. Az időszámítási alap (2005. december 8.)

Ez a Reddit indulásának dátuma. Alappontként használják az eredeti képlettel való kompatibilitás érdekében.

Működési példa

Tegyük fel, hogy most 2026. június 22. van:

Történet Pontszám Közzététel Hotness-pontszám
A 100 2 órája 4,8921234
B 500 1 napja 4,6987654
C 1000 3 napja 4,3010299

Annak ellenére, hogy a C történet tízszer több szavazatot kapott, mint az A, az életkora miatt hátrébb kerül. Az A történet „forróbb”: új, és máris jó értékelést gyűjtött.

Miért éppen 45 000 másodperc?

Ez egy empirikus állandó, amelyet a Reddit tapasztalati úton választott ki. A következőket jelenti:

  • 12,5 óra elteltével egy történet körülbelül egy nagyságrendet veszít a logaritmikus skálán
  • 24 óra elteltével még egy nagyon népszerű történet (score=1000) is egy új, 10 pontos történet mögé kerül
  • Ez egy gyorsan frissülő hírfolyamot hoz létre, amelyben mindig jut hely az új tartalmaknak

A megközelítés előnyei

Egyensúly a régi és az új között: a népszerű anyagok nem uralják örökké a listát
Védelem az „örök toplista” ellen: a régi történetek fokozatosan lejjebb csúsznak
Aktivitás ösztönzése: az új bejegyzések is lehetőséget kapnak
Logaritmikus igazságosság: a 10→100 közötti növekedés fontosabb, mint az 1000→1010

***

3. rész: Összehasonlítás más platformokkal

Reddit

  • Hotness: hasonló képletet használ 45 000-es állandóval
  • Kommentek: Wilson-pontszám Z=1,28 értékkel (80%-os bizonyosság)
  • W3A: teljesen kompatibilis a Reddit megközelítésével

Hacker News

  • A következő képletet használja: (p - 1) / (t + 2)^gravity
  • Ahol p a pontszám, t az idő órákban, gravity pedig ≈ 1,8
  • Erőteljesebb időbeli lecsengést alkalmaz

Lobsters

  • A szavazatok, a kommentek és az idő kombinációját használja
  • Képlete: votes + comments * 0.5, időbeli szorzóval
  • Enyhébb rangsorolást alkalmaz
***

4. rész: Gyakorlati ajánlások

Mikor érdemes Wilson-pontszámot használni?

✅ Pozitív és negatív szavazatokkal működő értékeléseknél
✅ Kommenteknél és véleményeknél
✅ Moderált felhasználói tartalmaknál
✅ Minden olyan helyzetben, ahol kevés szavazat is előfordulhat

Mikor érdemes Hotness algoritmust használni?

✅ Hírfolyamoknál
✅ Közösségi aggregátoroknál
✅ Gyakori publikálásra épülő platformoknál
✅ Amikor fontos a friss, jó minőségű tartalmak bemutatása

Hangolás a saját projekthez

A Wilson-pontszámnál:

Más konfidenciaszinthez módosítsd a $z értékét:

  • 1.28 – 80% (Reddit, W3A)
  • 1.64 – 90%
  • 1.96 – 95% (konzervatívabb)

A Hotness algoritmusnál:

Módosítsd a 45000 osztót:

  • 25000 – gyorsabb frissülés (6 órás felezési idő)
  • 75000 – lassabb frissülés (24 órás felezési idő)
  • 100000 – nagyon lassú frissülés (36 óra)
***

Összegzés

Mindkét algoritmus a felhasználói tartalmakra épülő platformok egyik alapvető problémáját igyekszik megoldani: hogyan lehet igazságosan rangsorolni az eltérő számú szavazattal és eltérő életkorral rendelkező tartalmakat?

A Wilson-intervallum védelmet nyújt a statisztikai zajjal és a manipulációval szemben, miközben előnyben részesíti a bizonyítottan jó minőségű tartalmakat.

A Hotness algoritmus dinamikus hírfolyamot hoz létre, amelyben mindig jut hely az újdonságoknak, a minőségi tartalmak pedig lehetőséget kapnak arra, hogy közönséget gyűjtsenek.

Együtt egy kiegyensúlyozott rangsorolási rendszert alkotnak, amely:

  • releváns tartalmakat mutat;
  • küzd a spam és a manipuláció ellen;
  • folyamatos aktivitásra ösztönöz;
  • igazságos az új felhasználókkal.

Ezeket a képleteket a Reddit, a Hacker News és más nagy platformok többéves működése tette próbára. A megvalósításuk jó példája annak, hogyan válthatják fel a matematikailag megalapozott módszerek a pusztán megérzésre épülő döntéseket.

0
0online
Beszélgetés indítása
Ezek is érdekelhetnek
bendzso
Bendzsó3 napjaSzerkesztveFrissítve2026. július 26., 05:31Közzétéve2026. július 22., 23:16
Honnan vette Einstein az E=mc² képletet?

Valószínűleg akkor is hallottad már, hogy az energia a tömeg és a fénysebesség négyzetének szorzatával egyenlő, ha sosem érdeklődtél a fizika iránt. Ez a képlet mindenhol felbukkan, még a kávékészítés képletében is.

Honnan vette Einstein az E=mc² képletet?
280
4online
Hozzászólás írása