road/mapsВсе маршруты ↗

ОТКРЫТОЕ ОБУЧЕНИЕ / 08

Data Scientist

От Python и статистики к моделям с честной проверкой

24 этапов с отметкамиВ своём темпе

Как пройти маршрут

Начинайте без опыта в профессии. Результат маршрута — воспроизводимый ML-проект с baseline, проверкой утечек и анализом ошибок. Переходите дальше, когда можете выполнить задание и объяснить результат.

Здесь 21 основных шагов и 3 шага углубления. Это самостоятельная часть единой программы аналитических профессий: другие карты проходить заранее не нужно. Разделы с одинаковой базой можно пропустить только после решения их задания без подсказки. Фиксированного срока и гарантии трудоустройства нет.

Работайте в цикле: прочитайте объяснение → попробуйте пример → выполните задание → откройте разбор → исправьте ошибку → сохраните результат. Одна отметка может потребовать нескольких занятий. Записывайте время и трудности первых трёх шагов, затем планируйте посильный темп. Обязательные задания основной части выполняются бесплатно. Для локальных программ нужен компьютер; ограничения ОС и доступа указаны в шагах.

Кейс «Круг» и данные вымышлены. На маленькой таблице удобно проверить вычисления руками; она не доказывает спрос, причинность или качество ML-модели. В самостоятельном проекте предстоит изменить данные и требования. Не загружайте реальные персональные или рабочие данные в публичные тренажёры.

Основной текст русский. Для английской документации ведите словарь: термин, смысл своими словами, пример. Перевод браузера допустим, но названия полей и код не переводите. Начните с одного абзаца документации за занятие и постепенно переходите к самостоятельному чтению.

ШагРезультат обученияЧасть
1Подготовить рабочее место и словарьОснова
2Проверять таблицы, доли и средниеОснова
3Получать строки и итоги с помощью SQLОснова
4Соединять таблицы без потери и удвоения строкОснова
5Использовать окна и проверять порядок событийОснова
6Написать первые программы на PythonОснова
7Запускать код в отдельном окружении и хранить версииОснова
8Обработать таблицу в pandas и сохранить проверкиОснова
9Освоить математический язык моделейОснова
10Разобраться в вероятности и неопределённостиОснова
11Перевести задачу в прогноз и простой ориентирОснова
12Разделить данные и предотвратить утечкуОснова
13Исследовать данные и собрать воспроизводимый PipelineОснова
14Построить регрессию и разобрать ошибкиОснова
15Выбрать метрику классификации и порогОснова
16Сравнить деревья и ансамблиОснова
17Организовать подбор и объяснить ограничения моделиОснова
18Проверить прогноз во времениОснова
19Подготовить пакетный прогноз и наблюдение за качествомОснова
20Защитить самостоятельный ML-проектОснова
21Проверить готовность и выбрать вакансииОснова
22Исследовать данные без готовых метокУглубление
23Выбрать специализацию в тексте или нейросетяхУглубление
24Спланировать дальнейшую исследовательскую работуУглубление
ОСНОВНОЙ МАРШРУТ

Шаг 1. Подготовить рабочее место и словарь

Разберём на примере

Сервис «Круг» сдаёт учебные комнаты по времени. Это вымышленный кейс: все числа и записи созданы для обучения. Начните с файлов, чтобы уметь повторить работу на другом компьютере. CSV — текстовая таблица: первая строка содержит имена столбцов, последующие строки — записи. Расширение файла обозначает его формат; переименование картинки в CSV таблицу не создаёт. В наших данных одна строка — одно бронирование, суммы хранятся целым числом евроцентов, даты — как год-месяц-день.

Скачать вымышленные бронирования (CSV). Для SQL позже понадобится готовая схема и те же строки.

Что прочитать и посмотреть

  1. LibreOffice: CSV — Импорт CSV: разделитель, кодировка и типы столбцов. Бесплатная справка, английский; приложение LibreOffice бесплатно.

Что сделать

  1. Создайте папку krug и внутри raw, work, results. Скачайте bookings.csv по ссылке в этом разделе и сохраните в raw; исходник больше не редактируйте.
  2. Откройте CSV в LibreOffice Calc: кодировка UTF-8, разделитель — запятая. Проверьте восемь столбцов и шесть строк данных. Сохраните рабочую копию в work в формате ODS.
  3. Создайте словарь с полями: столбец, смысл, тип, допустимые значения, единица измерения. Запишите вопросы о неизвестных правилах; не подставляйте догадки.

Что сохранить

Таблица, словарь восьми полей и журнал вопросов в results.

Как проверить себя

Снова откройте сохранённую таблицу. Идентификаторы u1 и A сохранились как текст, суммы 2000 не превратились в 20. Дата читается однозначно.

Разбор — откройте после своей попытки

booking_id обозначает бронирование; user_id — учебный код пользователя, room_id — комнату. minutes — длительность забронированного интервала. Для cancelled она не означает фактическое использование. Словарь должен прямо говорить об этом. Файл содержит 6 бронирований, но только 4 разных пользователя.

ОСНОВНОЙ МАРШРУТ

Шаг 2. Проверять таблицы, доли и средние

Разберём на примере

Руководитель просит «средний доход». Сначала уточните знаменатель: на бронирование, завершённый визит или пользователя. Доля — часть, делённая на целое: 1 отмена из 6 бронирований даёт 16,7%. Среднее чувствительно к большим значениям; медиана — середина отсортированного ряда. Возврат уменьшает поступления, но не превращает их в прибыль: расходы нам неизвестны. Не складывайте проценты разных групп и не считайте среднее средних без размеров групп.

Что прочитать и посмотреть

  1. LibreOffice: CSV — Импорт CSV: разделитель, кодировка и типы столбцов. Бесплатная справка, английский; приложение LibreOffice бесплатно.
  2. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. В рабочей таблице добавьте net_cents = charged_cents − refund_cents. Посчитайте сумму и переведите её в евро делением на 100.
  2. Отфильтруйте completed. Найдите среднюю и медианную длительность только этих визитов. Проверьте числа ручным расчётом.
  3. Сравните долю отмен с долей пользователей, у которых была отмена. Подпишите числитель и знаменатель каждой метрики.

