The Anatomy of Personalization

The Anatomy of Personalization

The Anatomy of Personalization

Personalization is one move: connect what a person means to the option that fits. Both sides are open-ended, and for decades we modeled only one of them.

Personalization is one move: connect what a person means to the option that fits. Both sides are open-ended, and for decades we modeled only one of them.

Personalization is one move: connect what a person means to the option that fits. Both sides are open-ended, and for decades we modeled only one of them.

Everyone calls it recommendations. That’s the part that matters least.

A shopper opens a product page. She’s been on the site ninety seconds. She typed “red floral dress” into search, scrolled past four results, hovered on one, left, came back. By the time the page renders, the system has already decided which of forty thousand items to put in front of her, in what order, which of them marked down. She sees a grid. She thinks she’s browsing.

Under that grid is a chain of decisions she never sees. The grid gets the name and the credit, and it’s the smallest part of the work.

Strip the page away and the same shape sits under every personalized system ever shipped. Read what a person means. Connect it to the option that fits. Act on it. Intent, then action. That’s the machine.

fig. 1 - intent to actionfig. 1 - intent to action [dark]fig. 1 - intent to action [m]fig. 1 - intent to action [m] [dark]

The whole job is the middle: the connection. It’s harder than it sounds, because both sides are open-ended. What a person wants shows up in countless phrasings. “Red floral dress,” “crimson flowy sundress,” and “boho dress for a garden party” are three requests for the same need that share almost no words. And the right dress differs from the wrong one in a hundred small details (the fabric weight, how the size runs, the occasions it suits) that never made it into the product data.

I build this machine for ecommerce: a person’s intent, mapped to a product in a catalog. It’s a good place to learn the anatomy. Either the right product is in front of the right person or it isn’t, and you can see the difference in sales the same day.

The natural first move, the one everyone reaches for, is to optimize for the click. Clicks are the signal you have the most of, and more clicks looks like more relevance. But a click-trained system learns what people tap, not what they came for, and those are different lists. People tap what catches the eye and buy what they actually need. The sequined mini gets her tap. The red floral sundress is what she buys. Tune for taps and purchases fall while clicks rise, so nothing looks broken.

fig. 2 - the click-optimized rankfig. 2 - the click-optimized rank [dark]fig. 2 - the click-optimized rank [m]fig. 2 - the click-optimized rank [m] [dark]

Fixing the objective still doesn’t fix the machine. Optimize for purchases instead and the sundress still doesn’t surface, because nothing in the catalog says it suits a garden party. You can read the person perfectly and still hand her the wrong dress, because the right one wasn’t described well enough to be found.

For decades, the industry closed one half of the gap and left the other open. Everyone modeled the shopper harder: more signals, more history, a sharper profile. Meanwhile the catalog stayed a bag of keywords: a title, a category, a handful of tags a merchandiser typed once, years ago. A perfectly understood intent had nothing precise to match against.

So systems fell back on the only move left: the crowd. People who clicked what you clicked went on to buy this. That isn’t personalization. That’s what people vaguely like you did.

The fix is unglamorous: describe both sides in the same terms.

Take the product first. “Sundress · Red Floral, $89” is a name and a price. The dress it names has a material, a length, a neckline, a silhouette, the occasions it suits: one shopper would wear it to the beach, another to a garden party. Write all of that down as structured details, attributes with values, for every product.

Then describe the person with the same vocabulary: leans boho, loves a floral print, true to size, buys the expensive dress and the cheap sandal, dresses for weekends more than the office. Her taste, written in the same attributes the products carry. The usual profile, “female, clicked twice yesterday,” holds none of that.

Once both sides are written in the same language, a match is a comparison of attributes. “Boho dress for a garden party” resolves to an occasion, a season, a mood, and every dress carrying those values is suddenly findable, whether or not anyone ever typed “garden party” into its description. It holds for every customer and every product at once: however she asks, and however the brand wrote it, both resolve into the same attributes, so any intent can meet any product.

fig. 3 - one intent, three waysfig. 3 - one intent, three ways [dark]fig. 3 - one intent, three ways [m]fig. 3 - one intent, three ways [m] [dark]

There’s a name for this shared language: an ontology. One vocabulary of attributes that both the person and the products are written in.

Personalization is the same comparison, taken one step further: from all the dresses that fit the intent, to the ones that fit her. Forty thousand products. A few hundred match what she means. Twenty rank well. Three are right for her, in her size and her price band. One narrowing, in one language, start to finish. That’s why personalization can’t be added afterward. If her profile is written in a different vocabulary than the catalog, there is nothing to compare.

A rule falls out of this, and it has held everywhere I’ve applied it. A connection is only as good as the weaker of the two understandings. Model the person deeply and leave the products thin, and the thin side sets the ceiling. It works in reverse too. This is the reason most personalization disappoints. Teams blame the model, but usually one side of the comparison was never described well enough to match.

