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

1.7 KiB
Raw Permalink Blame History

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)