Что сохранить

Лист расчётов с формулами, единицами измерения и тремя выводами.

Как проверить себя

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

Разбор — откройте после своей попытки

Поступления после возвратов: (2000+3000+4000+2000+3000−1000)/100 = 130 евро. Завершённые длительности: 60,90,120,60,90; среднее 84, медиана 90 минут. Отменено 1/6 бронирований; отмена есть у 1/4 пользователей. Эти проценты отвечают на разные вопросы.

ОСНОВНОЙ МАРШРУТ

Шаг 3. Получать строки и итоги с помощью SQL

Разберём на примере

SQL — язык запросов к таблицам. SELECT выбирает столбцы, WHERE оставляет строки по условию, GROUP BY объединяет строки для расчёта итогов. COUNT(*) считает строки; COUNT(column) пропускает NULL — неизвестные значения. Начинайте с маленького набора, в котором можете проверить каждый результат руками. Учебные запросы выполняются в SQLite Fiddle; PostgreSQL появится отдельно там, где нужны его особенности.

SELECT room_id, SUM(charged_cents-refund_cents) AS net_cents
FROM bookings WHERE status='completed'
GROUP BY room_id ORDER BY room_id;

Что прочитать и посмотреть

  1. SQLBolt — Уроки 1–12: SELECT, условия, JOIN, NULL и группировка. Выполните встроенные задания. Бесплатно, английский, без установки.
  2. SQLite Fiddle — Официальная SQL-песочница: вставьте учебный SQL и нажмите Run. Бесплатно, английский интерфейс; работаем только с вымышленными данными.

Что сделать

  1. Пройдите SQLBolt 1–5 и 10–12. Затем откройте SQLite Fiddle, вставьте содержимое bookings.sql из первого шага и выполните его один раз в пустой базе.
  2. Напишите SELECT для completed, затем итог net_cents по комнате. Используйте SUM(charged_cents-refund_cents).
  3. Добавьте условие day >= '2026-09-02'. Объясните, почему фильтр по строкам ставится до группировки. Сохраните запросы в results/queries.sql.

Что сохранить

Три SQL-запроса и таблица ожидаемых результатов.

Как проверить себя

Без фильтра итог A равен 6000, B — 7000 евроцентов. После фильтра даты A=2000, B=7000. Укажите, какие строки сформировали результат.

Разбор — откройте после своей попытки

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

ОСНОВНОЙ МАРШРУТ

Шаг 4. Соединять таблицы без потери и удвоения строк

Разберём на примере

Справочник хранит описание объекта один раз: код A соответствует комнате «Тихая». Первичный ключ уникально называет запись; внешний ключ связывает запись с другим объектом. JOIN сопоставляет строки по условию. Если одному бронированию соответствуют два платежа, после соединения оно появится дважды. Поэтому перед соединением назовите зерно обеих таблиц — что означает одна строка. LEFT JOIN сохраняет строки слева даже без пары; INNER JOIN оставляет только совпадения.

Что прочитать и посмотреть

  1. SQLBolt — Уроки 1–12: SELECT, условия, JOIN, NULL и группировка. Выполните встроенные задания. Бесплатно, английский, без установки.
  2. PostgreSQL: учебник — Разделы The SQL Language и Advanced Features: таблицы, соединения, внешние ключи, транзакции. Бесплатно, английский; команды PostgreSQL не переносите в SQLite без проверки.

Что сделать

  1. Пройдите SQLBolt 6–9. Создайте rooms(room_id TEXT PRIMARY KEY, name TEXT) и добавьте A/Тихая, B/Большая.
  2. Соедините bookings и rooms. Сверьте COUNT(*) и сумму net_cents до и после соединения.
  3. В отдельной CTE создайте платежи (1,1000),(1,1000),(2,2000). Соедините с bookings и объясните, почему сумма charged_cents теперь не является суммой всех бронирований. Сначала сгруппируйте платежи по booking_id.

Что сохранить

Запрос с соединением, проверками количества строк и пояснением отношения «один ко многим».

Как проверить себя

Со справочником остаются 6 строк и 13000 евроцентов net. В варианте с платежами бронирование 1 повторяется; проверка это обнаруживает.

Разбор — откройте после своей попытки

LEFT JOIN rooms USING(room_id) сохраняет шесть бронирований. Платежи имеют другое зерно: один перевод денег. Суммировать поля бронирования после такого соединения опасно. Сначала SELECT booking_id, SUM(amount) FROM payments GROUP BY booking_id; затем соединяйте этот итог.

ОСНОВНОЙ МАРШРУТ

Шаг 5. Использовать окна и проверять порядок событий

Разберём на примере

Оконная функция считает по группе, сохраняя исходные строки. ROW_NUMBER присваивает номер в заданном порядке; LAG возвращает значение предыдущей строки. В отличие от GROUP BY, можно одновременно видеть отдельное бронирование и место этого бронирования в истории пользователя. Если даты совпадают, добавьте booking_id в ORDER BY, иначе порядок не определён полностью. Дата бронирования и дата события оплаты могут быть разными: выберите нужную заранее.

Что прочитать и посмотреть

  1. SQLite: оконные функции — Примеры row_number(), PARTITION BY и сумм по окну. Бесплатная документация, английский.

CTE задаёт именованный промежуточный результат: WITH имя AS (запрос). Внешний SELECT затем читает его как таблицу. Так можно сначала вычислить номер строки, а затем отфильтровать его.

Что сделать

  1. Для каждого user_id пронумеруйте бронирования по day, booking_id. Выведите первые бронирования через CTE и внешний WHERE rn=1.
  2. Посчитайте накопленные net_cents по дням: сначала сгруппируйте по day, затем примените SUM(...) OVER (ORDER BY day ROWS UNBOUNDED PRECEDING).
  3. Добавьте копию даты с новым booking_id в рабочую базу. Убедитесь, что порядок внутри пользователя остаётся определённым; исходный файл не меняйте.

Что сохранить

Два оконных запроса и объяснение порядка вычислений.

Как проверить себя

Первые бронирования: 1,2,4,5. Дневные net: 4000,4000,5000; накопленные: 4000,8000,13000.

Разбор — откройте после своей попытки

Фильтрацию rn=1 выполняют снаружи CTE, после расчёта окна. Для u1 первой будет запись 1, следующей — отмена 3. Исключение cancelled до окна меняет вопрос на «первое завершённое бронирование»; явно укажите, какой вопрос решаете.

WITH numbered AS (
 SELECT *, ROW_NUMBER() OVER (
   PARTITION BY user_id ORDER BY day, booking_id
 ) AS rn
 FROM bookings
)
SELECT user_id, booking_id FROM numbered
WHERE rn = 1 ORDER BY user_id;

WITH daily AS (
 SELECT day, SUM(charged_cents - refund_cents) AS net
 FROM bookings GROUP BY day
)
SELECT day, net,
 SUM(net) OVER (ORDER BY day ROWS UNBOUNDED PRECEDING) AS cumulative_net
FROM daily ORDER BY day;
ОСНОВНОЙ МАРШРУТ

Шаг 6. Написать первые программы на Python

Разберём на примере

Программа выполняет инструкции по порядку. Переменная связывает имя со значением; список хранит несколько значений; цикл повторяет действия. Условие if выбирает ветку. Функция объединяет действия и возвращает результат через return. Начните без библиотек: аналитик или инженер должен понимать, что происходит с одной записью, до обработки тысяч строк. Текст "2000" и число 2000 имеют разные типы; преобразование int может завершиться ошибкой, если текст не является числом.

Что прочитать и посмотреть

  1. Основы Python — Яндекс Образование — Темы ввода и вывода, условий, циклов, коллекций и функций: решайте задачи по порядку до уверенного решения без подсказки. Бесплатный текст на русском; тренажёр может потребовать аккаунт.
  2. Учебник Python — Разделы An Informal Introduction, More Control Flow Tools, Data Structures и Errors and Exceptions. Бесплатно, английский; это справочник после первых упражнений, а не единственное объяснение с нуля.

Что сделать

  1. Пройдите темы ввода, условий, циклов, списков и функций в русскоязычном учебнике. Решите минимум по три задачи каждой темы самостоятельно.
  2. Напишите функцию net(charged, refund), которая возвращает разность. Для списка пар [(2000,0),(3000,1000),(0,0)] получите общий итог.
  3. Добавьте проверки: refund неотрицателен и не больше charged. Для неверных данных выдавайте ValueError с понятным сообщением. Проверьте ноль, полный возврат и возврат больше оплаты.

Что сохранить

Файл basics.py, пять коротких примеров вызова и объяснение одной ошибки.

Как проверить себя

Итог примера равен 4000. net(0,0) возвращает 0, net(2000,2000) — 0, net(100,200) сообщает об ошибке.

Разбор — откройте после своей попытки

Внутри функции сначала проверьте if charged < 0 or refund < 0 or refund > charged: raise ValueError("Некорректный возврат"). Затем return charged-refund. Общий итог получите циклом с накоплением. В таком виде правило допускает полный возврат и запрещает превышение оплаты.

ОСНОВНОЙ МАРШРУТ

Шаг 7. Запускать код в отдельном окружении и хранить версии

Разберём на примере

Окружение отделяет библиотеки проекта от других программ. Терминал — окно для текстовых команд; его текущая папка определяет, где создаются файлы. Git сохраняет историю изменений: commit — именованный снимок выбранных файлов. Репозиторий может оставаться на компьютере, публикация не требуется. Для начала достаточно Python 3, текстового редактора и терминала; Jupyter — необязательная удобная оболочка для исследований.

Что прочитать и посмотреть

  1. Python: venv — Creating virtual environments и команды активации для своей ОС. Бесплатно, английский.
  2. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.
  3. Установить Python — Выберите установщик Python 3 для своей ОС. На Linux при отсутствии venv установите пакет python3-venv через менеджер пакетов своей системы. Бесплатно; справка на английском.

Что сделать

  1. Установите Python 3 по ссылкам из официального учебника. Откройте терминал в krug. На Windows проверьте py --version, на macOS/Linux — python3 --version.
  2. Создайте окружение: Windows — py -m venv .venv, macOS/Linux — python3 -m venv .venv. Запускайте код интерпретатором .venv/Scripts/python.exe (Windows) или .venv/bin/python (macOS/Linux). Это работает без активации.
  3. Установите pandas командой выбранного интерпретатора -m pip install pandas. Сохраните версии через -m pip freeze > requirements.txt. Создайте .gitignore с .venv/ и __pycache__/. Выполните git init, git add basics.py requirements.txt .gitignore, git commit -m "First calculation". При первом commit настройте имя и email локально по Pro Git.

Что сохранить

Рабочее окружение, requirements.txt, первый commit и инструкция запуска в обычном текстовом файле.

Как проверить себя

Запустите basics.py из нового окна терминала. Объясните, какой Python использован. Проверьте git status: окружение не попало в историю.

Разбор — откройте после своей попытки

Команда .venv/bin/python basics.py запускает файл на macOS/Linux; на Windows используйте .venv/Scripts/python.exe basics.py. Путь к программе и путь к файлу — разные аргументы. Если терминал не видит файл, сначала проверьте текущую папку; переустановка библиотек здесь не поможет.

ОСНОВНОЙ МАРШРУТ

Шаг 8. Обработать таблицу в pandas и сохранить проверки

Разберём на примере

DataFrame — таблица в памяти Python. Чтение CSV не гарантирует правильность типов: идентификаторы, пропуски и числа требуют проверки. Фильтр выбирает строки, groupby собирает их в группы, merge соединяет таблицы. Проверки assert останавливают учебный скрипт при нарушении ожидания; для рабочих загрузок позже понадобится явная обработка ошибок. Не исправляйте исходный CSV вручную: код преобразования должен объяснять каждую правку.

Что прочитать и посмотреть

  1. pandas: вводные уроки — Read and write tabular data, Select a subset, Calculate summary statistics, Combine data. Бесплатно, английский.

Что сделать

  1. Создайте analysis.py рядом с raw. Прочитайте raw/bookings.csv с помощью pd.read_csv. Выведите shape, dtypes, isna().sum() и число дубликатов booking_id.
  2. Добавьте net_cents и посчитайте итог по room_id. Сравните результат с ручным расчётом; сохраните results/by_room.csv без индекса.
  3. В рабочей копии добавьте дубликат строки и пустую сумму. Напишите проверки, которые обнаружат обе ошибки. Не заменяйте все пропуски нулями: сначала решите, что означает отсутствие значения.

Что сохранить

Повторяемый скрипт, итоговый CSV и проверка двух испорченных входов.

Как проверить себя

При чистом запуске итог A=6000, B=7000. Повторный запуск даёт тот же файл. Ошибочный вход обнаруживается до публикации результата.

Разбор — откройте после своей попытки

Проверки: assert df.booking_id.is_unique; assert df[["charged_cents","refund_cents"]].notna().all().all(). Затем df["net_cents"]=df.charged_cents-df.refund_cents. Группировка: df.groupby("room_id",as_index=False)["net_cents"].sum(). Отсутствующее число может означать сбой выгрузки, поэтому ноль без объяснения недопустим.

ОСНОВНОЙ МАРШРУТ

Шаг 9. Освоить математический язык моделей

Разберём на примере

Модель связывает входные признаки с прогнозом. Функция задаёт правило вычисления: для учебной цены y=2x+5 при x=3 получится 11. Вектор — упорядоченный набор чисел; скалярное произведение умножает соответствующие элементы и складывает результаты. Так линейная модель объединяет признаки. Производная показывает локальную скорость изменения функции; градиент собирает производные по нескольким параметрам. На этих вычислениях можно проверить, как изменение параметра влияет на ошибку модели.

Что прочитать и посмотреть

  1. 3Blue1Brown: линейная алгебра — начните с Vectors, Linear combinations и Linear transformations. Открытые визуальные уроки на английском; они помогают связать координаты и матрицы с рисунком.
  2. 3Blue1Brown: начала анализа — Essence of Calculus и смысл производной. Бесплатно, английский; сначала разберите изменение функции на графике, затем формулу шага в задании.
  3. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.
  4. scikit-learn: линейные модели — Linear Regression, Ridge и Logistic Regression: сравните задачи и параметры регуляризации. Бесплатная документация, английский.

При умножении матрицы на вектор берите скалярное произведение каждой строки матрицы с вектором: первая строка [1,2] даёт 1×10+2×20. Для производной квадрата используйте правило d(x²)/dx=2x; сдвиг x=w−3 даёт 2(w−3). Проверьте его на графике: слева от минимума наклон отрицательный, справа положительный.

Что сделать

  1. Повторите дроби, степени, уравнения и график прямой. Постройте в Calc y=2x+5 для x от 0 до 5. Объясните наклон и свободный член.
  2. Посчитайте скалярное произведение [2,3] и [4,5]. Умножьте матрицу [[1,2],[3,4]] на вектор [10,20] сначала руками, затем циклами Python.
  3. Для потери L(w)=(w-3)^2 найдите производную 2*(w-3). Сделайте шаг w_new=w-0.1*gradient от w=0 и сравните потерю.

Что сохранить

Лист математических примеров и Python-проверка.

Как проверить себя

Размерности согласованы: две координаты дают одно скалярное произведение, матрица 2×2 — вектор из двух чисел.

Разбор — откройте после своей попытки

Скалярное произведение равно 23; матричное умножение даёт [50,110]. При w=0 градиент −6, новое w=0,6, потеря падает с 9 до 5,76. Слишком большой шаг может увеличить потерю. Перед продолжением решите ещё три примера каждого типа без копирования.

ОСНОВНОЙ МАРШРУТ

Шаг 10. Разобраться в вероятности и неопределённости

Разберём на примере

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

Что прочитать и посмотреть

  1. Introduction to Modern Statistics — Темы описания данных, вероятности, выборки, доверительных интервалов и проверки гипотез. Читайте только тему текущего шага и разбирайте один пример. Бесплатный учебник, английский.

Что сделать

  1. Прочитайте темы условной вероятности, выборки, среднего, дисперсии и доверительных интервалов. Для [1,2,3] посчитайте среднее и выборочную дисперсию с делителем n-1.
  2. В учебной группе из 100 людей 20 используют приложение, из них 8 возвращаются; из остальных 80 возвращаются 8. Найдите P(возврат) и P(возврат | приложение).
  3. С помощью random.Random(42) проведите 1000 серий по 20 независимых бросков честной монеты. Сохраните распределение долей орла и объясните разброс.

Что сохранить

Расчёты и скрипт симуляции с фиксированным seed.

Как проверить себя

Условная доля имеет знаменатель 20, общая — 100. В симуляции не требуется ровно половина орлов в каждой серии.

Разбор — откройте после своей попытки

Среднее=2, выборочная дисперсия=((1−2)^2+0+(3−2)^2)/2=1. Общая доля возврата 16%, среди пользователей приложения 40%. Нельзя заключить, что приложение вызвало возврат: люди могли выбрать его из-за уже высокой заинтересованности.

ОСНОВНОЙ МАРШРУТ

Шаг 11. Перевести задачу в прогноз и простой ориентир

Разберём на примере

Data Scientist проверяет, помогает ли модель решать конкретную задачу на новых данных. Целевая переменная y — то, что предсказываем; признаки X — доступная к этому моменту информация. Регрессия предсказывает число, классификация — класс. Baseline — простое решение для сравнения: среднее, самый частый класс или вчерашнее значение. Модель оправдана улучшением полезного результата с учётом ошибок и затрат. Сначала зафиксируйте момент прогноза и действие после него.

Что прочитать и посмотреть

  1. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  2. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.

Что сделать

  1. Для «Круга» опишите два варианта: прогноз числа визитов на завтра и вероятность отмены только что созданной брони. Укажите момент и пользователя прогноза.
  2. Разделите признаки на доступные до решения и известные только после. Возврат денег после отмены отметьте как недопустимую подсказку для прогноза отмены.
  3. Запишите baseline и цену ошибок. Для прогноза числа визитов возьмите последнее известное значение, для классификации — частоту класса обучающей части.

Что сохранить

Паспорт задачи: действие, цель, признаки, горизонт, baseline, метрика и ограничения.

Как проверить себя

Определено, что произойдёт при ошибке. Маленькие учебные бронирования используются для проверки логики, а не доказательства качества.

Разбор — откройте после своей попытки

Прогноз без действия может оказаться бесполезным. Для отмен возможное действие — напоминание, но прогноз риска сам по себе не доказывает эффект напоминания. Для проверки действия понадобится отдельное исследование или эксперимент.

ОСНОВНОЙ МАРШРУТ

Шаг 12. Разделить данные и предотвратить утечку

Разберём на примере

Утечка возникает, когда обучение получает информацию, недоступную в реальном моменте прогноза. Это может быть будущий статус или среднее, посчитанное по тестовой части. Обучающая часть подбирает параметры; валидационная помогает выбрать вариант; отложенный тест нужен для финальной оценки уже выбранного решения. Для временного прогноза прошлое должно предшествовать будущему; для нескольких строк одного человека учитывайте группы. Случайное разбиение уместно не всегда.

Что прочитать и посмотреть

  1. scikit-learn: типичные ошибки — Inconsistent preprocessing, Data leakage и Controlling randomness. Бесплатно, английский.
  2. scikit-learn: проверка моделей — Train/test split, StratifiedKFold, GroupKFold и TimeSeriesSplit: выберите схему по зависимости наблюдений. Бесплатно, английский.

Что сделать

  1. Нарисуйте временную линию признаков и цели для прогноза отмены. Вычеркните поля, появляющиеся после отмены.
  2. Для 12 месяцев выделите первые 8 на обучение, следующие 2 на выбор и последние 2 на финальную оценку. Запишите, где можно выбирать порог.
  3. Для 30 людей с тремя записями у каждого спланируйте проверку переноса на новых людей: все строки человека должны попасть в одну часть. Объясните отличие от прогноза будущего для знакомых людей.

Что сохранить

Схема разделения и список возможных утечек.

Как проверить себя

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

Разбор — откройте после своей попытки

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

ОСНОВНОЙ МАРШРУТ

Шаг 13. Исследовать данные и собрать воспроизводимый Pipeline

Разберём на примере

Для работы с моделью возьмём Wine — встроенный учебный набор scikit-learn с числовыми измерениями и тремя классами. Его загрузка не требует отдельного скачивания файла. Числа разных признаков имеют разные масштабы. StandardScaler обучается на обучающей части и преобразует признаки; Pipeline соединяет эту операцию с моделью. Сохраните код и версии библиотек, чтобы другой человек мог повторить именно ваш опыт.

Скачать учебный скрипт Wine. Код и набор загружаются из локальной установки scikit-learn; GPU не нужен.

Что прочитать и посмотреть

  1. scikit-learn: набор Wine — Описание признаков, классов и происхождения встроенного учебного набора. Бесплатная документация, английский.
  2. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  3. scikit-learn: типичные ошибки — Inconsistent preprocessing, Data leakage и Controlling randomness. Бесплатно, английский.

Что сделать

  1. В созданное окружение установите scikit-learn: команда вашего интерпретатора -m pip install scikit-learn. Обновите requirements.txt. Скачайте wine_baseline.py ниже и прочитайте его до запуска.
  2. Выполните скрипт: .venv/bin/python wine_baseline.py либо .venv/Scripts/python.exe wine_baseline.py на Windows. Сохраните вывод. Проверьте размер, распределение классов и пропуски обучающей части.
  3. Объясните каждый этап: split, fit baseline, fit pipeline, predict, метрики. Измените копию, чтобы вывести средние только X_train; сравните их с параметрами scaler.

Что сохранить

Запускаемый скрипт, версии и краткий паспорт данных.

Как проверить себя

В наборе 178 объектов и 13 признаков. При test_size=0.25 остаётся 133 обучающих и 45 отложенных объектов; идентификаторы частей не пересекаются.

Разбор — откройте после своей попытки

В примере stratify сохраняет приблизительные доли классов, random_state фиксирует разбиение. Это учебное сравнение двух заранее заданных моделей на отложенной части. Если начнёте подбирать по её результатам параметры, она станет валидацией и для независимой оценки понадобится другой дизайн.

ОСНОВНОЙ МАРШРУТ

Шаг 14. Построить регрессию и разобрать ошибки

Разберём на примере

Регрессия прогнозирует число. Линейная модель складывает признаки с весами и свободным членом. Ошибка — разность прогноза и факта; MAE усредняет абсолютную ошибку и сохраняет единицу цели. RMSE сильнее реагирует на большие промахи. Коэффициент линейной модели описывает связь при заданных остальных признаках, а не автоматически причинный эффект. Регуляризация ограничивает сложность, чтобы модель меньше подгонялась под случайные особенности обучения.

Что прочитать и посмотреть

  1. scikit-learn: линейные модели — Linear Regression, Ridge и Logistic Regression: сравните задачи и параметры регуляризации. Бесплатная документация, английский.
  2. scikit-learn: метрики — Выберите раздел Classification или Regression по задаче шага; сравните определения с ручным расчётом. Бесплатно, английский.
  3. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.

Что сделать

  1. Для фактов [10,20,30] и прогнозов [12,18,33] посчитайте MAE и RMSE вручную и функциями scikit-learn.
  2. Создайте 80 учебных наблюдений x=1…80 и y=2*x+5+((x%5)-2). На первых 60 обучите LinearRegression и baseline со средним y; на оставшихся 20 сравните MAE.
  3. Постройте таблицу остатков и повторите с Ridge. Объясните, почему такая искусственно линейная задача не показывает готовность модели к реальному спросу.

Что сохранить

Скрипт регрессии, baseline и анализ больших ошибок.

Как проверить себя

Числа MAE указаны в единицах цели. Прогнозы и факты выровнены по одним строкам.

Разбор — откройте после своей попытки

MAE=(2+2+3)/3=7/3≈2,333; RMSE=sqrt((4+4+9)/3)=sqrt(17/3)≈2,380. Baseline обучают по train, а не по среднему всей истории. Искусственная формула специально удобна для проверки вычислений.

ОСНОВНОЙ МАРШРУТ

Шаг 15. Выбрать метрику классификации и порог

Разберём на примере

Классификатор может выдавать оценку вероятности, а порог превращает её в решение. Precision — доля верных положительных среди предсказанных положительных; recall — доля найденных положительных среди всех истинных. Accuracy может скрывать провал редкого класса. Для действия важна стоимость пропусков и ложных тревог. Порог подбирают по валидации с известным правилом, затем проверяют один раз на отложенной части.

Что прочитать и посмотреть

  1. scikit-learn: метрики — Выберите раздел Classification или Regression по задаче шага; сравните определения с ручным расчётом. Бесплатно, английский.
  2. scikit-learn: линейные модели — Linear Regression, Ridge и Logistic Regression: сравните задачи и параметры регуляризации. Бесплатная документация, английский.

Что сделать

  1. Для бинарного примера запишите TP=8, FP=2, FN=4, TN=86. Посчитайте precision, recall и accuracy.
  2. Для истинных меток [0,0,1,1] и оценок [0.1,0.4,0.6,0.9] получите решения при пороге 0.5 и 0.8. Считайте положительным score >= threshold.
  3. В Wine выведите confusion matrix и macro F1. Объясните, почему для трёх классов нельзя без пояснения применить один бинарный порог из предыдущего примера.

Что сохранить

Ручной расчёт, матрица ошибок и правило выбора метрики.

Как проверить себя

Знаменатели precision и recall не перепутаны. Неопределённая метрика при нулевом знаменателе отмечена явно.

Разбор — откройте после своей попытки

Precision=8/10=80%, recall=8/12≈66,7%, accuracy=94/100=94%. При пороге 0,5 получаем [0,0,1,1], при 0,8 — [0,0,0,1]: один положительный пропущен. Выгодность изменения зависит от цены пропуска и ложного срабатывания.

ОСНОВНОЙ МАРШРУТ

Шаг 16. Сравнить деревья и ансамбли

Разберём на примере

Дерево задаёт последовательность условий по признакам. Глубокое дерево может запомнить обучение и плохо обобщать. Случайный лес объединяет деревья; бустинг последовательно строит модели, исправляющие ошибки выбранного метода обучения. Более сложная модель не гарантирует улучшения. Сравнение должно использовать одинаковую схему проверки, baseline и бюджет экспериментов. Важность признаков зависит от модели и данных и не является доказательством причины.

Что прочитать и посмотреть

  1. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.
  2. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  3. scikit-learn: проверка моделей — Train/test split, StratifiedKFold, GroupKFold и TimeSeriesSplit: выберите схему по зависимости наблюдений. Бесплатно, английский.

Что сделать

  1. Используйте обучающую часть Wine из шага 13; его отложенную часть вы уже видели, поэтому не называйте её новым независимым тестом. Для этой лаборатории работайте только с train. Внутри train сравните DecisionTreeClassifier с max_depth=2 и без ограничения по трём стратифицированным фолдам.
  2. Добавьте RandomForestClassifier(n_estimators=100, random_state=42). Сохраните среднее macro F1, разброс и время обучения.
  3. Найдите модель с большой разницей качества на обучении и проверке. Ограничьте глубину и объясните изменение. Не выбирайте вариант по скорости и качеству на скрытом тесте.

Что сохранить

Таблица ограниченного сравнения моделей и выбранный вариант.

Как проверить себя

Один и тот же набор разбиений используется для всех вариантов. Результат леса не объявлен универсально лучшим.

Разбор — откройте после своей попытки

Фолд — часть данных, временно отложенная для проверки; остальные используются для обучения. Для трёх фолдов модель обучается трижды. Полностью выросшее дерево часто показывает очень высокий результат на своём обучении, но выбирать нужно по проверке.

ОСНОВНОЙ МАРШРУТ

Шаг 17. Организовать подбор и объяснить ограничения модели

Разберём на примере

Журнал экспериментов хранит вопрос, данные, разбиение, признаки, параметры, метрику и вывод. Подбор параметров — тоже обучение по сигналу валидации. Чтобы не перебирать бесконечно, задайте небольшой план заранее. Ошибки стоит рассмотреть по содержательным группам: класс, диапазон признака, источник. Малая группа даёт нестабильную оценку. Если модель применяется к людям, дополнительно проверяют возможный вред и допустимость решения в конкретном контексте.

Что прочитать и посмотреть

  1. scikit-learn: проверка моделей — Train/test split, StratifiedKFold, GroupKFold и TimeSeriesSplit: выберите схему по зависимости наблюдений. Бесплатно, английский.
  2. scikit-learn: типичные ошибки — Inconsistent preprocessing, Data leakage и Controlling randomness. Бесплатно, английский.
  3. scikit-learn: метрики — Выберите раздел Classification или Regression по задаче шага; сравните определения с ручным расчётом. Бесплатно, английский.

Что сделать

  1. Для Pipeline StandardScaler + LogisticRegression проверьте C из [0.1,1,10] через GridSearchCV по macro F1 на train. При make_pipeline ключ сетки имеет вид logisticregression__C: имя шага, два подчёркивания и параметр. Сохраните три результата, не только победителя.
  2. Вынесите один признак за пределы привычного диапазона и проверьте поведение. Отметьте, что уверенный ответ не подтверждает знакомство модели с таким объектом.
  3. Подготовьте карточку: назначение, происхождение данных, ограничения, метрика и недопустимые применения. Для Wine не делайте заявлений о химической экспертизе вне учебного набора.

Что сохранить

Журнал экспериментов и карточка модели.

Как проверить себя

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

Разбор — откройте после своей попытки

После многократных просмотров test нельзя продолжать называть его нетронутым. Для честного учебного отчёта запишите этот факт и спланируйте новое независимое испытание. Малый набор не позволяет надёжно оценить все возможные подгруппы.

ОСНОВНОЙ МАРШРУТ

Шаг 18. Проверить прогноз во времени

Разберём на примере

Будущие значения нельзя перемешивать с прошлым при проверке реального прогноза. Сезонный baseline использует прошлое значение сопоставимого периода, например неделю назад. Скользящая проверка повторяет процесс: обучиться на доступной истории и предсказать следующий отрезок. Лаг — значение из прошлого. Скользящее среднее для прогноза завтра должно заканчиваться сегодня, а не включать завтрашний ответ.

Что прочитать и посмотреть

  1. scikit-learn: проверка моделей — Train/test split, StratifiedKFold, GroupKFold и TimeSeriesSplit: выберите схему по зависимости наблюдений. Бесплатно, английский.
  2. pandas: вводные уроки — Read and write tabular data, Select a subset, Calculate summary statistics, Combine data. Бесплатно, английский.

Что сделать

  1. Создайте 84 вымышленных дневных значения: 20 + номер дня % 7. Последние 14 дней оставьте для оценки.
  2. Сравните прогноз предыдущего дня и дня неделю назад по MAE. Убедитесь, что лаг рассчитан через shift, а не по будущей строке.
  3. Измените последние 14 значений, добавив 5. Повторите прогноз и объясните, почему прежняя закономерность перестала быть достаточной.

Что сохранить

Временное разбиение и сравнение двух прогнозов.

Как проверить себя

Каждый прогноз использует только доступную на соответствующую дату историю. Обновление истории во время оценки описано явно.

Разбор — откройте после своей попытки

Для исходного повторяющегося семидневного рисунка прогноз недельного лага идеален по конструкции. Это свойство учебных данных. После сдвига результат зависит от того, прогнозируете ли вы все 14 дней сразу или ежедневно получаете новые факты; эти сценарии нужно сравнивать отдельно.

ОСНОВНОЙ МАРШРУТ

Шаг 19. Подготовить пакетный прогноз и наблюдение за качеством

Разберём на примере

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

Что прочитать и посмотреть

  1. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  2. scikit-learn: типичные ошибки — Inconsistent preprocessing, Data leakage и Controlling randomness. Бесплатно, английский.
  3. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.

Что сделать

  1. Оформите функцию predict_batch(model, X), которая проверяет число и порядок признаков и возвращает ровно один прогноз на строку.
  2. Добавьте тесты на пустой набор, отсутствующий признак и неверный тип. Сохраните идентификатор строки рядом с прогнозом.
  3. Составьте план наблюдения: доля отклонённых строк, диапазоны признаков, задержка и качество после прихода истинных классов. Определите владельца реакции и безопасный baseline при отказе.

Что сохранить

Пакетная функция, тесты и план наблюдения.

Как проверить себя

Ответы сопоставляются с исходными строками; неизвестная схема не обрабатывается молча.

Разбор — откройте после своей попытки

Падение качества нельзя измерить только по распределению прогнозов. Нужны истинные ответы с согласованной задержкой. Сериализованную модель загружают только из доверенного собственного источника: артефакты Python могут содержать исполняемое поведение.

ОСНОВНОЙ МАРШРУТ

Шаг 20. Защитить самостоятельный ML-проект

Разберём на примере

Обучите классификатор маленьких изображений цифр из встроенного набора load_digits. Он входит в scikit-learn; для этой задачи достаточно обычного процессора. Сравните простой классификатор с одним выбранным улучшением. Проверьте выбранную модель на отложенных объектах и разберите её ошибки.

Описание встроенного набора load_digits — бесплатно, английский; изучите форму данных и ограничения.

Что прочитать и посмотреть

  1. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  2. scikit-learn: проверка моделей — Train/test split, StratifiedKFold, GroupKFold и TimeSeriesSplit: выберите схему по зависимости наблюдений. Бесплатно, английский.
  3. scikit-learn: метрики — Выберите раздел Classification или Regression по задаче шага; сравните определения с ручным расчётом. Бесплатно, английский.

Что сделать

  1. Прочитайте описание load_digits по ссылке в этом разделе. Заранее выберите разбиение, macro F1 и baseline. Зафиксируйте test до исследования.
  2. На train исследуйте классы и диапазоны, сравните DummyClassifier и один Pipeline. Подберите не более трёх вариантов параметра через внутреннюю проверку.
  3. Получите новое требование: важнее не пропускать цифру 9. Объясните изменение метрики и процедуры выбора, затем выполните финальную оценку один раз. Покажите ошибки и передайте запуск другому человеку.

Что сохранить

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

Как проверить себя

Проверяющий может повторить обучение; исходные ограничения набора и изменение требования отражены в отчёте.

Разбор — откройте после своей попытки

После появления приоритета класса 9 нельзя незаметно выбрать модель по уже увиденному test. Меняйте критерий на внутренней валидации. Учебные маленькие изображения не подтверждают работу на фотографиях рукописных цифр с телефона.

ОСНОВНОЙ МАРШРУТ

Шаг 21. Проверить готовность и выбрать вакансии

Разберём на примере

Название «Data Scientist» не задаёт одинаковые обязанности во всех компаниях. Сравнивайте задачи, уровень самостоятельности, язык команды и условия работы. Европа — основной ориентир этой программы; вакансии РФ помогают увидеть совпадения и отличия. Старшие вакансии показывают дальнейшее развитие, но не превращают весь их список в обязательный входной порог. Диплом, местный язык и опыт могут быть отдельными условиями работодателя. Учебный проект не заменяет коммерческий опыт.

Что прочитать и посмотреть

  1. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.

