BigQuery ML маркетплейстерге қарсы: Қазақстандағы e-commerce үшін демалыс күндері өз ұсыныс жүйеңізді қалай құруға болады
Қатал шындық: Маркетплейстерден тыс өмір сүру
Ашығын айтайық: 2026 жылы Қазақстанда классикалық e-commerce жасау — үлкен азап. Бір жағынан сізді бөліп төлеу және тегін жеткізу мүмкіндігі бар сары алып қысымға алса, екінші жағынан миллиондаған ПВЗ (тауар беру пунктері) бар күлгін құбыжық қысады. Егер сіз әлі де олармен бетпе-бет бәсекелесіп, дәл сол айфон тыстарын немесе үтіктерді сатпақ болсаңыз, менде сіз үшін жаман жаңалық бар.
Сіздің аман қалуыңыздың жалғыз мүмкіндігі — тауашалылық (нишевость), сервис және пайдаланушы тәжірибесі (UX). Бірақ пайдаланушы сіздің сайтыңызға кіріп, «Сізге де ұнауы мүмкін» санатындағы тауарлар тізімін көріп, қысқы дөңгелектерге жазғы кроссовкалар ұсынылып тұрғанда қандай UX туралы айтуға болады? Бұл нағыз фиаско, бауырым.
«Бізге нейрондық желі керек!» — дейді сіздің продакт-менеджеріңіз. «Дата-саентисттер командасын жалдайық, Kubernetes кластерін көтерейік, Apache Spark, стриминг үшін Kafka қосайық және GPU-да графтық нейрондық желілерді оқытайық!» — деп техлид бюджетті игеруді асыға күтіп, қуанышпен қостайды.
Спойлер: сіз жарты жыл, 50 000 доллар жұмсайсыз, ал нәтижесінде әр деплой сайын құлап қалатын қостыль аласыз. Бірақ басқаша жасауға да болады. BigQuery ML, бірнеше банка энергетик, демалыс күндерін алып — 90% кастомды шешімдерді шаң қаптыратын жұмыс істейтін ұсыныс жүйесін продка шығаруға болады.
BigQuery ML дегеніміз не және ол неліктен чит-код?
BigQuery — бұл GA4-тен шикі логтарды төгетін аналитикаға арналған жай ғана бағаналы дерекқор емес. Бұл есептеу құбыжығы. Ал BigQuery ML (BQML) — кәдімгі SQL-ді пайдалана отырып... машиналық оқыту модельдерін тікелей деректер қоймасының ішінде оқытуға және орындауға мүмкіндік беретін мүмкіндік!
Сізге деректерді Python-ға шығарудың, оларды Pandas арқылы өткізудің, Jupyter Notebooks көтерудің, тәуелділіктермен қиналудың және Pickle-файлдарды серверлерге деплой жасаудың қажеті жоқ. Деректер BigQuery-де қалады. Есептеулер BigQuery-де жүргізіледі. Сіз жай ғана CREATE MODEL деп жазасыз — және гуглдік инфрақұрылым барлық лас жұмысты сіз үшін жасайды.
Тапсырма: Матрицалық факторизация (Collaborative Filtering) негізінде тауарларды ұсыну
E-commerce үшін бастапқы ұсыныстардың алтын стандарты — коллаборативті сүзу. Идея қарапайым: егер Арман мен Серік бірдей кроссовка мен футболка сатып алса, ал Арман тағы да кепка сатып алса, Серікке де сол кепканы ұсыну керек. Модель пайдаланушылар мен тауарлар арасындағы жасырын байланыстарды олардың өзара әрекеттесу тарихы (қараулар, себетке қосу, сатып алу) негізінде табады.
BQML-де бұл үшін матрицалық факторизация (Matrix Factorization) алгоритмі қолданылады. Ол «Пайдаланушы — Тауар — Өзара әрекеттесуді бағалау» матрицасын алып, оны векторларға (эмбеддингтерге) ыдыратады. Матан сияқты естіледі, бірақ біз үшін бұл бірнеше жол код қана.
1-қадам: Деректерді дайындау (Қолдан жасалған фича-инжиниринг)
ML-дің басты ережесі: Garbage in, garbage out. Егер модельге қоқыс берсеңіз, ол қоқыс шығарады. Бізге пайдаланушылардың тауарлармен өзара әрекеттесу тарихын жинау керек. Айталық, бізде GA4-тен алынған шикі оқиғалар бар (events_* кестесінде).
Біз жай ғана сатып алуларды ала алмаймыз — олар тым аз (деректердің сиректігі). Бізге жасырын сигналдар (implicit feedback) қажет. Әрекеттерге салмақ береміз:
- Тауарды қарау (view_item) = 1 ұпай
- Себетке қосу (add_to_cart) = 3 ұпай
- Сатып алу (purchase) = 10 ұпай
-- Оқыту үшін деректер витринасын құру
CREATE OR REPLACE TABLE `ecommerce_ml.training_data` AS
WITH user_item_interactions AS (
SELECT
user_pseudo_id AS user_id,
(SELECT value.string_value FROM UNNEST(items) LIMIT 1) AS item_id,
event_name
FROM
`your-project.analytics_12345.events_*`
WHERE
event_name IN ('view_item', 'add_to_cart', 'purchase')
AND _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY)) AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
)
SELECT
user_id,
item_id,
SUM(
CASE
WHEN event_name = 'view_item' THEN 1
WHEN event_name = 'add_to_cart' THEN 3
WHEN event_name = 'purchase' THEN 10
ELSE 0
END
) AS interaction_score
FROM
user_item_interactions
WHERE item_id IS NOT NULL
GROUP BY
user_id, item_id
HAVING interaction_score >= 1;Міне, бүкіл дата-пайплайн осы. Ешқандай Airflow, Spark және ұзақ жүктеп алулар жоқ. Деректер қазірдің өзінде BQ-де.
2-қадам: Модельді оқыту (SQL сиқыры)
Енді ең тәтті бөлігі. Нейрондық желіні (мейлі, матрицаларды факторизациялауды) оқытамыз. Уақытты белгілеңіз:
-- Матрицалық факторизация моделін оқыту
CREATE OR REPLACE MODEL `ecommerce_ml.item_recommender`
OPTIONS(
model_type='matrix_factorization',
user_col='user_id',
item_col='item_id',
rating_col='interaction_score',
feedback_type='implicit', -- Бізде жасырын бағалаулар (5 жұлдыз емес, шертулер)
l2_reg=0.1, -- Боттарда артық оқытылмау үшін регуляризация
num_factors=20 -- Жасырын векторлардың (эмбеддингтердің) өлшемділігі
) AS
SELECT
user_id,
item_id,
interaction_score
FROM
`ecommerce_ml.training_data`;Run түймесін басамыз. Кофе ішуге кетеміз. 10-15 минуттан кейін модель дайын болады. Google капот астында мыңдаған серверлерде есептеулерді параллель жасады, градиенттік түсуді оңтайландырды және салмақтарды сақтады. Сіз жаңа ғана дата-саентисттің бір айлық өмірін үнемдедіңіз.
3-қадам: Сапаны бағалау (Булшитсіз метрикалар)
Модель оқытылды, бірақ оның сандырақ ұсынып жатпағанын қалай түсінуге болады? BQML-де эвалюацияға (бағалауға) арналған кірістірілген функция бар. Жасырын фидбек үшін біз Mean Average Precision (MAP) метрикасына қараймыз. Ол ұсыныстардың жоғарғы жағындағы тауарлардың қаншалықты релевантты болғанын көрсетеді.
Cloud CDN: Сайтыңызды Ақтауда да, Өскеменде де бір секундта қалай жүктеуге болады
-- Модельді бағалау
SELECT * FROM ML.EVALUATE(MODEL `ecommerce_ml.item_recommender`);Егер MAP 0.05-тен жоғары болса — бұл бастама үшін өте жақсы. Егер одан аз болса — гиперпараметрлерді бұрау керек (l2_reg-пен ойнау, көбірек деректер қосу, бот-парсерлерді сүзу).
4-қадам: Болжамдарды генерациялау (Предикттер продка)
Енді әрбір пайдаланушы үшін ұсынылатын тауарлардың үздік 5-тігін алуымыз керек. Мұны бір сұрау арқылы жасаймыз:
-- Ұсыныстарды алу
CREATE OR REPLACE TABLE `ecommerce_ml.user_recommendations` AS
SELECT
user_id,
ARRAY_AGG(STRUCT(item_id, predicted_interaction_score) ORDER BY predicted_interaction_score DESC LIMIT 5) AS recommended_items
FROM
ML.RECOMMEND(MODEL `ecommerce_ml.item_recommender`)
GROUP BY
user_id;Бізде дайын кесте бар: user_id және ол үшін ең жақсы 5 item_id массиві.
5-қадам: Беру архитектурасы (Кедей, бірақ ақылдыларға арналған Highload)
Соңғы қадам қалды. Бұл ұсыныстарды фронтендке қалай беруге болады? Юзер бас бетке кірген сайын BigQuery-ді тарту — бұл бюджетке өзіне-өзі қол жұмсау (BQ сканерленген терабайттар үшін ақша алады) және жабайы кідірістер (latency ~1-2 секунд, бұл фронт үшін өлім).
Сондықтан біз талғампаз түрде жасаймыз:
- Cloud Scheduler + Cloud Run (Job): Күніне бір рет түнде модельді қайта оқытуға және предикттерді генерациялауға SQL-сұрауларын орындайтын скриптті іске қосамыз.
- Redis-ке (немесе Cloud SQL) экспорттау: Скрипт BigQuery-ден дайын
user_recommendationsкестесін алып, оны in-memory базаға (мысалы, Redis Memorystore) немесе жылдам Cloud SQL (PostgreSQL) ішіне итереді (push). - Бэкенд (Node.js/Go): Фронтенд
/api/recommendations?user_id=123жеңіл GET-сұрауын жасайды. Бэкенд бірден (5 мс ішінде) Redis-тен айдишниктер массивін алады, тауарлар каталогымен (атаулары, бағалары, суреттері) біріктіреді (join) және фронтқа береді.
ML әзірлеу шығындарын салыстыру (Кастом мен BQML)
Бірінші жылдағы инфрақұрылымға, жалақыға және қолдауға жұмсалатын жинақтаушы шығындар ($).
Бірақ тоқтай тұрыңыз, ал «Суық старт» ше?
Хабрдан келген кез келген білгіш: «Ал тарихы жоқ жаңа пайдаланушылармен не істеу керек? Сіздің матрицалық факторизацияңыз бұзылады!» деп сұрайды. Иә, бұзылады. Жаңа юзерлер үшін (суық старт) біз дербестендірілген ұсыныстар бере алмаймыз.
Сондықтан бэкендте біз қарапайым фолбэк (fallback) жазамыз:
// Node.js-тегі бэкендтің псевдокоды
async function getRecommendations(userId) {
// Redis-тен дербес ұсыныстарды табуға тырысамыз
let recs = await redis.get(`recs:${userId}`);
if (!recs) {
// Егер юзер жаңа немесе инкогнито болса — жаһандық сатылым хиттерін береміз
// Бұл кестені біз де алдын ала BQ-де есептеп, Redis-ке саламыз!
recs = await redis.get('recs:global_top_sellers');
}
return expandItemsFromDatabase(recs);
}Болды. Ешқандай сиқыр жоқ. Инженерия — бұл 99% жағдайда жұмыс істейтін қарапайым қостыльдарды табу өнері.
Сұрақтың бағасы: Бұл киберпанк қанша тұрады?
Ақшаны санайық. Біз Қазақстандамыз ғой, мұнда әрбір теңге үшін сұрайды.
- BQ-де деректерді сақтау: Тиын (алғашқы 10 ГБ тегін, одан әрі ГБ үшін $0.02).
- Модельді оқыту (BQML): Сіз оқыту кезінде өңделген деректер көлемі үшін төлейсіз. Егер сіздің витринаңыздың салмағы 1 ГБ болса, онда оқыту шамамен... тегін болады (BQ тегін терабайт квотасы аясында) немесе бірнеше цент.
- Redis-ке экспорттау: Шағын Redis инстансы (немесе Upstash-тен тегін кластер) айына $0-ден $15-ке дейін тұрады.
Қорытынды: Айына $20-дан кем сомаға конверсияны 5-15%-ға арттыратын толыққанды ұсыныс жүйесі.
Ұсыныс көзі бойынша сатып алу үлесі (Күту)
BQML Collaborative Filtering енгізілгеннен кейінгі сатып алулардың бөлінуі.
Қорытынды: Күрделендірмеңіз
Әзірлеу — бұл ең сәнді және күрделі технологияларды пайдалану туралы емес. Бұл бизнеске құндылықты қалай тез жеткізу туралы. Бәсекелестер машиналық оқытудың микросервистік архитектурасына ТҚ (техникалық тапсырма) жазып жатқанда, сіз бір демалыс күнінде дүйсенбіде ақша әкеле бастайтын SQL-де пайплайн жинайсыз.
BigQuery ML — бұл data-инженерлер мен фулстектерге арналған ультимативті швейцариялық пышақ. Иә, ол Kaggle жарыстарында жеңбейді. Иә, ол күрделі графтық архитектураларды жасай алмайды. Бірақ e-commerce бизнес-міндеттерінің 95%-ы үшін (ұсыныстар, LTV, кету) ол толығымен жеткілікті.
Маркетплейстерді тамақтандыруды доғарыңыз. Өз UX-ыңызды құрыңыз. Жоғары LTV және арзан CAC сізбен бірге болсын!

Рустам Шарафутдинов
Google Cloud архитектурасы саласындағы сарапшы және 15 жылдан астам тәжірибесі бар Senior Full-Stack әзірлеушісі. Ақауға төзімді архитектураларға, жоғары жүктемелі жобаларды оңтайландыруға және AI (Vertex AI) интеграциясына маманданған.