COMPARISON
SHOWS EVERYTHING
AND DECIDES NOTHING
Almost every online store can put two products side by side and list twenty specs. And almost none can do the one thing that matters - sell the product that is actually right for me.
- A handful of products, a bit of geometry, zero machine learning.
- PATH
- ~/notes/03-compare-decides-nothing.md
- DATE
- 2026-06-02
- READ
- ~14 MIN
- AUTHOR
- Andrii Volkov · @volkovskey
- TAGS
- ecommerce · topsis · javascript · decisions
- SERIES
- /notes · 03
A couple of days ago I was picking a new phone - whether to get something basic for myself, or get a nicer one for my wife and take hers. Two options happened to land at almost the same price: iPhone 15 and iPhone 16e. I opened the comparison and the site laid everything out honestly. The 15 has two cameras instead of one and a slightly older chip. The 16e has a newer chip, one camera, and different battery life. Everything visible, everything neatly in columns. And I sat with that table for ten minutes, because it showed me the difference - but never once told me what to do with it.
0x01BEFORE THE TABLE
| iPhone 15 | iPhone 16e | |
|---|---|---|
| price | 30 999 UAH | 26 999 UAH |
| display | 6.1″ | 6.1″ |
| Dynamic Island | yes | no |
| Apple Intelligence | no | yes |
| chip | A16 | A18 |
| cameras | 48 + 12 MP | 48 MP |
| battery | 3349 mAh | 4005 mAh |
| MagSafe | yes | no |
| weight | 171 g | 167 g |
| advice? | ? | ? |
This isn't the first time. A year ago I got stuck the same way choosing between two scooters in the same price range: one had a longer range, the other was lighter and easier to fold. A minor detail? Not for me - I was living on the fifth floor without an elevator, and every extra kilogram meant dragging it up by hand twice a day. But the table doesn't know about my floor. It just puts '60 km' next to '55 km' and '18 kg' next to '17 kg' - and leaves me alone with the decision.
And that's when it hits you. The comparison feature is a great display and a bad advisor. It's built to show differences, not to resolve them. The more specs it lists, the better it's doing its job - and the harder it gets for me. Five rows is still manageable. Twenty rows across four columns - that's no longer help making a decision, that's homework.
The comparison feature is built to show differences, not to resolve them.
What I was missing every time was one row at the bottom of the table. Not 'similar products', not ads, not 'people also bought'. A row that would take what matters to me and sort the products accordingly: for you - this one.
It turns out this is an entirely solvable problem. I know, because I solved it once.
0x02WHY IT DOESN'T WORK
Before showing the solution, I want to honestly name what's actually broken. Because the table isn't bad - quite the opposite. The problem is that even a perfect table leaves all the work to you. Here's what it feels like:
- The spec set isn't mine. The table shows what the store has, not what matters to me. Half the rows are about things I don't care about, and the spec that would decide everything might not even make it into the table.
- Can't weight the trade-offs. One product is better here, the other is better there, and the table places them side by side as equals. Even though for me one spec matters five times more than the rest. The weighting stays in my head, not on the screen.
- Information overload. The more detailed the table, the closer it gets to a technical datasheet. Twenty rows - and you're no longer choosing, you're analyzing.
- Zero personalization. The same table for me, my grandad, and a tech reviewer. It doesn't know about my fifth floor without an elevator, or that I use the camera once a month.
- Nothing for the uninitiated. 'Clock speed', 'Wh', 'nanometers' - for someone without a background these are just numbers. The table shows them and never once explains which ones actually matter.
The most painful one is the second. Back to scooters: the first has a longer range, the second is lighter. The table will honestly show '60 km' vs '55 km' and '18 kg' vs '17 kg'. But it doesn't know that for me, with that fifth floor and no elevator, five extra kilometers of range are worth nothing against one kilogram of weight. For the neighbor downstairs - exactly the opposite. Same row, opposite conclusions - and the table stays silent for both of them.
Same row, opposite conclusions - and the table stays silent for both of them.
And this isn't a flaw of any particular store. Go to Rozetka, Comfy, anywhere - comparisons are there, often decent. But a system that actually recommends within that comparison? Nowhere. You'll get 'people also bought' and 'similar products' - but those are about the store's shelf, not your choice between products you've already picked out.
0x03IF IT COULD RANK
The solution sounds almost offensively simple: under the comparison table, there should be a row that takes what matters to you and puts the products in order. Not 'similar', not 'popular' - exactly these, sorted for you.
The only question: what method to rank with. And half the trendy answers drop out immediately. I'm not Amazon. A typical store doesn't have millions of clicks for a neural network to learn 'what people like.' It has a handful of products and a handful of visitors. The method has to work on exactly this - on those two to four products a person just picked out right now.
What I considered. Collaborative filtering ('people like you liked this') is powerful, but wants mountains of behavioral data and suffers from cold start: a new product or store has nothing to recommend from. Neural networks give the highest accuracy on large datasets - and the highest price: data, servers, a team, months. For comparison in a small store, that's using a sledgehammer to crack a nut, and also a black box where you can't explain to the user why this was recommended. Analytic hierarchy process is closer - weights from conscious comparisons - but the pairwise comparison matrix grows with every spec and also wants many choices to be reliable.
What's needed is a method that works on a handful of products, has no cold start, is transparent enough to see the decision row by row, and lets the user control what matters to them.
All of this fits TOPSIS - the Technique for Order Preference by Similarity to Ideal Solution. A multi-criteria decision method described by Ching-Lai Hwang and Kwangsun Yoon in 1981. [1] The idea in one sentence: imagine an ideal product (the best value for every spec among the ones available) and an anti-ideal (the worst for every spec) - then rank the real products by how close each one is to the ideal and how far from the anti-ideal.
Ranking doesn't need a neural network. It needs a method you can explain row by row.
| Approach | Data needed | Cold start | Transparency | Small store |
|---|---|---|---|---|
| Collaborative filtering | lots (behavior) | yes | low | no |
| Neural network | lots + servers | yes | black box | no |
| AHP (analytic hierarchy process) | many comparisons | moderate | medium | partially |
| TOPSIS | handful of products | almost none | high | yes |
Sounds simple? It is simple - and that's its main advantage. Here's how it calculates.
0x04HOW TOPSIS WORKS
The whole trick of the method is not to compare products against each other (that's the mess we're trying to escape), but to compare each one against two imaginary reference points. The first is the ideal product: take the best value for each spec among the available products and assemble them into one 'Frankenstein.' The second is the anti-ideal: the same, but from the worst values. Neither exists for sale; they're only needed as two reference points.
Next comes the key nuance - why TOPSIS doesn't reduce to the naive 'pick the one closest to the ideal.' A product can be close to the ideal while also not being far from the anti-ideal - mediocre, but balanced. So the method looks at the ratio: how far a product is from the anti-ideal relative to the total distance to both reference points. The winner is whoever has the best balance: close to the ideal and far from the anti-ideal.
feature 2 (higher = better) ▲ │ ◆ A⁺ (ideal: best of everything) │ ·P2 │ ·P1 │ ·P3 │ · ◆──┼─────────────────────▶ feature 1 (higher = better) A⁻ (anti-ideal: worst of everything)
Now the same in five steps. The input is a matrix: rows are products, columns are specs.
1. normalization (direction-aware): higher-is-better: r = (x - min) / (max - min) lower-is-better: r = (max - x) / (max - min) 2. weighting: t = r × w w - feature weight (priority) 3. reference points: A⁺ = max in each column t (ideal) A⁻ = min in each column t (anti-ideal) 4. distances (Euclidean): d⁺ = √ Σ (t - A⁺)² d⁻ = √ Σ (t - A⁻)² 5. closeness: C = d⁻ / (d⁺ + d⁻) 0 ≤ C ≤ 1 sort by C descending → best product first
The first step does the most important thing - it brings everything to a common 0..1 scale. Without it, battery capacity in thousands of mAh would simply drown out weight in tens of kilograms by sheer scale, even though they're equally relevant to the decision. Direction is also resolved here: for price and weight 'lower is better', so the formula flips, and after normalization higher always means better. A useful side effect - the ideal becomes simply the maximum of each column and the anti-ideal the minimum, with no separate treatment of 'what's a benefit, what's a cost.' [2]
One thing still untouched: where the weights w come from. Because it's precisely those that turn an 'objective' ranking into a recommendation specifically for you.
0x05WHERE WEIGHTS COME FROM
Weights are where the 'objective' ranking becomes a recommendation specifically for you. Without weights, TOPSIS treats all specs equally - and that's not how it works: for some people price is everything, for others the camera, for others the weight going up five floors.
The worst thing you can do here is ask a person to enter numbers. Nobody wants to type 'display = 0.32, battery = 0.21'. So weights come from order, not from numbers. The user simply arranges what matters more to them: most important first. The system is fine with this: if there are N specs, the top priority gets weight N, the next N-1 and so on down to 1, and anything the user didn't touch gets weight 1. Reorder the list - weights recalculate.
And from this, two modes.
- Community. The store accumulates the choices of all visitors and averages them across each spec. A newcomer who doesn't want to configure anything immediately gets a smart default - 'what the majority actually looks at in this category.' A recommendation out of the box.
- My priorities. Rearrange specs for yourself - and the ranking rebuilds instantly. No cold start: works from the very first choice, because it needs no one's data but yours.
Here's what averaging looks like with three buyers choosing a phone (specs: A - display, B - weight, C - battery, D - display resolution, E - camera resolution):
| A | B | C | D | E | |
|---|---|---|---|---|---|
| Buyer 1 (display → battery → weight) | 5 | 3 | 4 | 1 | 1 |
| Buyer 2 (weight → battery → display) | 3 | 5 | 4 | 1 | 1 |
| Buyer 3 (camera only) | 1 | 1 | 1 | 1 | 5 |
| Average weight | 3 | 3 | 3 | 1 | 2.33 |
Three people - and the profile is already visible: display, weight, and battery are tied in front, resolutions are trailing. The larger the sample, the more stable these weights become. But even at zero data the method doesn't break: the default is all weights at 1, and there's still a ranking, just a 'neutral' one.
0x06TRY IT YOURSELF
Below is not a screenshot or a video. This is real TOPSIS on a real dataset, right inside the article. Pick two to five scooters, set your priorities (or use the community defaults) - and watch the ranking calculate.
Averaged visitor choices - a smart default for "what most people look at." Price, weight, and range matter most.
| criterion | weight | Electric Scooter 4 | Electric Scooter 4 Pro | Electric Scooter 5 Max | Ninebot Max G30P |
|---|---|---|---|---|---|
| Price, UAH ↓ | ×5.50 | 24 912 | 29 064 | 33 216 | 29 064 |
| Motor, W ↑ | ×1.79 | 600 | 700 | 1000 | 350 |
| Battery, mAh ↑ | ×2.57 | 370 | 475 | 477 | 551 |
| Range, km ↑ | ×4.43 | 35 | 55 | 60 | 65 |
| Top speed, km/h ↑ | ×4 | 25 | 25 | 25 | 30 |
| Weight, kg ↓ | ×5.29 | 17.2 | 17 | 18 | 19 |
| Wheels, ″ ↑ | ×1.86 | 10 | 10 | 10 | 10 |
| Foldable ↑ | ×4.07 | yes | yes | yes | yes |
| Suspension ↑ | ×2.57 | no | no | yes | no |
| Brakes ↑ | ×2.64 | disc | disc | disc | drum |
| Tires ↑ | ×2.50 | pneumatic | pneumatic | pneumatic | pneumatic |
| Warranty, yr ↑ | ×2.50 | 1 | 1 | 1 | 1 |
| Rating ↑ | ×1.86 | 4.6 | 4.7 | 4.8 | 4.7 |
Best in row is highlighted. Weight shows how much TOPSIS counts this criterion - the higher, the more impact on the final ranking.
- 1Electric Scooter 4 Pro0.557
- 2Electric Scooter 40.514
- 3Ninebot Max G30P0.494
- 4Electric Scooter 5 Max0.470
One important note: everything is calculated on the selected set. Add or remove a product - and the min and max for each spec change, along with normalization and the entire ranking. So the recommendation depends not only on the weights, but on what exactly you've placed side by side.
0x07IS THE ADVICE GOOD
The method looks good on paper - but does it give advice I'd stand behind? I ran it on things I'd actually be choosing.
First, scooters - four in the same price range: Scooter 4, 4 Pro, 5 Max, and Ninebot Max G30P. I asked friends what they look at first, and entered those choices as 'accumulated' community data. Most valued price, weight, and range. With those weights the system recommends the Xiaomi Electric Scooter 4 Pro with a score of 0.557. Not surprising: the cheapest Scooter 4 wins on price but loses on weight and range, while the 4 Pro is worst at nothing - optimal on the price/specs balance.
Now I set my own priorities. Same fifth floor without an elevator, so for me it's motor power (easier uphill), weight, and foldability. With those weights the system switches to the Xiaomi Electric Scooter 5 Max - the most powerful, and not much heavier than the previous recommendation. Beat the 4 Pro by a hair: 0.701 vs 0.692. Same set of products, different me - different answer.
With phones it's the same, but more striking. Take four: iPhone 16e, 17e, 17, and Air (prices are approximate retail in Ukraine, June 2026). I set camera as the top priority, price secondary - and iPhone 17 comes out on top, the only one in the set with a dual camera: 0.579. Then I swap just two weights, camera and price, nothing else - and the cheapest one, iPhone 16e, comes out ahead: 0.563. Same set, same person, two priorities swapped - and the recommendation flipped.
And here's the honest summary of this section. The recommendation is very sensitive to weights. That's simultaneously its strength (adapts precisely to you) and its weakness (swap two priorities - different winner). That's why it's worth looking at the limits of the method separately.
0x08WHAT IT DOESN'T FIX
Let me clear up a possible misunderstanding upfront: TOPSIS is not 'the one right answer.' It's one of the methods that closes the problem this article started with. A good choice for getting started - simple, transparent, works on small data. But the system around it can and should grow. The honest limits here are more like development vectors than verdicts.
- Garbage in. The method honestly ranks what it's given. Dirty or incomplete catalog data - and the ranking will be the same. Recommendation quality can't exceed spec quality.
- Qualitative specs lose meaning as numbers. 'Foldable = 1/0', 'brakes: disc = 2, drum = 1' - that's an ordinal scale the method treats as cardinal. Rough; for fine qualitative distinctions a different approach is needed.
- Community weights at the start are small surveys. The more real choices, the more accurate the default. At zero it's just 'neutral.'
- No direct comparison with other methods. Honestly: I haven't run TOPSIS against AHP or ML on the same dataset to measure who beats whom. That's a separate piece of work.
The method honestly ranks what it's given. Want better advice - give it better data.
Where this naturally grows: neural networks for weight discovery once data accumulates; showing multiple recommendations simultaneously for different profiles; searching and adding products to the comparison that aren't in the list yet. TOPSIS here is the foundation, not the finish line.
0x09WHY NOBODY DOES IT
The market is empty - I checked back when doing my thesis [3]: comparison with built-in recommendations doesn't exist in Amazon or in Ukrainian stores. Which is strange - the feature is obviously useful. I have a hypothesis why.
This kind of recommendation pushes toward 'best for you,' not 'best for the store.' An honest ranking can perfectly well say 'get the cheaper one, it suits you better' - which is exactly the opposite of upselling. There's tension here: a confident buyer purchases more readily (that's a conversion win), but a system that recommends the optimum rather than the margin doesn't help push the expensive items. And many seem to choose the margin side.
Maybe I'm wrong, but I think the direction is roughly right.
0x0AIN SHORT
- The comparison table is a display, not an advisor. It's missing the ranking row.
- Ranking for a person is a multi-criteria decision problem, not a neural network.
- TOPSIS works on a handful of products, is transparent, and has almost no cold start.
- Weights come from priorities - community or your own. That's what makes the ranking yours.
- The method is sensitive to weights: simultaneously its strength and its risk.
- This is the foundation. Neural networks come later, when data has grown.