The machine has five parts, and the same ontology runs through every one.

fig. 4 - the anatomyfig. 4 - the anatomy [dark]fig. 4 - the anatomy [m]fig. 4 - the anatomy [m] [dark]

Reading the person. Her signal is thin and late: a query, a few clicks, a return. The work is turning that trace into structure. A search query is a full sentence about what she wants. A return says the fit ran small. Each event updates her profile, in catalog terms: leans boho, avoids polyester, true to size.

fig. 5 - reading the personfig. 5 - reading the person [dark]fig. 5 - reading the person [m]fig. 5 - reading the person [m] [dark]

Describing the options. Most teams never build this half, and it is most of the work. Catalogs arrive thin and messy, written by a hundred brands in a hundred private vocabularies, for print tags and warehouse systems, never for machines. One product page says “boho,” another “bohemian,” a third “free-spirited,” and not always at different brands. So the job is to pull out the details that were implied but never entered, collapse every private vocabulary into one, and do it for millions of products that change every week. The work is slow and boring, and it is the moat, because it compounds for years and can’t be bought.

fig. 6 - describing the optionsfig. 6 - describing the options [dark]fig. 6 - describing the options [m]fig. 6 - describing the options [m] [dark]

At Lucky Brand, the top search term is “223.” Shoppers who type it know exactly which jean they mean: the 223 is a fit, the straight leg. Nothing in the product feed says so; it’s a bare number sitting in titles and specs. The system has to learn that this number is a fit, put it on the right jeans, and keep it walled inside Lucky Brand’s vocabulary, because at any other brand “223” means nothing. The options side goes that deep, brand by brand.

fig. 7 - the 223fig. 7 - the 223 [dark]fig. 7 - the 223 [m]fig. 7 - the 223 [m] [dark]

Connecting. With both sides in one language, the matching itself is simple: compare the attributes of what she means against the attributes of every product, rank what survives, commit. Most complaints that “search is broken” are really this step failing, and it fails on whichever side is described worse.

fig. 8 - one narrowing, one languagefig. 8 - one narrowing, one language [dark]fig. 8 - one narrowing, one language [m]fig. 8 - one narrowing, one language [m] [dark]

Acting. For thirty years, the machine’s last step was always the same: show something. Show the grid, the carousel, the email. A person did the rest. Now the system can do the rest itself. Ask an AI assistant to find you a dress for a garden party, and it doesn’t show you forty options. It reads, decides, and comes back with three. The same machinery is starting to draft the reply instead of suggesting you write one, book the table instead of listing restaurants, and put the meeting straight on the calendar. Acting raises the price of being wrong. A bad suggestion costs a scroll. A bad action costs money and trust. So the question shifts from “what fits best” to “is the system sure enough to act.”

fig. 9 - actingfig. 9 - acting [dark]fig. 9 - acting [m]fig. 9 - acting [m] [dark]

Learning. Nothing holds still. Language moves, taste moves, catalogs turn over weekly. The descriptions have to be refreshed against how people actually search, or the whole structure goes stale. Every click, purchase, and return is a correction. She buys the sundress and keeps it, and two records improve at once: her profile, and the dress’s claim to garden parties. The loop is how the machine keeps up.

fig. 10 - learningfig. 10 - learning [dark]fig. 10 - learning [m]fig. 10 - learning [m] [dark]

Acting also changes the stakes for anyone who sells anything. A person forgives a thin product listing. She clicks in, zooms the photos, reads the reviews, fills the gaps herself. An AI agent shopping on her behalf does none of that. It reads what’s structured, decides once, and moves on. A missing attribute doesn’t lower a product’s ranking. It removes the product from the decision entirely. As more buying runs through agents, whether a product gets seen comes down to how well it’s described.

fig. 11 - what an agent can seefig. 11 - what an agent can see [dark]fig. 11 - what an agent can see [m]fig. 11 - what an agent can see [m] [dark]

This is the machine we build at Velou: the ontology, the enrichment, the matching, for ecommerce catalogs of millions of products. New categories keep folding in: when one of the largest advertising platforms in ecommerce needed refrigerators understood, we taught the machine refrigerators, down to capacity, door style, and counter depth. But the anatomy isn’t just about commerce. Plan a family’s week in Hawaii and both sides need describing all over again: the family (ages, school breaks, who hates long layovers) and the options (flights, hotels, the beach a five-year-old can handle), in one language. Restaurants, houses, songs, the emails someone could send, the meetings that could go on a calendar: any set of options works the same way. Understand the person deeply. Describe every option in the same terms. Connect them, act, learn.

Everyone calls it recommendations because the grid was all we could see. The machine underneath is the connection: a person understood, the options understood, both in one language. The same shape sits under far more than shopping. Anything that can be described can be connected.

Read next → The Other Half of Personalization