Модуль 1. Что такое ML и когда он нужен

Цель модуля: научиться за минуту отвечать на вопрос «нужен ли здесь ML» и, если да, к какому типу задач относится ваша проблема. После модуля вы различаете регрессию, классификацию и кластеризацию, знаете анатомию датасета (признаки, таргет, сплиты) и представляете, как выглядит самый простой классификатор — kNN.

Перед началом: опыт бэкенд-разработки; ML не нужен — модуль с нуля. Инструменты: песочница сайта (чистый Python), сниппет ниже. Трудоёмкость: ~1–1.5 ч (чтение 40 мин · сниппет и практика 30 мин).

🔥 Правила на 200 строк против 300 размеченных примеров

Команда поддержки просит «сделать умную сортировку тикетов по срочности». Первый заход — классика бэкендера: if-else по ключевым словам. «лежит», «не работает», «верните деньги» → срочный. Через две недели правил уже 200, они противоречат друг другу, регистр и опечатки ломают всё, а новый продукт («подписки») требует ещё тридцати правил. Поддержка правит правила быстрее, чем вы их пишете.

Второй заход другой: поддержка разметила 300 прошлых тикетов («срочный / не срочный» — это заняло пару часов), и модель сама нашла закономерности: какие слова, сочетания, длина текста и время отправки говорят о срочности. Описания правил нет — есть примеры и ответы к ним.

Разница между этими заходами — предмет всего курса: машинное обучение — это когда программа настраивает своё поведение по примерам, а не по инструкциям программиста. Но у этого подхода есть границы: иногда 200 правил — правильное решение. Учимся их различать.

📖 1.1. Правила или примеры: где ML действительно нужен

ML оправдан, когда сходятся три условия:

  1. Закономерность существует, но её тяжело записать правилами. «Срочно ли» и «уйдёт ли клиент» зависят от сотни слабых сигналов: их не описать if-else, но в данных они есть.
  2. Есть примеры с известным ответом. Размеченные тикеты, история заказов с оттоками, прошлые сбои с метками причин. Нет разметки — нечего «обучать»: сначала данные, потом модели.
  3. Цена ошибки терпима и предсказуема. Модель отвечает вероятностями и иногда ошибается. Для сортировки тикетов это нормально; для списания денег без человека — нет.

А когда ML НЕ нужен: правило существует и стабильно (налоговый расчёт — это арифметика, не ML), данных нет и не будет, или система обязана быть детерминированной и объяснимой построчно (регуляторные требования). Здравый смысл: ML — инструмент для задач, где «правильный ответ существует в природе, но не помещается в голову одного человека».

📖 1.2. Три типа задач — и как не перепутать

Карта типов задач ML: регрессия, классификация, кластеризация — примеры и типовые модели

Диаграмма читается сверху вниз: первый вопрос — что вообще нужно предсказать. Число («сколько заказов придёт в понедельник») — это регрессия. Метку класса («срочный ли тикет») — классификация; это самая частая задача в проде, ей будет посвящена половина курса. Группы без ответов («на какие кластеры распадаются наши клиенты») — кластеризация, обучение без учителя. Ключевая развилка внизу диаграммы: для регрессии и классификации нужны примеры с правильными ответами (обучение с учителем), для кластеризации — нет (без учителя).

Запомните подстановку, которая спасает на встречах: если бизнес говорит «предскажите», спросите «что именно — число, метку или группу?». Это определяет и метрики, и класс моделей, и половину дальнейшей работы.

📖 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 объяснимость. Бустинг и нейросети точнее; правила и малые деревья — объяснимее для регуляторов и на инцидентах.

💻 Практика

  1. (15 мин) Сниппет с вариациями. Запустите knn-classify.py. Уберите из TRAIN одну из точек класса 0 рядом с (0.4, 0.6) и перезапустите: изменилось ли что-то при k = 1? Объясните через механизм голосования.
  2. (15 мин) Своя задача. Возьмите рабочую задачу, где «правило» уже наскучило. Проверьте её по трём условиям из 1.1. Если условия выполняются — определите тип (1.2), признаки и таргет (1.3) и запишите это одной строкой каждое.
  3. (10 мин) Разметка руками. Для своей задачи придумайте 10 примеров «признаки → таргет» в таблице. Это ещё не датасет, но вы только что проверили: ответ известен, задача формулируема.
  4. (10 мин) Диаграмма по памяти. Нарисуйте карту из 1.2 без подглядывания и подпишите к каждому типу по два примера из своей работы.

🧩 Quiz "Проверь себя"

1. «Сколько обращений в поддержку придёт завтра» — какой тип задачи?
2. Почему kNN при k = 1 «нервный»?
3. Что такое таргет?
4. Зачем нужен отдельный test-сплит?
5. Когда ML НЕ нужен?

✅ Итоги модуля

  • Назвать три условия уместности ML и один пример, где ML не нужен.
  • По формулировке задачи определять тип: регрессия, классификация, кластеризация.
  • Для своей задачи выписать признаки, таргет и план сплитов.
  • Объяснить на сниппете, как k меняет решение и почему нужна нормализация.
  • Нарисовать карту типов задач по памяти.

🔗 Мостик к Модулю 2

kNN хранит датасет и не «учится» — у модели нет параметров. Дальше по нарастанию: модель с параметрами, которые подбираются из данных. Самая главная из таких — линейная регрессия, а главный механизм её подбора — градиентный спуск — окажется тем самым циклом, который в курсе «Дообучение LLM» крутится над миллиардами параметров нейросетей. Разберём его на прямой из двенадцати точек.