Purchase history helps. Someone who bought running gear four times in the past year has shown a meaningful preference. Category frequency, preferred price points, and repeated brand purchases are stable signals that carry across sessions.
Historical data always points backward. It describes who the shopper was on earlier visits, not why they arrived today. In ecommerce, that visit-specific reason often matters more than broad preference history, despite what many personalization systems assume.
Why Historical Models Go Stale
Purchase data starts aging as soon as it is captured. Someone who bought ski equipment two winters ago may now have different preferences, household circumstances, income, or climate. A behavioral record from two years earlier says little about what they want today.
Recent history can also mislead at category level. Buying one sneaker style six months ago does not mean the shopper wants similar sneakers now, since they already own them. Their next footwear purchase could be another style or another category. Models that overvalue recent purchases can create "just bought it" suppression failures, repeatedly showing products like something the shopper no longer needs.
That does not mean historical data should be discarded. Its weight should reflect what the shopper signals now. The ranking question is not "which source wins" but "how should the sources be combined, and in what proportions, for this context".
What Session Signals Reveal
Session signals describe the present. They capture this visit's intent, which may have little connection to earlier behavior.
Someone who usually buys cooking equipment visits a homewares catalog this morning to prepare for a dinner party and buy tableware for twenty guests. That purpose does not appear in their purchase history. Their profile says "cooking equipment buyer", while the session says "bulk tableware buyer with a specific near-term occasion". Capturing that signal would favor tableware sets, hosting accessories, and quantity-friendly pricing. History alone would show more cookware.
Search queries are usually the most valuable session signal because they state intent directly. The shopper gives the system the words they use for what they want. A strong ranking engine treats the first query as Bayesian evidence about the session's broader intent, not merely as text input for the results page.
Product page dwell time is the next useful signal. Forty-five seconds can indicate that a shopper read the description, viewed images, and engaged meaningfully, unlike a two-second glance before scrolling on. Aggregated category and attribute dwell time shows which part of a category they are exploring today.
Combining Signals: Recency and Context
The choice is not historical data or session signals. Both matter. The practical issue is the weighting function: how far should current behavior move the ranking from the historical model's recommendation?
That depends on signal strength and divergence from the shopper's pattern. When current behavior closely matches historical affinities, little reweighting is needed. The historical ranking is probably still suitable.
The valuable case is a session that departs sharply from history. Recency weighting matters most here. Someone long focused on men's casual clothing who now studies formal suits at prices well above their usual range may be shopping for an event or developing new preferences. Either way, the session reveals something the historical model cannot anticipate. Giving it more weight should improve ranking.
Overweighting session signals can elevate one-off noise. A shopper may click a children's toy because their child pointed at the screen, without wanting children's products. The system needs a minimum signal-strength threshold before replacing the historical prior, so genuine intent is separated from accidental engagement.
Signal Sources by Practical Value
Historical and session signals vary in value. The ranking engine therefore uses an explicit hierarchy, from greatest practical value to least.
Current-category purchase history is the strongest historical signal and remains useful even when somewhat old. Three purchases from one category show sustained interest. Related-category history is weaker, but can still support cross-category discovery.
Session search queries are usually the strongest real-time signal. Current category and subcategory dwell time follows. Product engagement comes third, especially the attributes shared by viewed products. Cart additions strongly confirm purchase intent, but typically arrive late for ranking decisions.
Clicks without dwell time are weaker than many teams expect. Thumbnail quality, placement, and displayed price heavily affect them. Clicks show visual attention, not necessarily relevance, so heavily weighting raw clicks can optimize salience instead of category intent.
How Combined Signals Change Over Time
Implementation needs two feature stores with different update schedules. Historical features can update daily or weekly because purchase records change slowly. Session features update continuously with every event.
During inference, the model retrieves both feature sets and applies a weighting function based on the available evidence. Early in a visit, sparse session data leaves the historical prior dominant. As events accumulate, session weight rises. New visitors begin with a population prior and adapt quickly, while returning visitors receive historical guidance with real-time correction.
In our early-access deployments, the largest gain has come from the transition point: how quickly the system moves weight from history to session when current behavior is strong and divergent. Moving slowly misses discovery during the session's richest intent period. Moving too quickly amplifies accidental early clicks. The threshold requires empirical tuning as well as modeling, and varies by catalog category and median session length.