A client walks into a boutique having spent $80,000 over three years. She asks for a specific hero handbag. The sales associate smiles and says it is not available. Meanwhile, another client who spent less walks out with it.
This is not random. It is not always favoritism either. Increasingly, it is a data decision.
Scarce "hero products" (the flagship items a brand deliberately keeps in short supply, like a certain quilted flap bag or an exotic-leather tote) cannot be bought on demand. Clients join an informal or formal waitlist, and the brand chooses who gets offered the item. That choice is where data enters.
This lesson shows how to build a simple allocation model: a scoring system that ranks waitlisted clients for a scarce item. We will use lifetime spend, category diversity, and resale-flipping risk as inputs.
First, define the core idea. Scarcity here is a supply choice. The brand could make more, but chooses not to, because rarity supports price, desirability, and brand equitybrand equityThe commercial value your brand adds beyond functional product attributes: the price premium, preference and loyalty it generates.Voir la définition complète → (the commercial value of the brand's reputation).
For a full grounding in why luxury pricing behaves differently from normal goods, the classic reference is the "rarity principle" discussed in Kapferer and Bastien's work on luxury strategy. A readable overview of luxury demand dynamics is available in this open McKinsey State of Fashion material.
The key consequence for data: demand exceeds supply on purpose, so the brand must ration. Rationing means choosing clients. Choosing clients is a ranking problem, and ranking is what data models do well.
Before touching data, decide the objective. A common mistake is optimizing for one number (spend) when the brand cares about several things at once.
A well-run allocation usually balances:
These three goals mapmapUsing software to automate repetitive marketing tasks and campaigns, enabling personalisation at scale across channels like email, web, and social.Voir la définition complète → cleanly to three data signals.
The simplest signal. Total value a client has purchased, ideally across all channels and boutiques, not just one store.
Watch for two traps. First, recency matters: someone who spent heavily five years ago and nothing since is different from a current active client. Second, avoid double-counting returns. Use net spend (purchases minus returns).
A client who only buys the scarce hero product, and nothing else, is often a flipper (someone buying to resell for profit) or a purely transactional shopper. A client who buys fragrance, shoes, and ready-to-wear is more embedded in the brand.
A clean way to measure spread is a diversity score. One well-known method is the Herfindahl-Hirschman Index (HHI), normally used to measure market concentration. Applied here, it measures how concentrated a client's spend is in one category.
Lower concentration means higher diversity.
This is the hardest and most important signal. You are estimating the probability a client will resell the hero item quickly rather than keep it.
Useful proxy signals include:
Note the ethical and legal line clearly. You may score behavior with the client's own transaction history. You should not build models on protected characteristics (race, gender, nationality, age) or scrape a client's private life. Doing so risks discrimination liability and violates data protection rules such as the EU's GDPR (General Data Protection Regulation, which governs how personal data is collected and used). Keep the model on first-party purchase behavior.
Now combine the signals into one allocation score. The logic: reward spend and diversity, penalize flip risk.
Here is a minimal, readable example in Python.
def allocation_score(net_spend, diversity, flip_risk,
w_spend=0.4, w_div=0.3, w_flip=0.3):
# net_spend, diversity, flip_risk each scaled 0 to 1
# flip_risk is a penalty, so we subtract it
score = (w_spend * net_spend
+ w_div * diversity
- w_flip * flip_risk)
return round(score, 3)
clients = [
{"name": "A", "net_spend": 0.9, "diversity": 0.8, "flip_risk": 0.1},
{"name": "B", "net_spend": 0.95, "diversity": 0.2, "flip_risk": 0.7},
{"name": "C", "net_spend": 0.6, "diversity": 0.9, "flip_risk": 0.1},
]
ranked = sorted(clients,
key=lambda c: allocation_score(**{k: c[k] for k in
["net_spend","diversity","flip_risk"]}),
reverse=True)
for c in ranked:
print(c["name"], allocation_score(c["net_spend"],
c["diversity"], c["flip_risk"]))Run this and Client B, the highest spender, ranks last. Why? High flip risk and low diversity. Client A wins: strong spend, broad relationship, low flip risk.
That single result captures the whole lesson. The biggest wallet does not automatically win.
Notice each input is scaled 0 to 1. Raw dollars and raw diversity indices are on different scales, so you must normalize them first. A common approach is percentile ranking within the waitlist: the top spender on the list becomes 1.0, the median becomes 0.5. This keeps one very rich client from dominating the score.
The weights (0.4, 0.3, 0.3 above) are a business decision, not a math fact. A brand terrified of resale might raise the flip-risk weight. A brand pushing to grow ready-to-wear might raise diversity. Make the weights explicit and reviewable, so leadership owns the trade-off rather than an opaque algorithm.
How Hermès Birkin Bags Became A $10 Billion Business
A score is not a policy. Two guardrails matter.
Human override. The model ranks; a human confirms. A client relationship manager may know context the data misses (a client who resold once due to a genuine life event, not flipping).
Explainability. If a client asks why they were not offered the item, "the algorithm said no" is unacceptable and, in some jurisdictions, may trigger rights to an explanation under data protection law. Keep the reasons legible: spend, diversity, behavior.
Vérification des acquis
1. In the context of luxury hero products, why is scarcity described as 'engineered, not accidental'?
2. Why does deliberate scarcity transform client allocation into a ranking problem?
3. The lesson warns against a 'common mistake' when defining the allocation objective. What is that mistake?
4. Select ALL correct answers. Which inputs does the lesson propose for scoring and ranking waitlisted clients?
Sélectionnez toutes les réponses correctes.
5. Select ALL correct answers. What does the opening scenario (a high-spending client denied the bag while a lower-spending client receives it) illustrate about allocation?
Sélectionnez toutes les réponses correctes.
Building the score is step one. You must then check if it improves outcomes. Define success metrics before you deploy, not after.
Useful ones:
Run the model in "shadow mode" first: let it rank clients while humans keep deciding as usual, then compare. If the model's top picks match your best-judgment outcomes and reduce resale leakage, you have evidence to trust it.
Any visible scoring rule gets gamed. If clients learn that category diversity matters, some will buy a fragrance purely to qualify for a bag, then never return.
Two defenses. First, do not publish the exact weights. Second, weight sustained behavior over one-off purchases: a single fragrance bought the week before a bag request should count far less than three years of steady, varied buying.