TGViewer
Data Science | Machinelearning [ru] Data Science | Machinelearning [ru] @devsp · 19.8K subscribers
Post #5522 3.57K
Ошибки, которые делают почти все при обработке категориальных признаков

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

Ошибка 1: Ошибка в выборе метода кодирования
Одна из частых ошибок при работе с категориальными признаками — неверный выбор метода кодирования. Многие начинающие инженеры используют One-Hot Encoding для всех категориальных признаков, что не всегда оправдано. Например, если мы имеем дело с признаками с высокой кардинальностью, One-Hot Encoding может значительно увеличить количество признаков, что плохо сказывается на скорости обучения и памяти.

Сравнение One-Hot Encoding и Target Encoding

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# Пример данных
data = pd.DataFrame({'city': ['Moscow', 'Berlin', 'Berlin', 'New York', 'Moscow']})

# One-Hot Encoding
encoder = OneHotEncoder(sparse=False)
ohe_df = pd.DataFrame(encoder.fit_transform(data[['city']]), columns=encoder.get_feature_names_out(['city']))
print(ohe_df)

# Target Encoding (простое среднее значение по городу)
mean_target_encoding = data.groupby('city').size() / len(data)
data['city_encoded'] = data['city'].map(mean_target_encoding)
print(data)



Ошибка 2: Отсутствие учёта порядка категорий
Игнорирование порядка категориальных признаков может стать причиной для искажения результатов. Например, при кодировании рейтинга (низкий, средний, высокий) важно сохранить порядок. Без учета порядка некоторые методы, такие как Label Encoding, могут привести к неправильной интерпретации модели.

Использование Label Encoding на упорядоченных данных

from sklearn.preprocessing import OrdinalEncoder

# Пример данных
ratings = pd.DataFrame({'rating': ['low', 'medium', 'high']})

# Ordinal Encoding
ordinal_encoder = OrdinalEncoder(categories=[['low', 'medium', 'high']])
ratings_encoded = ordinal_encoder.fit_transform(ratings)
print(ratings_encoded)


Ошибка 3: Игнорирование новых категорий в данных
При изменении структуры данных, например, при поступлении новых данных, легко упустить появление новых категорий, отсутствующих в обучающей выборке. Это может привести к ошибкам в прогнозировании и даже к падению сервиса в production. Использование специальных объектов (например, категориальных маппингов) или добавление логики обработки новых значений помогает избежать этой проблемы.

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

# Пример данных
train_data = pd.DataFrame({'city': ['Moscow', 'Berlin', 'New York']})
test_data = pd.DataFrame({'city': ['London', 'Berlin', 'Moscow']})

# Создание маппинга
city_mapping = {'Moscow': 0, 'Berlin': 1, 'New York': 2}

# Применение маппинга с обработкой новых категорий
train_data['city_encoded'] = train_data['city'].map(city_mapping)
test_data['city_encoded'] = test_data['city'].map(lambda x: city_mapping.get(x, -1))

print(test_data)


TG: Data Science | Machinelearning [ru]
  • ❤ 7
  • 👀 2
More from @devsp
  1. Sep 28, 2026Что происходит с данными, когда их становится слишком много Корпоративные данные сегодня ж…
  2. Sep 28, 2026Кодовый агент на Mac без облака: MTPLX + pi + Qwen3.8-27B. Где реально прирост, а где нет…
  3. Sep 27, 2026Нейрочип НТЦ «Модуль»: единственный серийный в стране Разбор единственного серийного нейро…
  4. Sep 27, 2026[Перевод] Промпт-инжиниринг: как лучше общаться с ИИ Что тебе ответит генеративная модель…
  5. Sep 26, 2026Тем, кто только лезет в ML Начинаешь щупать машинное обучение и хочешь нормально въехать в…
  6. Sep 26, 2026NVIDIA тоже подтянулась к тренду: LeetCode-собесы — на выход И весь замес — вокруг трёх те…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →