Какая математика на самом деле нужна в Data Science, ML и разработке — и в каком порядке её учить
Автор — Александр Маширин, старший преподаватель МФТИ, руководитель онлайн-магистратур кафедры дискретной математики МФТИ и организатор Хармфульского клуба любителей математики. Полная версия гида с задачами, которые проверяют себя сами, — на harmful.online.
Начнём с задачи. Болезнью болеет 1 % людей. Тест находит 90 % больных, но у 10 % здоровых даёт ложную тревогу. У человека тест положительный. Какова вероятность, что он болен?
Большинство отвечает «около 90 %». Правильный ответ — около 8 %. Разбор ниже, в разделе про вероятность. Если вы удивились, этот текст для вас: он о том, какая математика на самом деле стоит за работой с данными, какая нужна программисту без ML и в каком порядке её учить, чтобы не застревать в каждой второй формуле.
Короткий ответ
Работа с данными и машинное обучение стоят на четырёх опорах: школьной алгебре и функциях, линейной алгебре, математическом анализе и теории вероятностей со статистикой. Программисту, который не занимается ML, чаще нужна другая четвёрка: логика, комбинаторика, графы и оценка сложности алгоритмов.
Учить всё это «по учебнику с первой страницы» не обязательно. Важнее порядок: каждая следующая тема опирается на предыдущую. Если перескочить через ступень, застревать придётся не в новой теме, а в старой — просто незаметно для себя.
Ниже — что именно нужно из каждой области, зачем это в работе, по одной задаче для самопроверки и порядок тем для трёх разных ролей. Ответы к задачам собраны в конце: решите сначала сами.
Сколько математики нужно на самом деле
Удобно различать три уровня работы. Это не ступени престижа, а разные задачи: большинство людей в профессии всё время переходит между первым и вторым.
- Пользоваться. Вы применяете готовые методы: строите отчёт, обучаете модель из библиотеки, читаете графики и метрики. Здесь нужны уверенная школьная алгебра, функции и графики, проценты и доли, базовая статистика — среднее, медиана, разброс, корреляция — и умение отличить случайный всплеск от закономерности.
- Понимать. Вы можете объяснить, почему модель обучается, откуда переобучение, что значит штраф за сложность и почему две метрики дают разные ответы. Здесь нужны векторы и матрицы, производная и градиент, условная вероятность и распределения. Именно этот уровень позволяет читать документацию и статьи, а не только копировать примеры.
- Придумывать новое. Вы предлагаете свои методы и обосновываете, что они работают. Здесь нужна строгая математика: доказательства в анализе и линейной алгебре, теория вероятностей, методы оптимизации.
Для первой работы аналитиком обычно хватает первого уровня с заходом во второй. Для ML-инженера второй уровень — рабочая норма. Третий нужен в исследованиях и на сильных магистерских программах.
Попробуйте: запишите одну рабочую задачу, ради которой вы идёте в математику. Например: «хочу понимать, почему градиентный бустинг переобучается» или «хочу сам оценивать результат A/B-теста». От неё и стоит отсчитывать нужный объём.
Фундамент: школьная алгебра и функции
Эту часть легко пропустить, потому что она кажется слишком простой. Но многие трудности с формулами в статьях по машинному обучению на деле оказываются трудностями со школьной алгеброй: дробные выражения, степени, преобразования неравенств. Отдельно стоит логарифм: он живёт в функциях потерь, в шкалах графиков и в оценке сложности алгоритмов.
Что нужно уверенно:
- проценты и доли — от какой базы считается изменение;
- преобразования выражений, степени и корни;
- линейные и квадратные уравнения, неравенства;
- функции и графики: линейная, квадратичная, показательная, логарифм;
- что происходит с графиком при сдвиге и растяжении.
Если здесь неуверенность, начните отсюда. Это не «слишком низкий уровень», а ровно та ступень, без которой дальше тяжело. Как восстановить школьную базу и проверить себя двенадцатью задачами — в гиде «Как вспомнить школьную математику взрослому».
Линейная алгебра — язык данных
Таблица с данными — это матрица: строки — объекты, столбцы — признаки. Каждый объект — вектор. Похожесть двух текстов или товаров часто измеряют через скалярное произведение их векторов. Слой нейросети — это умножение на матрицу. Метод главных компонент, которым сжимают признаки, опирается на собственные векторы. Без линейной алгебры формулы в документации к библиотекам остаются непрозрачными.
Что нужно:
- векторы, сумма, умножение на число, скалярное произведение, длина и угол;
- матрицы, умножение матрицы на вектор и матрицы на матрицу;
- системы линейных уравнений и метод Гаусса;
- линейная зависимость, базис, ранг;
- собственные значения и векторы.
Главное здесь — не техника вычислений, а геометрический смысл: матрица как преобразование пространства. Когда этот смысл появляется, половина формул начинает читаться сама.
Разобрать операции по шагам можно отдельно: умножение матриц по правилу «строка на столбец» и решение систем методом Гаусса.
Задача 1. У матрицы A две строки: (2, 0) и (1, 3). Умножьте её на вектор x = (1, 2).
Производная и градиент — как модель учится
Обучение модели — это поиск параметров, при которых ошибка минимальна. Производная показывает, куда и насколько быстро меняется функция. Когда параметров много, вместо одной производной появляется градиент — вектор частных производных, который указывает направление самого быстрого роста. Градиентный спуск делает шаги в обратную сторону. Обратное распространение ошибки в нейросетях — это правило производной сложной функции, применённое много раз подряд.
Что нужно:
- предел и производная, правила дифференцирования, производная сложной функции;
- исследование функции: где растёт, где убывает, где минимум;
- функции нескольких переменных, частные производные, градиент;
- интеграл — чтобы понимать непрерывные распределения и вероятность как площадь.
Чтобы увидеть каждый шаг в коде, откройте разбор градиентного спуска с примером на Python. А правило производной сложной функции понадобится, когда функция потерь состоит из нескольких слоёв.
Задача 2. Функция ошибки f(x) = (x − 3)² + 1. Где у неё минимум? Сделайте один шаг градиентного спуска из точки x = 1 с шагом 0,25: x₁ = x − 0,25 · f′(x).
Вероятность и статистика — как не обмануться данными
Это самая прикладная часть: проверка гипотез, A/B-тесты, доверительные интервалы, выбор метрики. И самая коварная, потому что здравый смысл здесь регулярно подводит. Многие модели машинного обучения прямо формулируются на языке вероятностей: логистическая регрессия предсказывает вероятность, а функции потерь выводятся из правдоподобия.
Что нужно:
- классическая вероятность, условная вероятность, формула Байеса;
- случайные величины, математическое ожидание, дисперсия;
- распределения: биномиальное, нормальное, пуассоновское;
- закон больших чисел и центральная предельная теорема — без доказательств, но с пониманием;
- выборка, оценка, доверительный интервал, проверка гипотез, p-значение;
- корреляция и регрессия — и почему корреляция не означает причинность.
Теперь обещанный разбор задачи из начала. Возьмём 1000 человек. Больных 10, тест найдёт 9 из них. Здоровых 990, ложная тревога у 99. Положительных результатов 9 + 99 = 108, и только 9 из них — настоящие больные. Вероятность 9/108 = 1/12, около 8 %, а вовсе не 90 %. Это формула Байеса, посчитанная на пальцах, — и главная причина учить вероятность, а не полагаться на интуицию.
Задача 3. Вернитесь к той же задаче и поменяйте одно число: пусть болеет не 1 %, а 10 % людей. Какой станет вероятность болезни при положительном тесте?
Программисту без ML: дискретная математика
Если вы пишете бэкенд, мобильные приложения или системы, а не обучаете модели, линейная алгебра и анализ нужны реже. Зато каждый день работает дискретная математика:
- логика — условия, отрицание сложных утверждений, «для всех» и «существует»; это прямо код в if;
- комбинаторика — сколько вариантов перебрать, сколько тестов нужно, почему перебор не закончится к утру;
- графы — зависимости пакетов, маршруты, связи между пользователями, сети;
- оценка сложности — почему алгоритм на тысяче записей летает, а на миллионе встаёт;
- индукция и инварианты — как убедиться, что цикл делает то, что задумано.
Для алгоритмических задач и собеседований этот набор важнее матанализа. Начать удобно с комбинаторики: она сразу тренирует аккуратный подсчёт и доказательства.
Задача 4. Двойной цикл сравнивает каждую пару из n записей ровно один раз. Сколько будет сравнений при n = 1000?
Порядок тем для трёх ролей
Аналитик данных
- Школьная алгебра, функции, проценты.
- Вероятность и описательная статистика.
- Проверка гипотез, A/B-тесты.
- Матрицы и регрессия.
- Основы анализа.
ML-инженер
- Школьная алгебра и функции.
- Линейная алгебра.
- Производная, градиент, функции многих переменных.
- Вероятность и статистика.
- Оптимизация и строгая линейная алгебра.
Разработчик без ML
- Логика и школьная алгебра.
- Комбинаторика.
- Графы.
- Оценка сложности, индукция.
- Вероятность — для рандомизированных алгоритмов и тестов.
Выберите список под свою задачу и начните с первой неуверенной темы. Если направление ещё не выбрано, проверьте школьную алгебру и функции: без них дальше придётся постоянно возвращаться к вычислениям.
Что сделать на первом занятии
- Аналитику данных. Начните с задач на проценты: найдите часть, восстановите целое и посчитайте изменение. Можно двигаться к вероятности и статистике, когда вы каждый раз объясняете, что приняли за 100 %, и отличаете процент роста от процентных пунктов. Если это уже уверенно — разберите задачу про положительный тест выше.
- ML-инженеру. Если школьная база уверенная, возьмите задачу 1 на умножение матрицы на вектор. Посчитайте на бумаге и объясните размер результата. Когда это получается без образца, переходите к правилу цепочки, а затем сделайте один шаг градиентного спуска — задача 2. Проверьте не только координату, но и новое значение функции.
- Разработчику без ML. Возьмите задачу 4 о сравнении пар: выпишите пары для четырёх записей, затем для пяти. Объясните, почему формула делится на два и почему десятикратное увеличение числа записей даёт примерно стократный рост работы. После этого откройте курс по комбинаторике из списка ниже и решите первую задачу самостоятельно.
Это проверка ближайшего шага, а не готовности к профессии. Хороший ориентир: вы можете решить задачу с изменёнными числами, объяснить каждый переход и проверить ответ. Если пока получается только повторить чужое решение, задержитесь на теме ещё на несколько задач.
Книги и бесплатные курсы
Не обязательно искать идеальный источник. Обязательно — решать задачи самому. Вот материалы, которые можно открыть сегодня.
Школьная база
- Тренажёр «Школьная математика для взрослых» на Stepik — бесплатные задачи с автопроверкой по шестнадцати блокам. Не нужно решать всё подряд: откройте блок, который нужен сейчас.
Анализ, линейная алгебра, геометрия
- «Введение в высшую математику — матан, линал, ангем» — открытая архивная версия подготовительного курса клуба.
- «Как читать математику» — совместный разбор брошюры Г. Е. Шилова. Учит читать математический текст, а не только смотреть объяснения.
- Марк Дайзенрот, Альдо Фейсал, Ченг Сун Онг, Mathematics for Machine Learning (Cambridge University Press) — учебник ровно под эту задачу: линейная алгебра, анализ, вероятность и оптимизация в применении к ML. Авторы бесплатно выложили PDF на mml-book.github.io. На английском.
Вероятность и статистика
- «Основы статистики» Института биоинформатики на Stepik — бесплатный вводный курс: описательная статистика, проверка гипотез, регрессия.
- Томас Нилд, «Математика для Data Science» (в оригинале Essential Math for Data Science) — популярное введение с кодом на Python. Хорошо для первого знакомства; для глубины понадобится учебник строже.
Дискретная математика
- «Комбинаторика для начинающих» и «Комбинаторика для продолжающих» Андрея Райгородского (МФТИ) — лекции и задачи открыты всем на Stepik.
Как учить, чтобы знание осталось
- Не начинайте с нейросетей. Продвинутая тема быстро упрётся в алгебру и функции. Это не провал, а подсказка, какой фундамент нужен сейчас.
- Карандаш раньше кода. Код помогает проверить идею, но не заменяет её. Сначала решите задачу на бумаге, потом посчитайте то же в numpy — и сравните.
- Закрывайте видео. Узнать чужое решение и решить самому — разные умения. После объяснения возьмите чистый лист и восстановите ход без подсказки.
- Объясняйте вслух. Попытка объяснить тему другому человеку быстрее всего показывает, где понимание рвётся.
- Держите ритм, а не рекорд. Три коротких занятия в неделю надёжнее одного марафона раз в месяц. Как вернуться к учёбе после перерыва или неудачи — в статье «Математика без тревоги».
Если цель — магистратура
Та же математическая основа ведёт к трём онлайн-магистратурам кафедры дискретной математики МФТИ: «Современная комбинаторика» и «Комбинаторика и цифровая экономика» на русском, Contemporary Combinatorics на английском. Вступительный экзамен для них — «Математика и комбинаторика». Сравнение программ, карта тем экзамена и маршрут подготовки от школьной базы до пробника — в гиде по трём магистратурам и в полной версии этой статьи.
Самостоятельно, бесплатно или вместе с клубом
Самостоятельно. Если вы умеете держать ритм и разбирать свои ошибки, материалов выше достаточно. Выберите одну тему, один источник — и несколько недель не меняйте их.
Бесплатно, с открытыми материалами клуба. На странице «Открыто всем» собраны открытые курсы, лекции и записи Хармфульского клуба любителей математики. Их можно проходить в своём темпе без подписки.
Длинный маршрут с людьми рядом. Фундаментальный курс клуба ведёт от школьной базы через математический анализ, аналитическую геометрию и многомерный анализ к линейной алгебре: векторы, матрицы, определители, частные производные и градиент, линейные пространства и собственные значения. Теории вероятностей, статистики и дискретной математики в программе курса нет — для них берите курсы из списка выше. Курс идёт потоками: спринты, общий ритм и встречи, на которых участники объясняют друг другу билеты.
В клуб приходят и из разработки, и из аналитики. Алексей, 46 лет, кандидат физико-математических наук, программист и проектный менеджер, рассказывал о себе: «Математика за 20 лет выветрилась почти вся, кроме той, что использовал в разработке и в диссере». Лера, 32 года, бизнес- и системный аналитик, давно хотела перейти в аналитику данных, но сомневалась в своих силах. Пришла не за поступлением: «Да просто поняла, что математика стала для меня отдушиной, таким вот хобби, так что хочу испытать свои силы и, конечно, получить удовольствие».
Свой маршрут от школьной базы до магистратуры подробно описала Лидия Виткова — «Математика для взрослых: дорожная карта». Другие истории — на странице «Участники клуба».
Частые вопросы
Нужна ли математика программисту? Для большей части повседневной разработки хватает логики и аккуратности. Но как только появляются алгоритмы, производительность, графика, криптография, данные или машинное обучение, без математики работа превращается в подбор чужих рецептов. Чем дальше от шаблонных задач, тем она нужнее.
Можно ли начать с машинного обучения и доучивать математику по ходу? Можно, если записывать вопросы, на которые пока нет ответа, и возвращаться к ним. Плохо работает обратное: пропускать формулы в надежде, что они не понадобятся. Они понадобятся, когда модель начнёт вести себя странно.
Хватит ли школьной математики аналитику данных? Для первых задач — часто да, если добавить к ней статистику и вероятность. Для роста понадобятся линейная алгебра и основы анализа: на них стоят регрессия и большинство методов, которые вы будете применять.
Что учить первым: линейную алгебру или матанализ? Если цель — машинное обучение, удобно начать с векторов и матриц: они сразу видны в коде. Но производная понадобится почти тут же, поэтому две темы часто идут параллельно. Вероятность лучше брать, когда вы уверенно обращаетесь с суммами и функциями.
Сколько времени это займёт? Зависит от того, с какой ступени вы начинаете и сколько часов в неделю реально свободны. Честнее не ставить срок, а выбрать ближайшую тему и ритм, который выдержит загруженную неделю.
Ответы к задачам
Задача 1. Каждая координата результата — скалярное произведение строки матрицы на вектор: 2 · 1 + 0 · 2 = 2 и 1 · 1 + 3 · 2 = 7. Ответ: (2, 7).
Задача 2. Минимум в x = 3: квадрат не бывает отрицательным и равен нулю только там. Производная f′(x) = 2(x − 3), в точке 1 она равна −4. Шаг: x₁ = 1 − 0,25 · (−4) = 2. Точка сдвинулась к минимуму, как и должна.
Задача 3. Из 1000 человек больны 100, тест найдёт 90. Здоровых 900, ложная тревога у 90. Положительных 180, из них больны 90 — ровно 50 %. Один и тот же тест при разной распространённости болезни значит совсем разное: без учёта базовой доли результат теста не прочитать.
Задача 4. Число пар из n элементов — n(n − 1)/2. При n = 1000 это 499 500 сравнений. Рост квадратичный: в десять раз больше записей — примерно в сто раз больше работы.
Какая из четырёх задач оказалась самой неожиданной — напишите в комментариях. И расскажите, на какой математике вы сами застряли, когда шли в данные или в разработку: такие истории помогают другим понять, что ступеньку пропустили не только они.
Хармфульский клуб любителей математики — взрослые люди, которые вернулись к математике и занимаются ею вместе. Статьи, задачи, открытые лекции и истории участников — на harmful.online. В одиночку вредно.