Tracking und Analytics¶
Dokumentierter Stand:
mainbei Commit42671858b2117ba04fe09040f18db0658379aeecvom 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:
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.
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¶
src/field-analytics.jssrc/features/analysis/analysis-metrics.jssrc/features/analysis/radar-score.jssrc/features/analysis/correlation-engine.jssrc/features/analysis/AnalysisViews.jsxsrc/PatternInsights.jsx
Abgleich mit der vorherigen Dokumentation¶
Der Statistik-Refactor ändert insbesondere folgende zuvor dokumentierte Aussagen:
- 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.
- Neben Mindeststärke und Stichprobengröße gilt jetzt eine Benjamini-Hochberg-Korrektur für Mehrfachtests.
- Der sichtbare Lebensrad-Score ist nicht mehr
Qualität × Momentum, sondern die aktualitätsgewichtete Qualität. Momentum bleibt separate Metainformation. - Handlungen und Zustände werden pro Tag unterschiedlich kombiniert; Handlungen können einen Zustandswert nur begrenzt verbessern.
- Aggregationen und Diagrammtypen werden zentral und typabhängig validiert.
- Auswahlfelder erscheinen als Antwortverteilungen; Freitext liefert höchstens die Anzahl nichtleerer Tage.
- Korrelationswerte können über einen ausdrücklich transienten, nicht gesicherten Cache wiederverwendet werden.