Лекция 3. Подготовка данных и конструирование признаков

Цель лекции

Изучить основные этапы подготовки данных для машинного обучения. Научиться определять типы признаков, выявлять пропущенные и аномальные значения, применять методы кодирования и масштабирования, создавать информативные признаки и организовывать преобразования без утечки данных.

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

Ключевые понятия

Предобработка данных (data preprocessing), качество данных (data quality), пропущенные значения (missing values), импутация (imputation), выбросы (outliers), категориальные признаки (categorical features), кодирование признаков (feature encoding), One-Hot Encoding, стандартизация (standardization), нормализация (normalization), конструирование признаков (feature engineering), утечка данных (data leakage), обучающая выборка (training set), конвейер обработки (pipeline), воспроизводимость (reproducibility).


1. Роль подготовки данных в машинном обучении

1.1. Почему данные необходимо подготавливать?

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

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

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

Например, набор данных о клиентах может содержать возраст, записанный как число, дату регистрации в текстовом формате и тип подписки в виде строк «Базовый», «Стандартный», «Премиум».

Чтобы использовать эти сведения в модели, необходимо определить, какие преобразования требуются каждому признаку.

Предобработка данных (Data Preprocessing) — совокупность методов проверки, очистки и преобразования исходных данных в форму, подходящую для анализа и обучения модели.

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

1.2. Качество данных и качество модели

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

Если важные характеристики объекта отсутствуют, даже сложная модель может не обнаружить необходимую закономерность.

Если данные содержат систематические ошибки, модель способна воспроизводить эти ошибки в прогнозах.

Поэтому при подготовке данных необходимо оценивать:

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


2. Анализ структуры набора данных

2.1. Типы признаков

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

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

Категориальные признаки описывают принадлежность объекта к определённой категории: тип подписки, город, категория товара.

Бинарные признаки принимают два значения, например 0 и 1.

Временные признаки содержат дату, время или длительность: дата регистрации, время заказа, продолжительность обслуживания.

Текстовые признаки содержат слова и предложения, например описание товара или отзыв клиента.

Разные типы данных требуют разных методов обработки.

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

2.2. Проверка схемы данных

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

Перед обучением следует проверить, соответствует ли фактический набор ожидаемой схеме.

Например, если возраст клиента должен быть числом от 0 до 120, значение «двадцать пять» или отрицательное число требует дополнительной проверки.

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

Ошибки такого рода могут не вызывать технических сбоев, но существенно ухудшать качество модели.

2.3. Первичный анализ с помощью pandas

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

import pandas as pd

 

df = pd.read_csv("customers.csv")

 

print(df.head())

print(df.info())

print(df.isna().sum())

print(df.describe())

Здесь:

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


3. Обработка пропущенных значений

3.1. Что такое пропущенное значение?

Пропущенное значение (Missing Value) — отсутствие информации для определённого признака объекта.

Например, в таблице клиентов может отсутствовать возраст, доход или дата последней покупки.

В pandas пропуски часто представлены значением NaN, а в некоторых случаях — None или специальными текстовыми обозначениями.

Пропуски возникают по разным причинам: технические ошибки, необязательные поля анкеты, отсутствие измерения или невозможность получить информацию.

Важно понимать, что пропуск не всегда означает ошибку.

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

3.2. Удаление пропусков

Один из простейших способов обработки — удаление строк или столбцов с отсутствующими значениями.

Такой подход допустим, когда пропусков немного и удаление наблюдений не приводит к существенной потере информации или искажению выборки.

Однако если пропуски чаще встречаются у определённой группы объектов, удаление соответствующих строк может привести к систематическому смещению данных.

Поэтому решение об удалении должно приниматься после анализа причин отсутствия значений.

3.3. Заполнение пропусков

Импутация (Imputation) — замена отсутствующих значений по определённому правилу.

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

Среднее арифметическое:

[
\mu=\frac{1}{n}\sum_{i=1}^{n}x_i
]

Медиана — центральное значение упорядоченного набора наблюдений.

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

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

Для категориальных признаков распространёнными способами являются заполнение наиболее частой категорией или введение отдельной категории «Неизвестно».

3.4. Индикатор пропуска

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

Например:

Доход

Доход отсутствует

250000

0

Пропуск

1

400000

0

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

Это особенно полезно, когда сам факт пропуска связан с поведением объекта.

3.5. Реализация импутации

В библиотеке scikit-learn для заполнения пропусков используется SimpleImputer.

from sklearn.impute import SimpleImputer

 

imputer = SimpleImputer(strategy="median")

 

X_train_filled = imputer.fit_transform(X_train)

X_test_filled = imputer.transform(X_test)

Метод fit_transform() определяет медианы на обучающих данных и выполняет преобразование.

Метод transform() применяет уже найденные значения к тестовой выборке.

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


4. Выбросы и аномальные значения

4.1. Понятие выброса

Выброс (Outlier) — наблюдение, значение которого существенно отличается от большинства остальных наблюдений.

Например, в наборе данных о стоимости квартир могут встречаться объекты, цена которых во много раз выше средней.

Однако необычное значение не обязательно является ошибкой.

Дорогая квартира может быть реальным объектом премиального сегмента. Поэтому автоматическое удаление всех необычных наблюдений способно ухудшить качество данных.

4.2. Причины возникновения выбросов

Выбросы могут возникать вследствие:

Например, значение площади квартиры 8500 м² может быть ошибкой ввода, но для промышленного помещения такая площадь вполне возможна.

Следовательно, корректность значения необходимо оценивать с учётом предметной области.

4.3. Методы обнаружения выбросов

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

Один из распространённых подходов основан на межквартильном размахе:

[
IQR=Q_3-Q_1
]

где:

Потенциально необычными часто считают значения за пределами интервала:

[
[Q_1-1.5IQR,;Q_3+1.5IQR]
]

Это статистическое правило для поиска кандидатов на проверку, а не универсальное основание для удаления наблюдений.

4.4. Способы обработки выбросов

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

В некоторых случаях выбросы необходимо сохранить.

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

Таким образом, решение об обработке выбросов должно учитывать цель машинного обучения.


5. Кодирование категориальных признаков

5.1. Зачем нужно кодирование?

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

Однако реальные данные часто содержат категории в текстовой форме.

Например:

Кодирование категориальных признаков (Categorical Encoding) — преобразование категорий в числовую форму, пригодную для использования алгоритмом.

5.2. Порядковое кодирование

Ordinal Encoding сопоставляет категориям числовые значения.

Например:

Уровень

Код

Низкий

0

Средний

1

Высокий

2

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

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

Например, присвоение городам кодов 0, 1 и 2 не означает, что город с кодом 2 «больше» города с кодом 1.

5.3. One-Hot Encoding

One-Hot Encoding — метод кодирования, при котором для категорий создаются отдельные бинарные признаки.

Рассмотрим признак «Способ оплаты».

Способ оплаты

Карта

Наличные

Перевод

Карта

1

0

0

Наличные

0

1

0

Перевод

0

0

1

Каждая категория представляется собственным столбцом.

Преимущество метода заключается в том, что он не задаёт искусственного порядка между категориями.

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

5.4. Кодирование в scikit-learn

from sklearn.preprocessing import OneHotEncoder

 

encoder = OneHotEncoder(

    handle_unknown="ignore"

)

 

X_train_encoded = encoder.fit_transform(

    X_train_categories

)

 

X_test_encoded = encoder.transform(

    X_test_categories

)

Параметр handle_unknown="ignore" позволяет обрабатывать категории, которые отсутствовали в обучающей выборке.

При этом правила кодирования определяются только на обучающих данных.


6. Масштабирование числовых признаков

6.1. Почему масштаб признаков имеет значение?

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

Например, возраст клиента может изменяться от 18 до 80, а годовой доход — от нескольких сотен тысяч до миллионов тенге.

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

Без масштабирования признаки с большими числовыми значениями могут непропорционально влиять на вычисления.

6.2. Стандартизация

Стандартизация (Standardization) — преобразование признака путём вычитания среднего значения и деления на стандартное отклонение.

Формула:

[
z=\frac{x-\mu}{\sigma}
]

где:

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

При этом стандартизация не делает распределение обязательно нормальным.

6.3. Нормализация Min-Max

Другой способ — преобразование значений в заданный диапазон, часто от 0 до 1.

Формула:

[
x'=\frac{x-x_{\min}}{x_{\max}-x_{\min}}
]

где (x_{\min}) и (x_{\max}) — минимальное и максимальное значения признака в обучающих данных.

Такой подход называется Min-Max Scaling.

Он удобен, когда требуется привести значения признаков к сопоставимому диапазону.

Однако метод чувствителен к экстремальным значениям.

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

6.4. Какие алгоритмы чувствительны к масштабу?

Масштабирование особенно важно для методов, основанных на расстояниях, например kNN, а также часто полезно для линейных моделей с регуляризацией, метода опорных векторов и нейронных сетей.

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

Следовательно, необходимость масштабирования зависит от используемого алгоритма.


7. Конструирование признаков

7.1. Понятие Feature Engineering

Конструирование признаков (Feature Engineering) — процесс создания новых характеристик объектов на основе исходных данных и знаний предметной области.

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

Например, вместо двух отдельных признаков «Общая сумма покупок» и «Количество покупок» можно дополнительно создать признак «Средний чек».

Для этого используется отношение:

[
\text{Средний чек}=
\frac{\text{Сумма покупок}}
{\text{Количество покупок}}
]

При нулевом количестве покупок необходимо отдельно определить правило обработки.

7.2. Признаки на основе дат

Из даты регистрации клиента можно получить продолжительность использования сервиса.

Из времени заказа — час суток или день недели.

Такие признаки могут быть информативнее исходной даты в некоторых задачах.

Однако при их создании необходимо учитывать момент прогнозирования.

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

7.3. Агрегированные признаки

Агрегированные признаки — характеристики, вычисленные по нескольким связанным наблюдениям.

Например, для клиента можно определить:

Агрегированные признаки позволяют описывать поведение объекта за определённый период.

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

7.4. Когда новый признак полезен?

Новый признак имеет смысл, если он содержит информацию, которая помогает модели выявлять закономерности.

При этом увеличение количества признаков не гарантирует улучшения качества.

Некоторые признаки могут быть избыточными, шумными или недоступными при реальном использовании модели.

Поэтому эффективность конструирования признаков необходимо проверять на независимых валидационных данных.


8. Утечка данных

8.1. Понятие утечки данных

Утечка данных (Data Leakage) — ситуация, при которой в обучение или оценку модели попадает информация, которая не должна быть доступна на соответствующем этапе прогнозирования.

Утечка способна приводить к искусственно высоким результатам проверки модели.

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

8.2. Утечка через целевую переменную

Рассмотрим пример прогнозирования стоимости квартиры.

Допустимые признаки:

Целевая переменная — итоговая стоимость сделки.

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

Такой признак делает постановку некорректной.

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

8.3. Утечка при предобработке

Утечка может возникнуть не только через признаки, но и через неправильно организованные преобразования.

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

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

Правильный подход:

  1. Разделить данные на обучающую и тестовую части.
  2. Вычислить необходимые статистики на обучающей выборке.
  3. Применить полученные преобразования к обучающим данным.
  4. Использовать те же параметры преобразований для тестовых данных.

Для стандартизации тестовых данных применяется формула:

[
z_{\mathrm{test}}=
\frac{x_{\mathrm{test}}-\mu_{\mathrm{train}}}
{\sigma_{\mathrm{train}}}
]

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

8.4. Временная утечка

При работе с временными данными необходимо учитывать хронологию.

Например, если модель прогнозирует продажи на следующий месяц, она не должна использовать фактические продажи этого месяца в качестве входного признака.

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

8.5. Связанные объекты

В некоторых наборах данных несколько наблюдений относятся к одному человеку, устройству, организации или другому общему объекту.

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

Например, если один пациент представлен несколькими медицинскими записями, разделение по отдельным записям может привести к присутствию данных одного пациента в обеих выборках.

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


9. Pipeline: организация последовательности преобразований

9.1. Что такое Pipeline?

Pipeline — механизм объединения последовательных этапов обработки данных и обучения модели в единый процесс.

Например, конвейер может включать:

Заполнение пропусков → Масштабирование → Обучение модели.

Pipeline позволяет выполнять преобразования в установленном порядке и повторно применять их к новым наблюдениям.

9.2. Почему Pipeline важен?

При ручной подготовке данных легко допустить ошибки:

Pipeline уменьшает риск подобных ошибок и повышает воспроизводимость эксперимента.

9.3. Пример Pipeline в scikit-learn

from sklearn.pipeline import make_pipeline

from sklearn.impute import SimpleImputer

from sklearn.preprocessing import StandardScaler

from sklearn.linear_model import LogisticRegression

 

model = make_pipeline(

    SimpleImputer(strategy="median"),

    StandardScaler(),

    LogisticRegression(max_iter=1000)

)

 

model.fit(X_train, y_train)

 

predictions = model.predict(X_test)

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

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

При вызове predict() новые данные проходят через те же преобразования.

9.4. ColumnTransformer

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

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

Например, числовые признаки можно заполнять медианой и стандартизировать, а категориальные — заполнять наиболее частым значением и кодировать методом One-Hot Encoding.

Это позволяет объединить обработку разных типов признаков в единую воспроизводимую схему.

9.5. Пример смешанного конвейера

from sklearn.compose import ColumnTransformer

from sklearn.pipeline import make_pipeline

from sklearn.impute import SimpleImputer

from sklearn.preprocessing import (

    StandardScaler,

    OneHotEncoder

)

from sklearn.linear_model import LogisticRegression

 

numeric_features = ["age", "income"]

categorical_features = ["city"]

 

numeric_pipeline = make_pipeline(

    SimpleImputer(strategy="median"),

    StandardScaler()

)

 

categorical_pipeline = make_pipeline(

    SimpleImputer(strategy="most_frequent"),

    OneHotEncoder(handle_unknown="ignore")

)

 

preprocessor = ColumnTransformer([

    ("num", numeric_pipeline, numeric_features),

    ("cat", categorical_pipeline, categorical_features)

])

 

model = make_pipeline(

    preprocessor,

    LogisticRegression(max_iter=1000)

)

 

model.fit(X_train, y_train)

 

predictions = model.predict(X_test)

В этом примере каждый тип признаков обрабатывается соответствующим способом.

Все статистики и правила кодирования определяются во время обучения на X_train.

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


10. Правильная последовательность подготовки данных

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

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

Второй этап — определение целевой переменной. Уточняется, какой результат должна прогнозировать модель и какие признаки доступны в момент прогнозирования.

Третий этап — разделение данных. Формируются обучающая и независимая проверочная выборки с учётом временной структуры и связанных объектов.

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

Пятый этап — преобразование данных. Подготовленные операции применяются к обучающей и проверочной выборкам.

Шестой этап — обучение модели. Алгоритм получает преобразованные признаки и определяет параметры модели.

Седьмой этап — оценка результатов. Качество проверяется на независимых наблюдениях.

Общая схема:

Сырые данные → Проверка схемы → Разделение → Настройка преобразований на обучающих данных → Преобразование → Обучение → Оценка.

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


11. Типичные ошибки при подготовке данных

11.1. Удаление всех строк с пропусками

Этот подход может привести к потере значительной части выборки или искажению распределения объектов.

Перед удалением необходимо оценить долю и причины пропусков.

11.2. Автоматическое удаление всех выбросов

Необычные значения могут отражать реальные и важные события.

Их удаление без анализа предметной области способно ухудшить качество модели.

11.3. Использование порядковых кодов для неупорядоченных категорий

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

Для таких признаков часто подходит One-Hot Encoding.

11.4. Масштабирование до разделения данных

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

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

11.5. Использование будущих событий

Признаки, сформированные из информации, которая станет известна только после момента прогнозирования, делают практическое применение модели некорректным.

11.6. Различия между обучением и применением модели

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

Для предотвращения таких ситуаций рекомендуется сохранять и применять единый Pipeline.


12. Практическое значение подготовки данных

Подготовка данных необходима практически во всех задачах машинного обучения.

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

В электронной коммерции — объединять информацию о товарах и клиентах, создавать признаки покупательской активности и преобразовывать категории товаров.

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

В образовательной аналитике — формировать показатели активности обучающихся и согласовывать данные из разных информационных систем.

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

Преобразования, которые невозможно воспроизвести при реальном прогнозировании, не должны использоваться в рабочем процессе.


13. Выводы

Подготовка данных является важнейшим этапом построения моделей машинного обучения.

Она включает анализ структуры набора данных, обработку пропусков и выбросов, кодирование категориальных признаков, масштабирование и создание новых характеристик объектов.

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

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

Категориальные признаки преобразуются в числовую форму с помощью соответствующих методов кодирования, включая One-Hot Encoding.

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

Конструирование признаков позволяет представить исходную информацию в более информативной форме.

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

Pipeline объединяет предобработку и обучение в воспроизводимый процесс, уменьшая вероятность технических ошибок.

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