Бот мл: универсальный алгоритм совмещения / Хабр

универсальный алгоритм совмещения / Хабр

Пишу модели для кейсов на Kaggle, изучаю чужие и вдохновляюсь. Все статьи с описанием того, как внедрить их в веб-проект, для меня, школьника Junior Frontend’а, дают overhead сложной инфы, я же хочу просто «позаимствовать» любую крутую модель и быстро внедрить в свой сервис. Руки зачесались придумать универсальный алгоритм, так что решение было найдено быстро.

Приступаем. 1 шаг

Я хочу взять формат большинства моделей с Kaggle, чтобы в дальнейшем было легко заимствовать чужой код любой сложности не разбираясь в нем. Бот для телеги пишем на Python 3.9, с помощью либы pyTelegramBotAPI, для решения проблемы совместимости расширений .py и .ipynb юзаем ipynb.

И так, устанавливаем зависимости:

pip install pyTelegramBotAPI
pip install ipynb

Заходим на Kaggle и выбираем понравившуюся модель. Я начну с классического кейса Titanic — Machine Learning from Disaster, заимствую это решение (Titanic Random Forest: 82.78%), перетаскиваю в проект с ботом.

Устанавливаем появившиеся зависимости:

pip install <имя>
Пилим бота. 2 шаг

Создаем новый файл и импортируем в него наши либы:

import telebot
from ipynb.fs.defs.ml import is_user_alive

В ipynb.fs.defs.ml вместо ml впишите имя модуля, в котором находится модель, а вместо is_user_alive имя будущей функции, которую будет эта модель реализовывать. В нашем случае она предсказывает, выживет ли пассажир.

Инициализируем бота, вставляем токен (получите его через @BotFather):

bot = telebot.TeleBot('token')

Пишем хэндлер на команду /start, описываем в нем как юзать бота и формат ввода дынных. Чтобы его определить, изучите тестовый датасет и поэксперементируйте с вводом своих строк.

@bot.messagehandler(commands=['start'])
def welcome(message):    
  bot.sendmessage(message.chat.id, 'Привет! Назови Класс билета, Имя (одним словом), '
                  'Пол (male/female), Возраст, Прибыл ли он с супругом (1-да, 0-нет), '
                  'с Ребенком (1-да, 0-нет), Номер билета, его Стоимость и Порт '
                  'пасадки, - а я предскажу, выжил ли этот пассажир на Титанике!')

Теперь какой бы текст юзер не ввел, мы воспринимаем его как данные пассажира. Превращаем их в лист и приводим к формату тестового датасета:

@bot.messagehandler(contenttypes=['text'])
def answer(message):    
  bot.sendmessage(message.chat.id, 'Анализируем…')    
  passengerdata = message.text.split()    
  passengerdata.insert(0, 0)    
  passengerdata.insert(9, ',')    
  passengerdata[2] = '"', passengerdata[2], '"'

Как видите, в нашем случае в начало было необходимо добавить бесполезный айдишник, на 9е место незначащую запятую, а имя пассажира заключить в кавычки.

Модифицируем модель. 3 шаг

В файле модели поиском cntrl+f выделяем и удаляем все разделители на ячейки #%% кроме первого. Переносим все импорты в начало и табаем массив кода после них. Теперь оборачиваем его в нашу функцию с аргументом в виде пользовательских данных:

<импорты>
def is_user_alive(user_data):
  <весь остальной код>

Куда-нибудь в самое начало добавляем код, вписывающий в тестовый датасет наши данные:

with open(os.path.join('input', 'test.csv'), "a") as fp:    
  wr = csv.writer(fp, dialect='excel')    
  wr.writerow(user_data)

Predictions чаще всего содержит результат работы модели (проверьте ваш случай). Так как данные пользователя содержались в конце тестового датасета, возвращаем последнюю его строку (return пишем в конце файла):

return predictions[-1]['Survived']
Допиливаем бота. 4 шаг

В функции answer создаем переменную с результатом анализа, она будет содержать 0 или 1… в странном формате. Короче, в нашем случае необходимо ответ дополнительно перевести в числовой тип:

answer = is_user_alive(passenger_data)
if int(answer) == 1:    
  bot.sendmessage(message.chat.id, 'Везунчик! Видимо, этот пассажир успел на спасательную шлюпку.')
 elif int(answer) == 0:    
  bot.send_message(message.chat.id, 'Увы, но Титаник ваш пассажир… не пережил бы.')

Создаем функцию с предложением чекнуть кого-нибудь еще, вызываем ее из answer с message аргументом:

def do_again(message):    
  bot.sendmessage(message.chat.id, 'Проверить живучесть кого-нибудь еще?')

Запускаем полинг:

while True:    
  try:        
    bot.polling(none_stop=True)    
  except ():        
    time.sleep(5)
Результат
Все! Довольно просто, правда?

Если не очень, можешь глянуть видео версию:

Код: https://github.com/freakssha/ml-bot-titanic

Это спидран от чешущихся рук, он не оптимизированный и его можно много где улучшить, но я пока не знаю как. Если вы понимаете, как это сделать, не теряя простоты и универсальности — напишите, прошу!

GitHub, Inst, Telegram, YouTube

Телеграм бот для тех, кто хочет использовать ML в работе, но не готов писать код — Трибуна на vc.ru

Я работаю менеджером продуктов. В рамках рабочих и личных проектов время от времени делаю аналитику данных. Одни из самых популярных задач для меня во время анализа — поиск зависимостей, прогнозирование, деление клиентов на группы, поиск аномалий/инсайтов. То есть стандартные задачи ML. Для этого я беру готовые ML-библиотеки немного причесываю данные, запускаю обучение модели и затем работаю с ней. Это относительно несложный, но утомительный процесс. У меня есть несколько шаблонов кода для разных ситуаций. Но даже тут надо запускать среду разработки, писать код и прочее. В итоге я пришел к идее еще больше автоматизировать процесс работы с ML и, заодно, дать инструмент для тех, кто не готов писать код, но хочет так же иметь возможность решать схожие задачи в своих проектах.

Так родилась идея сделать no-code сервис «ML для домохозяек»👵., который в последствии получил название goML.

2716 просмотров

К слову, я веду канал в Телеграм про свои проекты. Описываю идею, процесс создания, бюджет, прогресс, успехи и фейлы. Мне будет приятно, если вы найдете там, что-то для себя полезное и подпишитесь. Ссылка на канал.

Команда

Я, конечно, могу сам руками писать код, разворачивать его в докере на сервере и прочее, но я не профессионал в этом. И поэтому у меня это обычно занимает много времени, которое я провожу за чтением документации, Stackoverflow и тематических чатов. В data science я тоже далек от тех, кто занимается этим профессионально каждый день. Поэтому решил привлечь к проекту фрилансера. Мне посчастливилось найти прекрасного исполнителя, который как раз недавно закончил похожий проект, поэтому располагал всем необходимым стеком. Плюс Сергей (а именно так зовут фрилансера) загорелся идеей и много сам проактивно предлагал и исследовал. В общем, я рад нашей dream team, так как хорошая команда — один из главных залогов успешности продукта.

MVP

Для простоты и скорости реализации решили делать первую версию в формате бота для Телеграм. Для MVP взяли только одну ML задачу — классификацию. Суть задачи — научиться предсказывать класс/категорию. Примеры таких задач:

  • Определять, является ли письмо спамом или нет. Тут классы/категории — «спам/не спам».
  • Определять по характеристикам клиента, оформит он подписку или нет (тут классы «купит/не купит»).
  • Определять, относится ли операция по банковской карте к мошеннической или нет (мошенник/не мошенник).
  • По симптомам и характеристикам пациентов определять заболевание. Тут категорий может быть много.

В нашем MVP определяемых категорий может быть от 2 до 10.

В момент реализации MVP, осознали, что после обучения модели, бот знает столько всего интересного о данных, что ценности от этой информации достаточно для MVP.

Поэтому в первой версии отказались от прогнозирования. Но вместо этого можно узнать не менее (а для меня часто более) ценную информацию:

  • какие параметры больше всего определяют искомую категорию,
  • как именно значения параметров влияют на определение категории,
  • посмотреть качество обученной модели.

Сейчас у нас бета-версия. То есть, работающий (местами с багами) функционал. Качество пока «на пути к идеалу». Надо дотачивать автоматическую предобработку входных данных, выбор модели и улучшать клиентскую часть.

На данном этапе хочется собрать обратную связь, услышать потребности рынка, подумать о, так называемом, product market fit и… протестировать наш бэкенд;)

Давайте я покажу на примере как работает бот. Так будет более понятно.

Пример работы бота goML

Для демонстрации я возьму один из самых популярных датасетов — данные о пассажирах Титаника с информацией о том, кто выжил, а кто нет.

Давайте попробуем разобраться, что влияло на то, что пассажир выживет или нет. Заходим в бота.

Начало

После запуска бота надо будет загрузить CSV файл с историческими данными по клиентам/событиям, которые хотелось бы научиться предсказывать.

Для обучения используются первые 10 тысяч строк из файла (оптимизация нагрузки в бета-версии). Но в большинстве случаев этого достаточно, чтобы обучить модель на приемлемом уровне.

Обучение модели

После загрузки файла надо выбрать, какую колонку/параметр хотим научиться предсказывать. Модель может прогнозировать от 2 до 10 вариантов категории. По моему опыту, в 80% случаев встречается классификация в рамках двух вариантов (да — нет, 1 — 0, болеет — здоров, купит — не купит и так далее). В случае с Титаником категорий так же две — выжил (в датасете обозначен как «1») и умер («0»). Обучение может занять до 2-3 минут. Модель для Титаника учится примерно 10 секунд.

Для обучения используем свое решение на базе CatBoost от Яндекса. Пока не идеально работает, есть проблемы с автоопределением типов параметров и предобработкой данных. Хотим добавить еще XGBoost, LightGBM и сделать симбиоз адаптирующийся под конкретный набор данных и кейс. Предварительные исследования показали, что это может заметно улучшить качество модели и снизить время обучения.

Когда обучение закончится, появится информация о качестве предсказательной модели. Что именно значат эти метрики можно узнать в разделе бота «Что это все значит?».

Знания о данных, полученных моделью. Предсказание

Предсказания в бета-версии пока нет. Но зато есть информация о данных, которая на самом деле часто не менее важна.

Можно посмотреть топ параметров по их влиянию на предсказываемый параметр. В разделе «Инсайты» можно посмотреть как именно они влияют. В случае с Титаником заметнее всего влиял пол пассажира (первый скрин ниже). Что интересно, женский пол заметно увеличивал шанс выжить (второй скрин).

Обратная связь

Если вы столкнулись с проблемой или у вас есть идея, предложение — пишите, пожалуйста, прямо через форму обратной связи в боте (раздел «Оставить отзыв или предложение»). Если вы хотите лично со мной пообщаться, то на старте бота есть мой аккаунт в Телеграм. Ну а если просто хочется следить за развитием проекта, то подписывайтесь на мой канал.

Что дальше

Это бета-версия с ограниченным функционалам. Текущая задача — собрать фидбек и понять есть ли смысл продолжать, в какую сторону копать.

В ближайшем бэклоге:

  • добавить возможность делать предсказания
  • расширить инсайты и вытаскивать «переломные значения»
  • расширить пул библиотек в беке и сделать что-то вроде auto-ML
  • улучшить качество моделей на выходе
  • прогнозировать не только категорийные параметры (например, цену)

Но все это будет сильно зависеть от реакции и фидбэка. Поэтому:

Если кому-то в работе приходится сталкиваться с прогнозированием, работать с данными или кто-то видит, что такой сервис был бы ему полезен, пожалуйста, напишите мне в личку. С удовольствием пообщался бы с вами.

Для развития проекта хочу еще привлечь веб-разработчика и, возможно, UX-дизайнера. Нужен middle+ уровень с релевантным бэкграундом. Если среди читателей есть такие, то присылайте в личку портфолио, рейт, сколько времени можете уделять в неделю проекту.

Прошу не судить строго, это первая версия беты, написанная в свободное от работы время (по ночам и выходным) менеджером проектов и фрилансером студентом.

Ссылка на бота

В чем разница между AI и ML?

Искусственный или дополненный интеллект (ИИ) и машинное обучение (МО) стали горячими темами в технологиях, бизнесе и нашей повседневной жизни. На самом деле, поиск в Новостях Google по термину «ИИ» выдал 26,1 миллиона результатов только за последние 24 часа. Это около 300 результатов в секунду!

Но если подумать, в этом есть смысл — ИИ становится все большей частью повседневной жизни. Эти рекомендации по покупкам, которые вы видите каждый раз, когда открываете свою учетную запись Amazon. .. Распознавание фотографий в Facebook… ваш личный робот-помощник, который действительно хорош в папиных шутках. (Посмотрите.)


Правда в том, что технология, стоящая за милыми шутками Siri, Alexa или Google Home, — это не столько ИИ, сколько голосовой чат-бот или механизм запросов. Легко неправильно понять, что такое ИИ, и на самом деле люди часто путают ИИ и машинное обучение.

 

Так что же такое ИИ и машинное обучение?

Хотя эти два термина связаны, они не совсем взаимозаменяемы. ИИ — это идея о том, что компьютер или машина могут думать так же, как и мы, например, визуальное восприятие, принятие решений, распознавание голоса и перевод языка. Машинное обучение, с другой стороны, является своего рода подмножеством ИИ, которое инструктирует машину о том, как учиться на основе повторения и обработки данных — чем больше вы ее кормите, тем больше она учится.

Но давайте вернемся сюда и немного поговорим о роботах, прежде чем мы перейдем к деталям, определяющим ИИ и машинное обучение.

 

Существует два вида роботов: механические и программные

Механические боты — это те, о которых мы обычно думаем, когда думаем о роботах. Они выполняют физические задачи, такие как автоматический подъем тяжелых ящиков на складе или выполнение определенной задачи на сборочной линии. Посудомоечная машина — пример робота, с которым мы все знакомы; он будет автоматически мыть вашу посуду, когда она станет грязной, но вы должны загрузить ее грязной посудой и нажать кнопку, чтобы запустить ее.

Программные боты — это код, и они совсем не похожи на механических ботов, которых часто нужно смазывать, чтобы они работали.

Механические боты, как правило, дают программным ботам дурную славу, потому что существует путаница между тем, чем они на самом деле являются. Например, вот полный сборник неудач роботов, начиная с человекоподобного бота, который заявляет, что собирается уничтожить всех людей. (Угу.) Это определенно не то, что задумали его создатели, и, к сожалению, это создает неправильное представление о том, что роботы неспособны делать то, что они должны делать. Другие вводящие в заблуждение примеры включают HAL от 2001: Космическая одиссея, Терминатор, и Пэт, властная мама-робот из Умный дом.

Но программные боты добились большего прогресса, чем механические боты, и они облегчают повседневную жизнь для всех нас. Вернемся к ботам-помощникам, таким как Siri и Alexa — вы можете вызвать любого из них, чтобы он выполнил задачу для вас по звуку вашего голоса. «Алекса, закажи еще сырных дудлов», и она закажет для тебя еще сырных закусок. Расскажите о полезном.

Но это не все, на что способны программные боты; они могут облегчить вашу жизнь множеством других способов. А все потому, что дополненный интеллект и машинное обучение с каждым днем ​​становятся все более изощренными. Опять же, чем больше данных мы им даем, тем больше они узнают.

 

AI против ML

Искусственный или дополненный интеллект начинается с данных — чисел, которые в противном случае могли бы не иметь смысла, — и вы придаете им значение. ИИ — это система, созданная для того, чтобы делать именно это: сортировать и фильтровать данные, чтобы сделать их значимыми и действенными. Примером может служить создание программного бота, который классифицирует все кредиты и дебеты в электронной таблице. Конечно, программное обеспечение не будет делать это все время правильно, но вот в чем фишка: в отличие от людей, которые непредсказуемы в своей способности совершать новые и разнообразные ошибки, боты будут продолжать совершать одни и те же ошибки. Прелесть этого в том, что вы можете устранять неполадки и, в конечном итоге, предсказывать ошибки, которые совершит бот, а затем исправлять их.

Более того, вся идея ИИ заключается в том, что он продолжает развиваться и становиться лучше в том, что он делает. В конце концов, он доходит до того, что не только следует процессу и процедуре для данной задачи, но и начинает тестировать и добиваться лучших результатов.

Здесь мы подходим к машинному обучению. Это программное обеспечение, которое вы создаете для категоризации и осмысления данных, должно узнать, что является правильным, а что нет, что помечать как проблему, а что приемлемо и т. д., и это делается с помощью алгоритмов и статистических моделей или машинного обучения. ИИ начинает с необработанных данных и использует машинное обучение для получения полезных и информативных результатов.
 

Конечно, это не так просто, как кажется, но вы можете себе представить, сколько времени вы сэкономите, имея систему, способную справиться с этой утомительной работой! Искусственный интеллект и машинное обучение также стоят за распознаванием лица и текста/речи, спам-фильтрами в почтовом ящике и, конечно, рекомендациями по онлайн-просмотру и покупкам.

 

Как Botkeeper использует искусственный интеллект и машинное обучение

Botkeeper был создан, чтобы использовать возможности дополненного интеллекта и машинного обучения, чтобы упростить жизнь бизнеса за счет автоматизации одной из самых рутинных и трудоемких задач: бухгалтерского учета. Опрос владельцев малого бизнеса показал, что они тратят на бухгалтерию в среднем 120 рабочих дней в году. Это драгоценное время, которое лучше потратить буквально на что-то другое, кроме бухгалтерии!

Подход Botkeeper к ведению бухгалтерского учета исключает человеческие ошибки за счет применения в ваших книгах проприетарного искусственного интеллекта и машинного обучения. Botkeeper подключается к вашему бухгалтерскому программному обеспечению (например, QuickBooks Online или Xero), чтобы решать все, от классификации транзакций до управления платежной ведомостью — это повторяющиеся задачи, основанные на шаблонах, поэтому расширенный интеллект может легко справиться с ними и практически исключить все возможности для ошибок. Это не идеальный процесс из коробки, как и наем и обучение нового бухгалтера. Кроме того, боты не спят и не болеют, так что вы сэкономите деньги с нашими доступными бухгалтерскими пакетами, имея доступ к своим данным в любое время дня и ночи!

Программное обеспечение также берет ваши данные и создает красивые, точные и последовательные отчеты, так что вам не нужно и пальцем шевелить, чтобы узнать о финансовом состоянии вашего бизнеса.

И будьте уверены, технология — это только один аспект подхода Botkeeper к автоматизированному ведению бухгалтерского учета: команда экспертов-бухгалтеров находится в режиме ожидания, чтобы проверить все ваши ИИ-счета и убедиться, что они верны. Если есть несоответствие, программное обеспечение настраивается для его устранения и предотвращения повторного появления ошибки. Это автоматизированная бухгалтерия с участием человека!

Узнайте больше о том, как работает Botkeeper, и о том, как начать работу!

Обнаружение ботов на основе ML | FortiWeb Cloud 21.2.0

Модель обнаружения ботов на основе ИИ дополняет существующие правила на основе сигнатур и порогов. Он обнаруживает сложных ботов и CC-атаки, которые иногда могут остаться незамеченными.

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

Все намного проще, если вы используете модель обнаружения ботов на основе машинного обучения. FortiWeb Cloud использует алгоритм SVM (Support Vector Machine) для создания модели обнаружения ботов, которая самостоятельно изучает профили трафика обычных клиентов. Когда приходит трафик от нового клиента, он сравнивается с трафиком обычных клиентов. Если они не совпадают, модель обнаружения ботов классифицирует нового клиента как аномалию. Когда профили трафика обычных клиентов резко изменяются (например, функции вашего приложения изменились, так что пользователи ведут себя по-разному при посещении вашего приложения), FortiWeb Cloud автоматически обновляет модель обнаружения ботов, чтобы адаптироваться к изменениям.

Кроме того, тест показывает, что модель обнаружения ботов работает намного лучше, особенно при обнаружении сканеров и парсеров. Трафик всесторонне оценивается по 13 измерениям. Это помогает повысить точность обнаружения и снизить количество ложных срабатываний.

Чтобы настроить правило обнаружения ботов на основе ML:

  1. Перейдите к BOT MITIGATION > ML Based Detection (Beta) .
    Вы, должно быть, уже включили этот модуль в Добавить модули . См. Как добавить или удалить модуль.
  2. Выберите вкладку Настройки модели .
  3. Настройте следующие параметры.
  4. Метод идентификации клиента

    FortiWeb Cloud собирает образцы реальных пользователей для построения модели машинного обучения. Выберите, использовать ли IP , IP и User-Agent или Cookie для идентификации пользователя.

    • IP : Данные о трафике в одной выборке должны поступать с одного и того же IP-адреса источника.

    • IP и User-Agent : Данные о трафике в одном образце должны поступать с одного и того же исходного IP и User-Agent (браузера).

    • Cookie : данные о трафике в одном образце должны иметь одинаковое значение cookie.

    Количество аномалий

    Если система обнаруживает определенное время аномалий от пользователя, она предпринимает такие действия, как отправка предупреждений по электронной почте или блокировка трафика от этого пользователя.

    Количество аномалий определяет, сколько раз аномалии разрешены для каждого пользователя.

    Например, для счетчика аномалий установлено значение 4, и система обнаружила 3 ​​аномалии в последних 6 выборках. Если 7-й образец снова будет обнаружен как аномалия, система примет меры.

    Обратите внимание, что если для 7-й выборки не будет собран действительный трафик (например, пользователь покидает ваше приложение), система очистит счетчик аномалий и информацию о пользователе. Если пользователь повторно посещает ваше приложение, он будет рассматриваться как новый пользователь, и система начнет подсчет аномалий заново.

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

    вызов

    Если обнаружен бот, система будет использовать следующие методы, чтобы подтвердить, что это действительно бот.

    • Отключить : Не выполнять проверку браузера.

    • Real Browser Enforcement : система отправляет клиенту JavaScript, чтобы проверить, является ли он веб-браузером.

    • Применение CAPTCHA : Система требует от клиентов успешного выполнения запроса CAPTCHA.

    Активирует политику действий, если трафик не из веб-браузера.

    Длительность блока

    Введите количество секунд, в течение которых вы хотите блокировать запросы. Допустимый диапазон: 1–3600 секунд (1 час).

    Этот параметр действует только при выборе Блок периода в Действие .

    Список исходных IP-адресов

    Щелкните Создать новый , чтобы просмотреть диапазоны исходных IP-адресов образцов. FortiWeb Cloud будет собирать образцы из указанных диапазонов IP-адресов.

    URL-адреса исключений

    Из-за характера некоторых веб-страниц, таких как веб-страница со списком акций, даже обычные пользователи могут вести себя как боты, поскольку они склонны часто обновлять страницы. Возможно, вам придется добавить эти URL-адреса в список исключений, иначе модель может быть недействительной, поскольку в образцах записано слишком много действий, подобных ботам.

    Щелкните Создать новый , чтобы получить список URL-адресов исключений. Система будет собирать образцы для любого URL-адреса, кроме тех, которые указаны в списке URL-адресов-исключений .

  5. Выберите действие, которое FortiWeb Cloud предпринимает при обнаружении нарушения правила, в правом верхнем углу.
    Для настройки действий необходимо сначала включить Расширенная конфигурация в Глобальные > Системные настройки > Настройки .

    Предупреждение

    Принять запрос и создать сообщение журнала.

    Предупреждение и отказ

    Блокировка запроса (или сброс соединения) и создание сообщения журнала.

    Period Block

    FortiWeb Cloud заблокирует ботов и отправит «страницу блокировки» обратно в браузер, а также запишет запрос в журнал атак.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *