Майл школа анализа данных

Обновлено: 05.07.2024

Академия MADE от VK — это бесплатные образовательные проекты для специалистов, у которых есть опыт работы в IT и стремление повысить свой профессиональный уровень.

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

MADE — образовательный проект для тех, кто уже работает в IT, но хочет быстро вырасти или сменить вектор профессионального развития. Первым проектом MADE была Академия продуктовых менеджеров. Сейчас мы открываем Академию больших данных.

Для специалистов с опытом VK развивает образовательную вертикаль MADE: Академия больших данных и Академия продуктовых менеджеров. У нашей компании сильнейшая экспертиза в IT и большой опыт в образовании. Вы будете учиться у тех, кто сегодня делает яркие цифровые продукты, которыми пользуются миллионы людей в России и за рубежом. У нас есть все, чтобы каждый участник проекта стал высококлассным профессионалом.

Во-первых, что это такое за MADE?

Официально, программы Яндекса и Озона больше направлены на подготовку студентов, а MADE — на обучение уже действующих программистов/аналитиков и т.д. Но это, скорее, условности, ибо один мой знакомый, которому под 40 лет, учится в ШАД, и я знаю довольно много студентов, которые учатся в MADE.

О поступлении

Я начал интересоваться анализом данных в марте 2019 года. Кратко про мой уровень тогда:

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

Так я не попал в ШАД

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


Так прошло вся моя весна и лето 2019

  • Просмотрел десятки часов лекций по высшей математике. Сидел с учебниками и прорешал десятки задач.
  • Закончил специализацию по машинному обучению на Coursera.
  • Прошел курс по алгоритмам от университета Сан-Диего на Coursera.
  • Прошел курс по статистике на Stepik-е.
  • И еще много всего по мелочи…


Через день после дня X

Почему не платные курсы?

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

Вступительные экзамены

Все, чему я учился эти 6 месяцев в библиотеке, пригодилось. И алгоритмы, и машинное обучение, и конечно, математика.

И 30 сентября мне пришло письмо. До последнего не верил, что пройду. Я был очень рад 🙂

Вот к этому письму я шел полгода

Как потом узнал, на очное был конкурс в районе 10 человек на место. А на дистанционное (куда поступал я), 32 человека на место. Иначе как упорство и удача я свой результат назвать не могу.

В этом году, судя по инфе на сайте, поступление будет похожим. За исключением двух моментов:

  • Конкурс будет один и тот же для очников и дистанционников. Это очень хорошо для тех, кто планирует учиться удаленно.
  • Для части людей будет дополнительное онлайн-собеседование.

Об учебной нагрузке

Допустим, мы сдаем минимум, 3 предмета. Можно посчитать:

  • 3 лекции и 3 практических занятия по 3-м предметам — это уже минимум 9 часов в неделю
  • Домашка по каждому занимает совсем не 2 часа. По алгоритмам было такое, что я сидел по 15-20 часов только над одной задачей. Но даже если вы — молодец и будете тратить на ДЗ по каждому предмету всего 5 часов в неделю (что маловероятно), выйдет 15 часов.
  • Сопутствующее обучение. К примеру, мне пришлось быстро выучить основы C++, чтобы сдавать алгоритмы.

9 + 3 • 5 = 24 часа. В неделю. Это уже ближе к реальности.

Ещё у нас вместе с поступлением в MADE родился сын. А за месяц до поступления меня позвали работать Data Scientist-ом в 21vek. Все это вместе было крайне забавно. 🙂

Из плюсов большого объема учебы кроме знаний и навыков:

  • Никаких экзистенциальных кризисов. Точно понятно, куда будет уходить ВСЁ свободное время в ближайшие 1.5 года.
  • Сильно упало экранное время в телефоне
  • Перестал смотреть сериалы.
  • Начал медитировать. Надо же как-то компенсировать хронические недосыпы.

Было непросто, но с 1-м семестром справился. Притом, хорошо.

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

Про предметы, которые изучаем


Самая первая лекция по машинному обучению. Ведет Виктор Кантор.

За 1-й семестр мы в основном проходили базу: алгоритмы, статистика, машинное обучение, продвинутый Python/С++. Получился своеобразный уравнивающий блок, после которого можно уже двигаться дальше к прикладным задачам.

За 2-й семестр мы изучали (и пока ещё изучаем) больше прикладных вещей: natural language processing, компьютерное зрение, big data, дизайн и планирование экспериментов. Довольно много работы с нейросетями: учились генерировать текст, переводить с одного языка на другой, находить точки на лице, распознавать автомобильные номера. Есть соревнования, когда нужно сделать алгоритм лучше, чем у других. Есть обычные ДЗ, где задача — к примеру, написать систему машинного перевода лучше, чем заданная планка качества. Или с подачи Сергея Николенко мы моделировали распространение коронавируса.

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

Я взял NLP, Computer Vision, дизайн экспериментов (мини-курс), продвинутый ML и методы оптимизации. Но от последнего курса пришлось отказаться в середине семестра, ибо банально не успевал.

На 2-м семестре так же начинается разделение по специализациям: Data Scientist, Machine Learning Engineer и Data Engineer. Но на нашем потоке это разделение скорее в виде рекомендаций, чем жестких ограничений. Если хотите пройти какой-то курс другой специализации, никто запрещать не будет.

За 3-й семестр, как я понял, будут углубленные предметы вроде нейробайесовских методов, распределенных систем и ML на графах. Но это уже посмотрим.

Преподаватели

Они не только просто классные, но и крутые спецы в своем деле. Спасибо им огромное за терпение и желание научить. К тому же, в том, чтобы проверить 80-100 довольно больших работ на каждое ДЗ и персонально дать комментарии каждому студенту, есть некоторая доля героизма.

Вместо резюме

Я очень рад, что поступил. Очень рад, что сейчас столько возможностей учиться. Конечно, учиться сложно. Но, по мне, — это хорошие сложности. Я к таким сложностям готов и в какой-то мере рад им.

Спасибо за эту возможность.

Как поступить?

Насколько я понял, теперь наборы будут проходить каждый год. До 1 августа 2020 можно подать заявку. Потом пройти онлайн-тестирования по математике и программированию. И, возможно, собеседование.

Автор: Алексей Ярошенко

Data Scientist / ML Engineer. Раньше занимался интернет-маркетингом и учил людей контексту. Сертифицированный тренер Google в Беларуси.

Алексей, добрый день. Благодарю за статью. Моя история очень похожая: степень магистра в БГУ, все на отлично, все забыто, сейчас увлекся датой и пытаюсь реанимировать.
Можете набросать список предметов, которые нужны для поступления, вместе с ссылками на учебники или курсы, которые с вашей точки зрения хороши для подготовки? Благодарю.

По предметам: линейная алгебра, матанализ, теория вероятностей и мат. статистика + основы комбинаторики, python, алгоритмы и структуры данных. И неплохо было бы базово разбираться в машинном обучении, чтобы поучаствовать в соревновании по анализу данных.

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

  • В GANах мы подробно разбирали, почему же KL или JS дивергенции не очень хорошо работают в отличие от дистанции Вассерштейна.
  • Проходили формальное доказательство сходимости EM-алгоритма или, к примеру, делали байесовский вывод для линейной регрессии (выводили формулы перехода к сопряженному апостериорному распределению).
  • Разбирали и имплементировали статьи. К примеру, одно из заданий было с нуля написать свой LambdaRank/LambdaMART по статье.
  • Курс по методам оптимизации вообще состоит в основном из формальных доказательств.

Конечно, странно было бы, если бы мы совсем не пользовались готовыми библиотеками. Но, к примеру, прежде чем пользоваться LSTM, писали свою рекуррентную сеточку на линейных слоях. Или писали свой attention. Про алгоритмы и структуры данных — конечно, доказательства тоже были (по крайней мере, в 1-м семестре точно, во втором — не брал этот курс, ибо жестко + были другие интересные).

Что такое Академия больших данных MADE и для кого она?

Для кого? С одной стороны, вроде как для всех, кто сдаст экзамены: со мной учились и студенты третьего-четвертого курса, и ребята старше меня (а мне 32). А с другой — это для тех, кто не ищет легких путей и готов идти по пути самурая, как называет это мой коллега по MADE Михаил. Больно сейчас, хорошо потом — это как раз именно такая история.

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

MADE тогда еще не существовало, и я готовился к поступлению в ШАД. До экзаменов оставался один месяц. Его, конечно, не хватило на полноценную подготовку, и я не поступил. Я немного погрустил — и начал готовиться к следующему набору, который стартовал через год.

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

После семи месяцев подготовки пять-шесть дней в неделю по восемь-десять часов в день я каким-то чудом сдал экзамен по математике, решил контест по алгоритмам и занял 30 место из 527 в соревновании по анализу данных. Поступил!

Курсы и лекции, по которым я готовился:

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

Мозг ленивый и отлично скатывается в имитацию работы вместо реальной работы. Поэтому, если бы я мог дать себе какой-то совет, он был бы очень простой: решать больше задач. :)

Я ожидал жесть — я получил жесть. Здесь все совпало.

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

Когда я поступил, в тот же месяц мне предложили мою первую работу в сфере машинного обучения и у меня родился сын. Чем пришлось пожертвовать:

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

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

Да и самые обычные домашки местами были просто огненные: раскодировать шифр с помощью MCMC-семплирования, обыграть казино в блэкджек, научив RL-алгоритм считать карты в колоде, собирать пятнашки с помощью графовых алгоритмов с эвристиками, написать свой PageRank на чистом C и распараллелить с OpenMP или закодить параллельное размытие картинки на чистой CUDA прямо на ядрах GPU.

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

A. N-битовое разреженное число

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

B. Беспилотные автобусы на Манхеттене

Поначалу почитал условия и перешёл сразу к C, так как не особо люблю геометрию в такого рода задачах и субъективно решаю такие задачи хуже. Но после решения C посмотрел на статистику попыток решения в интерфейсе соревнования, которая красноречиво говорила, что B проще чем все следующие, ладно будем решать. Задача сводится к поиску правильных прямоугольников среди группы точек, немного подумав пришёл к алгоритму группировки точек по осям и поиску всех возможных комбинаций пары точек Y для пары точек X.

C. Казино Гальтона

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

D. Немножко сломанный HTML

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

Вообще когда я брался за эту задачу, то времени оставалось уже около часа (из 4-х обещаных), а задачи оставалось ещё целых 3, и я не был уверен что успею решить хоть одну. После нескольких бесплодных попыток решения, я решил рискнуть и перешёл на F так как она казалась проще E (по количеству баллов). В итоге где-то в процессе решения F я обнаружил что время кончилось, но решения отправлять ещё можно, в MADE-чатике писали что-то про целые сутки, ну что ж халява, тогда решаем дальше!

В итоге решив все задачи, эту я дорешивал ещё очень долго и одна из моих попыток всё таки выбила 100 баллов на перепроверке через неделю, но во время экзамена у меня было 0 баллов, это ужасно деморализовало.

Я рассуждал так что если читать теги иди по порядку и отбрасывать корректно закрытые пары, и находить некорректные теги то задачу можно решить, но в итоге я умудрился найти кейс который некорректно работал на моём алгоритме и выдавал INVALID вместо ALMOST.

но я заметил если в случае INVALID для контроля прогнать этот алгоритм задом наперёд, то он находит ALMOST. На этом хрупком предположении я и строил своё решение, если до этого ничего кроме списка считаных тегов без пары в памяти хранить не приходилось, то здесь уже нужно было сохранить все теги, для этого я интернировал их и надеялся, что у меня не будет проблем на миллионе строк. В итоге это сработало.

E. Обиженные пассажиры

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

F. Продукты для застолья

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

С этой задачей я маленько попотел, проблема в том что моё решение падало с переполнением стека на рекурсии, насколько я понял, и всякие хитрости типа sys.setrecursionlimit(10000) не работали. Хотя возможно там возникал какой-то бесконечный цикл на хитром кейсе. В итоге немного переписав логику подсчёта для случая с базовыми ингредиентами мне удалось сдать и её.

В итоге в в рамках 4 часов мне бы удалось решить лишь 3 первых задачи, но щедрость и доброта организаторов не знает границ )

Кстати это был первый раз когда используя Питон на экзамене я чувствовал себя достаточно комфортно, я бы даже сказал мне понравилось, когда уже знаешь всякие идиоматические штучки типа defaultdict (по началу вообще не мог понять как питонисты живут без нашего родного Hash.new < |h, k| h[k] = >), или как работает сортировка tuple -ов в Питоне (спасибо собесу Яндекса), то жизнь становится значительно лучше.

Читайте также: