Zum Inhalt

Tracking und Analytics

Dokumentierter Stand: main bei Commit 42671858b2117ba04fe09040f18db0658379aeec vom 22. Juli 2026. Die statistischen Modelle wurden gegen die tatsächliche Implementierung geprüft.

Grundregel: fehlend ist nicht null

Steady speichert normale Check-in-Werte in einem Tagesdatensatz (entry) und wiederholbare Vorgänge als events. Die Analytics-Schicht übernimmt nur tatsächlich vorhandene Werte.

Zustand analytische Bedeutung
Schlüssel fehlt unbekannt, wird ausgelassen
null oder leer nicht gewählt, wird ausgelassen
0 echter numerischer Nullwert
no / false bewusst negativer Status
na nicht relevant, kein Signal

Diese Unterscheidung gilt für Explorer, Lebensrad und Korrelationen. Ein nicht ausgefüllter Tag wird weder als schlechter Tag noch als urge-freier Tag interpretiert.

Datenquellen

flowchart LR
    E[entries] --> M[metrische Tageswerte]
    F[Felddefinitionen und Versionen] --> M
    X[events] --> M
    M --> EX[Explorer]
    M --> COR[Korrelationen]
    E --> RAD[Lebensrad]
    X --> RAD
    F --> RAD

Normale Felder werden über ihre logicalId zusammengeführt. Nach einer Feldtypänderung bleiben ältere Feldversionen auswertbar; die jeweils vorhandene Version eines Tages wird verwendet.

Dynamische Ereignisse erscheinen zusätzlich als virtuelle Metriken:

  • soziale Verbundenheit,
  • Sportdauer und Anstrengung,
  • Selbstfürsorge-Dauer, Entspannung und Klarheit,
  • Suchtdruck,
  • Trigger-Anzahl,
  • Mahlzeitenmenge und Ausgewogenheit.

Feldabhängige Analytics-Regeln

Die gültige Aggregation und Diagrammart hängt vom Feldtyp ab. Ungültige oder veraltete Konfigurationen werden normalisiert.

Feldtyp Standardaggregation Standarddiagramm weitere Aggregationen
Boolean Mittelwert Linie Anzahl, letzter Wert
Status Mittelwert Linie Anzahl, letzter Wert
Skala Mittelwert Linie Anzahl, letzter Wert
Dauer Summe Balken Mittelwert, Anzahl, letzter Wert
Zahl Mittelwert Balken Summe, Anzahl, letzter Wert
Auswahl Anzahl pro Antwort Balken keine numerische Mittelung
Freitext Anzahl nichtleerer Tage Balken Textinhalt wird nicht numerisch interpretiert

auto löst sich auf den Standard des Feldtyps beziehungsweise auf die Ereignisaggregation auf. Sport- und Selbstfürsorge-Dauern werden beispielsweise summiert; qualitative Ereigniswerte werden standardmäßig gemittelt.

Explorer

Der Explorer ist der direkte Messreihenpfad. Er filtert zuerst den gewählten Zeitraum und bildet anschließend Buckets nach Tag, Woche, Monat, Quartal oder Jahr.

flowchart TD
    S[ausgewählte Metrik] --> V[Feldversionen auflösen]
    V --> T{Feld oder Ereignis?}
    T -->|Feld| A[Entry-Werte sammeln]
    T -->|Ereignis| B[Event-Werte sammeln]
    A --> G[Zeit-Buckets]
    B --> G
    G --> AG[typgerechte Aggregation]
    AG --> C[Diagramm]
    AG --> D[optionale Aufschlüsselung]

Auswahlfelder

Auswahlfelder werden nicht über künstliche Zahlenwerte gemittelt. Jede Antwortoption wird als eigene Komponente gezählt und als Verteilung dargestellt.

Aufschlüsselungen

Eine Metrik kann nach einer kategorialen Dimension aufgeteilt werden, zum Beispiel:

  • Sportdauer nach Sportart,
  • Verbundenheit nach Person,
  • Metrik nach Status- oder Auswahlfeld,
  • Ereignisse nach Mahlzeit, Trigger oder Selbstfürsorge-Aktivität.

Die Aufschlüsselung berechnet außerdem einen deskriptiven Assoziationswert als Anteil der Zwischen-Gruppen-Varianz an der Gesamtvarianz. Dieser Wert beschreibt, wie stark sich die Gruppenmittel unterscheiden; er ist kein Kausalitätsnachweis und kein Signifikanztest.

Lebensrad

Zweck

