Feasty
Wersja rankingu: v2.0 · aktywna od 17 maja 2026 r.

Parametry rankingu

Restauratorzy korzystający z Feasty mają prawo wiedzieć, jak ich lokale są pozycjonowane na mapie, w wyszukiwarce i w trybie matchmakera. Ten dokument opisuje wszystkie parametry rankingu oraz ich relatywną wagę zgodnie z art. 5 Rozporządzenia UE 2019/1150 (P2B).

1. Główne parametry rankingu

Każda restauracja w bazie Feasty ma agregowany zbiór sygnałów. Algorytm łączy je multiplikatywnie z domyślnym sortowaniem po jakości (dominantTier) i odległości (geohash query). Wszystkie pola są dostępne publicznie (z wyjątkiem oznaczonych jako server-only).

ParametrCharakterŹródło danych
restaurantStats.dominantTier Główny sygnał jakości Weighted-mean tier z recencją (Scoring v2 — patrz §2 niżej)
restaurantStats.scoreNumericAvg Liczba 0–10 (panel B2B) Regenerowane przez callable requestRestaurantScoreRefresh (co 7 dni / cron 30 dni)
restaurantStats.ratingsCount Tie-break + Proof of Work cap (§3) Publiczny counter recenzji
Bliskość geograficzna Hard filter (mapa, matchmaker) Geohash query po lat/lng restauracji
restaurantStats.trendingScore Boost recency Counter malejący w czasie (proporcjonalny do świeżych recenzji)
inMembersLists (matchmaker) Boost społeczny Query po listach członków sesji matchmakera
restaurantStats.isPromoted Sponsored — osobny bucket z etykietą "Reklama" Wymaga b2bSettings.tier == 'premium' + active campaign w adPlacements/*

1.1. Feed „Odkrywaj" — kolejność treści użytkowników

Od 24 sierpnia 2026 r. zakładka „Odkrywaj" w aplikacji nie jest już czystą osią czasu: porządkuje recenzje użytkowników automatycznym wzorem. Recenzja dotyczy konkretnej restauracji, więc kolejność wpływa pośrednio na jej widoczność — dlatego parametry ujawniamy tu razem z pozostałymi, mimo że rankingowi podlega treść użytkownika, a nie lokal.

ParametrCharakterWaga
Relacja autora z odbiorcą Główny sygnał ×3,0 osoba obserwowana · ×1,6–2,0 osoba obserwowana przez obserwowanych · ×1,0 pozostali
Oznaczenie osoby, którą obserwuje odbiorca Sygnał z grafu odbiorcy Relacja liczona co najmniej jako ×2,0, gdy autor oznaczył w recenzji osobę obserwowaną przez odbiorcę — nie sumuje się z relacją autora (liczy się wyższa z dwóch)
Polubienia recenzji Sygnał społeczny Mnożnik (1 + liczba polubień)
Wiek wpisu Spadek z czasem Dzielenie przez (wiek w godzinach + 2)^1,4
Zgodność miasta lokalu z miastem odbiorcy Boost lokalny ×1,3

2. Wagi recenzji (Scoring v2)

Każda recenzja kontrybuuje do bucketu swojego tieru z wagą obliczoną multiplikatywnie z poniższych sygnałów. Floor i ceiling są stosowane na poziomie authorWeight (0.3 – 2.0) oraz recencyMul (floor 0.15).

SygnałWartość multiplikatora
Wiek konta autora<7 dni → ×0.6 · 7–30 dni → ×0.85 · ≥30 dni → ×1.0
Obserwujący autora0 → ×0.8 · 1–9 → ×0.9 · ≥10 → ×1.0
Lifetime recenzji autora<5 → ×0.7 · 5–19 → ×0.85 · ≥20 → ×1.0
Low-variance flag (autor prawie zawsze ten sam tier)×0.5
Prestige autoraStandard → ×1.0 · Elite → ×1.5 · Connoisseur → ×2.0
Wiek recenzji (half-life 180 dni)max(0.15, 0.5 ^ (ageDays / 180))
Dlaczego pokazujemy konkretne liczby? Prestige autora (tier) jest wyłącznie server-side computed przez cykliczny cron na podstawie historii — nie da się go "kupić" ani podrobić. Pełna transparentność wartości multiplikatorów jest dla nas ważniejsza niż „security through obscurity" — restaurator powinien rozumieć, dlaczego dokładnie jego lokal ma taki a nie inny tier.

3. Cap Proof of Work (ratingsCount < 10 → tier ograniczony do A)

Niezależnie od średniej, restauracja z mniejszą niż 10 recenzji nie może wyświetlać się jako S lub S+. Tier jest capowany do A dopóki próg nie zostanie przekroczony.

Uzasadnienie: Pojedynczy 5-gwiazdkowy głos (nawet od Connoisseura) nie powinien wynosić lokalu do statusu "elite". Tier musi być zasłużony przez powtarzalną zgodność wielu recenzentów. Ten cap chroni przed manipulacją oraz przypadkowym wybijaniem nowo otwartych lokali bez wystarczającego sample size.

Closed-beta tuning (2026-05-26): próg PoW chwilowo obniżony do 2 recenzji aby mapa pre-MVP (cienka liczba lokali) pokazywała widoczne S+/S restauracje. Wartość wraca do 10 przed publicznym launchem.

4. Sponsored — etykietowanie i pozycjonowanie

Każda restauracja wyświetlana z isPromoted == true ma obowiązkową etykietę "Reklama" widoczną w pierwszym frame'u. Etykieta jest jednolita w całej aplikacji — nie używamy wariantów "Promowane", "Polecane", "Top wybór" ani innych nieczytelnych form.

Podstawa prawna: art. 5 ust. 2 P2B (UE 2019/1150) + art. 26 Aktu o usługach cyfrowych (DSA).

5. Procedura zmian algorytmu (15-dniowy notice)

Każda merytoryczna zmiana parametrów rankingu lub ich wag MUSI zostać ogłoszona z co najmniej 15-dniowym wyprzedzeniem przed wdrożeniem, zgodnie z art. 3 ust. 2 P2B.

Mechanizm techniczny: konfiguracja config/rankingAlgorithm.{version, activeFrom, params} z server-side cronem respektującym activeFrom. Restauratorzy otrzymują:

Changelog wersji

WersjaAktywna odGłówne zmiany
v2.0 15 września 2026 Korekta opisu, ranking bez zmian: usunięty czynnik ×1.2 za „wizytę zweryfikowaną” — nic nie zapisywało metody weryfikacji, więc nigdy nie działał; poprawiona podstawa 15-dniowego wyprzedzenia (art. 3 ust. 2 P2B) i tryb odwołania (panel restauratora).
v2.0 17 maja 2026 Scoring v2 launch — recency × authorWeight × tierToScore (półokres 180 dni), Prestige multipliery (Elite ×1.5 / Connoisseur ×2.0), verified visit ×1.2. PoW cap przeniesiony do applyProofOfWorkCap. Closed-beta MVP exemption: 15-dniowy notice pominięty bo zero live B2B users at launch.
v1.0 marzec 2026 Initial release — modal dominant tier + counter ratingsCount + geohash distance.

6. Anti-manipulation

Algorytm jest chroniony przez wiele warstw mechanizmów chroniących przed manipulacją:

7. Odwołania (DSA Art. 20)

Restauratorzy mają prawo odwołać się od każdej decyzji algorytmu, która ma negatywny wpływ na widoczność lokalu (np. obniżenie tieru, ukrycie, suspension B2B).