Подготовка данных для ML

Начните с выгрузки сырых данных из проверенных источников. Используйте SQL-запросы для извлечения информации из баз данных, CSV-файлы для статических наборов или API-интерфейсы (например, Twitter API для текстовых данных). Проверьте лицензионные ограничения: например, изображения из Flickr должны соответствовать правилам Creative Commons.

Проверьте аномалии в первых 1000 строк. Примените df.describe() в Pandas для выявления отклонений в числовых признаках. Для категориальных данных используйте df.value_counts(), чтобы найти редкие метки (менее 1% от общего объема). Автоматизируйте удаление дубликатов через df.drop_duplicates(subset=[‘email’]).

Нормализуйте числовые признаки до единого масштаба. Для нейросетей применяйте MinMaxScaler(feature_range=(0,1)), для линейных моделей – StandardScaler(). Категории преобразуйте через OneHotEncoder(), если классов меньше 10, или TargetEncoder(), если больше. Для временных рядов добавьте lag-признаки: df[‘lag_1’] = df[‘price’].shift(1).

Разделите данные на три группы: 60% – обучение, 20% – валидация, 20% – тест. Для временных рядов сохраняйте хронологический порядок. Используйте StratifiedKFold(), если целевая переменная несбалансирована (например, 95% класса «0» и 5% класса «1»). Экспортируйте наборы в отдельные файлы: train.csv, val.csv, test.csv.

Добавьте автоматические проверки перед передачей данных в модель. Напишите скрипт, который проверяет совпадение типов признаков в train и test (dtypes), допустимые диапазоны значений (assert df[‘age’].between(0, 120).all()), отсутствие NaN в целевом столбце. Зафиксируйте версию датасета через DVC или MLflow.

Сбор исходных данных и устранение пропущенных значений

Определите источники данных: открытые репозитории (Kaggle, UCI Machine Learning Repository), внутренние базы данных компании или API сторонних сервисов. Используйте библиотеки Python (requests, Scrapy) для автоматизации парсинга.

Проверьте данные на пропуски:

  • Используйте метод .isnull().sum() в pandas для подсчета пропущенных значений по каждому столбцу.
  • Если пропуски составляют менее 5% данных – удалите строки с помощью .dropna().
  • При высоком проценте пропусков (>20%) рассмотрите удаление столбца или генерацию синтетических данных через алгоритмы SMOTE или KNNImputer.

Для заполнения пропусков:

  • Числовые данные: замена на медиану или среднее значение (.fillna(df['column'].median())).
  • Категориальные данные: добавьте отдельную категорию «Unknown» или используйте модуль SimpleImputer(strategy='most_frequent').
  • Временные ряды: заполните пропуски интерполяцией (.interpolate()).

Проверьте распределение данных после обработки. Если пропуски не случайны (например, связаны с определенной группой), добавьте бинарный признак-индикатор пропуска (df['column_missing'] = df['column'].isnull().astype(int)).

Для работы с текстовыми данными удалите пустые строки или замените их на стандартный токен («[MISSING]»). Используйте CatBoost или LightGBM, если пропуски содержат информацию для моделей, учитывающих NA как отдельное значение.

Преобразование признаков и настройка форматов данных для алгоритмов

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

  • One-Hot Encoding для номинальных категорий (например, города или цвета), если количество уникальных значений ≤15. Используйте pd.get_dummies() или OneHotEncoder.
  • Label Encoding для порядковых признаков (например, уровни образования: «школа»→0, «бакалавр»→1). Примените OrdinalEncoder с явным указанием порядка категорий.

Нормализуйте числовые признаки, если алгоритм чувствителен к масштабу (например, нейросети, метод опорных векторов):

  • Min-Max Scaling (MinMaxScaler) для данных в диапазоне [0,1], если распределение не нормальное.
  • Z-Score Standardization (StandardScaler) для признаков с выбросами, чтобы среднее = 0, стандартное отклонение = 1.

Обработайте пропущенные значения:

  • Для числовых данных: замена медианой (для распределений с выбросами) или средним (для нормальных распределений). Используйте SimpleImputer.
  • Для категориальных данных: добавьте категорию «Unknown» или используйте наиболее частую категорию.
  • Добавьте бинарный признак-индикатор пропуска (0/1) для сохранения информации.

Создайте производные признаки для улучшения интерпретируемости модели:

  • Комбинируйте числовые признаки: площадь квартиры = длина × ширина.
  • Разделите временные метки на компоненты: год, месяц, день недели из даты.
  • Для текстов: выделите длины строк, количество чисел или специальных символов.

Форматируйте данные для специфических алгоритмов:

  • Древовидные модели (Random Forest, XGBoost): не требуют масштабирования, но чувствительны к дисбалансу классов.
  • Нейросети: преобразуйте все признаки в числовые, масштабируйте до диапазона [-1,1] или [0,1].
  • Алгоритмы кластеризации: удалите шумы с помощью DBSCAN или примените PCA для снижения размерности.
26.06.2025ТехнологииНавыки
Смотрите также
НавыкиКарьера
Книги для программистов
Обучаться программированию можно на очных курсах или в дистанционной школе, но в любом случае, нужно будет заниматься еще и самостоятельно. В этом помогут книги для программистов. Читать специальную литературу полезно и начинающим, делающим первые шаги в IT сфере, и профессионалам.
ТехнологииБизнес
Как организовать AI-воркшоп для команды
Узнайте, как эффективно организовать AI-воркшоп для вашей команды, внедряя инновационные технологии в бизнес.
ТехнологииБизнес
Примеры роста продаж и выручки с помощью искусственного интеллекта
Как компании увеличивают выручку с помощью ИИ? Персонализация, автоматизация маркетинга и прогнозирование.
ТехнологииБизнес
Использование ИИ в агробизнесе
ИИ для агробизнеса помогает точнее сеять, меньше тратить удобрений и получать больший урожай — смотрите реальные примеры и сервисы.