Files
svc-essensplanung/Doku/adr/006-inspiration-algorithmus.md

32 lines
1.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:
1. **Staleness**: `now - max(gegessen_am)` (normiert an die älteste
`gegessen_am`) → gewichtet mit `w_slow` (>0, primär, z. B. 0.5).
2. **Rarity**: `1 / (auftritt_count + 1)` (auftritt = Anzahl aller Einträge
mit gleichem `name`) → gewichtet mit `w_rare` (sekundär, z. B. 0.3).
3. **Popularity**: `auftritt_count / max(auftritt_count)` → gewichtet mit
`w_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)