When I tell people I work on recommendation systems for fashion, the most common response is some variation of: why does every app keep showing me the same stuff? It is usually asked as if the answer might be laziness, or corporate complicity with large brands, or algorithmic incompetence. The real answer is less satisfying and more structural: recommendation systems converge on popular brands because that convergence is, by most of the metrics these systems are optimized for, the correct answer. The problem is with the metrics.
Let me be specific about the mechanics.
What recommendation systems are actually optimizing for
Most commercial recommendation systems in fashion are optimized for click-through rate (how often someone taps a suggestion) and conversion rate (how often that tap becomes a purchase), with some variant of revenue per user as a longer-horizon signal. These are reasonable objectives for a platform trying to generate revenue. The problem is that these objectives are not the same as helping someone discover what they actually want, and the gap between those two goals is where the convergence problem lives.
A system optimized for click-through will learn quickly that certain brands generate higher click-through rates. Higher click-through is partly a function of genuine interest, but it is also a function of brand familiarity. People are more likely to click on a name they recognize, a name they have been thinking about, a name they have seen in multiple contexts before. Large brands with extensive marketing budgets appear in more contexts. Their familiarity is manufactured. But from the system's perspective, the high click-through rate is a clean signal that suggests surfacing them more frequently, which increases their familiarity further, which increases their click-through rate further. The feedback loop runs in one direction.
A system optimized for conversion has a related but distinct problem. Conversion correlates with confidence at the time of purchase: people convert more readily on brands they have purchased from before, because the risk of the purchase feels lower. A system that learns this will systematically favor brands with existing purchase relationships, which are, by definition, brands the user has already found and does not need to discover. The system is optimizing for efficiency at the exact point where efficiency is the wrong goal.
The distribution asymmetry in training data
Even a system with well-designed objectives faces a structural problem: the training data is not evenly distributed across the brand landscape. A large brand with thirty million items sold last year contributes thirty million data points to the training set. An independent label with three hundred items sold contributes three hundred. The system's model of what the independent label's customers look like is built on a sample that is one hundred times smaller, which means it is one hundred times noisier.
When a system has high-confidence signals for large brands and low-confidence signals for small ones, it will use the high-confidence signals by default. Not because it is designed to favor large brands but because uncertainty in a signal is a reason to trust it less. The system is being epistemically rational. The consequence is that brands where the system is most uncertain (typically the independent, lower-volume ones) get surfaced less, which means they accumulate less data, which means the system remains uncertain about them indefinitely.
This is a different kind of problem than bias in the conventional sense. There is no intentional discrimination. The structural outcome, smaller brands remaining invisible, is a consequence of rational behavior given skewed data inputs. You cannot fix it by auditing for bias in the traditional sense. You can only fix it by changing what data the system uses or by building a different kind of system.
Why personalization does not solve the problem
The common counter-argument is that better personalization should address this: if a system knows what you actually like, it should be able to surface more relevant content regardless of brand size. This argument has some validity, but it runs into the same distribution problem from a different angle.
Personalization requires knowing the user. Knowing the user requires data about them. For users who have extensive purchase histories across many brands, personalization can produce genuinely differentiated results. For users who are new to the system, or users whose taste runs toward brands the system knows little about, personalization defaults to population-level signals. Population-level signals favor popular brands. The system falls back to the same ten recommendations it shows everyone else.
There is also a deeper problem with personalization as a solution to discovery. The best personalization systems are very good at showing you more of what you have already demonstrated you like. Discovery is the opposite problem: finding things you will like before you have demonstrated that you like them. A system tuned for personalization efficiency is structurally misaligned with the discovery objective, even when it appears to be serving it by being highly relevant to your existing taste.
What the Atorie approach trades away
I want to be honest about what we gave up when we built Atorie around a different signal set. The attribute-based matching approach we use does not optimize for click-through or conversion. It optimizes for profile alignment: how well does a garment's characteristics match what the user's style profile says they want. Those are related but not identical objectives, and the differences matter.
A click-optimized system is very good at generating engagement. Our system will sometimes surface things that are genuinely right for a user but not immediately exciting to look at, because the attribute alignment is strong even when the initial visual impression is not arresting. That is a real product challenge. First-session engagement is harder when you are not defaulting to familiar high-attention brands.
What we gain is the ability to surface independent labels for which we have zero purchase history, as long as we have accurate attribute data and an accurate user profile. The matching can work with three data points about a label if those three data points are the right ones. A collaborative filtering system needs hundreds or thousands of data points before its confidence is high enough to recommend a label to anyone.
Whether that trade is worth making depends on what you think recommendation systems are for. If they are for maximizing revenue from the most predictable paths, then the systems that exist are already quite good. If they are for helping someone with genuine taste find things they could not have found alone, then the existing systems are failing at the most interesting version of their job, and building something different is worth the tradeoffs that come with it.