Модуль 1. Что такое ML и когда он нужен
Цель модуля: научиться за минуту отвечать на вопрос «нужен ли здесь ML» и, если да, к какому типу задач относится ваша проблема. После модуля вы различаете регрессию, классификацию и кластеризацию, знаете анатомию датасета (признаки, таргет, сплиты) и представляете, как выглядит самый простой классификатор — kNN.
Перед началом: опыт бэкенд-разработки; ML не нужен — модуль с нуля. Инструменты: песочница сайта (чистый Python), сниппет ниже. Трудоёмкость: ~1–1.5 ч (чтение 40 мин · сниппет и практика 30 мин).
🔥 Правила на 200 строк против 300 размеченных примеров
Команда поддержки просит «сделать умную сортировку тикетов по срочности». Первый заход — классика бэкендера: if-else по ключевым словам. «лежит», «не работает», «верните деньги» → срочный. Через две недели правил уже 200, они противоречат друг другу, регистр и опечатки ломают всё, а новый продукт («подписки») требует ещё тридцати правил. Поддержка правит правила быстрее, чем вы их пишете.
Второй заход другой: поддержка разметила 300 прошлых тикетов («срочный / не срочный» — это заняло пару часов), и модель сама нашла закономерности: какие слова, сочетания, длина текста и время отправки говорят о срочности. Описания правил нет — есть примеры и ответы к ним.
Разница между этими заходами — предмет всего курса: машинное обучение — это когда программа настраивает своё поведение по примерам, а не по инструкциям программиста. Но у этого подхода есть границы: иногда 200 правил — правильное решение. Учимся их различать.
📖 1.1. Правила или примеры: где ML действительно нужен
ML оправдан, когда сходятся три условия:
- Закономерность существует, но её тяжело записать правилами. «Срочно ли» и «уйдёт ли клиент» зависят от сотни слабых сигналов: их не описать if-else, но в данных они есть.
- Есть примеры с известным ответом. Размеченные тикеты, история заказов с оттоками, прошлые сбои с метками причин. Нет разметки — нечего «обучать»: сначала данные, потом модели.
- Цена ошибки терпима и предсказуема. Модель отвечает вероятностями и иногда ошибается. Для сортировки тикетов это нормально; для списания денег без человека — нет.
А когда ML НЕ нужен: правило существует и стабильно (налоговый расчёт — это арифметика, не ML), данных нет и не будет, или система обязана быть детерминированной и объяснимой построчно (регуляторные требования). Здравый смысл: ML — инструмент для задач, где «правильный ответ существует в природе, но не помещается в голову одного человека».
📖 1.2. Три типа задач — и как не перепутать
Диаграмма читается сверху вниз: первый вопрос — что вообще нужно предсказать. Число («сколько заказов придёт в понедельник») — это регрессия. Метку класса («срочный ли тикет») — классификация; это самая частая задача в проде, ей будет посвящена половина курса. Группы без ответов («на какие кластеры распадаются наши клиенты») — кластеризация, обучение без учителя. Ключевая развилка внизу диаграммы: для регрессии и классификации нужны примеры с правильными ответами (обучение с учителем), для кластеризации — нет (без учителя).
Запомните подстановку, которая спасает на встречах: если бизнес говорит «предскажите», спросите «что именно — число, метку или группу?». Это определяет и метрики, и класс моделей, и половину дальнейшей работы.
📖 1.3. Анатомия датасета: признаки, таргет, сплиты
Любая модель с учителем живёт в трёх сущностях:
- Признаки (features) — то, что известно в момент предсказания: длина текста тикета, время отправки, тариф клиента, история оплат. «Вход» модели.
- Таргет (target) — то, что предсказываем: срочность, отток, цена. «Выход». Таргет обязан быть в прошлом относительно момента, когда модель применится в бою, — это правило нарушают чаще всего (модуль 8).
- Сплиты — датасет делят минимум на три части: train (на нём учим), val (на нём подбираем и останавливаемся — модуль 7 llm-курса), test (трогаем один раз в конце, «экзамен»). Одинаковые данные во всех трёх — главный способ обмануть себя.
Терминология со сплитами — не формальность: она придёт и в дообучение LLM (train/val), и в кросс-валидацию (модуль 11). Контракт один.
📖 1.4. Первый классификатор: kNN
Самый простой обучаемый алгоритм вообще не учится: kNN (k ближайших соседей) запоминает все примеры, а для новой точки смотрит на её k ближайших соседей и «голосует» их классами. Чем k больше, тем глаже решение — и тем легче чужие точки вытесняют местную.
Запустите сниппет knn-classify.py. В нём два облака тикетов в
плоскости «признак 1 — признак 2» (класс 1 — срочные), и пять точек-вопросов
прогоняются через k = 1, 3, 7 и 15. Обратите внимание на строку (0.4, 0.6):
при k = 1 модель отвечает «не срочный», а при k = 3 и выше — «срочный».
Это ровно тот эффект из вывода сниппета: один шумный сосед переворачивает
решение при малом k, а голосование размывает случайности при большом. Внизу
сниппета — разбор соседей конкретной точки с расстояниями.
Три вывода, которые стоит забрать:
- k управляет гладкостью. Малое k — модель «нервная», большое — «глупая» (соседи из чужого облака получают голос). Это первый в курсе пример параметра, который балансирует между недо- и переобучением (модули 4–7).
- Нет обучения — есть цена предсказания. kNN хранит весь датасет и на каждом запросе считает расстояния до всех точек. Противоположность — линейные модели из модуля 2: долго учатся, предсказывают мгновенно.
- Расстояния требуют масштаба. Признак с размахом 0..1000 молча подавит признак 0..1 — нормализация обязательна (модуль 8).
📖 1.5. Компромиссы
- ML vs правила. Правила объяснимы и работают сразу; ML терпимее к сложности и меняется с данными. Гибрид — рабочий дефолт: ML сортирует вероятности, правила задают жёсткие границы («всё с PII — человеку»).
- С учителем vs без учителя. С учителем — точнее и измеримее, но нужна разметка; без учителя — данных сколько угодно, но «правильность» кластеров не проверить метрикой (модуль 9).
- Мало данных vs много моделей. Сотни строк — только простые модели (kNN, линейные); сложные требуют данных, иначе запомнят шум (модули 4–6).
- Точность модели vs объяснимость. Бустинг и нейросети точнее; правила и малые деревья — объяснимее для регуляторов и на инцидентах.
💻 Практика
- (15 мин) Сниппет с вариациями. Запустите
knn-classify.py. Уберите из TRAIN одну из точек класса 0 рядом с (0.4, 0.6) и перезапустите: изменилось ли что-то при k = 1? Объясните через механизм голосования. - (15 мин) Своя задача. Возьмите рабочую задачу, где «правило» уже наскучило. Проверьте её по трём условиям из 1.1. Если условия выполняются — определите тип (1.2), признаки и таргет (1.3) и запишите это одной строкой каждое.
- (10 мин) Разметка руками. Для своей задачи придумайте 10 примеров «признаки → таргет» в таблице. Это ещё не датасет, но вы только что проверили: ответ известен, задача формулируема.
- (10 мин) Диаграмма по памяти. Нарисуйте карту из 1.2 без подглядывания и подпишите к каждому типу по два примера из своей работы.
🧩 Quiz "Проверь себя"
✅ Итоги модуля
- Назвать три условия уместности ML и один пример, где ML не нужен.
- По формулировке задачи определять тип: регрессия, классификация, кластеризация.
- Для своей задачи выписать признаки, таргет и план сплитов.
- Объяснить на сниппете, как k меняет решение и почему нужна нормализация.
- Нарисовать карту типов задач по памяти.
🔗 Мостик к Модулю 2
kNN хранит датасет и не «учится» — у модели нет параметров. Дальше по нарастанию: модель с параметрами, которые подбираются из данных. Самая главная из таких — линейная регрессия, а главный механизм её подбора — градиентный спуск — окажется тем самым циклом, который в курсе «Дообучение LLM» крутится над миллиардами параметров нейросетей. Разберём его на прямой из двенадцати точек.