Вопрос или проблема
В настоящее время я работаю с набором данных IEEE-CIS Fraud Detection, предоставленным через Kaggle, содержащим около 350 признаков и примерно 600 тысяч экземпляров. Однако некоторые признаки имеют большие объемы пропущенных значений, до такой степени, что подавляющее большинство признаков недоступно. Набор данных преобразовал 300 своих признаков в главные компоненты для защиты конфиденциальности, и, следовательно, не может понять значение признака.
Я интересуюсь, какие подходы могут быть хорошими для этой проблемы. Я думал о заполнении данных, но создание и заполнение фальшивыми данными для большинства признаков кажется необоснованным по сравнению с реальными данными. Я также думал о том, чтобы исключить признаки с большим количеством пропущенных значений, но это кажется игнорированием информации, которая может оказаться ключевой.
Буду признателен за любой ответ, большое спасибо!
Лучший способ заполнения зависит не только от данных, но и от моделей, которые работают с этими данными. Не зная данных и не зная модели, все, что я могу сделать, это предложить некоторые подходы.
- Вы можете выполнить обычное заполнение и добавить для каждого столбца с пропущенными значениями другой бинарный столбец, который указывает, было ли значение заполнено или изначально присутствовало. Таким образом, информация не теряется для модели, и некоторые модели могут научиться использовать эти бинарные флаги.
- Существуют модели, которые могут обрабатывать пропущенные значения. Некоторые модели на основе деревьев, такие как XGBoost, хранят, например, узел по умолчанию для пропущенных значений в каждом узле.
- Есть более сложные методы заполнения, которые вы можете попробовать. Например, можно попытаться предсказать пропущенное значение на основании значений других столбцов. Это может быть вычислительно дорогостоящим и потребовать несколько итераций для сходимости (если предсказание значения в столбце A основано на пропущенных значениях в столбце B, а затем значение в столбце B заполняется аналогичным образом, то может потребоваться обновить заполнение в столбце A).
Если вы не хотите терять много данных, вы можете использовать функцию fillna из библиотеки Pandas. Она использует параметр “method”.
method: {‘backfill’, ‘bfill’, ‘ffill’, None}, по умолчанию None
Метод для заполнения пробелов в переиндексированных сериях:
-
ffill: переносит последнее действительное наблюдение вперед до следующего действительного.
-
backfill / bfill: использует следующее действительное наблюдение для заполнения пробела.
пример:
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, np.nan],
[np.nan, 3, np.nan, 4]],
columns=list("ABCD"))
df
A B C D
0 NaN 2.0 NaN 0.0
1 3.0 4.0 NaN 1.0
2 NaN NaN NaN NaN
3 NaN 3.0 NaN 4.0
df.fillna(method="ffill")
A B C D
0 NaN 2.0 NaN 0.0
1 3.0 4.0 NaN 1.0
2 3.0 4.0 NaN 1.0
3 3.0 3.0 NaN 4.0
Ответ или решение
Вопрос о том, как эффективно компенсировать отсутствующие значения в данных, стоит перед многими аналитиками и специалистами в области данных. Особенно это актуально при работе с большими наборами данных, такими как набор данных IEEE-CIS Fraud Detection, который вы рассматриваете. В данном контексте, где 300 признаков преобразованы в главные компоненты для обеспечения конфиденциальности, необходимо учитывать ряд подходов к иммутации данных, учитывая степень отсутствующих значений.
1. Понимание проблемы
Важным шагом является понимание масштаба и причин пропусков в данных. Если пропуски случайные, то методы иммутации могут быть более эффективными. Если же пропуски систематические, возможно, данные необходимо анализировать с другой точки зрения. Оцените возможное влияние пропусков на конечные результаты анализа и интерпретацию моделей.
2. Методы иммутации данных
a. Пропуск значений с бинарными флагами
Один из практичных методов – применение нормального метода иммутации, добавляя для каждого столбца с пропусками бинарный столбец, указывающий, были ли значения исходными или иммутабированными. Это позволяет сохранить информацию о пропусках и поможет моделям учитывать это при построении прогнозов.
b. Модели, реагирующие на NaN
Некоторые алгоритмы, такие как XGBoost и другие деревообразные модели, могут обрабатывать отсутствующие значения на этапе построения дерева. В этих моделях можно задать отдельные дочерние узлы для NaN, что делает их устойчивыми к пропущенным данным.
c. Сложные методы предсказания
Более продвинутые методы включают предсказание отсутствующих значений на основе других доступных признаков. Этот подход может быть вычислительно затратным и требует итеративного подхода для улучшения точности. Например, если значение в одной колонне зависит от отсутствующего значения в другой, это может потребовать многократной корректировки.
3. Прямое заполнение отсутствующих значений
Если данные имеют выраженную последовательность или структуру, вы можете использовать методы прямого заполнения, такие как fillna()
из библиотеки Pandas. Это позволит заполнить пропуски, используя методы "вперед" (ffill) и "назад" (bfill):
import pandas as pd
import numpy as np
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, np.nan],
[np.nan, 3, np.nan, 4]],
columns=list("ABCD"))
df_filled = df.fillna(method="ffill") # Заполнение вперед
Данный подход подходит в случаях, когда отсутствующие значения в колонках могут быть логично заменены на последние известные значения.
4. Оценка и дальнейшие шаги
После применения методов иммутации критически важно оценить качество итоговых данных. Используйте метрики, такие как RMSE или MAE, для проверки точности ваших моделей на данных с иммутациями по сравнению с исходными данными. Параллельно с этим рекомендую вести мониторинг зависимости от иммутации.
Кроме того, обязательно анализируйте значимость введённых признаков и влияния флагов для обнаружения индикации пропусков. Это может помочь в дальнейшем улучшении моделей и поднятии точности предсказания.
Заключение
Сложные вопросы, связанные с отсутствующими данными, требуют комплексного подхода и внимательного анализа. Применяйте методы иммутации с учетом контекста данных и моделей, чтобы максимально сохранить важную информацию и обеспечить точность ваших предсказаний.