Ebout Data Science | Дима Савелко – Telegram
Ebout Data Science | Дима Савелко
2.68K subscribers
201 photos
19 videos
101 links
Ebout Data Science by @ngmdite | По поводу менторства пиши на @savelkoteam
Download Telegram
🔥11🍌1
Ebout Data Science | Дима Савелко pinned «Личный ROADMAP по Data Science/Data Analytics + ссылки на ресурсы Придерживаясь этого плана, я стал Junior Data Science по NLP🤓 1. Математика 🧮 Для начала хватит первого курса вышмата: - Линейная алгебра (матрица, определитель, обратная матрица и т.д.) …»
Ebout Data Science | Дима Савелко pinned «Материалы по DS / DA Python / SQL - Программирование на Python - Алгоритмы и структуры данных МФТИ - Тренировка алгосов - Интерактивный тренажер по SQL - Оконные функции - Pandas - Numpy - Matplotlib Статистика: - Основы статистики I - Основы статистики…»
Основные типы задач машинного обучения

Умение различать типы задач в машинном обучении - это одна из самых важных задач, с которыми вы столкнётесь.

Есть три основных вида задач машинного обучения:
- Обучение с учителем (Supervised Learning)
- Обучение без учителя (Unsupervised Learning)
- Обучение с подкреплением (Reinforcement Learning)

1️⃣ Обучение с учителем (Supervised Learning) - это когда у вас есть с чем сравнивать, то есть примеры правильных ответов, на которых обучается модель. Грубо говоря, вы показываете тупой машине, что является правильным ответом, а она со временем становится умной и красивой
а) Задача регрессии - предсказание определённого числа на основе каких-то данных. (Предсказание стоимости квартиры, исходя от месторасположения и количества квадратных метров)
б) Задача классификации - предсказание определённого класса тоже на основе каких-то данных (Предсказание пола человека по росту, весу и тд.)

2️⃣ Обучение без учителя (Unsupervised Learning) - это когда моделька предсказывает без вашего вмешательства, то есть вы не лезете в её обучение, она сильная и независимая
а) Кластеризация - объединение объектов в группы по схожим признакам
б) Рекомендательные системы - подбор контента на основе предпочтений пользователя (Spotify, youtube, netflix - все они используют рекомендательные системы)
в) Поиск аномалий — поиск объекта, сильно отличающегося от других

3️⃣ Обучение с подкреплением (Reinforcement Learning)
Модель обучается на основе её прошлых предсказаний, она взаимодействует с некоторой средой, получая от неё негативные и позитивные сигналы, тем самым выступая для себя в роле учителя
Пример

Почитать про машинное обучение можно здесь или здесь

#DataSciencce
🔥41
Градиентный спуск.

Что это такое ?
Разберёмся на примере:
Представьте, что вы находитесь среди гор, причём вы стоите на одной из вершин, и ваша задача - это спуститься вниз в самую глубокую точку, но при этом вы не понимаете - спускаетесь вы или нет, когда идёте вперёд. Но у вас в руке есть компас, который показывает, где находится самая высока точка среди вас этого горного массива. И вы уверенно шагаете напротив направления этой стрелки. 🏞

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

Этапы градиентного спуска для функции одной переменной на картинке:
1️⃣ Мы появились в какой-то точке X_start, около которой хотим найти минимум функции
2️⃣ Затем мы находим наш градиент (направление нашего компаса)
3️⃣ И с определённой длиной шага спускаемся против направления нашего градиента. Определённая длина - это какое-то число, с которым мы будем спускаться вниз. Оно означает длину нашего шага. Назовём его learning_rate. Зачем это нужно, расскажу чуть позже.
4️⃣ Спустившись, мы получили новую точку X. И теперь повторяем всё с самого начало - то есть X_start = X
И наша финальная формула выглядит так: X = X_start - learning_rate * Градиент

Так как градиент - это вектор, который состоит из чисел. Они могут быть большими или маленькими. И мы можем спокойно перепрыгнуть наш минимум или вовсе не дойти до него. Поэтому для контроля мы используем Learning rate, он уменьшает наш шаг 🏃‍♀️

Подробнее можно посмотреть здесь или здесь
#DataScience
👍4🐳1
Про джунство на 2-ом курсе

Этот пост про:
1⃣ Как я к этому пришёл?
2⃣ Как совмещаю с вузом?
3⃣ Как меня взяли, если я на 2-ом курсе?
4⃣ Что я конкретно делаю на работе
?

Можете смело пропускать пункты, которые вам не нравятся. Изложение будет по порядку 🙌

Как я к этому пришёл? 🏃‍♂
Работал. Много работал.
Это путь длинною в год, в начале которого я решил собрать команду, чтобы участвовать в хакатонах и параллельно изучал ML' ку в DLS.
Хакатоны дали мне бесценный опыт управления командой и некоторое виденье, как должны решаться бизнес задачки.
В конце весны, под самый разгар сессии, я решил активно начать искать различные вакансии. Путëм такого ожесточённого поиска я устроился на Karpov/Courses, а там пошло поехало...
Мне дали курсы от Толи Карпова, а они самая настоящая имба.
Я не останавливался в своих поисках работы ,и меня позвали на собеседование в DSM GROUP на аналитика, но во мне заметили потенциал дата сатаниста ,и дали мне офер сатанистом
Вывод: работай, не сдавайся, не бойся ошибок и работай

Как я совмещаю с вузом? 🫣
В вуз я хожу два раза в неделю, стараясь вовремя закрывать дедлайны, а все остальные дни хожу на работу. Спасибо моим любимым одногруппникам, что кидаете мне ДЗ. В целом каждый может совмещать, но работа - это дополнительные усилия и ответственность. Можно договариваться с одногруппниками, с преподавателями, короче, крутится и вертеться


Как меня взяли, если я на 2-ом курсе? 🤓
Всë зависит от работодателя: некоторым компаниям непринципиально взять студента, некоторые принимают только с высшим образованием, некоторые принимают только студентов. Мне повезло, моему руководителю было всë равно на возраст.
Ещё дело в том, сможете ли вы решить бизнес-задачу - вы должны доказать, что именно вы лучше всех выполните задачу и принесëте больше всех денег компании


Что я делаю на работе? 🧑‍💻
Я разрабатываю модель, которая должна определять один класс из десятки тысяч по текстовому описанию препарата. Это задача про nlp и про классический ml. Основная сложность заключается в достижении высокого качества. Мне нужно выбить accuracy ≈ 0.95, а я напомню, что это многоклассовая классификация по текстовому описанию
Более подробный пост будет, когда я выполню задачу, расскажу про технологии и подходы

Вывод:
- Работал много и усердно, чтобы был виден результат
- Вы должны чётко распределять нагрузку между работой и остальной жизнью
- Порешайте больше бизнес-задач в DS, чтобы показать работадателю, что
ass you can

#Мысляки
12🔥51🏆1👨‍💻1
Линейная регрессия

Вы бизнесмен, продаёте квартиры. Вам необходимо узнать сколько будут стоить квартиры с определённым количеством квадратных метров (м^2), пусть это количество = x 🤔

То есть, у вас есть:
- Количество минут до метро равное x
Вам необходимо:
- Узнать цену квартиры, пусть она будет равна y

У вас есть распределение цен в зависимости от количества квадратных метров (Красные точки на картинке снизу).
Окей, у нас есть данные, у нас есть задача: предсказать что-то от чего-то (Число на вход - число на выход). И тут приходит она - линейная регрессия 🤤

Линейная регрессия
- это линейная модель, то есть зависимости в ней являются линейными: y = b_0 + b_1*x_1 + ... + b_n*x_n,
где b_0, b_1, ... b_n
- это константы, обычные числа, x_1, ... x_n - переменные 🫠

Что делает линейная регрессия:
- Она инициализирует b-этки, то есть генерирует рандомные коэффициенты для нашей линейной модели
- Потом подбирает их особым образом, чтобы линия, которая получается в ходе построения модели, передавала зависимость между ценой и квадратными метрами

Как она подбирает b-этки:
Здесь в бой вступает функция потерь.
Вот представьте, что у вас получилось какое предсказание y, но оно плохое, недостаточно передаёт нашу истинную зависимость
Функция потерь показывает насколько наша модель ошибается. Взяв производную от функции потерь, и с помощью градиентного спуска будем корректировать b-этки, что позволит модели лучше передать зависимость в данных 🙄

И что дальше ? Как оценить нашу модель ?
Есть такая вещь, называется метриками. Они показывают насколько модели хорошо работают. Метрик существует довольно таки много, например, для линейной регрессии: MSE, MAE, RMSE, RMSLE. Чаще всего используется MSE. но всё таки зависит от задачи.

Итог:
Линейная регрессия - незаменимая вещь любого дата сатаниста, правильно отобрав фичи, можно выбить качество большее, чем у какой-нибудь нейронки.
Данный пост был ознакомительный, подробнее читать тут, а смотреть тут 🫡
#DataScience
🔥6👍21🍌1
Векторное представление слов

