ML Advertising
1.21K subscribers
137 photos
13 videos
2 files
193 links
Пишу про AdTech, AI и разработку

Для связи: @evgenii_munin
Download Telegram
Сегодня мы поговорим про Tensorflow Serving.

https://www.tensorflow.org/tfx/guide/serving

Этот инструмент помогает обслуживать модели ML в распределённой среде продакшна и упрощает развертывание моделей на серверах.

Центральная абстракция, которая обёртывает модели Tensorflow называется Servable. Это, по сути, базовый объект, к которому клиент обращается и использует для выполнения вычислений. Tensorflow Serving поддерживает создание gRPC или REST серверов, которые могут обслуживать сразу несколько ML моделей. Обученные модели экспортируются в формат SavedModel. После этого модель готова к предсказаниям на сервере.

Для работы с Tensorflow Serving достаточно выгрузить базовый Docker образ с хаба


docker pull tensorflow/serving:latest


Далее запускаем сервер модели в Docker контейнере. Там же монтируем каталог модели в ожидаемый каталог контейнера с помощью переменной -v $(pwd)/models:/models/model.


docker run -d -p 9000:8500 \
-v $(pwd)/models:/models/model -e MODEL_NAME=model \
-t tensorflow/serving:latest


На стороне клиента мы можем запрашивать предсказания с сервера REST или gRPC запросом, например


curl -X POST http://host:port/v1/models/model:predict


В качестве альтернативы Tensorflow Serving есть TorchServe, который выполняет те же самые задачи, но только на пайторчовых моделях https://pytorch.org/serve/.

#mlops
👍3🔥2
4 метрики, на которые нужно смотреть, когда тестируешь рекламную кампанию

Когда мы создаем рекламную кампанию или тестируем креативы, часто встает вопрос, как оценивать их эффективность. Сегодня мы рассмотрим основные метрики, по которым можно это сделать.


1️⃣ Доля отображений (Scroll rate)
Метрика измеряет, как часто пользователи прокручивают содержимое Web страницы вплоть до рекламного креатива. Scroll rate помогает понять, насколько содержимое сайта или лендинга издателя интересен для пользователя. Событие impression (или отображение) тригерится, когда пользователь увидел определенную долю пикселей креатива, например минимум 10%.

Сама метрика считается для данного издателя, как отношение ивентов отображений (**impression**) к ивентам, когда креатив был размещен на страницу (называется **ad_call**).


scroll_rate = nb_impressions / nb_ad_calls



2️⃣ Полнота просмотра (Completion rate)
Как следует из названия метрика относиться к видео креативам. Показывает, как долго пользователь вовлечен в видео, и нам удалось захватить внимание, до того как начал скролить вниз. Но ее нужно рассматривать совместно с другими метриками CTR и CVR. Например, если полнота просмотра высокая, а конверсии низкие, то возможно люди не понимают призыва к действию, и креатив нужно поправить.

Считается как отношение ивентов, когда видео отработало до конца к количеству отображений. Обычно, половина пользователей досматривает видео креатив, и выставляют completion rate 50%.


completion_rate = nb_completions / nb_impressions



3️⃣ Доля кликов (Click-through rate CTR)
Если полнота просмотра показывает, насколько пользователь заинтересован видео, то доля кликов насколько его или ее заинтересовало предложение. Если кликов мало:
- то если у нас видео, надо проверить, не поздно ли происходит призыв к действию
- нужно проверить таргетинг аудитории
- нужно править зацепку или интригу в креативе на более интересную
- то возможно, нужно выставить скидку ил спец предложение

Считается как отношение ивентов клика к отображениям. Как правило для Web рекламы значение CTR не превышает 5%.


CTR = nb_clicks / nb_impressions



4️⃣ Доля конверсий (Conversion rate CVR)
Конверсия в продажу говорит об эффективности всей совокупности кампании: контента Web страницы издателя, заинтересован ли человек продуктов, кликнул ли он, произвел ли транзакцию или подписался. Если был клик, но после этого ничего не случилось, то возможно предложение оказалось нерелевантным. Здесь важно правильно настраивать таргетинг аудитории.

Считается как доля транзакций к количество кликов. Поскольку, здесь мы находимся уже в завершении воронки продаж, то и среднее значение CVR как правило не превышает долей процента.


CVR = nb_traffic_acquisitions / nb_clicks


#adtech
👍2🔥1
ML Advertising
Новости из мира Web рекламы Google выпускаeт Privacy Sandbox API для браузера Chrome и будет уходить от стороних cookies. Зачем это пользователям? Пользователи могут управлять API Privacy Sandbox и удалять данные измерения рекламы через настройки Chrome.…
Новости из мира рекламы

В продолжении темы защиты данных пользователей Google начал эксперименты над новой функцией конфиденциальности в Chrome под названием IP Protection. Функция скрывает IP адреса пользователей от третье-сторонних доменов.

Рекламные компании (особенно програматик) сильно зависят от отслеживания браузерами IP адресов пользователей, поскольку в отсутствии third-party cookies это единственный оставшийся инструмент, по которому возможно восстановить историю просмотров рекламных объявлений.

В этом случае у ad tech компаний не останется других вариантов, как использовать Google Privacy Sandbox, в противном случае они столкнутся с меньшим спросом на рекламный инвентарь на RTB аукционах, т.е. меньше рекламодателей будут покупать этот инвентарь.

Релиз IP Protection Google запланировал на 2024-2025 год.

Source: https://www.marketingbrew.com/stories/2023/11/01/ip-addresses-may-not-be-the-post-cookie-data-solution-adtech-wanted?__s=idq1qvcg2x9wjh8f7akv

#adtech
👍2
ML Advertising
This post I would like dedicate to Kafka. Imagine, sometimes you need - to process massive volumes of data - or have a reliable way to log events - or make predictions in real time Apache Kafka can help you in it ! Most of the time the handy examples are…
🚀 Ранее я рассказал об основных элементах Apache Kafka и его функционале и показал как использовать Kafka с Python API confluent-kafka. В этом посте расскажу, как применять Kafka вместе с ML для обучения и предсказания.

- В примере создал топики train и app_messages в Confluent Cloud
- Поднял Kafka Producer, в котором обучаю модель и записываю пути к моделям в топик train и сами артефакты на S3. Для работы с S3 использую boto3
- Поднял Kafka Consumer (он же клиент), который будет читать из топика app_messages предсказания

🛠 Запись сообщений в топики сделал синхронной с помощью метода flush перед завершением работы Producer'а. В результате получил пайплайн приближенный к продовому, где записанные в топик предсказания могут быть использованы клиентскими приложениями в реальном времени.

https://medium.com/gitconnected/kafka-in-machine-learning-for-real-time-predictions-45a4adf4620b

#mlops
🔥3👍1
Сегодня мы поговорим про библиотеки обработки датафреймов. Все мы знаем о широком функционале Pandas, но библиотека часто не подходит, например для тяжеловесных датасетов объемом от 10Гб или для многопоточки. В этих случаях нам на помощь приходят библиотеки для распределенных вычислений, адаптированных под свои кейсы и со своим функционалом.

1️⃣ Dask
Подходит для распараллеливания расчетов в рамках одной машины. В то время, как Pandas нагружает один процесс, Dask считает датафреймы распределено. Из минусов либы, это меньший функционал API и то , что на маленьких датасетах проигрывает по скорости Pandas. Зачастую на практике мы читаем датафрейм на Dask, потом либо делаем простые аггрегации, либо сэмплируем данные и сразу после кастуем в pd.DataFrame для дальнейшей работы. К нему же можно отнести и библиотеку Modin .


import dask.dataframe as dd
df = dd.read_csv('data.csv')
result = df.groupby('column').mean().compute()



2️⃣ Spark
Библиотека подходит для распределенных расчетов на кластере из многих машин. Незаменима особенно в случаях, когда данные не помещаются ни в память одной машины, ни в кэш сессии Jupyter.  Имеет очень широкий функционал, не уступающий Pandas. Даже есть свой движок Spark MLlib для распределенного ML. По Spark написано огромное количество подробной документации. Также чисто на Spark можно писать целые джобы по предобработке данных. Из минусов - это сложность конфигов и запуска SparkSession как отдельного приложения


from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('example').getOrCreate()
df = spark.read.csv('data.csv', header=True, inferSchema=True)
result = df.groupBy('column').mean().show()




3️⃣
Rapids
Часто бывает, что мы обучаем модели на GPU, но в этом случае для нас бутылочным горлышком становится предобработка данных, которая зачастую выполняется либо через numpy, либо через pandas на CPU. Здесь на помощь нам приходит Rapids, оптимизированный под работу на Nvidia CUDA. Проект open source и по сути предоставляет GPU совместимую обертку под pandas cuDF, под sklearn cuML и под вычисления над графами networkx cuGRAPH


import cudf
df = cudf.read_csv('data.csv')
result = df.groupby('column').mean()


#mlops
🔥5👍3
🎉 Ура! Первые 100! 🎉

Мои дорогие читатели, наш канал достиг первых 100 подписчиков 🎉 И это только начало 🚀 Спасибо всем Вам, кто интересуется контентом. Впереди на ждут больше новостей, инсайтов и обзоров, которые помогут прокачать навыки. Спасибо, что делитесь этим путем со мной!
👍6🔥5🏆21
Новости из мира рекламы

Agentio, платформа для покупки рекламных мест у креаторов YouTube, подняла $4.25M на стадии seed funding на расширение и увеличение штата сотрудников.

Что предлагает Agentio?
По сути Agentio выполняет функции и DSP, и SSP одновременно, имитирует некоторые функции программатик закупки. Но она не проводит аукционы для рекламного инвентаря, вместо этого работает как платформа для прямых сделок с контент креаторами на YouTube.

В чем мотивация?
Создатели контента на YouTube, желающие продавать автоматизированные рекламные слоты, используют Google AdSense, который совместим только с видеороликами pre-roll и mid-roll. Встроенная в сам контент реклама не может быть продана через AdSense. Для продажи контекстной рекламы креаторам приходится работать напрямую с покупателем, обычно с менеджером бренда, который утверждает конечное место для рекламы, прежде чем она может быть опубликована в видео создателя. И такой подход не масштабируется.

Как работает?
Поэтому Agentio предлагает платформу, которая имитирует программатик продажу рекламного инвентаря брендам для большей автоматизации. Креаторы размещают рекламные слоты для еще неопубликованного контента на открытом рынке. Бренды-покупатели могут выбирать создателя контента, которого они хотят приобрести по контексту. После покупки создатель записывает рекламный ролик и загружает его на платформу для утверждения рекламодателя.

В настоящее время платформа находится в бета-версии.

AdExchanger

#adtech
👍2
🍔 Как приготовить DevOps бургер?

1️⃣ Осваиваем языки Python, Scala, Go

2️⃣ Изучаем взаимодействие клиент-сервер: сетевые протоколы gRPC и REST, HTTP, curl, прокси-серверы Nginx и IIS link

3️⃣ Изучаем контейнеризацию с Docker, и много-контейнерные приложения с docker-compose

4️⃣ Осваиваем оркестраторы приложений на контейнерах Kubernetes link

5️⃣ Знакомимся с понятием Infra as Code, и как использовать Terraform link

6️⃣ Разбираемся с практиками CI/CD, автотестами и механизмом релизов на Github

7️⃣ Учимся мониторить приложения с Prometheus и Grafana link

8️⃣ Набираемся опыта в работе с облачными провайдерами AWS, Azure, GCP, VKCloud etc. aws_link

#devops
👍3🔥2
30 требований к ML проекту. Напоминалка о том, что MLOps это тяжело и трудно

#practices
👨‍💻2👍1🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
🐋Как работает Docker?

Архитектура Docker состоит из трех основных компонентов:

1️⃣ Daemon
Демон предоставляет API и управляет Docker образами. Запускается на хост машине, где планируется запускать контейнеры

2️⃣ Client
Это интерфейс, через который осуществляется взаимодействие с пользователями. Он взаимодействует с Docker демоном по API.

3️⃣ Host
Здесь демон Docker принимает запросы Docker API и управляет различными объектами Docker, включая образы, контейнеры, сети и тома.

4️⃣ Registry
В Docker Registry хранятся образы Docker. Например, широко используется публичный реестр Docker Hub.

#devops
🔥3👍2
Дублирование ставок

В этом посте хочу рассказать про такой подход в программатик рекламе, как дублирование ставок (или дублирование трафика). Это процесс, когда на одну Demand Side платформу (DSP, сторона рекламодателя) один и тот же запрос на аукцион отправляется несколько раз. Его применяют Supply Side платформы (SSP, сторона издателя) для увеличения спроса и доходов.

1️⃣ Как обычно работает процесс Real Time Bidding аукционов?

Когда пользователь заходит на web сайт, для каждого рекламного отображения издатель (владелец сайта XY) отправляет запрос на Bid Request (например XY321) на SSP. В свою очередь, SSP подключены ко многим DSP, которые сами аггрегируют рекламодателей. Входящий запрос на ставку пересылается всем подключенным DSP. Рекламодатели принимают участие в аукционе и делают ставку. Тот рекламодатель, чья ставка максимальна, выигрывает аукцион и показывает свою рекламу пользователю.

2️⃣ Что такое дублирование ставок?

Чтобы продублировать запрос на ставку на одно и то же рекламное место SSP могут поменять в нем какой-то из аттрибутов и после это отправить в DSP один и тот же запрос (под номерами XY356, XY656) повторно. Например, если DSP подключена к двум рекламным биржам SSP, то она получит два отдельных запроса на ставку. Поскольку дублирование выявить сложно, то DSP будет вынуждена принимать участие во обоих. Таким образом искусственно повышается спрос, и SSP и издатель могут получить больший доход с продажи рекламного места

3️⃣ На сколько актуальна тема?

Эта тема всплыла, поскольку крупная SSP FreeWheel была замешана в этом для продажи рекламных мест для Connected TV. Сами FreeWheel заявили, что сделали это для увеличения продаж инвентаря для издателей, работающих с Connected TV.

Посмотрим, как этот вопрос разрулится.

source: https://srimarketingstrategy.com/what-is-bid-duplication-impact/

#adtech
👍3
💻 MLFlow

Сегодня поговорим про трекинг ML экспериментов. MLFlow - это open source платформа в которой реализованы 4 основных инструмента: Tracking, Projects, Models, Model Registry

1️⃣ MLFlow Tr
acking
Он отвечает за логирование параметров, метрик и артефактов в эксперименте и предоставляет визуализацию метрик. Также с его помощью можно сравнивать метрики между экспериментами между собой. Трекинг это самый известный компонент MLflow

Код для логирования артефактов эксперимента удобно реализован в API


import mlflow
from sklearn.metrics import r2_score

def log_experiment_mlflow(model, run_name, xtrain, ytrain, xtest):
with mlflow.start_run(run_name="RUN_{}".format(run_name)) as run:
model.fit(xtrain, ytrain)
preds = model.predict(xtest)
r2 = r2_score(preds, ytest)
plot_preds(model, xtest)
mlflow.log_metric(key='R2_val', value=r2)
mlflow.log_artifact(local_path='artifacts/preds.png')



2️⃣ MLFlow Projects
Это с
воего рода попытка MLFlow зайти в огород DVC, в плане воспроизводимых пайплайнов данных. Т.е. здесь мы аналогично пишем файл конфигом для того, чтобы запускать пайплайн. Только вместо dvc repro, мы исполняем mlflow run

Из минусов
- Во-первых, неудобная работа со стадиями, все таки в DVC она более интуитивная
- Во-вторых, функционал не очень полезен если ваш стек не на Питоне, например если вы пишете модели на Scala Spark, то с MLFlow Projects будет явно затруднительно работать


3️⃣ MLFlow Models
Model
s сделан для того, чтобы сохранять модели из mlflow.run формате пригодном для REST сервисов. Наша задача предоставить заранее написаный инференс сервер, а все вопросы с форматами ложатся на плечи MLFlow. Также модели можно заливать прямо в облачные сервисы, например в Azure или Amazon SageMaker

Из минусов все примерно аналогично проектам
- Это чисто питонячая история
- Плюс serving совместим для json, или pd.DataFrame, но не принимает бинарные форматы parquet, avro
- он не поддерживает другие протоколы связи кроме REST, например проблемы с поддержкой gRPC


4️⃣ MLFlow Model Registry
С ним
можно зарегистрировать или сохранить модель. В UI можем видеть список всех версий всех моделей. Также можно строить релизные циклы CICD для сборки сервисов сразу для прода и staging (для тестовой среды, но которая примерно повторяет прод)

Подробный пример того, как поднять UI для MLFlow Tracking доступен по ссылке

#mlops
👍2🔥1🤨1
ML Advertising
Сегодня мы поговорим про библиотеки обработки датафреймов. Все мы знаем о широком функционале Pandas, но библиотека часто не подходит, например для тяжеловесных датасетов объемом от 10Гб или для многопоточки. В этих случаях нам на помощь приходят библиотеки…
Numba

Ранее я писал про оптимизацию расчетов датафреймов. Сегодня продолжим тему оптимизации расчетов на Python. Речь пойдет про библиотеку Numba https://numba.pydata.org/.

По сути, Numba это обертка C++ кода на python и один из относительно простых способов ускорить python-код.

1️⃣ Как раб
отает?
Есть два режима, в которых Numba может сократить время исполнения кода:
- No
python. Здесь Numba компилирует функцию на C++ без интерпретатора, что делает код быстрее
- Objec
t mode. Здесь она оптимизирует только циклы, компилируя их отдельно

По-умолчанию используется Nopython метод, но можно явно указать Object mode. Также можно добавить parallel=True для распараллеливания кода.

2️⃣ Как использ
овать?
Устанавливаем numba с помощью pip install numba. Затем импортируем декораторы @njit и @jit c from numba import njit, jit. После этого прописываем декораторы над функцией, которую хотим оптимизировтаь и получаем ускорение из коробки в несколько раз.


from numba import njit
import random

@njit
def monte_carlo_pi(nsamples):
acc = 0
for i in prange(nsamples):
x = random.random()
y = random.random()
if (x ** 2 + y ** 2) < 1.0:
acc += 1
return 4.0 * acc / nsamples


3️⃣ Когда использовать?
Если
в коде есть много математических расчетов и циклов, то Numba вам сильно поможет. Но прописывать ее везде и всюду не получится по нескольким причинам:

- во-первых, для компиляции кода на плюсах Numba должна знать функции, которые вы хотите оптимизировать. Хотя большинство стандартных питонячих функций уже реализовано в Numba, методы из scipy и openCV там отсутствуют

- во-вторых, Numba тяжело дебажить, например, когда в нее вы обернули высокоуровневую функцию из opencv. Сообщения при отладке не особо явные

#mlops
👍2🔥1
📕 RTB Papers

Поскольку канал посвящен рекламным технологиям и MLю, то самое время рассказать про сборник статей рекламных ML алгоритмов rtb-papers https://github.com/wnzhang/rtb-papers.

Здесь вы сможете найти методички, презентации и научные статьи по real-time bidding (RTB) аукционам для display web рекламы. Материал разбит на следующие разделы

1️⃣ Книга Display advertising with RTB and Behavioural targeting
Содержит в себе описание механизмов, как в принципе работают RTB аукционы и краткое описание моделей предсказания цен, ставок, ответов от рекламодателей, фрода и т.д. Очень подойдет для первого знакомства с индустрией, пулом моделей и их ограничениями

2️⃣ Tutorials
Методические указания по основам RTB, подойдут для тех, кто предпочитает изучать материал в форме презентаций

3️⃣ Review papers
Статьи обзоры, аггрегируют в себе результаты сразу из множества исследовательских статей. Подойдет, если вы определились с тематикой (например предсказание ставок), и вам нужен обзор всех значимых работ на эту конкретную тему.

4️⃣ Demand-Side Platform (DSP)
DSP - это платформы, которые аггрегируют множество рекламодателей. Именно через них бренды имеют возможность делать ставки и принимать участие в RTB аукционных.

CTR/ CVR Estimation
Статьи, посвященные предсказанию кликов и конверсий. Это т.н. сегмент Performance в самом низу воронки продаж, и наша задача предсказать клик или покупку товара пользователем. Здесь выборка сильно несбалансирована, поскольку до конверсии доходит, как правило 0.1% пользователей. Задача осложняется еще и тем, что конверсия может быть отложеной (т.е. посмотрев рекламу, пользователь может сделать покупку через неделю). Пулл моделей самый разный, начиная от логистических регрессий, заканчивая Factorization machines и сетками.

Bid Landscape
Задача - оценка распределения ставок на рекламные места. Почему это важно? Потому что иначе предложив слишком мало, DSP не выиграет аукцион, а если слишком много - то DSP купит рекламный слот себе в убыток. Для этого и нужны алгоритмы по оценке распределения ставок, и вероятности победить в аукционе (win rate) на каждом отрезке ставок.

Bidding Strategies
Задача вытекает из предыдущего пункта. После того, как мы оценили кривую распределения ставок и win rate на ней, нам нужен алгоритм, который будет адаптировать ставку для каждого конкретного рекламного места (placement), чтобы максимизировать win rate и уложиться в ограничения по прибыли (margin). Здесь можно найти много алгоритмов с подкреплением (RL), например многоруких бандитов, также и моделей регрессии классического ML, по которым мы предсказываем коэффициенты-множители к ставке.

Budget Pacing
Как мы знаем реклама не продается в единичном экземпляре. Как правило бренды планируют рекламные кампании, назначают на них бюджет и проводят их в определенный промежуток времени (например, за неделю до черной пятницы). Наша задача здесь, как DSP, обеспечить брендам равномерное расходование их бюджета на весь период кампании. Если мы "сожжем" весь бюджет в первый день за месяц до черной пятницы, то не попадем на максимум спроса пользователя, а если не израсходуем бюджет в срок, то накроем недостаточно аудитории. В плане алгоритмов здесь много моделей на PID контроллерах (примерно таких же, которые ставят на автопилоты в машинах), которые помогают ускорить или урезать покупку placement'ов в зависимости от текущего бюджета.

Fraud Detection
В рекламе, как и в медиа индустрии в целом есть своя доля мошенников. Например, это сайты которые запускают ботов, чтобы накрутить скроллы или клики на рекламные места. Наша задача, как DSP, заключается в том, чтобы своевременно выявлять эти пользователей-ботов и сайты и блокировать их.


5️⃣ Supply-Side Platform (SSP)
SSP - это платформы, которые аггрегируют запросы от веб сайтов (сами же сайты собраны в издательства, например Les Echos, Wall Street Journal etc.), продающие рекламные места (еще его называют инвентарем). Также SSP проводит RTB аукционы, на которых разные DSP (и соответственно бренды) покупают эти рекламные места.

#adtech
4👍4
6️⃣ Data Management Platform (DMP)
Поскольку реклама нацелена на людей, нам нужно иметь представление о них и об их предпочтениях. SSP покупают информацию о пользователях у третье-сторонних DMP, которые собирают информацию об активностях пользователей через cookies. Кроме этого рассмотрены алгоритмы построения профиля пользователя, например с помощью embedding'ов или кластеризации. Поверх этих эмбеддингов обучаются look-alike модели, которые относят конкретного пользователя к группе со схожими интересами.

7️⃣ Privacy
Говоря о пользователях, также нужно помнить про защиту их персональных данных. В более ранних постах (раз, два) я рассказывал, что Google Chrome планирует отказываться от трекинга пользователей с помощью third-party cookies. И в скором времени, данные о пользователях будут предоставляться SSP через платформу Privacy Sandbox.

В заключении поста, если вы только начинаете осваиваться с индустрией рекламных технологий, то я вам советую сначала прочесть книгу Display advertising with RTB and Behavioural target и туториалы, чтобы иметь представление в целом об индустрии. Дальше выбрать интересующую вас тематику и фокусироваться на ней.

Сохраняем к себе! ➡️

#adtech
👍82
🚘 Об автономных электромобилях и безопасности

В контексте автономных машин из ML практики мы наслышены об алгоритмах компьютерного зрения и инструментах
- обнаружения объектов на базе моделей YOLO, Faster R-CNN
- распознавание дорожных знаков
- контроль полосы движения (Tensorflow Object Detection API)
- планирование маршрута

🔐 Но современный автомобиль - это не просто набор камер и лидаров. Всегда нужно помнить о важных компонентах
- кибербезопасности водителя (авторизация, защита данных водителя и телеметрии, которые хранятся у облачного провайдера)
- архитектура SDK
- безопасность сторонних приложений

Об этом, а также о других решениях в области кибербезопасности вы сможете узнать на канале КиберБезОскара. Оскар также пишет про то, как противодействовать Adversarial атакам на датасеты. Например данных распознавания объектов на трассе такие артефакты (например гауссовские шумы или патчи размером в 1-2 пикселя) не видны человеческому глазу, но после обучения на которых качество CV моделей резко падает.
👍41🔥1