Das Lebensrad fasst die jüngste Qualität tatsächlich erfasster Signale pro Lebensbereich zusammen. Datenabdeckung und Score sind getrennte Größen. Fehlende Tage oder leere Achsen senken den Score nicht.

Fenster und Aktualität

Parameter Wert
Auswertungsfenster 28 Tage
Halbwertszeit der Aktualität 7 Tage
Aktionsbonus pro Tag höchstens 25 % des noch offenen Qualitätsabstands
sichtbarer Score 0–100

Ältere erfasste Tage erhalten über den Faktor 2^(-Alter / 7) weniger Gewicht. Das Lebensrad zeigt jedoch den aktualitätsgewichteten Qualitätsmittelwert, nicht mehr das frühere Produkt aus Qualität und Momentum.

Wertnormalisierung

Numerische Felder verwenden ihre konfigurierte Zielrichtung:

  • high: höhere Werte sind günstiger,
  • low: niedrigere Werte sind günstiger,
  • target: ein Zielbereich ist optimal; außerhalb fällt die Qualität zu den Skalenrändern ab,
  • neutral: kein Lebensrad-Signal.

Mit qualityAtMin und qualityAtMax können die Qualitäten an den Skalenrändern abweichend von null konfiguriert werden. Dadurch lassen sich weiche Zielgrenzen modellieren.

Statuswerte werden grundsätzlich so interpretiert:

Wert Ausgangsqualität
yes / true 1,00
partial 0,65
no / false 0,00
na, leer, fehlend kein Signal

Bei Zielrichtung low wird die Statusqualität invertiert.

Zustände und Handlungen

Jedes Signal besitzt eine Rolle:

  • Zustand beschreibt die aktuelle Lage, zum Beispiel Stimmung, Stress oder Schlafqualität.
  • Handlung beschreibt eine ausgeführte Aktivität, zum Beispiel eine Routine, Sport oder Selbstfürsorge.

Boolean- und Statusfelder gelten standardmäßig als Handlung, Skalen als Zustand. Dauer- und Zahlenfelder mit einem nach oben gerichteten Handlungsziel werden ebenfalls als Handlung eingeordnet. Die Rolle kann mit radarRole explizit überschrieben werden.

Pro Tag werden Zustände gemittelt. Mehrere Handlungen sättigen sich und dürfen einen vorhandenen Zustandswert nur begrenzt verbessern:

Tagesqualität = Zustandsqualität
              + offener Abstand bis 1
              × gesättigte Handlungsqualität
              × maximal 0,25

Damit wird tägliches Bemühen sichtbar, ohne dass eine einzelne positive Handlung einen schlechten Zustandswert vollständig überdeckt. Existieren nur Handlungen, bilden sie allein die Tagesqualität.

Dynamische Signale

  • Soziale Kontakte sind Zustandswerte aus Verbundenheit 1–5.
  • Sport ist eine Handlung; Gefühl danach und Anstrengung bestimmen die Qualität. Anstrengung 4/5 ist optimal, 5/5 wird niedriger bewertet.
  • Selbstfürsorge ist eine Handlung; Gefühl, Entspannung und Klarheit bestimmen die Qualität.
  • Mahlzeiten sind Zustandswerte aus Menge, Ausgewogenheit und Gefühl danach.
  • Ein Rückfall setzt das Recovery-Signal des Tages auf null.
  • Ein expliziter urge-freier Recovery-Check-in erzeugt ein positives Signal.
  • Bei Urges zählt der stärkste Urge; das Ergebnis kann die Qualität begrenzt verändern.
  • Trigger erzeugen ein eigenes, mit steigender Anzahl sinkendes Recovery-Signal.

Achsenscore

Für jeden erfassten Tag wird die Tagesqualität mit der Aktualität gewichtet. Der sichtbare Achsenscore ist:

Score = 100 × aktualitätsgewichtete mittlere Qualität

momentum und effectiveEvidence werden weiterhin als diagnostische Metadaten berechnet, multiplizieren den sichtbaren Score aber nicht. Die UI zeigt bei hasData: false einen Gedankenstrich beziehungsweise „Keine Daten“ statt einer bewertenden Null.

Korrelationen und Entdeckungen

Kandidaten

Die Engine bildet alle paarweisen Kombinationen aus aktivierten analytischen numerischen Metriken:

  • Boolean,
  • Status,
  • Skala,
  • Dauer,
  • Zahl,
  • virtuelle Ereignismetriken.

Freitext und Auswahlfelder werden nicht korreliert. Identische Reihen und Reihen ohne Varianz werden verworfen.

Zusätzlich zu Gleich-Tags-Paaren existieren gezielte Folgetagsregeln:

Signal heute Signal am Folgetag
Sportdauer Stress
Sportdauer Stimmung

Spearman-Rangkorrelation

Die Rohwerte werden in Ränge umgewandelt. Bindungen erhalten mittlere Ränge. Anschließend wird die Korrelation der Rangwerte berechnet.

rho = corr(rank(X), rank(Y))

Das Verfahren erfasst monotone Zusammenhänge und eignet sich besser für ordinale Skalen als eine ausschließlich lineare Pearson-Korrelation.

Mindestanforderungen und Mehrfachtests

Ein Ergebnis wird nur berücksichtigt, wenn:

  • mindestens 14 vollständige Wertepaare vorliegen,
  • der absolute Spearman-Koeffizient mindestens 0,25 beträgt,
  • der nach Benjamini-Hochberg korrigierte q-Wert höchstens 0,10 beträgt.

Der rohe p-Wert wird über die Student-t-Verteilung aus rho und der Paaranzahl angenähert. Die Benjamini-Hochberg-Korrektur begrenzt die erwartete Fehlentdeckungsrate über die gleichzeitig getesteten Metrikpaare. Maximal 20 Entdeckungen werden nach absoluter Stärke und Stichprobengröße ausgegeben.

Darstellung und Unsicherheit

Jede Entdeckung enthält:

  • Richtung und Stärke,
  • Zahl vollständiger Paare,
  • Zahl fehlender Paare,
  • Gleich- oder Folgetagsbezug,
  • Vergleich des unteren und oberen Drittels der X-Werte,
  • Evidenzstufe anhand der Paaranzahl,
  • ausdrücklichen Hinweis, dass Zusammenhang keine Ursache beweist.

Die Karte bleibt sichtbar, wenn keine belastbare Entdeckung gefunden wurde oder die Berechnung fehlschlägt; die UI zeigt dann einen passenden Leer- oder Fehlerzustand.

Korrelations-Worker und Cache

Die Korrelationsberechnung läuft außerhalb des normalen Renderpfads. Um lange Historien nicht bei jedem Start vollständig neu zu materialisieren, darf der Worker einen abgeleiteten Cache im meta-Store speichern.

flowchart LR
    OLD[finalisierte ältere Tage] --> CACHE[abgeleiteter Tageswert-Cache]
    NEW[letzte vier editierbare Tage] --> RECALC[immer neu berechnen]
    CACHE --> ROWS[gemeinsame Tageszeilen]
    RECALC --> ROWS
    ROWS --> COR[Korrelationsanalyse]

Wichtige Grenzen:

  • Nur Tage außerhalb des viertägigen Rückerfassungsfensters werden wiederverwendet.
  • Die Cache-Signatur umfasst Metrikdefinitionen und Labels; relevante Konfigurationsänderungen invalidieren ihn.
  • Der Cache enthält nur abgeleitete numerische Tageswerte.
  • Trackingdaten bleiben die alleinige Datenquelle.
  • Der Cache ist transient, wird nicht gesichert und nach einem Restore entfernt.
  • Beim Wechsel des ausgewerteten Zeitraums werden keine Zeilen außerhalb des Zeitraums übernommen.

Relevante Implementierung

Abgleich mit der vorherigen Dokumentation

Der Statistik-Refactor ändert insbesondere folgende zuvor dokumentierte Aussagen:

  1. Korrelationen sind nicht mehr auf eine kleine feste Liste von Gleich-Tags-Paaren begrenzt; alle geeigneten Metrikpaare werden getestet, ergänzt um zwei gezielte Folgetagsregeln.
  2. Neben Mindeststärke und Stichprobengröße gilt jetzt eine Benjamini-Hochberg-Korrektur für Mehrfachtests.
  3. Der sichtbare Lebensrad-Score ist nicht mehr Qualität × Momentum, sondern die aktualitätsgewichtete Qualität. Momentum bleibt separate Metainformation.
  4. Handlungen und Zustände werden pro Tag unterschiedlich kombiniert; Handlungen können einen Zustandswert nur begrenzt verbessern.
  5. Aggregationen und Diagrammtypen werden zentral und typabhängig validiert.
  6. Auswahlfelder erscheinen als Antwortverteilungen; Freitext liefert höchstens die Anzahl nichtleerer Tage.
  7. Korrelationswerte können über einen ausdrücklich transienten, nicht gesicherten Cache wiederverwendet werden.