Вот представьте, что вам необходимо предсказать положительный или отрицательный отзыв фильма.
Отзыв - "Фильм для дауничей, ливнул на 5 минуте" 🥴
Нам понятно, что явно отзыв отрицательный и написан недалёким человеком, но как машине понять окрас этого отзыва ?
Явно нужно построить модель бинарной классификации и засунуть в неё.... слова?! Нет, эмбеддинги

Эмбеддинги
- это векторное представление чего-либо, в данном случае слов. То есть у нас есть слово "Мама", мы его представляем в вектор = [0,1, -3, ..., 12, -153]
Есть несколько методов, как можно представить слово в вектор.

1️⃣ Bag Of Words - для каждого слова подсчитываем его встречаемость в тексте.
Плюсы:
· Простой в применении;
· Не требует обработки текста.
Недостатки:
· Может порождать огромные матрицы;
· Не учитываем общий контекст задачи и среднюю частоту всех слов;
Смотреть тут

2️⃣ TF-IDF - позволяет выделить самые слова в тексте, учитывая общий контекст задачи, и то что написано в других объектах
Плюсы:
· Более компактный, чем bag of words;
· Учитывает важность слов.
Недостатки:
· Получаем оценку важности каждого слова через частности, но не погружаемся в контекст;
· Как и bag of words, у данного метода есть проблемы с однокоренными словами, падежами, склонениями и так далее.
Смотреть и читать

3️⃣ Word2Vec - название говорит само за себя, СловоКВектору
Плюсы:
· Модель быстро обучается и генерирует эмбеддинги (даже ваши собственные).
· Эмбеддинги наделены смыслом, спорные моменты поддаются расшифровке.
Минусы:
· Обучение на уровне слов: нет информации о предложении или контексте, в котором используется слово.
· Модель не учитывает то, что слово может иметь различное значение в зависимости от контекста использования
· Не очень хорошо обрабатывает неизвестные и редкие слова.
Смотреть

4️⃣ fastText - К основной модели Word2Vec добавлена модель символьных n-грамм. Это когда мы разбиваем слова на части "Черепаха" - "Чер", "ера", "реп", "епа", "пах", "аха"
Плюсы:
· Благодаря n-граммам неплохо работает на редких и устаревших словах.
· Решает проблему опечаток и склонений
Минусы:
· Обучение на уровне слов: нет информации о предложении или контексте, в котором используется слово.
· Игнорируется совместная встречаемость, то есть модель не учитывает различное значение слова в разных контекстах
Смотреть

Классная статья про эти и другие модели создания эмбеддингов
👍42🐳2🤔1🤯1
Как сделать рекомендательную систему 🧮

Мне дали тестовое задание после выигранного хака от Росэлторга 😎
На вход: у вас есть услуга ,и её надо продать. Также есть её описание: цена, категория, площадка продажи и тд.
На выход: топ покупателей, которые в потенциале могут заинтересовать этой услугой

Решение:
1️⃣ Преподготовка данных.
Датасеты, которые мне дали были довольно таки большие, поэтому я разбил его на рандомные строки и смерджил
Почистил их, сгенерил пару фич и свалидировал на основании времени
Дефолтная скучная фигня в данном случае

2️⃣ Обучение модельки
На одну услугу претендует несколько продавцов, но выигрывает только один. Поэтому я решил задачу бинарной классификации (чи купил/чи не купил).
ROC-AUC = 0.907 | PR-AUC = 0.955
Репозиторий с хорошими примерами использования CatBoost

3️⃣ Формирование эмбеддинга
Также в данных было описание: "Продам ребёнка машину недорого 3-х лет "
Найдя похожие записи про продажи детей машин, я бы сократил мою выборку, над которой работала уже обученная модель, в несколько раз
Я использовал FastText над лемматизированными словами. так как он не боится редких слов и не боится орфографических ошибок из-за n-gramm

4️⃣ Метрики
Было подсчитано две метрики
1 - Для какой части процедур в зависимости от n угадали хотя бы одного участника, то есть с какой долей вероятности мы угадали хотя бы одно микрославича
2 - Общая доля угаданных уникальных участий, сколько в среднем микрославичей мы можем угадать

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

Был хакатон TenderHack, и задача была предсказать два таргета: спад цены и количество участников в определённой торговой сессии 🧮
Кратко о решении:
1️⃣ Предобработали данные и сделали фичи
2️⃣ Сделал TF-IDF эмбеддинги на описании торговой сессии, затем уменьшил их размерность с UMAP и кластеризовал с помощью HDBSCAN (это проблема решения)
3️⃣ Добавил эти кластеры к фичам и классифицировал сессии на их статус (очень важная сессия)
4️⃣ Сделал две модели регрессии и предсказал таргеты

Проблема:
Если при условном миллионе моя модель работает, то при двух-трёх миллионах модель посылает меня нахуй🖕
Проблема в масштабируемости: TF-IDF имеет очень большую матрицу и обрабатывается большое количество времени
Мне понравилось, как ребята с первого места обработали текст. Они обработали его SBERT + LaBSE, что дало фиксированное количество признаков, учитывая английское описание слов. Но при этом их проблема была в том, что они не учитывали редкие слова, которые не были обучены ни SBERTом, ни LaBSE. Эту проблему можно победить правильным использованием или TF-IDF, или BM25. Ну это зависит от задачи 🫣

Итог:
Хак был крутой, самое главное, что я поел узнал много нового и познакомился с новыми и классными людьми. Главное старайтесь из любого события находить что-то полезное и позитивное для себя 😇
Гитхаб на решение

#DataScience
😁42😭1
Собес в Газпроме

Недавно проходил собес в Газпроме, и у меня спрашивали довольно таки интересные, а порой сложные вещи на интервью 🫣

1⃣ Что такое макро/микро метрики?
Это вещь используется при много классовой классификации, определëнным усреднением  метрик

2⃣ Отличие word2vec и glow?
Это штука из слов создаëт осмысленные вектора. Их отличие в том, что glow в отличие от word2vec учитывает совместную встречаемость слов

3⃣ Как устроен трансформер?
Один из самых сложных вопросов. Трансформер выполняет seq2seq задачу, один из подвидов этой задачи - это перевод предложений из русского на английский к примеру

4⃣ Затем вопросы технического плана, от которых я выпал
- виды тестирования: unit-тесты, модульные тесты и не только
- многопоточность: multiprocessing, multithreading
- GIL

Итог: учите и познавайте всë, но не забывайте концентрироваться на одном
👍63😨2
Погружение в NLP

Собрал для вас серию статьей про NLP 😱

1️⃣ Эмбеддинги стоит прочитать статью и пост выше. Эмбеддинги - представление слов в вектор, то есть в цифру. Основа всех основ в NLP. да и не только в NLP

2️⃣ RNN и LSTM - статья. Рекуррентные нейронные сети - их архитектуру желательно знать для более глубокого понимания других архитектур нейронных сетей

3️⃣ Механизм внимания в seq2seq задачах - статья. Убийственная вещь, которая используется в такой мощной штуке, как трансформер

4️⃣ Трансформер - статья. Чаще всего именно эта архитектура используется для решения задач seq2seq, а такие языковые модели как BERT, GPT сделаны на основе архитектуры энкодера в трансформере

#DataScience
🍌1
2023 ГОД 🥳

Этот год был тяжёлый....И я хочу с вами поделиться победами и открытиями🫡

1️⃣ Жизненные ценности - Самое главное за этот год 👨‍👨‍👦‍👦
Я понял, насколько важны друзья и родственники на моём пути. Друг или брат поможет, не предаст, всегда поддержит, чтобы не произошло ,он тебя не бросит. На данный момент первая ценность моей жизни - это человеческие отношения: родители, друзья, родственники. Спасибо сложностям и людям на моём пути, которые помогли мне это осознать.

2️⃣ Осознание своего пути🤔
Общаясь с друзьями и товарищами, я понимаю насколько сложно найти свою место в этой жизни: куда двигаться, к чему идти, как расти ?
В данном году Я свой вектор развития - и эта одно из главных достижений в моей жизни

3️⃣ Победа в хакатонах💪
Много поражений у меня было за спиной, но благодаря им я выиграл последующие соревнования. Если вы только начали свою Data Science деятельность, то бегом на kaggle и на хакатоны, только практика и опыт лучших поможет вам прокачаться

4️⃣ EngiishZone🗣
В этом году я пошёл на курсы по-английскому в Ezone (English Zone). Это то место, где я учу английский, а самое главное общаюсь с офигенными и разнообразными людьми. Это место помогает мне восстановить энергию для работы и последующий достижений. Благодаря данной школе я спокойно читаю статьи на английском и свободно говорю на нём

5️⃣ Знакомства🫂
Новые люди, которые перевернули моё отношение ко многим вещам: kaggle-мастер в 17 лет - легко, миллионер в 18 - изи, именно эти люди показали, что всё возможно. и предела нет.

Спасибо Вам, что читаете меня. Хочу Вам сказать одно - ЕБАШЬТЕ ,и всё у вас получиться, проверено на себе.
С Новой Годой !🥳
🔥10💅32🗿2👍1🌭1
Как уничтожать собеседования ?

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

