1.7 KiB
1.7 KiB
006 – Inspiration-Algorithmus: gewichteter Mix (offene Gewichtung)
Status: proposed (Gewichtung offen, Algorithmus fix)
Kontext. „Inspiration" schlägt jeweils 5 Gerichte aus dem Archiv vor, neue 5 auf Button. Der Betreiber möchte einen Mix aus drei Kriterien: lange nicht gekocht, seltene (wenige Auftritte) und beliebte (häufig gekocht). Genauere Gewichtung und die Definition von „seltene" / „beliebte" werden bei der Implementierung festgelegt.
Entscheidung (Prinzip). Score-Funktion score(g) mit drei Termen:
- Staleness:
now - max(gegessen_am)(normiert an die ältestegegessen_am) → gewichtet mitw_slow(>0, primär, z. B. 0.5). - Rarity:
1 / (auftritt_count + 1)(auftritt = Anzahl aller Einträge mit gleichemname) → gewichtet mitw_rare(sekundär, z. B. 0.3). - Popularity:
auftritt_count / max(auftritt_count)→ gewichtet mitw_hot(tertiär, z. B. 0.2).
score = w_slow*stale + w_rare*rare + w_hot*hot, Sortierung absteigend.
w_slow + w_rare + w_hot = 1.0; konkrete Werte in config/inspirations.yaml
und per ADR-006-Bis (Patch) fixieren, wenn die App läuft.
Konsequenzen.
-
- Alle drei Nutzerintentionen (Alte, Seltene, Beliebte) sind vertreten.
-
- Gewichte prozentual änderbar, ohne Code.
- − „Beliebte" ist kontraintuitiv, wenn der Nutzer genau das nicht
möchte (z. B. „mööchte etwas Neues"). Dann
w_hot=0. - Offene Fragen:
- Gewichte
w_slow/w_rare/w_hot(Default: 0.5/0.3/0.2?) - „Auftritt" zählt Alle Zeit oder letzte N Tage? (Vorschlag: alle Zeit)
- Deduping gegen die letzte 5er-Ladung? (Vorschlag: ja, Session-basiert)
- Gewichte