Что сделать

  1. Соберите пять свежих европейских и три российских вакансии. Запишите дату, страну, реальный уровень по обязанностям, обязательные требования и пожелания в разные столбцы. Обновляйте ссылки перед откликом.
  2. Для каждого требования приложите своё доказательство: паспорт задачи, разбиение, baseline, код обучения, анализ ошибок и карточка модели. Отметьте «делал самостоятельно», «с подсказкой» или «пока не делал». Выберите три пробела и задания для их закрытия.
  3. Попросите знакомого провести 20-минутное собеседование по вашему проекту. Объясните задачу на русском и кратко на английском: problem, method, result, limitation. Выполните новое небольшое задание без готового решения и запишите, где потребовалась помощь.

Что сохранить

Матрица вакансий, портфолио из собственных файлов и план закрытия трёх пробелов.

Как проверить себя

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

Разбор — откройте после своей попытки

«Знаю SQL» не является доказательством. Подойдёт ссылка на ваш файл запроса, входные данные, ожидаемый результат и описание ошибки, которую запрос выявляет. Если проверяющего пока нет, отметьте внешнюю проверку как незавершённую; не заменяйте её галочкой.

УГЛУБЛЕНИЕ

Шаг 22. Исследовать данные без готовых меток

Разберём на примере

Кластеризация ищет группы по выбранному представлению данных. Она не открывает автоматически «истинные типы клиентов». Масштаб признаков и расстояние определяют, что считается похожим. Снижение размерности строит более компактное представление; визуальное разделение после проекции не заменяет проверку полезности. Начните с KMeans и PCA на Wine, временно скрыв метки классов.

Что прочитать и посмотреть

  1. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.
  2. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.

Что сделать

  1. Стандартизируйте признаки обучающей части. Сравните KMeans для 2,3,4 групп с фиксированным random_state.
  2. Посмотрите размеры групп и средние признаки. Объясните, как изменилась бы задача без стандартизации.
  3. Постройте PCA с двумя компонентами для исследования. Проверьте устойчивость групп на нескольких начальных состояниях и сформулируйте возможное практическое использование.

Что сохранить

Исследование групп и ограничений интерпретации.

Как проверить себя

Кластеры не переименованы в причинные или социальные категории без независимых данных.

Разбор — откройте после своей попытки

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

УГЛУБЛЕНИЕ

Шаг 23. Выбрать специализацию в тексте или нейросетях

Разберём на примере

Глубокое обучение и работа с текстом требуют отдельной практики. Для первого опыта достаточно небольшой модели на CPU: MLPClassifier на digits либо TF-IDF и линейный классификатор на собственном размеченном учебном тексте. TF-IDF превращает слова в числовые признаки по частоте и распространённости. Нейросеть соединяет слои преобразований; её размер и число итераций ограничьте до запуска. Использование внешнего LLM API не является обязательной частью этого задания.

Что прочитать и посмотреть

  1. scikit-learn: начало — Fit/predict, preprocessing, pipelines, evaluation и выбор параметров. Бесплатная документация, английский; вычисления локально на CPU.
  2. scikit-learn: типичные ошибки — Inconsistent preprocessing, Data leakage и Controlling randomness. Бесплатно, английский.
  3. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.

Что сделать

  1. Выберите одну ветку. Для нейросети на digits сравните MLPClassifier(hidden_layer_sizes=(32,), max_iter=200, random_state=42) с прежним baseline в Pipeline со scaler.
  2. Для текстовой ветки вместо нейросети подготовьте 60 вымышленных обращений двух типов и Pipeline TfidfVectorizer + LogisticRegression. Похожие перефразировки одного шаблона держите в одной группе разбиения.
  3. Ограничьте время опыта, запишите ошибки и ограничения малого набора. Для LLM как дальнейшей темы составьте план оценки: контрольные примеры, качество, утечки, стоимость и задержка, не покупая API.

Что сохранить

Один завершённый небольшой эксперимент и план углубления.

Как проверить себя

Текстовый словарь обучен только на train. Нейросеть не объявляется лучшей без сопоставимой проверки.

Разбор — откройте после своей попытки

Если почти одинаковые фразы попали в train и test, качество завышено. Для digits отсутствие сходимости означает необходимость диагностики масштаба и обучения; не скрывайте предупреждение и не обещайте повышение качества простым увеличением сети.

УГЛУБЛЕНИЕ

Шаг 24. Спланировать дальнейшую исследовательскую работу

Разберём на примере

Рост специалиста связан с более сложной постановкой, данными и ответственностью за результат. Выберите направление: прогнозирование, табличные модели, NLP, компьютерное зрение или ML-платформа. Статья или библиотека становится полезной, когда вы можете воспроизвести ограниченный опыт, сравнить с baseline и объяснить отличие своих условий. Для уровня Senior потребуется опыт самостоятельных решений и работы в команде.

Что прочитать и посмотреть

  1. An Introduction to Statistical Learning — Бесплатная Python-версия книги: Statistical Learning, Linear Regression, Classification, Resampling Methods и Tree-Based Methods. Английский; платное издание покупать не нужно.
  2. Pro Git — Главы «Основы Git»: создание репозитория, запись изменений, история, отмена изменений. Бесплатный текст на русском.

Что сделать

  1. По пяти вакансиям выбранного направления определите два пробела и спланируйте проекты с новыми данными и внешней проверкой.
  2. Для одного метода прочитайте первичный источник из официальной документации библиотеки. Составьте карточку: вопрос, допущения, метод, проверка и границы применимости.
  3. Если используете AI для кода, самостоятельно воспроизведите метрику, проверьте разбиение и источник каждого утверждения. Сохраните неудачный вариант и причину отказа от него.

Что сохранить

План двух проектов и разбор одного метода.

Как проверить себя

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

Разбор — откройте после своей попытки

«Изучить deep learning» слишком широко. Конкретнее: сравнить две небольшие модели на заранее выбранной задаче с закрытым тестом, бюджетом вычислений и анализом ошибок. Реальное применение потребует проверки данных и условий конкретной организации.