1️⃣ Python и Алгоритмы 🐍
Первое, что вам нужно сделать - это зайти на ютуб и написать "ТОП 10 ВОПРОС ПО ПИТОНЧИКУ НА СОБЕСЕДОВАНИИ ДЛЯ РАБОТЫ У ДЯДИ", вот неплохой сайт с основными вопросами.
Потом наступают алгосы, тут есть определённый список тем, которые нужно заботать: односвязные линейные списки, деревья, метод двух индексов, сортировки и многое другое, сайт с основными задачами, ну и base - это LeetCode, сайт где собраны задачи на алгосы. Старайтесь решать по 2-3 задачи в день ,и будет вам успех 🙌
Ещё вам нужно уметь вычислять сложность алгоритма. Сайт для этого

2️⃣ SQL 🗂
Опять же спрашиваем у гугла "ТОП 10 ВОПРОСОВ....", обычно спрашивают чуть теории по sql, а потом пытают по практике. Чтобы заботать практику вам сюда и сюда, а здесь вопросы

3️⃣ Статистика, A/B тесты 📈
Гугл -> "ТОП..."
Здесь спрашивают основы - ЦПТ, p-value, доверительный интервал... Вопросы и вопросы
По A/B тестам у вас могут спросить, как бы проверяли качество двух моделей с помощью A/B тестирования или просто провести A/B тест на теоретическом примере

4️⃣ Метрики в ML 📊
Google -> "...."
Метрики классификации: ROC-AUC, Precision, Recall, Accuracy, PR-AUC
Метрики для задачи регрессии: MSE, MAE, RMSE, RMSLE

5️⃣ Модели в ML 🤖
ГУГЛ
.
Могут спросить про любую модельку, но здесь зачастую затрагивают градиентный бустинг или деревья, а чаще всего их вместе. Также стоит наизусть выучить тему bias variance trade-off
А эту вещь необходимо выучить для прохождения собесов

6️⃣ AI 🧮
Тут зависит от сферы куда вы идёте, тут всё индивидуально. Если я подаюсь на nlp вакансию, то и будут спрашивать nlp. Лично я углубляюсь в NLP и вот вам материал: эмбеддинги и модели

7️⃣ Собственные проекты 📝
Вы должны иметь свои проекты, принимать участие в хакатонах и в kaggle-соревнованиях, чтобы компания понимала, что на деле вы Лев Толстой, а не #%$ простой ☝️
Обычно их спрашивают в начале собеса, старайтесь максимально красиво их описать - это всегда будет бонусом.

Итог:
Ботайте все эти темы, делайте пет-проекты, и чем больше вы будете собеседоваться, тем больше шанс, что вам дадут долгожданный оффер 🧾
8❤‍🔥21
Оффер в крупный синий холдинг в РФ и Head of Data Science в 19 лет

Мне предложили позицию Junior Data Scientist в крупном синем холдинге в РФ. Я там буду заниматься созданием рекомендательной системы для сотрудников всего холдинга, поэтому скоро будут ссылочки на ресурсы по рекомендалкам... 🤗

Какой Head of Data Scientist, ты еб@#%*ый !?
Я был один Дата Саентист старой в компании, поэтому задача упала на одного меня, грубя говоря, я был Head of Data Science в 19 лет 🤡🤡🤡

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

Как я сделал ?
1️⃣ Предобработал данные и построил TF-IDF эмбеддинги, Пробовал обучить FastText, но скор в конце был меньше, дообучить BERT было проблемно, так как мне дали комп с встроенным графическим процессором...
2️⃣ С помощью косинусного расстояния нашёл наиболее похожие записи и взял от них 100 первых записей. Почему именно 100 - эмпирическим путём я понял, что скор на данном количестве самый большой
3️⃣ Взял фичи с этих похожих записей и обучил CatBoost
4️⃣ Выкатил в прод, отсылая в БД предсказанный эталон

Идеи улучшения
1️⃣ Можно сначала кривые бабушкины записи обучить на эталоннах с помощью трансформера - seq2seq задача, а после этого можно выделять наиболее информативные фичи, что будет очень полезно для модели
2️⃣ Перебрать модели - я пробовал использовать только CatBoost, но я бы попробовал использовать случайный лес и построить нейронку
3️⃣ Попробовать обучить BERT-модель, так как там много данных ~25млн, бертовая модель смогла бы построить информативные эмбеддинги

Итог
От меня требовали, чтобы с вероятностью 97% моя штука предсказывала 25% данных. Пришло 100 штук, предсказал 25 штук, и я могу ошибиться только в 3%. Но я не смог достичь 25%, я сделал только 15%, то ли из-за моей тупости, то ли из-за мощностей. Скорее всего первое... 💩
❤‍🔥8👍4