Personalization
Personalizing without an account
Most visitors are anonymous and most sessions are short. How much of a logged-in experience can you rebuild from one visit — and how quickly? One event closes half the gap; eight close nearly all of it.
Look at the traffic mix of most consumer products and the same shape appears: the majority of sessions belong to people who are not signed in, and a large share of those never sign in. Meanwhile the recommender was designed, tuned and evaluated on the users who have a profile.
The anonymous path usually gets a popularity list and an apology. It is worth asking how much better it could be, because the answer is: most of the way.
The one thing a session has that a profile does not
It is tempting to think of a session as a profile with less data in it. It is not, and the difference matters.
A stored profile describes what somebody is generally like — accumulated over months, stable, slow to move. A session describes what they are doing right now. Those agree most of the time and diverge exactly when it counts: the person who reads about cameras all year and is today buying a birthday present.
The profile knows
Standing taste. Which categories they return to. What they bought before. All useful, all describing a person rather than a visit.
The session knows
Today’s intent, which is the thing the ranking is actually for. It has no history and it does not need one, because intent is mostly expressed in the first few actions.
How fast does a session become useful?
Below, 500 anonymous visitors. Each has a standing taste and an intent for today’s visit that agrees with it 70% of the time. The system starts knowing nothing, watches events arrive, and rebuilds its estimate after each one.
Three references share the chart: popularity, which is the same list for everybody; the anonymous session model; and the same model given a stored profile from forty past events, which is what an account buys.
Quality against how much of the visit you have seen. Purple is anonymous, teal is the same system with a stored profile, and the dashed line is what popularity delivers. The gap between the two curves is the entire value of having an account, and it closes from the left.
The numbers
- Zero events. Anonymous scores 0.211 — it is popularity. Logged in scores 0.733. This is the moment the account is worth the most, by a wide margin.
- One event. Anonymous jumps to 0.598. A single click has closed 51% of the gap.
- Three events. 0.696, or 65% of the gap.
- Eight events. 0.922 against the logged-in system’s 0.928. The account is now worth six thousandths.
The shape is the argument. Personalization from a session is not a slow accumulation that eventually approaches the real thing — it is nearly all delivered in the first handful of interactions, because a handful of interactions is enough to identify an intent out of ten.
The place an account genuinely wins is the first screen, before anything has happened. Everything after that converges fast. If you are deciding where to put engineering time on the anonymous path, put it into the cold open and into reacting to the very first event — not into elaborate modelling of the tenth.
Getting the handover right
The stored profile should not simply be averaged in at a fixed weight. Give it the visit until the visit says otherwise:
where is how many events this visit has produced. At the profile carries everything; by it is contributing under a fifth. This is the short-plus-long blend with the blend weight driven by session evidence rather than a constant, and it is what stops a stored profile from overriding a visit that is plainly about something else.
Set by asking how many events it takes before you would believe a visitor over their own history. Two or three is usually about right; it is a question a product manager can answer, which is the same reason half-life is a better parameter than a decay rate.
The other knobs in the widget
How fast the session takes over. This is the prior strength on the topic histogram — how much evidence one click is worth. Turn it up and the first event moves the ranking further; turn it down and the catalogue prior holds on longer. The failure at the high end is the one everybody has experienced: one accidental click and the entire site is about that thing for the rest of the visit. It is worth being deliberate here, because the cost is asymmetric — over-reacting is much more visible to a user than under-reacting.
Blend popularity into the ranking. Switch it off and every number falls, including the logged-in one. Item appeal is real information that has nothing to do with who is looking, and a system that ranks purely by inferred interest throws it away. This is the same reason popularity is a serious baseline: it is not personalization, but it is not noise either.
What this looks like in production
- The session is state, not a model A topic histogram, a handful of recent item ids, the query if there was one. Kilobytes. It can live in the request, in a signed cookie, or in a short-lived cache keyed by session id — none of which requires a durable identity or a cross-site identifier.
- It must update within the visit The entire value is in reacting to events one and two, so a profile that refreshes on a nightly batch is worth nothing here. This is the strongest argument for computing the session profile at request time.
- The cold open is a product surface Before the first event you have the entry point, the referrer, the device, the time of day, and the country. A landing page reached from a search for running shoes should not open on the same list as the homepage. This is the cheapest personalization in the whole system and it is routinely left on the floor.
- Evaluate it separately Anonymous and logged-in sessions have different metrics, different baselines and different ceilings. Averaging them hides the anonymous path entirely, and the anonymous path is where most of your traffic lives.
And the reason this is the durable version
Third-party identifiers have been getting less reliable for years and will continue to. Every part of the system above works without one: the signal is what the visitor did on your site, in this visit, and the model is a histogram you can explain to a regulator in a sentence.
There is a version of that argument that is about compliance. The more interesting one is that it is simply where most of the value was. A system that is good at the first five events of an anonymous visit is good at the first five events of every visit — including the logged-in ones, which also begin with somebody arriving and doing something.