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).
| Parametr | Charakter | Ź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. Widok „Dla Ciebie” — kolejność treści użytkowników
Od 24 sierpnia 2026 r. widok „Dla Ciebie” w aplikacji (do 26 października 2026 r. zakładka „Odkrywaj”) 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.
| Parametr | Charakter | Waga |
|---|---|---|
| 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 |
isPromoted ani żadnego innego parametru płatnego —
treści sponsorowane mają osobny bucket z etykietą „Reklama" (§4) i nie mogą wpływać na kolejność organiczną.
Nie ma też profilowania: wzór nie korzysta z historii przeglądania, czasu spędzonego na treści ani z modelu
preferencji odbiorcy. Wynik liczony jest przy otwarciu feedu i nie jest nigdzie zapisywany.
Odbiorca może w każdej chwili przełączyć się na widok „Obserwowani” (wybierany z menu pod znakiem Feasty), który pokazuje wyłącznie osoby obserwowane
w porządku chronologicznym — bez rankingu.
1.2. Mapa — które lokale widać przy danym przybliżeniu
Od 28 września 2026 r. mapa w aplikacji ma budżet pinów: w centrum dużego miasta jeden kadr obejmuje 200–300 lokali, więc nie rysujemy wszystkich naraz. Lokal poza budżetem nie znika z bazy — odsłania go przybliżenie mapy, a wyszukiwarka znajduje go zawsze.
| Parametr | Działanie |
|---|---|
| Stopień przybliżenia | Przy dużym oddaleniu widać lokale z oceną A i wyższą; przy średnim — każdy lokal z oceną; przy przybliżeniu do ulicy — także lokale bez ocen, dla których istnieje wizytówka Feasty (ktoś zapisał lokal albo go dodał); przy pełnym przybliżeniu — także pozostałe lokale z otwartych danych (Overture Maps Foundation). |
| Siatka | Ekran dzielony jest na komórki o boku 70 punktów; w każdej komórce widać jeden lokal — ten o najwyższym priorytecie. Grupy lokali (klastry z liczbą) zajmują komórki pierwsze. |
| Priorytet w komórce | (1) lokal z list użytkownika albo oceniony przez osoby, które obserwuje; (2) ocena (tier), a przy równym tierze liczba recenzji; (3) lokal z wizytówką Feasty bez ocen; (4) pozostałe lokale z otwartych danych. Remis rozstrzyga stała kolejność niezależna od lokalu. |
| Aktywny filtr albo wyszukiwanie | Progi przybliżenia nie obowiązują — widać każdy lokal spełniający kryteria; komórka siatki ma bok 52 punktów. |
isPromoted ani żadnego innego parametru płatnego —
reklama nie podnosi pozycji pinu (treści sponsorowane: osobny bucket z etykietą „Reklama”, §4). Relacja z pkt (1)
to wyłącznie jawne działania samego użytkownika (jego listy, osoby, które sam obserwuje) — bez profilowania.
1.3. „Dzisiejsze oferty” — które lokale są na liście i w jakiej kolejności
Od 26 października 2026 r. zakładka Odkryj prowadzi do listy lokali wybranego miasta, które mają coś na dziś. Lokal trafia na nią, gdy spełnia co najmniej jeden z dwóch warunków.
| Parametr | Działanie |
|---|---|
| Oferta spisana przez Feasty | Oferta cykliczna, którą Feasty spisało ze strony lokalu, na dzisiejszy dzień tygodnia. Po 120 dniach od spisania nie jest pokazywana, a po 60 dniach znikają z niej ceny. |
| „Dzisiejsze menu” restauracji | Menu wpisane przez restaurację w panelu — wyłącznie z datą dzisiejszą (czas warszawski). Funkcja należy do planów Growth i Premium, więc obecność na liście przez tę ścieżkę zależy od planu; kolejność — nie. |
| Kolejność | Odległość od użytkownika; bez zgody na lokalizację — alfabetycznie. Ocena, liczba recenzji, plan ani płatności nie zmieniają kolejności. |
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 autora | 0 → ×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 autora | Standard → ×1.0 · Elite → ×1.5 · Connoisseur → ×2.0 |
| Wiek recenzji (half-life 180 dni) | max(0.15, 0.5 ^ (ageDays / 180)) |
3. Cap Proof of Work (ratingsCount < 2 → tier ograniczony do A)
Niezależnie od średniej, restauracja z liczbą recenzji mniejszą niż 2 nie może wyświetlać się jako S lub S+. Tier jest capowany do A dopóki próg nie zostanie przekroczony. Próg docelowy to 10 recenzji — obecny jest obniżony na czas wczesnego dostępu (ramka niżej).
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.
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.
- Wizualnie: sponsored entries są w osobnej sekcji albo na pierwszej pozycji viewportu, nigdy "wymieszane" z organic results bez label.
- Opt-out: user może wyłączyć sponsored results w ustawieniach (
users/{uid}.uiPrefs.hidePromoted). Po wyłączeniu queries pomijająisPromoted == true. - Audit trail: wszystkie kampanie są logowane w kolekcji
adPlacements/*z retencją 6 lat (PL termin przedawnienia roszczeń handlowych).
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ą:
- In-app notification w panelu B2B (
https://business.feasty.com.pl) — sekcja "Ogłoszenia" - Email z 15-dniowym terminem na adres właściciela konta
- Update tej strony z nową wersją (changelog poniżej) i datą wejścia w życie
Changelog wersji
| Wersja | Aktywna od | Główne zmiany |
|---|---|---|
v2.2 |
26 października 2026 | Nowa lista „Dzisiejsze oferty” (§1.3). Wagi recenzji i mapa bez zmian. Closed-beta exemption: 15-dniowy notice pominięty — w dniu zmiany zero aktywnych użytkowników biznesowych (jedno konto testowe). |
v2.1 |
28 września 2026 | Mapa: budżet pinów (§1.2) — lokale z otwartych danych bez wizytówki Feasty dopiero przy pełnym przybliżeniu, siatka z priorytetem ocen. Wagi recenzji bez zmian. Closed-beta exemption: 15-dniowy notice pominięty — w dniu zmiany zero aktywnych użytkowników biznesowych (jedno konto testowe). |
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ą:
- Rate limity na recenzje per user (dzienny / tygodniowy / miesięczny cap)
- Tier distribution caps per user (max 20% S+, max 40% S+S łącznie — nie można "rozdawać" same szóstek)
- Low-variance flag obniża wagę autora który prawie zawsze ocenia tym samym tierem (×0.5)
- Server-only
authorWeight— wartość jest niewidoczna dla klienta i recenzenta - Prestige z cyklicznego cronu — nie da się "kupić" tieru autora, jest funkcją historii recenzji
- Flagged review exclusion — recenzje oznaczone (moderation, DSA Art. 17) nie kontrybuują
- Deterministic review IDs (
${uid}_${placeId}) — jeden user = jedna recenzja per lokal
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).
- Wewnętrzna procedura: zawieszenie konta — odwołanie w panelu restauratora (zakładka „Odwołanie”), odpowiedź w ciągu 14 dni; w innych sprawach — contact@feasty.com.pl
- Mediatorzy (art. 12 P2B — co najmniej dwóch poza sądem):
- Centrum Mediacji Sądu Polubownego przy UOKiK (Warszawa, Plac Powstańców Warszawy 1)
- Sąd Arbitrażowy przy Krajowej Izbie Gospodarczej (Warszawa)
- Sąd właściwy: sąd właściwy miejscowo dla siedziby pozwanego (Operator: Polska)