Перейти к содержанию
Data Science

Data Science с нуля: что изучать, как собрать первый проект и проверить модель

Понятный маршрут от таблицы к проверенной модели: какие навыки нужны, как выбрать метрики и оформить первый проект в портфолио.

Специалист сравнивает предсказания моделей и данные обучающей и тестовой выборок на мониторе

Начать изучать Data Science проще с небольшого законченного исследования. Возьмите понятный вопрос, разберитесь в данных, придумайте простое решение и проверьте, помогает ли машинное обучение сделать лучше. Так названия библиотек превращаются в инструменты, у каждого из которых есть конкретная задача.

В этой статье — маршрут для начинающего и воспроизводимый пример на Python. Он показывает, как отделить обучение от проверки, сравнить модель с базовым решением и объяснить результат. По каждому этапу можно проверить результат и выбрать следующую задачу.

Что такое Data Science и чем отличаются соседние направления

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

Различия по основному результату работы; в командах обязанности могут пересекаться
НаправлениеПример вопросаРезультат
Аналитика данныхПочему снизилась доля оплаченных заказов?Проверенные расчёты, исследование причин и рекомендации
Data ScienceМожно ли предсказать спрос на следующую неделю?Исследование, модель и доказательства качества на новых данных
ML engineeringКак обслуживать прогнозы быстро и стабильно?Работающий сервис модели, мониторинг и воспроизводимое обновление

Граница проходит по ответственности, а не по языку программирования. Аналитик тоже использует Python и статистику, дата-сайентист пишет SQL, ML-инженер разбирается в обучении моделей. Для первого выбора спросите себя: интереснее объяснять изменения показателей, экспериментировать с прогнозами или создавать надёжные программные системы? Попробуйте маленькую задачу каждого типа, прежде чем выбирать узкую специализацию.

Что учить с нуля: последовательность навыков через задачи

Не нужно сначала проходить всю математику, а потом разрешать себе открыть данные. Чередуйте основы и практику: изучили среднее и медиану — сравнили их на заказах с выбросами; разобрали функцию — вынесли в неё повторяющийся расчёт. При этом не пропускайте объяснение: код, который удалось запустить, ещё нужно уметь проверить.

  1. Python: переменные, условия, циклы, коллекции, функции и чтение ошибок. Контрольная задача — обработать список заказов, посчитать выручку и проверить результат вручную на пяти строках.
  2. Табличные данные: pandas для фильтрации, группировок, объединения таблиц и пропусков; NumPy для числовых массивов. Результат — аккуратная таблица с описанными столбцами и проверенными единицами измерения.
  3. SQL: SELECT, WHERE, GROUP BY и JOIN. Соберите расходы по клиентам и убедитесь, что соединение не размножило строки. Сравните сумму до и после объединения.
  4. Статистика и визуализация: распределения, разброс, выборка, неопределённость, корреляция. Постройте график, сформулируйте наблюдение и отдельно запишите возможные объяснения, которые ещё предстоит проверить.
  5. Машинное обучение: признаки, целевая переменная, обучение, baseline, валидация и метрики. Начните с линейной модели или дерева, для которых можете описать вход, выход и способ оценки.
  6. Воспроизводимость: окружение, версии зависимостей, Git, README и запуск с начала. Попросите другого человека повторить исследование по инструкции, не пользуясь вашей памятью о проекте.

Линейная алгебра помогает понимать признаки как векторы и операции с матрицами. Производные объясняют, как оптимизация меняет параметры модели. Вероятности нужны для рассуждений о случайности и риске ошибки. Углубляйте эти темы рядом с соответствующей задачей: иначе формулы легко выучить отдельно от смысла.

Первый проект: от вопроса до отчёта

