BirBozor
Blog · Ochiq rivojlanish

5 ta marketpleys o‘rtasida SKU mosligini qanday qilamiz

B
Diyor Khaydarov
8-iyun, 2026 · 11 daq

Bu mart oyida bo‘lgan edi, ishlab chiqishning uchinchi oyida. Admin panelni ochib, qidiruvga «iPhone 15 Pro Max 256» deb yozdim va besh xil do‘kondan besh xil karta oldim. Bu bir xil telefon ekanini faqat shu sababli bilardim — kimdir kechagi kuni menga aynan shu modelni tavsiya qilgan edi. Algoritm bu haqda hech narsa bilmasdi. Algoritm uchun bular besh xil satr edi, va birortasi ham ikkinchisi bilan to‘liq mos kelmasdi.

Uzumda bu «iPhone 15 Pro Max 256ГБ Чёрный» edi. Olchada — «Apple iPhone 15 Pro Max (256GB, Space Black)». Wildberries UZ — «iPhone 15 Pro Max 256GB Космический серый». Asaxiyda — «Смартфон Apple iPhone 15 Pro Max, 256 Gb, Black Titanium». Texnomartda — «iPhone 15 Pro Max 256 Gb (chyornyy titan)». Bitta mahsulot. Besh xil yozuv. Bitta korpus rangi uchun besh xil so‘z. Inglizcha, ruscha, kirill, lotin, qavslar bilan va qavssiz, «Gb» va «ГБ».

O‘sha paytda men marketpleyslar o‘rtasida SKU mosligi vazifasi — bu juma kuni regulyar ifodalar bilan hal qilinadigan mashq emasligini tushundim. Bu Birbozorning muhandislik yadrosi. Quyida — biz buni hozir qanday hal qilayotganimiz, nima ishlamayotgani, nima ishlayotgani va 340 ming SKUli jangovar katalogda olayotgan raqamlarimiz.

Nima moslashishi kerak

Algoritm yozishdan oldin, qaysi mahsulotlar «bir xil» hisoblanishini kelishib olish kerak. Biz SKU-juftlikni to‘rt o‘qda mos kelishi sifatida belgilaymiz: brend va model, xotira hajmi, rang, holati (yangi, qayta tiklangan, vitrina).

Bu oddiy eshitiladi, real hayot bilan to‘qnashguncha. «iPhone 15 Pro Max 256GB Qora» va «iPhone 15 Pro Max 256GB Qora titan» — bu bir xil mahsulot. «iPhone 15 Pro Max 256GB Qora» va «iPhone 15 Pro 256GB Qora» — bu boshqa mahsulot, satrlar to‘rt belgi bilan farq qilsa ham. Algoritm tushunishi kerak: «Pro Max» — bu chegara so‘z, oxiridagi «titan» esa bir xil rangning aniqlashtirilishi.

Qo‘shimcha — «ekvivalent» ranglar mavjud. Apple ranglar nomini avloddan avlodga o‘zgartiradi, marketpleyslar kartaga rasmiy nomni yoki kontent-menejer ko‘rgan nomni yozadi. 14-avlodning «Space Gray»i va 15-avlodning «Black Titanium»i — bu boshqa modellardagi boshqa ranglar. Lekin bir model ichida «Space Black» va «Qora» — bu bir xil rang.

Nega ML yolg‘iz yetarli emas

Sinab ko‘rgan birinchi va eng ommabop g‘oya — multilingual sentence-transformers (paraphrase-multilingual-MiniLM-L12-v2) olish, nomlar embeddingini hisoblash va cosine similarity bo‘yicha moslashtirish. Qog‘ozda toza ko‘rinadi.

Amaliyotda model «iPhone 15 Pro 128GB Black» va «iPhone 15 Pro Max 128GB Black» o‘rtasida 0,85 cosine yaqinlik beradi. «Samsung Galaxy S24» va «Samsung Galaxy S25» o‘rtasida — 0,91. «AirPods Pro» va «AirPods Pro 2» o‘rtasida — 0,88. Ya’ni model uchun «Pro» va «Pro Max» deyarli sinonim, chunki o‘rgatuvchi korpusda ular bir xil kontekstda turadi. Bu xato emas — bu modelning qanday o‘rgatilganining aks-sadosi. Lekin narx mosligi uchun bu falokat: S24 va S25ni adashtirib, foydalanuvchiga «chegirma» ko‘rsatamiz, aslida chegirma yo‘q.

Ikkinchi cheklov — o‘zbek marketpleyslarining kartalarida GTIN (shtrix-kod) yo‘qligi. Amazon yoki eBayda GTIN bo‘yicha moslashtirish vazifaning 80% ini hal qiladi. Bizda Firecrawl ma’lumotlarida GTIN taxminan 6% kartada bor — deyarli har doim brend modellarda. Qolgan 94% da u umuman mavjud emas.

Xulosa: embeddinglar zarur, lekin yetarli emas. Ular nomzodlar beradi. Yakuniy qarorni har doim qat’iy xotira, o‘lcham, rang va «Pro / Pro Max» ierarxiyasi tekshiruvlari bilan rule-based qatlam qabul qiladi.

Pipeline

Bizning hozirgi pipeline shunday — to‘rt bosqich va qo‘lda tekshirish navbatiga ikki chiqish nuqtasi.

Birinchi bosqich — normallashtirish. Sarlavha keraksiz narsalardan tozalanadi: emojilar, takror bo‘shliqlar, marketing qo‘shimchalari, kafolat qavslari. Kirill brendlari lotinga o‘tkaziladi (Эппл → Apple). Xotira belgilari bitta formatga (256gb) keltiriladi. Ranglar qo‘lda yig‘ilgan taxminan 400 juftlik sinonim lug‘at orqali o‘tkaziladi. Chiqishda kanonik token-vektor: brend, model-oila, modifikator (Pro / Pro Max / Plus), xotira, rang, yil.

Ikkinchi bosqich — embedding va top-K retrieval. Kanonik vektor multilingual model bilan kodlanadi va pgvectorda eng yaqin top-50 nomzodni qidiramiz. Bu yakuniy javob emas — bu 340 mingdan 50 gacha qisqartirish.

Uchinchi bosqich — rule-based filtr. 50 nomzoddan faqat brend (aniq), modifikator (Pro va Pro Max — hech qachon bir xil emas), xotira hajmi (aniq) mos keladiganlarini qoldiramiz, rang esa aniq mos kelishi yoki bir sinonim klasterda bo‘lishi kerak. Odatda 50 dan 1–3 qoladi.

To‘rtinchi bosqich — confidence score. Filtrdan keyin 0,95 dan yuqori cosine yaqinlik bilan bitta nomzod qolsa — moslik avtomatik prodga ketadi. Agar bir nechta nomzod yoki yaqinlik 0,80–0,95 oralig‘ida yoki rang loyqa sinonim orqali topilgan bo‘lsa — juftlik qo‘l navbatiga tushadi. Navbatni odam qayta ishlaydi (hozirda bu men va yana bir kontraktchi, har birimiz kuniga bir soatdan).

Edge case lar

Eng og‘riqli sinf — ko‘ptilli sarlavhalar. O‘zbek marketpleyslari bir maydonda lotincha o‘zbek, kirill o‘zbek va ruschani erkin aralashtiradi. «Muzlatkich Samsung 350L» va «Холодильник Samsung 350Л» va «Samsung Refrigerator 350L» — bir mahsulot, normalizator buni tushunishi kerak. Biz uch tilda kategoriya so‘zlari lug‘atini saqlaymiz, taxminan 1200 juftlik, va loglarda yangi nomuvofiqlik topganda kengaytiramiz.

Ikkinchi sinf — bundle kartalar. Sotuvchi telefonni quloqchin va g‘ilof bilan birga sotadi, sarlavha esa oddiy SKU ko‘rinishida. Bunday bundleni boshqa marketpleysdagi bitta SKU bilan moslashtirsak, narx «400 ming qimmat» bo‘lib chiqadi. Biz bundleni sarlavha va tavsifdagi kalit so‘zlar («komplekt», «sovg‘a», «+ g‘ilof») bo‘yicha aniqlaymiz va alohida bayroq qo‘yamiz.

Uchinchi sinf — refurbished va vitrina. Qayta tiklangan iPhone va yangi iPhone bir xil sarlavhaga ega bo‘lishi mumkin, ayniqsa sotuvchi holatni aniq ko‘rsatmagan bo‘lsa. Tavsif va «holat» maydonini parsing qilamiz, lekin 4% kartada bu signal yo‘q va moslikni qo‘l tekshiruvigacha to‘xtatib turishga to‘g‘ri keladi.

To‘rtinchi sinf — kontrafakt. Karta «Adidas Originals Ozweego» deb nomlanadi, lekin foto va narxga ko‘ra — bu 280 ming so‘mlik soxta. Bunday kartalarni algoritm haqiqiy Adidas bilan moslashtiradi, natijada grafikda anomal arzon «aksiya» paydo bo‘ladi. Buni narx qoidasi bilan filtrlaymiz: agar bitta do‘kondagi SKU qolgan to‘rttasining medianasidan 2,5 marta arzon bo‘lsa — moslik avtomatik chiqarilmaydi, qo‘l tekshiruviga ketadi.

Prod katalog raqamlari

Hozir Birbozor katalogida 340 ming SKU, Firecrawl orqali besh marketpleysdan yig‘ilgan: Uzum, Olcha, Asaxiy, Texnomart, Mediapark.

Ulardan taxminan 62 ming SKU kamida bitta tasdiqlangan kross-marketpleys juftlikka ega — ya’ni bir mahsulot kamida ikkita maydonchada topilgan. Bu katalogning 18%i. Raqam kichik ko‘rinadi, lekin tushunarli: katalogning uzun dumi — mintaqaviy sotuvchilar va birorta marketpleysdan tashqarida mavjud bo‘lmagan yagona kartalar.

Qo‘l tekshiruv navbati barcha moslashtirish urinishlarining taxminan 3% ini oladi. Fevralda qo‘lda belgilangan 500 juftlik audit setda false-positive (prodga o‘tib ketgan noto‘g‘ri mosliklar) — 0,5% dan kam. False-negative (topilishi kerak edi-yu, topilmagan mosliklar) — taxminan 7%. Biz aynan shu yo‘nalishda optimallashtiramiz: foydalanuvchiga noto‘g‘ri «chegirma» ko‘rsatishdan ko‘ra, moslikni qo‘ldan boy berish yaxshiroq.

Butun katalog narxlarini bir marta yangilash sikli — Firecrawl kreditlarida taxminan 18 dollar, 4 soat davom etadi. Kuniga ikki marta ishga tushiramiz.

Keyin nima

Keyingi katta tikish — image-based matching. Ko‘pchilik kartalarda bir nechta mahsulot rasmlari bor, va pHash + segmentatsiya bilan rasmlar xeshini taqqoslash bir nechta muammoni bir vaqtda hal qiladi: bundlelarda yordam beradi (rasmda uchta quti ko‘rinsa, bu yagona SKU emas), kontrafaktda yordam beradi, va sotuvchi sarlavhaga yozmagan ranglarda yordam beradi. Prototip 5 ming SKUda ishlayapti.

Parallel ravishda quti fotosuratlaridan GTIN ni chiqarish uchun OCR ni ishga tushiramiz, sotuvchi uni ko‘rsatmagan holatlarda. Bu yana bir qat’iy tekshiruv nuqtasini beradi.

Agar siz shunga o‘xshash narsa qurayotgan bo‘lsangiz

Pipeline komponentlarini ochiq repolarda asta-sekin chiqaramiz — github.com/birbozor va @birbozor_dev Telegram kanalidan kuzatish qulay. Boshqa mamlakatda shunga o‘xshash vazifa bo‘lsa — yozing, gaplashamiz.

Maqoladan

Halol narxni koʻrishni xohlaysizmi?

Mahsulotni BirBozorda saqlang — joriy narx yonida 90 kunlik minimumni koʻrsatamiz.

Yuklab olish
Kunning top-5 chegirmalari — Telegramda

Obuna boʻlish @birbozor_uz

Repost — iltimos, birbozor.uz/blog havolasi bilan

Yana oʻqing

Oila
Maktabga tayyorgarlik 2026: ota-onalar uchun byudjet rejasi
8 daq
Qo'llanma
Elektromobil O'zbekistonda 2026: narxlar, imtiyozlar va zaryadlash qo'llanmasi
7 daq
Qo'llanma
Robot changyutgich tanlash 2026: Pa, navigatsiya va narxlar bo'yicha qo'llanma
7 daq