Data Science ML

Несогласованность в данных (data inconsistency)

Несогласованность в данных (data inconsistency) — это одна из самых частых и коварных проблем, которые встречаются при исследовательском анализе данных (EDA). Обнаружить её можно, обращая внимание на логические и статистические аномалии.

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

1. Логические несоответствия

Это ошибки, которые нарушают здравый смысл или заранее известные правила.

  • Нарушение ограничений (Constraint Violations):
    • Пример: Age (возраст) > Years_in_Job (стаж). Если человеку 30 лет, он не может иметь 40 лет стажа.
    • Как обнаружить: Создание новых признаков, проверка логических правил (df[df['Age'] < df['Years_in_Job']]).
  • Дубликаты записей:
    • Пример: Одинаковые строки, где все или почти все значения совпадают.
    • Как обнаружить: Использование .duplicated() в Pandas для поиска полных или частичных дубликатов.
  • Несоответствие форматов:
    • Пример: В столбце Date есть значения в разных форматах: '2023-10-15', '10/15/2023', '15.10.2023'.
    • Как обнаружить: Использование .value_counts() или .unique() для категориальных/текстовых данных. Для дат — попытка преобразования в стандартный формат (pd.to_datetime()) – вызовет ошибку, если данные в разных форматах.
  • Нарушение целостности данных:
    • Пример: В таблице заказов есть Order_ID=’123′, но в таблице клиентов нет клиента с Customer_ID=’123′, хотя эти поля должны быть связаны.
    • Как обнаружить: Сравнение уникальных значений между связанными таблицами (например, set(df1['id']) - set(df2['id'])).

2. Статистические аномалии

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

  • Неожиданные выбросы (Outliers):
    • Пример: В столбце Price (цена) есть значение $1,000,000,000, тогда как остальные цены не превышают $10,000.
    • Как обнаружить:
      • Визуализация: Боксплот (Box Plot) и диаграммы рассеяния (Scatter Plot) — самый простой способ.
      • Статистика: Использование .describe() или .min(), .max(), а также расчет Z-показателя или IQR для обнаружения статистически аномальных значений.
  • Неправильные типы данных:
    • Пример: В столбце Age (возраст) тип данных object (строка), хотя ожидается int или float. Это может быть из-за наличия пропусков или текстовых значений типа "twenty years old".
    • Как обнаружить:
      • .info() в Pandas сразу покажет типы данных.
      • .value_counts() или .unique() для поиска нечисловых значений.
  • Странные распределения (Skewness и Kurtosis):
    • Пример: Уровень асимметрии (.skew()) для ожидаемого симметричного признака (например, рост) слишком велик.
    • Как обнаружить:
      • Построение гистограмм или QQ-plots.
      • Расчет .skew() или .kurtosis() для всех числовых столбцов.

3. Несоответствия в текстовых данных

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

  • Проблемы с регистрами и пробелами:
    • Пример: 'USA', 'usa', 'U.S.A.' — это одно и то же, но будут считаться разными категориями.
    • Как обнаружить: Использование .value_counts() покажет, что одна и та же категория повторяется под разными именами.
  • Некорректные категории:
    • Пример: В столбце Country (страна) есть значение 'Russia' и 'Russian Federation'.
    • Как обнаружить: .value_counts() или .unique().

Сводка — с чего начать:

  1. df.info(): Это даст общее представление о типах данных и количестве не-нулевых значений.
  2. df.describe(): Для числовых данных сразу можно заметить аномальные min/max, среднее и стандартное отклонение.
  3. .value_counts(): Для всех категориальных столбцов, чтобы найти неконсистентные значения, опечатки или необычные категории.
  4. Построить Box Plot для каждого числового столбца, чтобы быстро найти выбросы.

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить