TGViewer
Channel Public Channel
Матчасть

Матчасть

@matchast

Высшая математика в бизнесе и жизни
vk.com/mat.chast
botcamp.timepad.ru
www.youtube.com/channel/UCoO8ApMu4QM4KQ8oGRCgOHQ
Чат: t.me/matchast_chat
Subscribers
881
Photos
27
Videos
0
Links
176

Showing posts older than #243 · Back to latest

Older Posts 20 shown
Post #242 667
Недавно просили в комментах рассказать про reinforcement learning (обучение с подкреплением). Расскажу вкратце, а вы уж решайте, интересно ли это вам. В общем, RL - это когда модели обучаются методом проб и ошибок.

Делается это не от хорошей жизни. Гораздо проще и удобнее мир supervised learning (обучение с учителем), когда для обучения модели есть готовые пары (x, y), модель предсказывает y', и мы настраиваем её так, чтобы минимизировать различие между y и y'. Но такое возможно не всегда. Бывает, что правильные y получить сложно или дорого – например, надо рекомендовать пользователю контент, но мы не знаем, какие рекомендации являются верными, и можем ориентироваться только на лайки и дизлайки. А ещё бывает, что различие между y и y' невозможно выразить в виде дифференцируемой функции, а значит, сложно оптимизировать – например, если y и y' это тексты, а различие мы меряем как расстояние Левенштейна или BLEU. Для таких ситуаций и придумали RL.

В RL формализм такой: идёт «игра» в несколько шагов, на каждом шаге дано состояние S, модель выбирает действие A и получает за это награду R, и затем мы переходим к следующему шагу. Задача модели – выбирать действия так, чтобы максимизировать сумму наград за всю игру. Например, состояние S может описывать шахматную доску с расстановкой фигур, действие A может быть любым разрешённым шахматным ходом, а награда R на последнем шаге равна +1 в случае победы и -1 в случае поражения, и равна 0 на всех предыдущих шагах. Задача модели – много-много раз сыграть в шахматы и научиться выбирать действия, приводящие к победе.

Один подход к решению таких задач – научить модель по парам (S, A) предсказывать сумму будущих выигрышей. Тогда, оказавшись в состоянии S, можно выбрать действие A, для которого такая предсказанная сумма будет максимальна. Другой подход предлагает по состоянию S сразу предсказывать распределение над всеми возможными A, и выбирать действие из этого распределения. Оба подхода, как видите, сводят RL к SL.

На практике RL применяется мало где, кроме рекомендательных/рекламных систем и некоторых сложных задач генерации текста. Есть большие надежды, что методы RL помогут круто управлять беспилотниками, но, насколько я знаю, пока это не совсем так. А большая часть академических статей обкатывает методы RL на играх, как настольных, так и компьютерных. На Курсере есть курс Practical RL (coursera.org/learn/practical-rl), но, к сожалению, его название является оксюмороном. За весь курс рассматривается только одна прикладная задача (машинный перевод), а во всех остальных заданиях учат играть в игрушки. Впрочем, содержание и подача курса хороши, так что для общего развития я его рекомендовать могу.

Стоит ли вам изучать RL? Для решения прикладных задач – скорее всего, нет. Для удовольствия, тренировки мозгов, и развития собственной интуиции в области оптимальных решений, баланса exploration/exploitation, планирования и, прости господи, общего ИИ – да, вполне.
Post #241 797
Бизнес часто требует от data scientist'ов интерпретации предсказательных моделей в каких-то очень простых терминах. Например, "если клиенту позвонили из банка на мобильный и разговор длился больше 16 минут, то в результате клиент откроет депозит с вероятностью 64%". Сегодня я покажу, как такие правила можно извлечь из данных.

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

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

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

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

Пример моего кода для извлечения сегментов можно посмотреть здесь:
https://gist.github.com/avidale/2aa018e6264a3e3887132d522b783561. Тут я тренируюсь на данных маркетинговой кампании одного португальского банка, но вы можете воспроизвести мой подход на чём угодно.

А тем временем, мы продолжаем игру: вы задаёте вопросы в комментариях, я еженедельно отвечаю на какой-то один из них длиннопостом. Собственно, этот пост был результатом одного из таких вопросов (спасибо @akogay).
Post #240 1.58K
Ещё один вебинар на подходе, на этот раз - ликбез по NLP!
Регистрация: https://botcamp.timepad.ru/event/1612905

Мы разберём популярные задачи по обработке текстов и подходы к их решению. Поговорим про выбор моделей и их интерпретацию, разметку данных, и, конечно, про то, как начать свой путь в NLP максимально продуктивно. Решим пару практических задач. Должно идеально подойти для новичков.

Вебинар пройдёт в zoom в четверг 15 апреля с 19 до 21 по Мск.
Стоимость - 500р, но есть несколько бесплатных билетов.
botcamp.timepad.ru Ликбез по natural language processing / События на TimePad.ru Вводный вебинар по NLP от Давида Дале (Сколтех, экс-Яндекс). Разберём популярные задачи по обработке текстов и подходы к их решению. Поговорим про выбор моделей и их интерпретацию, разметку данных, и, конечно, про то, как начать свой путь в NLP максимально…
Post #239 753
Хочу порекомендовать вам блог Lilian Weng. Он в целом про машинку, и довольно много тем посвящено NLP и RL. Там в основном обзоры исследований, но есть, например, и попытки воспроизвести некоторые из них. Например, пост от 2 января - про контролируемую генерацию текста языковыми моделями. Обсуждаются базовые подходы к генерации текстов (варианты жадного сэмплирования, beam search, их преимущества и недостатки), способы подбора правильных промптов для языковых моделей, и методы их файн-тюнинга, позволяющего контролировать стиль.

Я и сам собирался написать обзор по контролируемой генерации, но у меня вряд ли получится лучше. Поэтому держите и наслаждайтесь)
https://lilianweng.github.io/lil-log/2021/01/02/controllable-neural-text-generation.html
Lil'Log Controllable Neural Text Generation
Post #238 718
Наверное, вы знаете про DataFest (fest.ai) - большую конференцию по анализу данных. В следующий раз они будут в конце мая, очень рекомендую. А в конце апреля будет проходить менее масштабная, но тоже интересная встреча - Parsing Conf. Это маленькая конференция по сбору данных, на которой можно и послушать, и выступить, и даже обкатать свой доклад перед DataFest'ом.

Темы готовящихся докладов примерно такие:
- "Сбор и аугментация датасетов изображений на примере цифрового агро и фуднета"
- "Собираем датасет с медицинскими масками"
- "Почему важно уметь парсить"
- "Автоматические регистрации на веб-порталах"
- "Библиотека ferret" (доклад от автора)
- "Парсинг через Tor: Как скачать 1.5 млн патентов за 2 недели, а не за 40 лет"

Кроме этого, можно и нужно предлагать собственные доклады (объявить тему надо до 9 апреля). Подробности - в чатике https://t.me/parsing_conf/47.
Telegram Parsing Conf В конце апреля планируется Parsing Conf 2. Темы докладов — самые разные. От сбора данных в интернете до методологий сбора данных "в полях". Приглашаются все желающие. Неважно: есть у Вас опыт или нет. Для того, чтобы понять, какие темы и направления Вы…
Post #236 737
Посмотрел видео недавнего доклада Tinkoff про распознавание и синтез речи: https://youtu.be/N6DnPC0rwIo. Мне доклад показался очень толковым: спикеры за час с небольшим провели ликбез по технологиям распознавания и синтеза и поделились собственным опытом. Попробую вкратце его пересказать.

Чтобы синтезировать речь из текста, сначала нужно привести текст в читабельный вид: записать буквами числа, сокращения, и прочие специальные обозначения (т.е. нормализовать текст), расставить ударения и точки над ё, по возможности проставить паузы и метки для интонации. Дальше текст превращают в последовательность спектрограмм, т.е. гистограмм, показывающих зависимость высоты звука от частоты на коротком временном интервале. Делают это обычно seq2seq моделями, в качестве основы часто берут архитектуру tacotron, и которые обучаются довольно долго. Последний шаг - применение модели-вокодера, которая из спектрограммы генерирует непосредственно звук. Вокодер тоже может быть авторегрессионным (например, свёрточной сетью), может быть основан на нормализующих потоках, может быть GANом. Оценивают всё это обычно side-by-side краудсорсинговыми оценками.

Распознавание речи решает обратную задачу, получая из неё текст. Первая сложность - выравнивание: из большого количества коротких аудиосэмплов нужно получить относительно короткую последовательность букв, и нужно определить, какие сэмплы относятся к какой букве (а какие - ни к какой). Это решается beam search декодированием: на каждом временном шаге мы поддерживаем несколько гипотез о том, какой может быть последовательность букв к данному моменту, и в конце выбираем последовательность, набравшую максимальное суммарное правдоподобие. Во время декодирования к акустической модели (которая классифицирует каждый сэмпл по-отдельности) добавляют языковую модель (которая отвечает за правдоподобие получившейся последовательности букв с точки зрения языка). Если распознавать речь хочется в реальном времени, акустическая модель (рекуррентная нейронка) запускается на скользящем окне из нескольких семплов, продвигающемся вперёд по мере поступления данных. Чтобы избегать пауз в ответе голосового помощника, нужна ещё хорошая модель для детекции окончания речи. В целом, есть очевидный трейдофф между скоростью распознавания и качеством. Зато качество мерять просто: это доля правильно распознанных слов, которая у Tinkoff сейчас достигает 97% на аудиокнигах и 85-90% на телефонных разговорах.

Этот краткий пересказ упускает кучу важных деталей и интересных подробностей, так что, если есть время, лучше смотрите видео целиком. Хороших выходных!
YouTube Tinkoff.AI Speech — Трансляция митапа На встрече с ведущими разработчиками машинного обучения в Тинькофф обсудили технологии синтеза и распознавания речи. В этой трансляции: 00:00 — Начало трансляции 00:54 — Приветствие 02:42 —Text-to-speech: cooking recipe, Сергей Дуканов 31:26 — Q&A с Сергеем…
Post #235 635
Многоруких бандитов пост

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

Альтернатива такая: одновременно и проводить эксперименты, и эксплуатировать предварительные результаты этих экспериментов. Математически эта постановка задачи называется "multi-armed bandit" в честь американских игровых автоматов. Дано: несколько ручек автомата, каждая из которых приносит случайный выигрыш, и для каждой распределение возможных выигрышей может быть своё. Есть фиксированное число попыток, за которые надо заработать максимум денег. Вместо ручек могут быть рекламные объявления, предлагаемые юзеру музыкальным сервисом исполнители, торговые стратегии на бирже, странички в поисковой выдаче, you name it.

Универсального решения (для любого числа ручек и любого распределения выигрышей) эта задача не имеет. Но есть эвристические решения, которые работают неплохо. Например: для каждой из ручек построить 95% доверительный интервал для матожидания её выигрыша, и каждый раз дёргать ту ручку, у которой верхняя граница интервала самая высокая. Напомним, верхнюю границу можно вычислить примерно как mean + 2 * std / sqrt(n), где mean - это средний выигрыш из этой ручки, std - стандартное отклонение выигрышей из неё, n - число попыток с этой ручкой. Чтобы считать стандартные отклонения, каждую ручку сначала надо дёрнуть хотя бы дважды.

Если нам повезло, и мы сразу выбрали самую лучшую ручку, то всё хорошо, и надо продолжать в том же духе. Если же нам попалась плохая ручка, то по мере того, как мы её будем дёргать, выборка выигрышей из этой ручки будет расти, и доверительный интервал для среднего выигрыша - сужаться. А значит, верхняя граница интервала поползёт вниз, и довольно быстро мы выберем другую ручку. У новой ручки либо интервал более широкий (т.е. распределение выигрышей плохо изучено), либо середина интервала расположена достаточно высоко (т.е. средний выигрыш большой). А на интервалы с низким средним выигрышем, которые изучены уже неплохо, ресурсы зря расходоваться не будут. Профит!

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

И, кажется, это очень похоже на то, чем все мы, человеки, занимаемся по жизни.
Post #234 620
Вчерашний вебинар по матстату вроде вышел неплохо.
О чём сделать следующий? Классический ML? Более сложные темы из матстата? Эконометрика? Что-нибудь из NLP?
Предлагайте новые темы в комментах!
Post #233 811
Мой пост про расчёт размера выборки так хорошо пошёл, что я решил провести вебинар по матстату. Попробуем за вечер разобрать азы: доверительные интервалы, тест на сравнение средних, расчёт размера выборки. Подойдёт вспоминающим матстат или смелым новичкам.
Вебинар будет в среду 31 марта с 19 до 21 по Мск.
Стоимость участия 250р, но есть несколько бесплатных билетов.
Регистрация: https://botcamp.timepad.ru/event/1596689
botcamp.timepad.ru Матстат: просто о главном / События на TimePad.ru Вебинар по математической статистике от Давида Дале (Сколтех, ex-Яндекс, преподаватель ШАДа). Разберёмся, почему выборочные оценки – неточные, и как с этим жить. Вспомним доверительные интервалы, тесты на сравнение средних, и расчёт размера выборки для эксперимента.…
Post #232 2.63K
Если решить это уравнение, получим n = 20 000. То есть, чтобы достоверно отличить конверсию 0.6% от 0.5%, нужно закупить 20 тысяч кликов. Поиграться с числами вы можете тут: daviddale.ru/sample-size.

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

Этот рассказ родился из вопроса, который мне задал один подписчик в комментариях в полвторого ночи. Задавайте и вы свои вопросы, и будет вам отвечено 😊
Post #231 2.41K
Что-то в прошлый раз я с графовыми эмбеддингами зажестил. Сегодня будет более простой и прикладной рассказ – про расчёт размера выборки для эксперимента.
Представим, вы хотите попробовать новую рекламную кампанию. Вы платите по 1 рублю за клик, и зарабатываете, если человек, кликнувший по объявлению, совершил покупку. В уже имеющейся кампании конверсия из кликов в покупки 0.5%, а какая будет в новой – вы не знаете. Вопрос: сколько кликов надо оплатить, чтобы сравнить новую кампанию со старой?

Проблема в том, что «настоящую» конверсию невозможно измерить по данным с абсолютной точностью. Вот допустим 160 человек кликнули на баннер, а сделал покупку – один, то есть 0.625% от всех. Значит ли это, что на миллион кликов придётся около 6250 покупок? Не факт. Интуитивно понятно, что для вывода, что конверсия новой кампании больше 0.5%, 160 кликов мало. Ведь может быть, что нам просто повезло, и на самом деле покупку делает один кликнувший из тысячи. Но сколько кликов – достаточно?

Математическая статистика предлагает удобный инструмент для оценки точности: доверительный интервал. Назовём «настоящую» конверсию буквой p, от слова «probability». Вы оплатили n кликов, из них было m покупок, и средняя конверсия в вашей выборке равна k=m/n. Чисто k обычно не равно p, но чем больше n, тем они ближе друг к другу. И оказывается, если кликов было достаточно много, то интервал k ± 2 sqrt (k(1-k)/n) содержит в себе число p с вероятностью около 95%. Sqrt – это квадратный корень.

[Под капотом у этой формулы биномиальное распределение, у которого дисперсия равна p(1-p)n, плюс понимание, что в больших выборках биномиальное распределение по ЦПТ сходится к нормальному, плюс знание, что 95% нормально распределения сосредоточено в пределах 1.96 стандартных отклонений от среднего. Учите матстат!]

Итак, 95% доверительный интервал равен k ± 2 sqrt (k(1-k)/n). Если n=160 и m=1, то интервал будет примерно 0.6% ± 2 *0.6%, то есть от -0.6% до 1.8%. Как видим, точности недостаточно, чтобы сравнить конверсию с 0.5%.
Проблема в том, что в некоторых случаях нам нужны ооооочень большие выборки, чтобы точно сказать, что конверсия больше целевой. Например, на миллион кликов пришлось 5100 покупок, и тогда 95% доверительный интервал – от 0.496% до 0.524%. А значит, конверсия может быть как 0.5%, так и чуть выше, и даже миллиона кликов мало, чтобы сказать точно.

Поэтому, чтобы запланировать размер выборки, надо заранее решить, насколько большой должна быть конверсия, чтобы мы её могли отличить от 0.5%. Например, можно решить, что разница меньше 0.1% для нас не существенна. Это значит, что нам нужно измерить конверсию с погрешностью не больше 0.1%, а погрешность обычно не больше 2 sqrt (k(1-k)/n). Мы можем подставить вместо k ту конверсию, которую мы ожидаем (например, 0.5%), и тогда у нас останется уравнение с одним неизвестным:
0.1% = 2 sqrt(0.5%(1-0.5%) / n)
Post #230 711
Post #229 662
Довольно много важных вещей в нашей жизни можно представить в виде графов: социальные связи, язык, географические объекты, архитектуру Интернета и отдельных программ, взаимодействия веществ в организме и организмов в экосистемах. И из их графовости потенциально можно извлечь ценную информацию. И если вам когда-нибудь придётся это делать, вы уже немножко знаете, как (:

Ну а моя игра продолжается. Задавайте вопросы в комментариях, я буду отвечать на все из них, и каждую неделю по мотивам какого-нибудь из вопросов будет длиннопост.
Post #226 607
Подход 3, комбинированный. Цель - учесть как и локальные фичи, так и положение в графе. Во-первых, заставим нейросетку из предыдущего подхода принимать на вход не только графовые эмбеддинги вершин "контекста", но и их "обычные" фичи из подхода 0. Во-вторых, заставим её на выходе предсказывать не только порядковый номер целевой вершины, но и её собственные локальные фичи. Ну а эмбеддинг, как и раньше, будем брать откуда-то из середины этой нейросети. Тут можно смело применять предобработку из NLP - например, фичи некоторых из вершин заменять на случайно выбранные или на специальную вершину [MASK], чтобы их эмбеддинги не могли смотреть сами на себя, и вынуждены были опираться на контекст. Собственно, и архитектуру сети можно взять из NLP, обучая transformer на небольших окрестностях, надёрганных из графа, и ограничивая attention всех или некоторых из его голов в соответствии с наличием рёбер или каких-то путей между парами вершин.

Все эти подходы я породил преимущественно из собственного воображения и из довольно беглого знакомства с материалами в сети. Но вообще-то графовые эмбеддинги - это тема обширная, едва ли не безграничная. Если хочется залезть поглубже, рекомендую почитать обзоры графовых эмбеддингов, например, этот: https://arxiv.org/abs/2012.08019. А ещё есть чудесный пост про связь между трансформерами и графовыми нейросетками: https://towardsdatascience.com/bca9f75412aa (картинку я стырил как раз оттуда).
Post #225 565
Как вы помните, я обещал еженедельно выкладывать хотя бы один пост, отвечающий на вопросы в комментариях.
Сегодня отвечаю на вопрос из телеги: как можно заэмбеддить направленный граф с фичами в вершинах?

Объясняю задачу. Направленный граф - это множество объектов (вершин), некоторые из которых попарно соединены стрелочками (рёбрами), отражающими какое-то отношение между ними. Например, вершины могут быть юзерами соцсети, а рёбра - наличием подписки. Фичи в вершинах - это какой-то набор их характеристик; например, для юзера фичами может быть имя, аватарка, bio, число постов. Заэмбеддить - значит, вычислить какие-то векторные представления вершин, учитывающие структуру графа. И как же это сделать?

Подход 0, базовый. Игнорируем граф, и просто эмбеддим каждую вершину по отдельности. Имя и bio прогоняем через какие-то текстовые нейросетки, аватарку - через картиночную нейронку, на выходе получаем векторы фиксированной длины. И, допустим, конкатенируем их. Если результат получится слишком длинный, можно попробовать применить к нему алгоритм сокращения размерности. Дополнительно можно прикрепить число входящих и исходящих рёбер, т.е. число подписчиков и подписок. Это просто счётчики, не жалко. Готово, у нас есть хоть какое-то представление вершины. Пусть для вершины i такое представление равно f[i].

Подход 1, учёт непосредственных соседей. Мы можем обогатить представление вершины агрегированными представлениями её связей первого порядка. Обогащать будем, просто конкатенируя вектора. Агрегировать будем, например, усреднением. Будем отдельно агрегировать тех, кто подписан на юзера (children), и тех, на кого юзер подписан (parents). То есть представление вершины i можно теперь вычислить как f[i] & mean(f[childen(i)]) & mean(f[parents(i)]), где & - символ конкатенации. Такое представление выглядит уже весьма юзабельным.

Подход 2, чисто графовый. Забиваем на фичи, и строим эмбеддинги чисто по графу. Здесь проще всего провести аналогию с эмбеддингами слов: мы обучаем модель, чтобы по какому-то "контексту" вершины предсказывать её, подобно тому, как по тексту с пропуском алгоритмы типа word2vec и BERT предсказывают пропущенное слово. "Контекстом" будет какое-то случайное множество вершин, находящихся недалеко от данной - например, его можно насэмплить короткими случайными блужданиями из данной вершины. В случае с направленным графом контекста может быть два - для входящих и исходящих связей. Какая-нибудь небольшая нейронка в процессе предсказания вершины по контексту вполне может выучить её эмбеддинг, дающий полезную информацию о её положении в графе.
Post #223 679
Океееей, а как это понимание ROC AUC связано с тем, которому нас учили - с площадью под кривой? А вот как. Выстроим все единицы в ряд вдоль оси Х, упорядочив по предсказанному скору. А нули - вдоль оси Y. Выберем случайную точку в этом квадрате: она соответствует какой-то паре нолика и единички. Кривой обозначим все такие пары, в которых скоры у нолика и единицы (примерно) равны друг другу. Под кривой скор выше у единички, над кривой - у нолика.

Поэтому, если вы обучаете модель для бинарной классификации, я крайне рекомендую выбирать модель по ROC AUC - а выбор порога отсечения максимально отложить. Всё равно к тому моменту, когда модель дозреет до применения, мир безнадёжно изменится, доля единичек будет совсем иной, и порог придётся менять. Но если у модели высокий ROC AUC, она окажется к этому готова.
Post #222 676
Для затравки отвечу на один из вопросов из чатика t.me/bigdata_ru. Там ситуация была такая: надо предсказывать вероятность очень редкого события (мошенничества, или редкой болезни, или поломки механизма, я уж не знаю). И событие мало того что редкое, а ещё и нестабильное: в какие-то периоды его 1.5% от популяции, в другие - 0.2%. Вопрос, как в таких условиях сравнивать качество разных предсказательных моделей или одной модели в разные периоды?

Правильный ответ - конечно же, по ROC AUC. Практически все другие популярные метрики классификации основаны на присвоении "жёстких" меток: если предсказанная вероятность больше порога, предсказываем "единичку" (событие), если меньше - предсказываем "нолик" (отсутствие события), дальше считаем, сколько предсказанных единиц и ноликов совпали с реальными, и как-то упаковываем в одно число. И это плохо.

Самая популярная метрика - accuracy (точность), или просто доля правильных ответов. В таких несбалансированных задачах, как наша, эта метрика бесполезна: можно предсказать 100% нулей и получить точность 99.8%, и этот бесполезный прогноз трудно переплюнуть даже сложной моделькой.

Более внимательные метрики - recall (полнота), то есть доля верно предсказанных единиц среди всех настоящих единиц, и precision (по-русски тоже точность🙈), то есть доля верно предсказанных единиц среди всех предсказанных (!) единиц. Если предсказать слишком много единиц, упадёт точность, а если предсказать слишком мало - упадёт полнота, поэтому в принципе с этой парой метрик можно работать при несбалансированных классах. Как, кстати, и с их усреднением, которое зовётся F1-мера. Но они таки завязываются на фиксированный заранее выбранный порог, и если вдруг доля единиц в популяции резко скакнут, то и значения этих метрик скакнут, даже если предсказательная модель не изменилась. И это не очень ок.

Зато метрика ROC AUC к пропорции классов нечувствительна ни-ско-леч-ко, потому что вместо использования отдельно взятого порога, разделяющего предсказанные нули от единиц, она делает усреднение по ВСЕМ ВОЗМОЖНЫМ порогам.

Проще всего понять ROC AUC так: это вероятность того, что для наблюдения, случайно выбранного из всех единичек, скор будет выше, чем для наблюдения, случайно выбранного из всех ноликов. Если модель идеально отличает нули от единиц, то это будет происходить всегда, и auc будет 100%. Если модель вообще не отличает их, это будет проиходить в 50% случаев. Для типичной модели - полезной, но неидеальной - число будет где-то между. И от того, сколько именно единиц и нулей было в штуках, это число не зависит.
Post #221 542
Давно не постил сюда какого-то оригинального контента.
Решил в ближайший месяц поиграть с вами в такую игру: вы задаёте в комментах вопросы на тему прикладной математики и анализа данных, а я развёрнуто на них отвечаю, минимум по одному посту в неделю. Поехали!
Post #220 1.66K
Привет! Напоминаю, в четверг 4 марта я буду проводить мастер-класс по разработке навыков Алисы в Python
Регистрация: https://botcamp.timepad.ru/event/1561807

- Расскажу про общие принципы разработки навыков Алисы (и подобных ей ассистентов)
- Покажу, как написать с нуля, захостить и опубликовать свой навык (стоит заранее зарегистрироваться в cloud.yandex.ru)
- Поделюсь своим опытом организации кода и инфраструктуры навыка
- Покажу, как использовать в Алисе собственные ML модели, если вам это вдруг нужно
- Презентую свою питонячью библиотеку tgalice/dialogic

Мастер-класс будет бесплатный и пройдёт в zoom.
botcamp.timepad.ru Мастер-класс по разработке навыков Алисы в Python / События на TimePad.ru Бесплатный мастер-класс по разработке навыков Алисы в Python. Научимся писать код для навыков, хостить их, покрывать навыки аналитикой и автотестами, и работать с инструментами анализа текста.
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →