Майже кожен інтернет-магазин уміє покласти два товари поруч і показати двадцять характеристик. І майже жоден не вміє головне - продати товар, який потрібен саме мені.
Жменя товарів, трохи геометрії, нуль машинного навчання.
2026-06-0214 хв2 700 слівnotes / 03
Пару днів тому я обирав новий телефон (чи взяти собі простіше, чи взяти дружині покраще і забрати її собі). Зійшлося так, що два варіанти впали майже в одну ціну: iPhone 15 і iPhone 16e. Відкрив порівняння - і сайт чесно виклав усе. У 15-го дві камери замість однієї і трохи старіший чип. У 16e новіший чип, одна камера й інша автономність. Усе видно, усе акуратно в колонках. І я сидів над цією таблицею хвилин десять, бо вона показала мені різницю - але жодним словом не підказала, що з цією різницею робити.
01Перед таблицею
iPhone 15
iPhone 16e
ціна
30 999 грн
26 999 грн
екран
6.1″
6.1″
Dynamic Island
так
ні
Apple Intelligence
ні
так
чип
A16
A18
камери
48 + 12 МП
48 МП
батарея
3349 мА·год
4005 мА·год
MagSafe
так
ні
вага
171 г
167 г
порада?
?
?
Це не вперше. Рік тому я так само завис над двома самокатами в одну ціну: один їде далі, інший легший і зручніше складається. Дрібниця? Для мене ні - я жив тоді на п'ятому поверсі без ліфта, і кожен зайвий кілограм доведеться тягнути руками двічі на день. Але таблиця про мій поверх не знає. Вона просто кладе «60 км» навпроти «55 км» і «18 кг» навпроти «17 кг» - і лишає мене сам на сам із вибором.
І тут доходить проста річ. Функція порівняння - це чудовий дисплей і поганий порадник. Вона зроблена, щоб показувати відмінності, а не щоб їх вирішувати. Чим більше характеристик вона виводить, тим краще робить свою роботу - і тим важче стає мені. П'ять рядків ще терпимо. Двадцять рядків на чотири колонки - це вже не допомога у виборі, це домашнє завдання.
Функція порівняння зроблена, щоб показувати відмінності, а не щоб їх вирішувати.
Чого мені бракувало щоразу - це одного рядка під таблицею. Не «схожих товарів», не реклами, не «з цим купують». Рядка, який покаже те, що важливо саме мені, і скаже: тобі - оцей.
Виявляється, це цілком розв'язувана задача. Я знаю, бо колись її вже розв'язав.
02Чому не працює
Перш ніж показувати рішення, варто чесно назвати, що саме зламано. Бо таблиця не погана - навпаки. Проблема в тому, що навіть ідеальна таблиця залишає всю роботу на тобі. Ось як це відчувається:
Набір характеристик не мій. Таблиця показує те, що має магазин, а не те, що важливо мені. Половина рядків - про речі, які мене не турбують, а параметр, що вирішив би все, може взагалі не потрапити в таблицю.
Не можна зважити переваги. Один товар кращий тут, інший - там, і таблиця кладе їх поруч як рівних. Хоч для мене одна характеристика важить уп'ятеро більше за решту. Зважування лишається у мене в голові, а не на екрані.
Перевантаження. Що детальніша таблиця, то ближча вона до технічного даташита. Двадцять рядків - і ти вже не обираєш, ти аналізуєш.
Нуль персоналізації. Таблиця однакова для мене, для мого діда і для блогера-оглядача. Вона не знає ні мого поверху без ліфта, ні того, що камерою я користуюсь раз на місяць.
Нічого для тих, хто не в темі. «Тактова частота», «Вт·год», «нанометри» - для людини без фону це просто числа. Таблиця їх показує і жодного разу не пояснює, що з них насправді важливе.
Найболючіший - другий. Повернімось до самокатів: перший їде далі, другий легший. Таблиця чесно покаже «60 км» проти «55 км» і «18 кг» проти «17 кг». Але вона не знає, що для мене з тим п'ятим поверхом без ліфта зайві п'ять кілометрів запасу нічого не варті проти одного кілограма ваги. Для сусіда знизу - рівно навпаки. Той самий рядок, протилежні висновки - і таблиця однаково мовчить для обох.
Той самий рядок, протилежні висновки - і таблиця однаково мовчить для обох.
І це не вада конкретного магазину. Зайди в Rozetka, Comfy, куди завгодно - порівняння там є, часто непогане. А от системи, яка б усередині цього порівняння щось радила, немає ніде. Тобі запропонують «з цим купують» і «схожі товари» - але це про вітрину магазину, а не про твій вибір між уже відібраними варіантами.
03Якби вона ранжувала
Рішення звучить майже образливо просто: під таблицею порівняння має з'явитися рядок, який бере те, що важливо тобі, і ставить товари в порядок. Не «схожі», не «популярні» - саме ці, відсортовані під тебе.
Питання лише одне: яким методом ранжувати. І тут одразу відпадає половина модних відповідей. Я - не Amazon. У звичайного магазину немає мільйонів кліків, з яких нейромережа вивчить, «що люди люблять». У нього є жменя товарів і жменя відвідувачів. Метод мусить працювати саме на цьому - на тих двох-чотирьох товарах, що людина відібрала просто зараз.
Що я перебрав. Колаборативна фільтрація («схожим на тебе сподобалось оце») потужна, але хоче гори даних про поведінку і страждає від холодного старту: новому товару чи магазину рекомендувати нічим. Нейромережа дає найвищу точність на великих даних - і найвищу ціну: дані, сервери, команда, місяці. Для порівняння в малому магазині це мікроскопом по цвяху, та ще й чорна скриня, де не поясниш користувачу, чому обрано саме це. Метод аналізу ієрархій уже ближче - ваги зі свідомих порівнянь, - але матриця парних порівнянь розростається з кожною характеристикою і теж хоче багато виборів, щоб бути достовірною.
А потрібен метод, який працює на жмені товарів, не має холодного старту, прозорий настільки, що рішення видно рядок за рядком, і дає користувачу самому крутити, що для нього важливо.
Усьому цьому відповідає TOPSIS - техніка впорядкування за схожістю до ідеального рішення. Метод багатокритеріального вибору, який Чінг-Лай Хванг і Кьонг Юн описали ще 1981 року. [1] Ідея в одному реченні: уяви ідеальний товар (найкраще по кожній характеристиці) і антиідеал (найгірше по кожній) - і постав реальні товари в порядок за тим, наскільки кожен близький до ідеала й далекий від антиідеала.
Ранжування не потребує нейромережі. Воно потребує методу, який можна пояснити рядок за рядком.
Підхід
Даних треба
Холодний старт
Прозорість
Малий магазин
Колаборативна фільтрація
багато (поведінка)
так
низька
ні
Нейромережа
дуже багато + сервери
так
чорна скриня
ні
AHP (аналіз ієрархій)
багато порівнянь
помірно
середня
частково
TOPSIS
жменя товарів
майже немає
висока
так
Звучить просто? Воно й просте - і це його головна перевага. Ось як воно рахує.
04Як працює TOPSIS
Уся хитрість методу - не порівнювати товари між собою (це й є та каша, з якої ми тікаємо), а порівняти кожен із двома вигаданими орієнтирами. Перший - ідеальний товар: береш найкраще значення кожної характеристики серед наявних і складаєш із них одного «франкенштейна». Другий - антиідеал: те саме, але з найгірших значень. Жодного з них не існує в продажу; вони потрібні лише як дві точки відліку.
Далі - ключовий нюанс, через який TOPSIS не зводиться до наївного «обери найближче до ідеала». Товар може стояти близько до ідеала й водночас недалеко від антиідеала - посередній, але збалансований. Тому метод дивиться на співвідношення: наскільки товар далекий від антиідеала відносно загальної відстані до обох орієнтирів. Переможець - у кого цей баланс найкращий: близько до ідеала і при цьому далеко від антиідеала.
Кожен товар - точка після нормалізації. Переможець - не той, хто найближче до ідеала A⁺, а той, у кого найкращий баланс: близько до A⁺ і далеко від A⁻.
Тепер те саме п'ятьма кроками. На вході - матриця: рядки це товари, колонки це характеристики.
/ MATHtext
1. нормалізація (під напрям характеристики): більше-краще: r = (x - min) / (max - min) менше-краще: r = (max - x) / (max - min)2. зважування: t = r × w w - вага (пріоритет) характеристики3. орієнтири: A⁺ = max у кожній колонці t (ідеал) A⁻ = min у кожній колонці t (антиідеал)4. відстані (евклідові): d⁺ = √ Σ (t - A⁺)² d⁻ = √ Σ (t - A⁻)²5. близькість: C = d⁻ / (d⁺ + d⁻) 0 ≤ C ≤ 1 сортуємо за C спадаюче → найкращий товар перший
Перший крок робить найважливіше - приводить усе до спільної шкали 0..1. Без цього ємність батареї в тисячах мА·год просто задавила б вагу в десятках кілограмів самим лише масштабом, хоча для вибору вони рівноправні. Заразом тут вирішується напрям: для ціни й ваги «менше = краще», тому формула перевертається, і після нормалізації більше завжди означає краще. Зручний наслідок - ідеал стає просто максимумом кожної колонки, а антиідеал мінімумом, без окремого розбору «де вигода, де витрата». [2]
Лишилося єдине, чого ми ще не чіпали: звідки беруться ваги w. Бо саме вони перетворюють «об'єктивний» ранг на рекомендацію особисто для тебе.
05Звідки ваги
Ваги - це те місце, де «об'єктивний» ранг стає рекомендацією особисто для тебе. Бо без ваг TOPSIS вважає всі характеристики рівними, а так не буває: комусь головне ціна, комусь камера, комусь вага на п'ятий поверх.
Найгірше, що тут можна зробити, - попросити людину ввести числа. Ніхто не хоче друкувати «екран = 0.32, батарея = 0.21». Тому ваги беруться з порядку, а не з цифр. Користувач просто розставляє, що для нього важливіше: найважливіше - перше. Систему це влаштовує: якщо характеристик N, то першому пріоритету дається вага N, наступному N-1 і так далі до 1, а все, що людина не чіпала, отримує 1. Перетягнув список - ваги перерахувались.
І звідси два режими.
Спільнота. Магазин накопичує вибори всіх відвідувачів і усереднює їх по кожній характеристиці. Новачку, якому ліньки щось налаштовувати, одразу видається розумний дефолт - «на що насправді дивиться більшість у цій категорії». Це рекомендація «з коробки».
Власні пріоритети. Перетягуєш характеристики під себе - і ранг моментально перебудовується. Жодного холодного старту: працює з першого ж вибору, бо нічиїх даних, крім твоїх, не потребує.
Ось як виглядає усереднення на трьох покупцях, що обирали телефон (характеристики: A - екран, B - вага, C - батарея, D - роздільна екрана, E - роздільна камери):
A
B
C
D
E
Покупець 1 (екран → батарея → вага)
5
3
4
1
1
Покупець 2 (вага → батарея → екран)
3
5
4
1
1
Покупець 3 (лише камера)
1
1
1
1
5
Середня вага
3
3
3
1
2.33
Три людини - і вже видно профіль: екран, вага й батарея йдуть нарівні попереду, роздільні здатності - позаду. Чим більша вибірка, тим стабільніші ці ваги. Але навіть на нулі даних метод не ламається: дефолт - усі ваги по 1, і ранг усе одно є, просто «нейтральний».
06Спробуй сам
Нижче - не скріншот і не відео. Це справжній TOPSIS на справжньому датасеті, прямо в статті. Обери два-чотири самокати, постав пріоритети (або візьми «як у більшості») - і дивись, як рахується ранг.
/ topsis-demoscooters · 8 items
1pick 2-5 scooters4/5
2weight source
Averaged visitor choices - a smart default for "what most people look at." Price, weight, and range matter most.
3comparison by criteria
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.
4ranking→ Electric Scooter 4 Pro
1Electric Scooter 4 Pro0.557
2Electric Scooter 40.514
3Ninebot Max G30P0.494
4Electric Scooter 5 Max0.470
normalization→weights→ideal / anti-ideal→closeness C
Важливий нюанс: усе рахується по обраному набору. Додаси або прибереш товар - і мінімум із максимумом по кожній характеристиці зміняться, а з ними нормалізація і весь ранг. Тож порада тут залежить не лише від ваг, а й від того, що саме ти поклав поруч.
07Чи гарні поради
Метод гарний на папері - але чи дає він поради, під якими я підпишусь? Я прогнав його на тому, що реально обирав би.
Спершу самокати - чотири з одного цінового діапазону: Scooter 4, 4 Pro, 5 Max і Ninebot Max G30P. Я опитав друзів, на що вони передусім дивляться, і завів ці вибори як «накопичені» дані спільноти. Більшість цінувала ціну, вагу й запас ходу. На цих вагах система радить Xiaomi Electric Scooter 4 Pro з оцінкою 0.557. І не дивно: найдешевший Scooter 4 виграє ціною, але програє по вазі та запасу, а 4 Pro ніде не найгірший - оптимальний по балансу ціна/характеристики.
0.557Scooter 4 Proрекомендація спільноти
Тепер ставлю свої пріоритети. У мене той самий п'ятий поверх без ліфта, тож для мене це потужність двигуна (легше в горку), вага й те, щоб самокат складався. На цих вагах система перемикається на Xiaomi Electric Scooter 5 Max - найпотужніший, а важить не сильно більше за попередню рекомендацію. Випередив 4 Pro ледь-ледь: 0.701 проти 0.692. Той самий набір товарів, інший я - інша відповідь.
0.701 vs 0.6925 Max обійшов 4 Proмої пріоритети
З телефонами те саме, але показовіше. Беремо чотири: iPhone 16e, 17e, 17 і Air (ціни - орієнтовні роздрібні в Україні, червень 2026). Ставлю пріоритет на камеру, ціна другорядна - і попереду виходить iPhone 17, єдиний у наборі з подвійною камерою: 0.579. Тоді міняю місцями лише дві ваги, камеру й ціну, більше нічого - і вперед виходить найдешевший, iPhone 16e: 0.563. Той самий набір, та сама людина, переставлено два пріоритети - і порада перевернулась.
0.579 → 0.563iPhone 17 → 16eпоміняли місцями камеру й ціну
І ось чесний підсумок цього розділу. Рекомендація дуже чутлива до ваг. Це одночасно її сила (підлаштовується точно під тебе) і її слабкість (переставив два пріоритети - інший переможець). Тому до меж методу варто поставитись окремо.
08Чого не лагодить
Одразу зніму можливе непорозуміння: TOPSIS - не «єдино правильна» відповідь. Це один із методів, що закриває проблему, з якої почалась стаття. Хороший вибір для старту - простий, прозорий, працює на малих даних. Але система навколо нього може й має рости. Чесні межі - це радше вектори розвитку, ніж вироки.
Garbage in. Метод чесно ранжує те, що йому дали. Брудний чи неповний каталог - і ранг буде таким самим. Якість порад не вища за якість специфікацій.
Якісні характеристики втрачають сенс у числах. «Складається = 1/0», «гальма: дискові = 2, барабанні = 1» - це порядкова шкала, яку метод рахує як кількісну. Грубувато; для тонких якісних відмінностей потрібен інший підхід.
Ваги спільноти на старті - це маленькі опитування. Чим більше реальних виборів, тим точніший дефолт. На нулі він просто «нейтральний».
Немає прямого порівняння з іншими методами. Чесно: я не ганяв TOPSIS проти AHP чи ML на одному датасеті, щоб виміряти, хто кого. Це окрема робота.
Метод чесно ранжує те, що йому дали. Хочеш кращих порад - давай кращі дані.
Куди це природно росте: нейромережа на визначення ваг, коли наростуть дані; одночасний показ кількох рекомендацій під різні профілі; пошук і додавання в порівняння товарів, яких ще немає в списку. Тобто TOPSIS тут - фундамент, а не фініш.
09Чому ніхто не робить
Ринок порожній, я перевіряв ще для кваліфікаційної роботи [3]: порівняння з рекомендацією всередині немає ні в Amazon, ні в наших магазинах. І це дивно - функція ж очевидно корисна. У мене є здогад чому.
Така рекомендація штовхає до «найкраще для тебе», а не до «найвигідніше для магазину». Чесний ранг цілком може сказати «бери дешевший, він тобі підходить більше» - а це рівно протилежне до апселу. Тут напруга: впевнений покупець купує охочіше (це плюс конверсії), але система, яка радить оптимум, а не маржу, не дуже допомагає виштовхувати дорожче. І багато хто, схоже, обирає бік маржі.
Можливо, я помиляюсь, але думаю, вектор приблизно такий.
10Коротко
Таблиця порівняння - це дисплей, а не порадник. Бракує рядка, що ранжує.
Ранжування під людину - це багатокритеріальне рішення, а не нейромережа.
TOPSIS працює на жмені товарів, прозорий, майже без холодного старту.
Ваги беруться з пріоритетів - спільноти або власних. Це й робить ранг твоїм.
Метод чутливий до ваг: одночасно його сила і його ризик.
Це фундамент. Нейромережі - потім, коли наростуть дані.
Виноски
[1]Метод TOPSIS запропонували Чінг-Лай Хванг і Кьонг Юн, 1981 (Hwang & Yoon, Multiple Attribute Decision Making: Methods and Applications).
[2]Класичний TOPSIS використовує векторну нормалізацію r = x / √Σx² і розбирає вигоду/витрату на кроці орієнтирів. У реалізації я взяв min-max із напрямом, вшитим у нормалізацію - поширений варіант, і саме його рахує демо вище, тож числа в ньому збігаються з формулами в 0x04.
[3]Ця стаття - за моєю бакалаврською кваліфікаційною роботою «Розробка та впровадження системи рекомендацій у функції порівняння товарів на сайтах інтернет-магазинів» (НТУ «Дніпровська політехніка», 2025).
AV
Andrii Volkov · @volkovskey
Інженер · Системний будівельник · Дніпро / Україна