UNFAIR
Download
Glossary · Recommendation Intelligence

Personalization Weight

Last updatedApr 21, 2026

Personalization weight is the coefficient the engine places on a given user signal when it scores a candidate ingredient — the extent to which your specific adherence, goals, tolerances, and symptom history bend the rank away from the population-average starting point. Every ranked recommendation in Unfair is a weighted sum of signal contributions, and personalization weights are the dials that decide whose experience the rank is actually about. When the weights sit near zero, the app reads like a generic library; when they are near maximum, the app reads like a log of one person.

Signals, weights, and what they do to rank

The engine carries a fixed set of personalization signals. Their weights sum to 1.0 per user and shift over time as more evidence arrives.

SignalDefault weightRaises rank forLowers rank for
Goal priority0.25Ingredients whose primary indication matches the user's top goalIngredients matching secondary goals only
Safety and interaction profile0.20Ingredients compatible with current medications and allergiesAnything flagged; hard flags remove the item rather than lower its rank
Adherence consistency0.15Simple-schedule ingredients when adherence is low; complex stacks when adherence is highAdd-ons that require precise timing during low-adherence periods
Sensitivity and reaction history0.15Calmer or better-tolerated forms when sensitivity is loggedStimulant-adjacent or GI-irritant compounds when a history exists
Logged outcome trend0.15Ingredients that historically moved the user's tracked proxiesIngredients that produced a flat or negative trend in a prior cycle
Evidence tier0.10Tier-A evidence for the user's goalTier-C or anecdotal evidence when tiers A or B exist

Default weights apply at profile creation. They adjust automatically as logs accumulate. A user with a long history of logged sensitivity to stimulants will see the sensitivity weight climb above 0.15; a user whose primary adherence problem is morning timing will see adherence consistency dominate over logged outcome trend until adherence stabilizes.

A worked adherence-drop example

A user has been running a five-item stack with 85% 28-day adherence, and the adherence-consistency weight has drifted up to 0.35 because adherence has been the best predictor of their past cycle outcomes. A work-trip month drops adherence to 55%. Over the following two weeks, the engine decays the adherence-consistency weight from 0.35 back toward 0.15 — the default floor — because 55% is too low for that signal to carry the other weights. Goal-priority weight compensates upward, and the ranked list shifts: two complex timing-dependent optional items drop from the top 5, replaced by simpler once-daily core candidates. The user never adjusted a setting. The re-weighting is the app noticing the same thing a coach would notice — this is not the month to stack novel compounds on top of a schedule the user cannot keep.

Why a single recent change can dominate older data

Recent behavior beats old behavior on purpose. A user who logged 40% adherence for 90 days and then 85% for 14 days is not an average of the two — they are a person whose current state is more informative than their past one. The engine uses recency-weighted windows (typically 14, 28, and 84 days) and treats the short window as the starting point for any signal where the rolling values diverge sharply. The feedback loop behind this is explicit, not learned in the statistical sense: the rules for how weights move are deterministic, auditable, and shown in the rationale.

Practical overrides

The user can directly raise or lower a few weights through in-app settings — goal priority, evidence-tier floor, and a sensitivity threshold. Safety and interaction profile is not user-adjustable. The advanced capabilities surface in the settings screen shows which weights are currently active and which were adjusted automatically in the last cycle, so no weight shift happens silently.

What happens when signals conflict

Two signals often point opposite directions. A user's logged outcome trend favors ingredient A, while their sensitivity history favors ingredient B. The engine does not average them into a middle pick; it favors the signal with higher recent weight and flags the conflict in the rationale. This matters because averaging would produce recommendations no signal actually supports — a classic failure mode of naive weighted-sum systems. The user sees both signals in the rationale and can use the explicit disagreement to decide whether to override a setting or wait a cycle.

Update cadence

Weights update on a fixed cadence rather than on every log event. A same-day re-weight would produce whiplash — a single skipped dose would move the adherence weight, which would move the rank, which would unsettle the rationale for an otherwise stable cycle. Instead, the engine re-weights at end-of-day on the 14-day and 28-day windows, and at cycle boundaries for longer-horizon signals. The practical effect is that a user can change behavior on a Tuesday and expect the ranked list to catch up by Thursday, not by Tuesday afternoon.

Weight ceilings and floors

No signal can sit at 0 or at 1 in the active model. Safety and interaction profile has a hard floor of 0.20 so it never goes silent even for users with no logged medications. Adherence consistency has a ceiling of 0.40 so that even a perfectly adhering user does not see the rest of their signals get drowned out. These bounds exist for the same reason speed limits exist on cars — the extremes are where the failure modes live, and keeping every weight in a sane band is cheaper than diagnosing why a rank collapsed.

Cold-start behavior

A brand-new profile has no personalization data, so the engine runs near the default weight vector for the first 14 days. During this window, goal-priority and evidence-tier weights carry more influence than they do in a steady state, and the recommendation confidence score is held below 0.60 regardless of input density. This is a deliberate cold-start pattern — the app prefers to undersell its confidence for two weeks rather than oversell a personalized rank based on a profile that has not yet been personalized.

How this appears in Unfair

Personalization weights appear at three places. First, each ranked card's rationale names the top two signals that moved the item up or down. Second, the per-cycle review shows weight deltas as a small bar chart so the user can see which signals are gaining influence. Third, the recommendation ranking detail view exposes the full weight vector for audit when a rank seems surprising. None of this is hidden optimization — the entire weight model is legible from the app.

Clinical safety note

Weight shifts are optimization signals, not medical conclusions. A sharp change in adherence or sensitivity weight during a cycle often correlates with a life event — illness, medication change, acute stress — and the honest response is to pause adds and check in with a clinician rather than treat the re-weighting as the answer. Hard safety flags outrank every personalization weight by design and cannot be overridden through settings.