Code.Offer.Repeat
47 subscribers
10 photos
2 files
6 links
Пишу про ML/Data Science собеседования и не только
Автор: Дмитрий Булгаков (Middle Data Scientist @ MTS Web Services)
@dm1trybu
Download Telegram
Channel created
Всем привет!

👋Знакомимся
Я Дмитрий Булгаков - Data Scientist в МТС Веб Сервисы. Занимаюсь преимущественно классическим ML и реализацией задач от бизнеса end-to-end вместе с командой.

🤔Зачем этот канал?
Когда я впервые столкнулся с собеседованием на DS позицию, то понял, что совершенно не готов к текущим требованиям (именно требованиям собесов) в большинстве БигТехов. Доставая информацию из разных источников и побывав на некотором количестве собесов, сложилась картинка, как сделать так, чтобы все-таки этим требованиям соответствовать и даже не думать о том, чтобы как-то считерить. В канале будут собраны прикольные и проверенные ресурсы для подготовки к собесам ну и конечно же собственный контент для подготовки.

🤨Кому будет полезно это все?
Для тех, кто хочет найти первую работу/перейти на новую работу на позициях
Data Scientist, MLEngineer, Data Analyst, Analyst-Developer. 

Software Engineer и Data Engineer
смогут найти тоже много полезного здесь для себя. В перспективе здесь могут появиться разборы баз данных и дизайна высоконагруженных систем.

Давайте вместе готовиться к самым сложным собесам и целиться в луну, чтобы точно оказаться среди звезд ;)

🔍Что здесь сможете найти?
- #leetcode решение алго задач (некоторые будут с видео)
- #MLbasics разные важные моменты в ML и DL, которые очень часто всплывают на собесах
- #MLSysDesign будем разбирать интересные кейсы готовых дизайнов систем машинного обучения и придумывать свои
- #guide общая информация о собесах и для собесов
- #interview обзор собеседований, которые будут на нашем пути
- #money сколько кто зарабатывает тоже обсудим :)
- #random что-то интересное из жизни и работы

Список тем to be continued…



P.S. Если у вас существуют вопросы с собесов или в целом из ML, которые интересно было бы разобрать - пишите в личку @dm1trybu
Please open Telegram to view this post
VIEW IN TELEGRAM
4💯4🤓3
Code.Offer.Repeat pinned «Всем привет! 👋Знакомимся Я Дмитрий Булгаков - Data Scientist в МТС Веб Сервисы. Занимаюсь преимущественно классическим ML и реализацией задач от бизнеса end-to-end вместе с командой. 🤔Зачем этот канал? Когда я впервые столкнулся с собеседованием на DS позицию…»
#guide
#leetcode
#interview_structure

Часть 1

Как сейчас обычно строится собес на позицию Data Scientist/MLEngineer? 💻

1) Алгоритмы и структуры данных

Обычно на этом этапе дают две задачи с leetcode. Первая из них уровня easy, а вторая уровня medium.

- Ориентируемся на длительность собеседования в 1 час.
- Первую задачку стремимся решить за 15 минут, вторую за ~40 минут. Еще закладываем 5 минут на поговорить в начале и задать вопросы в конце.
- Иногда интервьюеры могут задержаться минут на 5, но тут ряд факторов: вы реально близки к готовому решению второй задачи и у интервьюера нет горящей встречи сразу после собеседования.
- Чаще код пишут в текстовом редакторе, например, Yandex.Code, но может быть и редактор с Python интерпретатором, например, CoderPad. Так что будьте готовы запустить свой код. Чаще это даже проще, так как можно проверить работоспособность и только после сдавать решение.

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

Ключевой фактор оптимальности - это знание нотации O-большое относительно сложности по времени и по памяти:
O(1) O(n) O(logn) O(n^2) O(!n)

и так далее. Об этом мы еще поговорим подробнее.

Обычно на таком интервью имеется возможность задать вопрос по синтаксису языка, если вдруг что-то забыли, но по реализации алгоритма подсказок ждать не стоит :)

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

Всегда может найтись такой баг, который сложно заметить из-за того что уже «замылился глаз» на задачу, интервьюер может дать сигнал, что еще не до конца все разобрано. Если самостоятельно не получилось найти - интервьюер подскажет пример, на котором все сломается, НО тут нужно держать в голове, что между количеством подсказок и успешным прохождением алгособеса существует обратно пропорциональная зависимость :)

Дальше будем подробнее разбирать эту секцию уже на примерах решений задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓65🤨3
#guide
#MLbasics
#interview_structure

Часть 2

Как сейчас обычно строится собес на позицию Data Scientist/MLEngineer? 💻

2) Проверка теоретических знаний по ML и всего, что может быть с связано с ML/DL

В первую очередь надо понимать, что недостаточно знать о существовании линейной регрессии, градиентного бустинга или рекуррентной нейронной сети. Важно понимать устройство каждой модели, которую называешь на собеседовании. Насколько глубоко проверят знания - одному лишь интервьюеру известно. Бывает так, что достаточно верхнеуровнево описать логику, но чаще всего нужно раскрывать больше деталей, какие деревья там, почему bias - variance в бустинге оптимизируется, какой критерий разбиения признака в дереве может быть, бывает и с формулами. Также и с метриками, нужно знать, как посчитать метрику вручную, чтобы уверенно объяснить ее и показать глубину на собеседовании.

Получается, что знать нужно много всего и сразу. На этом еще не все. Далеко не во всех случаях на собеседованиях ограничиваются теорией ML, к общему набору вопросов всегда «прилипают» вопросы из мат. статистики и теории вероятностей. Как же без вопросов о тестировании гипотез. А если речь заходит про PCA (уменьшение размерности признакового пространства), то здесь и линейная алгебра подключается со своим сингулярным разложением. Конечно, вряд ли попросят раскладывать матрицу на собеседовании, но понимать, как работает данный метод просто необходимо.

Необязательно помнить все разделы математики подробно, но те из них, которые так или иначе стали базой для ML - спросить могут и скорее всего спросят)

Дальше тут будут появляться ответы на самые популярные вопросы из всех разделов так называемой «базы ML», собранные с разных собеседований. 😈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍85🤓5
#guide
#MLSysDesign
#interview_structure

Часть 3

Как сейчас обычно строится собес на позицию Data Scientist/MLEngineer? 💻

3) ML System Design 😱

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

Ваша цель - показать, что:
- вы понимаете бизнес проблему и будете основывать вашу систему, отталкиваясь от потребности бизнеса, а также валидировать модель на ML метриках, которые будут привязаны к бизнес метрикам (показателям),
- вы можете подойти к решению системно - структурировать монолог и последовательно проговорить все этапы построения системы от постановки бизнес проблемы и переноса ее в техническую задачу -> до мониторинга и оценки вашей системы,
- вы способны выбрать подходящий для данной задачи Loss, модель и офлайн метрики,
- вы можете рассказать про trade-offs вашей системы, например, внедряя сложную модель будем жертвовать временем, а внедряя простую - качеством,
- вы можете поговорить про выбор онлайн метрик, оценку разработанной системы с помощью A/B и про ее мониторинг.

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

На этом этапе собеседования могут попросить погрузиться и в детали обычного System Design - то есть поговорить про нагрузку на серверы, про такие показатели системы, как latency, availability, fault tolerance и другие, про использование технологий, таких как балансировщик нагрузки, брокер сообщений Kafka, кэширование в Redis, про выбор БД для разных целей и упаковку модели в API сервис.

Если срочно нужно подготовиться к такому собесу на DS/MLE, а времени мало - лучше сосредоточиться на ML части, так как часто ей уделяют основное внимание.

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

Обычно дизайн собеседование проводят от уровня Middle и выше. 💪

Следующий пост про ML System Design будет по источникам, где вообще можно поучиться этому делу.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👏5🤓4
#вопрос_дня
#MLbasics
#теорвер

На одном из собеседований в крупный зарубежный финтех была проверка знаний по теории вероятностей. Вопрос не особо сложный, но ударившись только в модели, можно забыть обо всем другом. Давайте разбираться!

Условие задачи:
Есть две коробки, в первой лежат 3 зеленых шара и 7 красных шаров, а во второй - 6 зеленых и 4 красных. Мы случайно берём шар наугад и он оказывается зелёным. Какая вероятность, что этот зеленый шар был взят из первой коробки?

Решение:
Здесь нужно расписать имеющиеся априорные вероятности и применить теорему Байеса.
1) Выписываем вероятности каждого отдельного события - взять любой шар из первой коробки, взять зеленый шар из первой коробки, взять зеленый шар из второй коробки.
2) Считаем по формуле полной вероятности общую вероятность взять зеленый шар.
3) Считаем по формуле из теоремы Байеса вероятность, что наш зеленый шар был взят из первой коробки.
Ответ: 1/3


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

Про то, как легче интерпретировать теорему Байеса поговорим в следующем посте.

Ниже картинка с расписанным решением 🥺
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🆒4😎4👏2
👍73🔥3
#MLbasics
#теорвер

В продолжение к задачке из предыдущего поста.

Теорема Байеса — это по сути способ обновлять вероятность гипотезы, когда появляются новые данные.

Формулировки для понимания:
- Имея знания о вероятности какой-то гипотезы, мы можем с появлением новых знаний уточнять эту вероятность.
- Новые данные -> новая, более точная вероятность.
- Меняем мнение на основе новых фактов.

Короткий пример:
Ты знаешь, что дождь идёт примерно раз в неделю, значит, вероятность - 1 из 7, но вдруг небо затянуло тучами - это новая информация. Теперь вероятность дождя меняется - именно так работает теорема Байеса.


Есть крутое видео с визуализацией и геометрической интерпретацией теоремы Байеса: ссылка
6👍5🤓4
#guide
#MLbasics

Поделюсь полезными ссылками на материалы и вопросы для подготовки к теоретическим собесам в DS/MLE.

Англоязычные ресурсы:
- Подборка бесплатных и платных курсов: курсы
- Вопросы для подготовки (самые популярные): вопросы
- Вопросы посложнее (с ответами): посложнее
- Теоретические заметки: справочник
- Материалы для подготовки (+ ресурсы для Quantitative Researchers): материалы

Русскоязычные ресурсы:
- Учебник от Яндекса: учебник
- Недорогой, но полезный курс по classic ML (от преподавателей с ФКН): курс ML
- Недорогой, но полезный курс по базе DL (от преподавателей с ФКН): курс DL
- Немного базовых вопросов: вопросы
🔥43👍2🤓2
#вопрос_дня
#python

Вопрос с собеса на DL Engineer в российский банк: В чем разница между мультипоточностью и мультипроцессорностью в Python?

Начнем с базы!

Процессор (CPU) - это «железка», физическое устройство, которое выполняет вычисления. Современные процессоры состоят из нескольких ядер, каждое из которых может работать с отдельной своей задачей.

Поток (thread) - это последовательность выполнения инструкций внутри одной программы. Один процесс может иметь несколько потоков, которые делят общую память.

Идем дальше.

Мультипоточность - это запуск нескольких потоков внутри одного процесса. Но! В Python есть GIL (Global Interpreter Lock) — штука, которая не даёт реально выполнять код нескольких потоков одновременно. Поэтому многопоточность эффективна только для задач с I/O (ожидание сети, файлов, API).
Пример:
Мы обучаем модель на большом датасете изображений.
Чтобы не ждать, пока данные последовательно подгрузятся с диска, DataLoader из PyTorch может использовать num_workers > 0. В этом случае потоки параллельно читают файлы, подготавливая тензоры.

train_loader = DataLoader(dataset, batch_size=64, shuffle=True, num_workers=4)


Мультипроцессорность - это запуск нескольких процессов, каждый со своим интерпретатором Python и памятью. Здесь GIL не мешает, и это работает круто для CPU-bound задач (численные расчёты, непосредственно ML и т.д.).
Пример:
Мы запускаем несколько моделей (или несколько экспериментов с разными гиперпараметрами) одновременно. Каждый процесс работает независимо, использует своё ядро CPU и не ограничен GIL.

from multiprocessing import Process

def train_model(config):
# CPU-bound training
...

processes = []
for cfg in configs:
p = Process(
target=train_model,
args=(cfg,)
)
p.start()
processes.append(p)

for p in processes:
p.join()


Читай и запоминай, чтобы не завалить собес 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥5🤓4
#guide
#MLSysDesign

Интервью по ML System Design, наверное, самый сложный этап из всех собеседований. Он сильно зависит от ожиданий интервьюера на данный грейд и может как повысить ваш статус кандидата, так и быстро понизить до джуна или стажера :)

Конечно, есть общие паттерны и подходы к проектированию - не просто так Валерий Бабушкин книжку написал: книга.

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

- Прикольное видео про system design в предотвращении банковского фрода: видео.

- Подборка видео Karpov x Валерий Бабушкин с мок собесами и разборами:
Первая часть
Вторая часть
Третья часть

Еще одно видео от Валерия по теории: видео.

DataTalks с Валерием Бабушкиным - есть полезные советы по прохождению: видео.

- Большой публичный собес от Авито: видео.

Скоро разберем одну нетривиальную задачку из дизайна, которую неожиданно дали кандидату на собесе в зарубежный финтех 😰


P.S. Если кто-то может купить за границей бумажную книжку «Machine Learning System Design» Валерия Бабушкина - напишите, буду крайне признателен)
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍5🔥4
#money 💰

Актуальные зарплаты в ML/DS на конец 2025 года в РФ

👶 Junior: ~100 – 200 k → медиана ≈ 130 k
🧑‍💻 Middle: ~150 – 350 k → медиана ≈ 220 k
🧠 Senior: ~200 – 450 k → медиана ≈ 320 k

🔥 ТОП компаний для Middle DS с медианной з/п > 300k:

- Magnit Tech
- Авито
- Cian
- Rutube


*В Москве, оклад в рублях "на руки", октябрь 2025 г.

Источник данных: https://getmatch.ru/salaries/data_science
👍5🤩5🔥4
#MLbasics
#python

Задача на кодинг? 💻

Бывает на собеседованиях в секции решения задач дают совсем не алгос, а что-то МЛное. Это может быть любой базовый алгоритм из классического ML, а может и класс для self-attention.

Как закодить ЛИНЕЙНУЮ РЕГРЕССИЮ

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

Чтобы подобрать оптимальные веса - нам нужна функция потерь. Обычно используется MSE, так как она гладкая и выпуклая -> производная определена во всех точках -> удобно оптимизировать!

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

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

Показал реализацию модели Линейной регрессии и ее оптимизацию градиентным спуском в ноутбуке с комментариями и формулами.

Будет полезно разобраться в коде для собесов в classic ML и даже в DL, так как часто спрашивают, как устроен Adam (модификация градиентного спуска).

Пиши в комментариях, что бы еще добавил в такую реализацию
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥95👍5
#leetcode
#guide


5 типичных ошибок при решении задач с LeetCode


🧠 LeetCode — это не про знание языка программирования. Это тренировка мышления, но почти все совершают одинаковые ошибки, из-за которых прогресс стопорится. Разберём их.

1. Решать задачи "вслепую" без анализа
Написали код, он прошёл тесты — и сразу дальше.
Ошибка: не разобрали, почему решение работает и как его улучшить.
Разбор после каждой задачи: оценка сложности, поиск альтернатив и "что было бы, если...".

2. Фармить количество задач
Многие решают 10 задач в день, чтобы "набить статистику".
Это даёт только иллюзию прогресса.
Лучше 1-2 задачи в день, но с полным пониманием алгоритма (DFS/BFS, two pointers, dynamic programming и т.д.).

3. Игнорировать категории задач
Решать всё подряд - значит не учиться системно.
Работайте по темам: сначала массивы → строки → хеш-таблицы → рекурсия → графы.
С каждой темой учимся узнавать знакомые паттерны.

4. Не объяснять свои решения "вслух"
На собеседовании важен не код, а ход мыслей.
Привыкайте комментировать процесс: "я начинаю с O(n²) решения, а теперь попробую оптимизировать…".

5. Сразу лезть в сложные задачи
Перескакивать с Easy на Hard - путь к выгоранию.
Делайте постепенно: 10 Easy → 5 Medium → 1 Hard.
Фокус на стабильности, а не сложности.

💡 LeetCode - не про количество, а про осознанность.
5👍3🔥3
#MLbasics
#metrics
#python

Пишем метрики ручками Часть 1

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

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

1. Root Mean Squared Error (RMSE)

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

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

2. Mean Absolute Error (MAE)

📏 Измеряет среднее отклонение предсказаний от реальных значений, в тех же единицах, что и исходные данные.

💡 Удобно, когда все ошибки одинаково важны — не нужно наказывать большие ошибки сильнее, чем маленькие.

3. Mean Absolute Percentage Error (MAPE)

📏 Измеряет средний процент ошибки относительно истинного значения.

⚠️ Плохо работает, если реальные значения близки к нулю (деление на маленькие числа → огромные проценты). Также она несимметрично оценивает перепрогноз и недопрогноз -> можно посмотреть на SMAPE.

💡 Полезно, когда важно понимать ошибку в процентах, например, «на сколько процентов промахнулся прогноз продаж».

4. Mean Squared Logarithmic Error (MSLE)

📏 Измеряет насколько близки логарифмы предсказаний и реальных значений.

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

5. R^2(коэффициент детерминации)

📏 Измеряет насколько хорошо модель объясняет изменчивость данных. Грубо говоря, насколько лучше модель, чем просто “среднее значение”.

💡 Хороша, когда хочешь оценить долю объяснённой моделью дисперсии — то есть, насколько хорошо модель “понимает” зависимость между X и Y.

6. Adjusted R^2 (скорректированный коэффициент детерминации)

📏 Измеряет то же, что и R², но с поправкой на количество признаков (фич).

💡 Можно использовать при сравнении моделей с разным числом признаков. Помогает понять, стоит ли усложнение модели своих результатов.

🧭 Главное — не просто подставлять метрику, а понимать, что именно она показывает и в каких единицах измеряет ошибку. Это позволит выбирать правильную метрику под конкретную задачу, а не просто смотреть на все и теряться.


*Картинка взята с сайта loginom.ru
👍43🔥3