QQROOZA
ЕКАТЕРИНА ОСИНОВСКАЯ
Содержание
Введение
Меня зовут Екатерина Осиновская, я руководитель отдела клиентского сервиса компании QQROOZA.
Представляю вам свой цикл статей, который поможет вам детально разобраться с интерфейсом площадки Авито.
Эта статья расскажет вам как искать объявления по карте Авито.
Приятного чтения!
Как пользоваться картой на площадке Авито
Искать объявления по карте очень удобно. Так вы можете найти работу, квартиру или найти нужные услуги в определенном районе. Только объявления в категориях «услуги», «вакансии» и «недвижимость» можно смотреть на карте.
Для поиска по карте введите нужные вам параметры: тип категории; название объявления, по которому будет совершен поиск; город или регион. Также вы можете указать метро или район. После того как вы ввели нужные вам параметры, нажмите на кнопку «Найти».
Чуть ниже поиска появится карта. Нажмите на «Показать объявления на карте».
На новой карте появятся все объявления. Вы можете выбрать нужный вам район, приблизив карту колесиком мышки или же нажать на плюсик с правой стороны. Также вы можете перемещаться по карте, зажав левую кнопку мыши и двигая стрелкой мыши в нужном для вас направлении.
Для выбора нужного объявления нажмите на него. Его значок на карте станет красным, а с левой стороны появится краткое описание объявления: название объявления; фото; цена; месторасположение.
Чтобы ознакомиться с объявлением подробнее, нажмите на название объявления. Вам откроется новая страница, на которой вы сможете прочитать полную информацию.
Остальные статьи из цикла об интерфейсе площадки:
Цикл статей о продвижении на Авито:
Несколько наших кейсов:
Агентство QQROOZA
Агентство QQROOZA – эффективная команда молодых и креативных профессионалов, которая обеспечит вам комфортное взаимодействие и высокий, а главное полностью прозрачный результат от вложенного вами рекламного бюджета. Наша задача — сделать так, чтобы каждый вложенный вами рубль приносил вам прибыль.
В наши услуги входит:
· Проведение аудита и конкурентного анализа вашего бизнеса на Авито
· Создание и правильное оформление магазина на Авито
· Составление продающих текстов
· Создание качественных уникальных объявлений
· Подбор и редактирование фотографий для объявлений
· Своевременный ежедневный постинг ваших объявлений
· Корректировка рейтинга вашего магазина
· Переговоры и решение конфликтных ситуаций с поддержкой площадки
· Гарантия на случай блокировки
· Помощь в интеграции Авито с вашей CRM системой
· Еженедельный отчет по 22 показателям вашей рекламной кампании
· Ежедневный краткий отчет за прошедший день продвижения
Оставьте заявку прямо сейчас
и получите бесплатный аудит и конкурентный анализ вашей ниши на Авито
Прочее › Авито › Объявление
Чуть ниже поиска появится карта. Нажмите на «Показать объявления на карте». На новой карте появятся все объявления. Вы можете выбрать нужный вам район, приблизив карту колесиком мышки или же нажать на плюсик с правой стороны.
Для этого нужно зайти в свой аккаунт, выбрать вкладку « Мои объявления». Там можно посмотреть все объявления, которые выкладывались когда-то либо и статистику по ним.
Как привязать банковскую карту на Авито:
Как узнать номер объявления на сайте Авито? Перейдите на страницу объявления на Авито. Номер объявления указан в верхней части страницы, прямо под заголовком и над фотографиями.
Как на Авито посмотреть раздел «Мое избранное»? Чтобы перейти в список всех понравившихся товаров, на полноценном сайте можно нажать значок сердечка рядом с именем профиля. Кроме того, раздел Избранное можно найти во вкладке «Мои объявления» в выпадающем меню, которое появляется при нажатии на имя профиля.
5 самых популярных досок объявлений:
Как посмотреть свое видеообъявление:
Как искать объявления на карте?:
При оформлении заказа покупатель оплачивает на Авито стоимость товара и доставки. После этого деньги резервируются на счёте. При оплате заказа банк-эмитент может взять комиссию. Подробнее о ней лучше узнать в поддержке вашего банка — это можно сделать до оплаты.
Обманщик размещает на сайте товар по заниженной цене, а когда ему начинают звонить покупатели, просит внести часть суммы или всю сумму. Обычно мошенники отговариваются тем, что на товар много желающих, а покупатель, не желая упустить выгодное предложение, соглашается на сделку.
Чтобы узнать реальный номер телефона владельца объявления, вставьте http-ссылку на объявление в диалоговое окно, которое появляется при нажатии на кнопку «Avito: Запрос реального номера»: Реальный номер можно узнать также через ICQ.
К сожалению, такой возможности нет. Единственный способ узнать номер телефона продавца, перейти к нему в аккаунт и узнать, есть ли у него активные объявления. Если есть, то там будет его номер телефона.
Самый простой способ узнать информацию о человеке по номеру телефона — написать цифры телефона в строке поисковой системы. Дело в том, что поисковые системы подгружают в выдачу информацию со всех сайтов, где такой номер когда-либо встречался. Таким способом с большой вероятностью можно определить спам-звонки.
В разделе «Мои объявления» на Авито вы сможете посмотреть все свои объявления, отредактировать их или снять с публикации.
Нажимая на сердечко рядом с объявление, вы откладываете данное объявление в «Избранное». Именно в этом разделе вы можете посмотреть товары, услуги и тп, которые вас заинтересовали ранее. В случае изменения цены на товар/услугу в этом объявлении, Вам будут приходить уведомления.
Любое объявление можно скрыть нажав на крестик. Скрытое объявление можно посмотреть и вернуть, чтобы оно больше не было скрытым. Сделать это можно так: справа, у края окна есть скрытое меню обозначенное двумя горизонтальными стрелочками (смотрите первый скриншот).
Что происходит с объявлением, когда срок размещения заканчивается? Обычно срок размещения составляет 30 дней (за исключением объявлений, размещенных в категории «Резюме»). После окончания срока размещения объявление перестанет отображаться на сайте, а в вашем Личном кабинете переместится на вкладку «Завершённые».
Пианино и клавишные покупают на 50 % чаще.К концу года, по исследованиям площадки, в топе продаж:
На Авито не предусмотрен поиск объявления по номеру телефона. Можно попробовать ввести телефон в поисковую строку любого поисковика — иногда таким образом удаётся найти другие предложения пользователя. Рекомендуем Вам добавлять интересное в Избранное.
Не указывайте код с карты
А также имя владельца и срок действия. Когда вы продадите товар через Авито Доставку, мы попросим только номер карты. Это случится после того, как покупатель заберёт посылку.
Как отвязать банковскую карту?:
Как вывести деньги с кошелька Авито? Если есть такая необходимость, пользователь имеет возможность снять со счета оставшийся баланс. Однако — это невозможно сделать самостоятельно, как и войти в заблокированный кошелек. В таких случаях необходимо обращаться к операторам службы поддержки.
Номера телефонов из объявлений о продаже авто или квартиры в интернете часто попадают в базы спамеров. Чтобы защитить вас от непрошеных сообщений, на Авито работает бесплатная защита номера — никто не узнает ваш реальный телефон и не пришлёт смс-спам.
Это сделано для борьбы с мошенниками, спамерами и парсерами. Сервис «Защита номера» появился на Авито 4 года назад и изначально был доступен только продавцам, размещающим объявления в категориях «Авто» и «Недвижимость».
Не сразу: перед тем, как опубликовать объявление, мы его проверяем. Это недолго — обычно занимает от пары минут до получаса, в особо сложных (и редких) случаях можем проверять до двух дней. Если с объявлением всё в порядке, оно появится в поиске сразу после публикации.
Для этого откройте любое свое объявление, в правом нижнем углу нажмите на фотографию или название своего профиля. На странице своего профиля в левом нижнем углу вы можете увидеть сколько подписчиков у вашего профиля. Узнать кто именно эти люди, сервис Авито, к сожалению, не представляет возможности.
Если человек ищет товар с мобильной версии сайта или в приложении для Android, он увидит название объявления, выделенное желтым цветом. Стоимость услуги зависит от категории и параметров объявления.
Если освоить добавление в избранное объявлений на Авито, можно легко и быстро находить их, когда это потребуется. Данный раздел используется чтобы отслеживать статус представляющих интерес публикаций и при необходимости оперативно связываться с теми, кто их разместил.
Если человек много раз за сутки зашёл в объявление, засчитается только 1 посещение. Несколько запросов телефона и старт переписки будут посчитаны как 1 контакт.
В 2021 году «Авито» опустился на пятое место в списке самых дорогих компаний рунета. К февралю 2021 года стоимость «Авито» составила 4,9 млрд долларов.
Если раньше вы не обращали внимание, какие отзывы оставляют вам покупатели, пора это проверить. Для этого переходите в раздел «Мои отзывы» в профиле.
Покупатель не забирает заказ
Если товар не забирают, он будет храниться в пункте выдачи, пока не истечёт срок получения (обычно это несколько рабочих дней). После этого посылку отправят в тот же пункт, куда вы относили заказ.
В список ТОП товаров вошли медицинские маски, велосипеды, кроссовки, ноутбуки, столы, диваны, телевизоры, игровые консоли. Также в статистике запросов на доске объявлений часто присутствовали детская обувь, свадебное платье, пуховик, автомобиль с пробегом.
2) Филиал EXMAIL — это полноценное представительство экспресс-логистики со штатом сотрудников и собственной курьерской службой.
Статистика и записи разговоров появятся в разделе «Звонки» Авито Pro. Вы сможете понять, как ваши действия влияют на количество вызовов и хорошо ли сотрудники работают с обращениями.
Зайдя на объявление, покупатель может нажать кнопку «Позвонить», увидеть номер продавца и совершить вызов.
Авито блокирует твой номер и не даёт возможность звонить по объявлениям с подменным номером, если ты более 3-х раз пытался дозвониться до продавца, когда у него было занято. Служба поддержки объясняет это так « с вашего номера массово поступали звонки по подменным номерам Авито.
В разделе»Мои объявления« на Авито вы сможете посмотреть все свои объявления, отредактировать их или снять с публикации.
Любое объявление можно скрыть нажав на крестик. Скрытое объявление можно посмотреть и вернуть, чтобы оно больше не было скрытым. Сделать это можно так: справа, у края окна есть скрытое меню обозначенное двумя горизонтальными стрелочками (смотрите первый скриншот).
Мониторинг цен на Авито возможен при добавлении объявлений в»избранное« в расширении Shopintab. Для этого достаточно слева от названия объявления нажать на кнопку»S». С помощью сервиса Shopintab Вы можете отследить динамику цен на Авито.
Как на Авито посмотреть историю просмотров? На Авито можно узнать просмотры любого объявления, как своего так и чужого. Откройте интересующее вас объявление и прокрутите страницу вниз. В правом нижнем углу рядом с иконкой глаза вы увидите количество просмотров объявления.
ПРИМЕР
Когда сотрудник любой компании приступает к работе, ему сначала необходимо получить доступ к компьютеру, необходимый для выполнения его роли.
СКАЧАТЬ
гостеприимство
Tab Food Investments управляет ресторанами быстрого обслуживания в основном в Турции и Китае с 19 лет.95.
Чтение Подробнее
Электронная коммерция
Когда новый сотрудник приступает к работе на новой должности или получает повышение, его требования меняются. согласно должностной роли.
Чтение Подробнее
Маркетинг
Разместить объявление непросто, но все мы знаем, что это очень важно при продаже чего-либо.
Чтение Подробнее
Программное обеспечениеПродажи — это искусство, но также и наука. Таким образом, все аспекты функции продаж могут быть измерены. против конкретных целей.
Чтение Подробнее
Производство
Когда такая компания, как Bosch, решает проблему, мир слушает. Пришло время учиться.
Чтение Подробнее
Путешествовать
Технологии изменили нашу жизнь, особенно с появлением Интернета.
Чтение Подробнее
Страхование
Неопределенность приводит к росту цен на страховые полисы. Прогноз потерь от пожара чрезвычайно изменчив для две причины:
Чтение Подробнее
Человеческие ресурсы
Будь моим гостем. Прогнозирование того, сколько посетителей будет у ресторана сегодня.
Чтение Подробнее
Розничная торговля
ПРОГНОЗ ПРОДАЖ МАГАЗИНА ROSSMANN. «Для меня также важно не сдаваться слишком рано».
Кортик
Россманн
Чтение Подробнее
Розничная торговля
Прогнозирование продаж продукции для крупной корпоративной сети
Чтение Подробнее
Интернет Сервис
Превращение изображений в слова с помощью Yelp. Назначение нескольких меток изображениям ресторана с помощью ИИ.
Чтение Подробнее
Маркетинг
Раскрытие скрытых драгоценных камней. Создание классификатора для категоризации веб-страниц для StumbleUpon.
Чтение Подробнее
Страхование
Компания Liberty Mutual Insurance, входящая в список Fortune 100, предлагает широкий спектр страховых продуктов.
Чтение Подробнее
Маркетинг
Разместить объявление непросто, но все мы знаем, что это очень важно при продаже чего-либо.
Чтение Подробнее
Маркетинг
Раскрытие скрытых драгоценных камней. Создание классификатора для категоризации веб-страниц для StumbleUpon.
Чтение Подробнее
Розничная торговля
ПРОГНОЗ ПРОДАЖ МАГАЗИНА ROSSMANN. «Для меня также важно не сдаваться слишком рано».
Кортик
Россманн
Чтение Подробнее
Розничная торговля
Прогнозирование продаж продукции для крупной корпоративной сети
Чтение Подробнее
Электронная коммерция
Когда новый сотрудник приступает к работе на новой должности или получает повышение, его требования меняются. согласно должностной роли.
Чтение Подробнее
Производство
Когда такая компания, как Bosch, решает проблему, мир слушает. Пришло время учиться.
Чтение Подробнее
гостеприимство
Tab Food Investments управляет ресторанами быстрого обслуживания в основном в Турции и Китае с 1995 года.
Чтение Подробнее
Человеческие ресурсы
Будь моим гостем. Прогнозирование того, сколько посетителей будет у ресторана сегодня.
Чтение Подробнее
Страхование
Неопределенность приводит к росту цен на страховые полисы. Прогноз потерь от пожара чрезвычайно изменчив для две причины:
Чтение Подробнее
Страхование
Компания Liberty Mutual Insurance, входящая в список Fortune 100, предлагает широкий спектр страховых продуктов.
Чтение Подробнее
Интернет Сервис
Превращение изображений в слова с помощью Yelp. Назначение нескольких меток изображениям ресторана с помощью ИИ.
Чтение Подробнее
Программное обеспечение
Продажи — это искусство, но также и наука. Таким образом, все аспекты функции продаж могут быть измерены. против конкретных целей.
Чтение Подробнее
Путешествовать
Технологии изменили нашу жизнь, особенно с появлением Интернета.
Чтение Подробнее
Привет! Меня зовут Василий Копытов, я руковожу группой разработки рекомендаций Авито. Мы занимаемся системами, предоставляющими пользователю персонализированную рекламу на сайте и в приложениях. На примере нашего основного сервиса я покажу, когда переходить с Python на Go, а когда оставить все как есть. В конце я дам несколько советов по оптимизации сервисов Python.
Любой, кто заходит на главную страницу сайта или приложения, видит персонализированную ленту объявлений — рекомендации. Нагрузка на наш основной рекомендательный сервис, отвечающий за генерацию бесконечной ленты объявлений на главной странице, составляет около 200 000 запросов в минуту. Общий трафик до 500 000 запросов в минуту на рекомендации.
Так выглядят рекомендации в приложении и на сайтеСервис выбирает наиболее подходящие объявления из 130 миллионов активных объявлений (товаров) для каждого пользователя. Рекомендации генерируются на основе каждого действия человека за последний месяц.
Представительство работает по следующему алгоритму:
1. Сервис обращается к хранилищу истории пользователя и извлекает из него агрегированную историю действий и интересов.
Интересы — это набор категорий и подкатегорий рекламы, которую человек недавно просматривал. Например, детская одежда, домашние животные или товары для дома.
2. Затем передается история и интересы как набор параметров, воздействие на модели машинного обучения первого уровня.
Модели машинного обучения первого уровня являются базовыми службами. Сейчас у нас есть 4 таких модели. Они предсказывают элементы, используя различные алгоритмы машинного обучения. На выходе каждого сервиса получаем список id (рекомендуемых).
3. Мы фильтруем идентификатор на основе истории пользователя. У нас получается около 3000 элементов на пользователя.
4. И самое интересное, что представление внутри использует модель машинного обучения второго уровня, основанную на CatBoost, для ранжирования рекламы из моделей машинного обучения первого уровня в реальном времени.
5. Из данных готовим характеристики. Это параметры ранжирования рекомендаций. Для этого мы используем id элемента для получения данных в хранилище (осколочная база данных 1 ТБ, Redis). Данные товара — название, цена и еще около 50 полей.
6. Служба передает функции и элементы в модель машинного обучения второго уровня на основе библиотеки CatBoost. Результатом является ранжированная лента объявлений.
7. Далее представление выполняет бизнес-логику. Например, подбирает в ленте те объявления, за премиум размещение которых взимается плата (boost VAS).
8. Кешируем и отдаем сгенерированный фид рекомендации пользователю, в нем около 3000 объявлений.
Алгоритм формирования ленты рекомендацийПредставительство как услуга очень загружено в Авито. Он обрабатывает 200 000 запросов в минуту. Сервис стал таким не сразу: мы постоянно вносили что-то новое и улучшали качество рекомендаций. В какой-то момент он начал потреблять почти столько же ресурсов, сколько и весь остальной монолит Авито. Нам стало сложно выкатывать сервис в дневное время, в часы пик, из-за нехватки ресурсов в кластере — в это время большинство разработчиков развертывали свои сервисы.
Карта взаимодействия сервисов Авито. Размер круга показывает, сколько ресурсов кластера потребляет службаВместе с ростом потребления ресурсов росло и время отклика службы. Во время пиковых нагрузок пользователи могли ждать свои рекомендации до 1,6 секунды — это в 8 раз больше, чем за последние 2 года. Все это могло заблокировать дальнейшее развитие и совершенствование рекомендаций.
Причины этого достаточно очевидны:
Позвольте мне рассказать вам, что помогло нам справиться с нашими нагрузками в Python.
ProcessPoolExecutor создает пул воркеров из процессорных ядер. Каждый воркер — это отдельный процесс, работающий на отдельном ядре. Вы можете передать нагрузку, связанную с ЦП, на рабочий процесс, чтобы он не замедлял другие процессы.
В представлении мы изначально использовали ProcessPoolExecutor для разделения рабочих нагрузок, связанных с процессором и вводом-выводом. В дополнение к основному процессу Python, который обслуживает запросы и ходит по сети (с привязкой к IO), мы выделили три воркера для ML-модели (с привязкой к CPU).
У нас есть асинхронная служба на aiohttp, которая обслуживает запросы и успешно обрабатывает нагрузку, связанную с вводом-выводом. ProcessPoolExecutor создает пул рабочих процессов. Рабочую нагрузку, связанную с ЦП, можно передать такому рабочему процессу, чтобы он не замедлял основной процесс службы и не влиял на задержку всей службы.
Выигрыш времени от использования ProcessPoolExecutor составляет около 35%. Для эксперимента мы решили сделать код синхронным и отключили ProcessPoolExecutor. То есть рабочие нагрузки, связанные с вводом-выводом и процессором, начали выполняться в одном процессе.
Без ProcessPoolExecutor время отклика увеличилось на 35%Как это выглядит в коде:
async def process_request(user_id):
# Задача ввода-вывода
async with session.post(
feature_service_url,
json= {'user_id': user_id},
) as resp:
functions = await resp.json()return features
У нас есть асинхронный обработчик, который обрабатывает запрос. Для тех, кто не знаком с синтаксисом асинхронного ожидания, это ключевые слова, обозначающие точки переключения сопрограммы.
То есть на седьмой строке кода одна сопрограмма уходит в сон и отдает выполнение другой сопрограмме, которая уже получила данные, тем самым экономя процессорное время. Таким образом Python реализует совместную многозадачность.
def предсказание (функции)
preprocessed_features = процессор.препроцесс (представленный)
return model.infer(preprocessed_features)async def process_request(user_id):
# задача ввода-вывода
асинхронно с session.post(
feature_service_url,
json ={'user_id': user_id},
) as resp:
features = awat resp.json()# блокировка CPUtask
return predict(features)
Внезапно нам нужно выполнить загрузку с привязкой к ЦП из ML-модели. И так на предсказать функцию наша сопрограмма заблокирует процесс python. Чтобы все сервисные запросы не стояли в очереди и время ответа сервиса не увеличивалось, как мы видели ранее.
исполнитель = concurrent.futures.ProcessPoolExecutor(man_workers=N)по определению предсказать(функции):
preprocessed_features = processing.preprocess(features)
return model.infer(preprocessed_features)async def process_request(user_id):
# задача ввода/вывода
async with session. post(
feature_service_url,
json={'user_id': user_id},
) as resp:
features = await resp.json()# Неблокирующая задача ЦП
return await loop.run_in_executor(executor, predict(features))
Здесь ProcessPoolExecutor вступает со своим собственным пул рабочих, который решает эту проблему. В строке 1 мы создаем пул. В конце блока кода мы берем рабочего оттуда и перемещаем задачу, связанную с процессором, на отдельное ядро. Таким образом, функция прогнозирования будет выполняться асинхронно по отношению к родительскому процессу, а не блокировать его. Приятно то, что все это будет завернуто в обычный синтаксис async-await, а задачи, привязанные к процессору, будут выполняться асинхронно, как и задачи, связанные с вводом-выводом, но под капотом будет дополнительная магия с процессами.
ProcessPoolExecutor позволил нам снизить накладные расходы от модели ML в реальном времени, но и с ним в какой-то момент стало плохо. Первое, с чего мы начали, было самым очевидным — профилированием и выявлением узких мест.
2. Профилирование службыДаже если служба написана опытными программистами, ее можно улучшить. Чтобы понять, какие части кода медленные, а какие быстрые, мы профилировали сервис с помощью профилировщика py-spy.
Профилировщик строит диаграмму, на которой горизонтальные полосы показывают, сколько процессорного времени тратится впустую на участок кода. Первое, что вы видите, это 3 полосы справа. Это всего лишь наши дочерние процессы для оценки функций модели ML.
Результат профилирования Rec-представления. Например, видно, что воркеры ProcessPoolExecutor для модели ML занимают почти одинаковое количество ресурсов ЦПНа графике пламени мы увидели некоторые интересные детали:
В дополнение к процентному распределению, мы хотели знать конкретное время, затрачиваемое на выполнение различных частей кода. Для этого мы снова отключили ProcessPoolExecutor, запустили модель ML для ранжирования синхронно.
Без ProcessPoolExecutor ранжирование происходит быстрее, т.к. все процессорное время занято только подготовкой фич и скорингом по ML модели, нет накладных расходов на pickle/unpickle и IO-waitНо проблема остается — конкретный кусок кода стало быстрее, но сам сервис стал медленнее.
Поэкспериментировав, мы выяснили:
Именно тогда мы впервые подумали о переходе на Go, так как он имеет более эффективную модель планирования подпрограмм из коробки.
3. Разделить рабочую нагрузку, связанную с процессором и вводом-выводом, на две отдельные службыОдним из больших изменений, которые мы пытались сделать, было удаление модели машинного обучения в отдельную службу повторного ранжирования. То есть мы сохранили наш сервис представления только с сетевыми запросами, а скоринг ML-модели был на отдельном сервисе rec-ranker, куда мы передавали все необходимые данные и возвращали скоринг для ранжирования. Казалось, что мы немного уменьшим латентность и масштабируем обе части по отдельности.
Эксперимент показал, что мы экономим время на работе модели, но получаем задержку в 270 миллисекунд при передаче данных по сети и json.loads/json.dumps. Нам нужно передать около 4 Мб на запрос, а для очень активных пользователей до 12 Мб данных для модели ML. После масштабирования rec-ranker реплики стали ненамного меньше старого представления, а время отклика не изменилось. Для нашего случая разбиение на сервисы оказалось неудачным решением, поэтому мы вернулись к предыдущей реализации Representation.
4. Оцененная общая памятьВ службе Представление данные передаются между процессами посредством pickle/unpickle. Вместо этого процессы, которые совместно используют данные, могут указывать на общую область памяти. Это экономит время сериализации.
Максимальная оценка состоит в том, что мы могли бы выиграть около 70 миллисекунд на сериализацию с таким же сокращением времени для объема выполнения запроса, поскольку загрузка процессора блокировала основной процесс Python, который обрабатывал запросы от пользователей. Такой вывод мы сделали по профилю: pickle/unpickle занимает всего 7% процессорного времени, от разделяемой памяти особого профита не будет.
5. Подготовка фич в GoМы решили сначала протестировать работоспособность Go на части сервиса. Для эксперимента мы выбрали самую ресурсоемкую задачу в сервисе — подготовку фич.
Возможности в сервисе рекомендаций — данные о товаре и действия пользователя. Например, название объявления, цена, информация о показах и кликах. Существует около 60 параметров, влияющих на результат модели машинного обучения. То есть мы готовим все эти данные для 3000 элементов и отправляем их в модель, и она дает нам оценку для каждого элемента, которую мы используем для ранжирования фида.
Чтобы связать код Go для подготовки функций с остальной частью кода службы в Python, мы использовали ctypes.
def get_predictions(
raw_data: bytes,
model_ptr: POINTER(c_void_p),
size: int,
) -> list:
raw_predictions = lib.GetPredictionsWithModel(
GoString(raw_data, len(raw_data)), 90r
)
прогнозов = [raw_predictions[i] для i в диапазоне (размере)]
прогнозов возврата
Вот как выглядит подготовка функций внутри Python. Модуль lib представляет собой скомпилированный пакет Go с функцией GetPredictionsWithModel. В него мы передаем байты с данными об элементах и указатели на ML-модель. Все функции подготовлены кодом Go.
Результаты были впечатляющими:
После всех экспериментов мы сделали четыре вывода:
Есть модель ML в представлении-го. Естественно кажется, что ML хорош только для Python, но в нашем случае модель ML на CatBoost и у нее есть C-API, который можно вызывать из Go. Этим мы и воспользовались.
Ниже приведен фрагмент кода на Go. Не буду на этом особо останавливаться, отмечу только, что логический вывод дает те же результаты, что и в Python. C — это псевдопакет, предоставляющий Go интерфейс для библиотек C.
if !C.CalcModelPrediction(
model.Handler,
C.size_t(nSamples),
floatsC,
C.size_t(floatFeaturesCount),
CatsC,
C.size_t(categoryFeaturesCount),
(*C.double) (&results[0]),
C.size_t(nSamples),
) {
вернуть nil, getError()
}
Проблема в том, что модель машинного обучения все еще обучается на Python. И для того, чтобы он изучал и строил одни и те же функции, важно, чтобы они не расходились.
Мы начали их готовить по коду Go-service. Обучение происходит на отдельных машинах, туда загружается сервисный код в Go, по этому коду готовятся фичи, сохраняются в файл, затем Python-скрипт скачивает этот файл и обучает на них модель. В качестве бонуса обучение также стало в 20–30 раз быстрее.
Representation-go показал отличные результаты:
Мы разблокировали дальнейшую разработку рекомендаций — мы можем продолжать реализовывать тяжелые функции .
В нашем случае переход на Go принес желаемый результат. Основываясь на нашем опыте работы с механизмом рекомендаций, мы определили три условия, когда вам следует подумать о переходе на Go:
Если у вас есть только рабочие нагрузки, связанные с вводом-выводом, вам лучше придерживаться Python. Переход на Go не выиграет вам много времени, вы только сэкономите ресурсы, что не так важно для малых и средних рабочих нагрузок.
Если сервис использует обе нагрузки, но не передает по сети столько данных, сколько мы, есть два варианта:
Профилируйте свою службу. Используйте py-spy, как мы, или другой профилировщик Python. Скорее всего, ваш код не имеет огромных неоптимальных областей. Но вам нужно повнимательнее присмотреться ко всем небольшим областям, которые будут значительно улучшены. Возможно, вам не потребуется переписывать весь код.
Запустить py-spy в неблокирующем режиме:
record -F -o record.
Об авторе