Запишите постановку в нескольких предложениях: что предсказываем, для кого, в какой момент и какое действие последует. Для спроса это может быть количество заказов завтра, рассчитанное сегодня вечером. Такая формулировка сразу запрещает использовать завтрашние продажи как входной признак и заставляет уточнить, когда появляются остальные данные.

  1. Проверьте происхождение и право использования данных. Определите, чему соответствует строка: заказу, человеку или дню. Опишите целевую переменную и способ получения разметки.
  2. Отложите тестовую часть по логике будущего применения. Исследуйте обучающие данные: размеры, типы, пропуски, дубликаты, диапазоны и доли классов. Это разведочный анализ, или EDA.
  3. Зафиксируйте baseline: например, всегда самый частый класс или прогноз вчерашнего спроса. Простое решение задаёт точку сравнения, которую сложная модель должна оправдать.
  4. Обучите одну понятную модель. Подбирайте параметры на обучающей части с отдельной валидацией или кросс-валидацией. Все обучаемые преобразования включите в общий конвейер.
  5. Один раз оцените выбранное решение на отложенном тесте. Посмотрите ошибки по важным группам, а затем напишите вывод: где модель полезна, где ненадёжна и что требуется проверить дальше.

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

Как избежать утечки данных и выбрать разделение

Утечка возникает, когда обучение получает информацию, недоступную при настоящем прогнозе. Очевидный пример — статус возврата при предсказании возврата до покупки. Менее заметный — заполнение пропусков средним, рассчитанным по всей таблице, включая тест. В scikit-learn Pipeline объединяет преобразования и модель: при fit на обучающей части параметры преобразований тоже вычисляются только на ней.

Случайное разделение подходит не всегда. Для прогноза будущего обучайтесь на прошлом и проверяйте на более позднем периоде; при повторных проверках пригодится TimeSeriesSplit. Если задача — прогноз для новых клиентов, записи одного клиента должны оставаться в одной части: для этого используют групповые разбиения, например GroupKFold. Иначе проверка может измерять узнавание знакомого клиента.

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

Какие метрики смотреть и почему accuracy недостаточно

Представьте учебный набор: 990 обычных операций и 10 подозрительных. Ответ «всё обычно» даёт accuracy 99%, но не обнаруживает ни одной подозрительной операции. Это арифметический пример, а не результат модели. Поэтому метрику выбирают по смыслу ошибок, а рядом показывают распределение классов и матрицу ошибок.

Метрика отвечает на конкретный вопрос
СитуацияЧто проверитьПочему
Нужно находить редкий классRecall нужного класса и число пропусковКакая доля действительно нужных объектов найдена
Проверка срабатываний обходится дорогоPrecision и число ложных срабатыванийКак часто сигнал оказывается правильным
Несколько одинаково важных классовMacro-F1 и показатели каждого классаСреднее F1 по классам не даёт крупному классу скрыть все остальные
Прогноз числовой величиныMAE и ошибки по диапазонамСредняя абсолютная ошибка выражена в единицах целевой величины

F1 объединяет precision и recall, но не заменяет обсуждение последствий ошибок. Для числового прогноза одной средней тоже мало: отдельно рассмотрите большие значения и случаи, где модель систематически занижает результат. Если выбираете порог вероятности, делайте это на валидации, а итог проверяйте на тесте. Стоимость ошибки задаёт предметная задача, универсального «хорошего процента» нет.

Рабочий пример: классификация ирисов и сравнение с baseline

Используем встроенный Iris: 150 наблюдений, четыре измерения цветка и три класса по 50 наблюдений. Набор поставляется со scikit-learn, отдельно скачивать его не требуется. Вопрос: можно ли определить класс по измерениям? Это небольшой учебный эксперимент; он не доказывает качество на фотографиях цветов или на новых условиях измерения.

Создайте окружение; затем сохраните Python-код в iris_project.py и запустите егоtext
python3 -m venv .venv
source .venv/bin/activate
python -m pip install scikit-learn pandas
python iris_project.py
python -m pip freeze > requirements.txt
Полный пример: EDA только обучающей части, baseline и Pipelinepython
import sklearn
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score, confusion_matrix
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

dataset = load_iris(as_frame=True)
X, y = dataset.data, dataset.target
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=42
)

print("Versions:", sklearn.__version__, pd.__version__)
print("Train / test:", len(X_train), len(X_test))
print("Missing values:", X_train.isna().sum().to_dict())
print(X_train.describe().round(2))

models = {
    "baseline": DummyClassifier(strategy="most_frequent"),
    "logistic_regression": make_pipeline(
        StandardScaler(), LogisticRegression(max_iter=1000)
    ),
}
for name, model in models.items():
    model.fit(X_train, y_train)
    prediction = model.predict(X_test)
    print(name)
    print("accuracy:", round(accuracy_score(y_test, prediction), 3))
    print("macro_f1:", round(f1_score(
        y_test, prediction, average="macro", zero_division=0
    ), 3))
    print("confusion_matrix rows=true, columns=predicted:")
    print(confusion_matrix(y_test, prediction, labels=[0, 1, 2]))

Baseline всегда выбирает один класс, логистическая регрессия использует признаки. Несмотря на название, здесь она решает классификацию. StandardScaler обучается внутри Pipeline после разделения. Сравниваем accuracy и macro-F1 на одной тестовой части; матрица показывает, какие классы перепутаны. Код намеренно не подбирает параметры: это первое сравнение заранее выбранных решений, а не конкурс алгоритмов.

Запишите фактически полученные цифры, версии библиотек и способ разделения в отчёт. Не переносите результат маленького теста на всю профессию: здесь только 30 тестовых наблюдений, поэтому одна дополнительная ошибка меняет accuracy примерно на 3,3 процентного пункта. Для продолжения исследуйте устойчивость на кросс-валидации обучающей части, сохраняя Pipeline внутри каждой проверки. Не выбирайте random_state ради красивого результата.

Что положить в портфолио начинающего

После Iris выберите задачу с понятным решением и самостоятельной проверкой данных. Ценность проекта видна по решениям автора: почему выбран именно такой период, какие признаки исключены, с чем сравнивалась модель. Перечень импортированных библиотек эту работу не показывает.

  • Исследование продаж на открытых или собственных обезличенных данных. Результаты: словарь полей, проверка дубликатов заказов, три осмысленных графика, объяснение изменения выручки и список вопросов, на которые данных не хватает.
  • Прогноз ежедневного спроса. Результаты: временное разделение, baseline по предыдущему периоду, модель, MAE по датам, разбор пиков и README с точным моментом формирования прогноза. Покажите, что каждый признак уже известен в этот момент.
  • Классификация обращений по темам на разрешённом публичном наборе. Результаты: правила разметки, разделение без повторов одних текстов, baseline, macro-F1, матрица ошибок и примеры перепутанных тем без персональных данных.

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

Как понять, что пора переходить к более сложным задачам

  • Вы объясняете, что означает строка данных, откуда взялась цель и какие признаки доступны в момент прогноза.
  • Можете проверить группировку или объединение таблиц на маленьком ручном примере и обнаружить размножение строк.
  • Обосновываете разделение данных и показываете, где обучаются преобразования.
  • Сравниваете модель с простым решением, называете метрику и объясняете цену разных ошибок.
  • Запускаете проект с начала по README, описываете ограничения и умеете признать, что улучшение пока не доказано.

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

Частые вопросы

Можно ли начать Data Science без опыта программирования?

Да, начните с основ Python и небольших задач с таблицами. Не спешите к сложной модели: сначала научитесь читать ошибку, проверять расчёт и объяснять каждую операцию с данными.

Нужно ли сразу покупать мощный компьютер?

Для примера Iris и небольших табличных проектов обычно достаточно обычного компьютера с Python. Требования к памяти и вычислениям зависят от размера данных и алгоритма; выбирайте оборудование после появления конкретной задачи.

Сколько времени займёт обучение с нуля?

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

Можно ли сделать портфолио только из учебных наборов?

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

Источники и документация