Обработка пропущенных значений — распространенная проблема при анализе данных и задачах машинного обучения. Отсутствие данных может возникнуть по разным причинам, например из-за ошибок сбора данных, повреждения данных или отсутствия определенных значений. В этой статье мы рассмотрим несколько эффективных методов обработки пропущенных значений в наборе данных, а также примеры кода на Python.
- Удаление отсутствующих значений.
Самый простой способ обработки отсутствующих данных — удалить строки или столбцы, содержащие пропущенные значения. Хотя этот метод прост, он может привести к потере ценной информации, если пропущенные значения не распределены случайным образом.
# Dropping rows with missing values
df.dropna(axis=0, inplace=True)
# Dropping columns with missing values
df.dropna(axis=1, inplace=True)
- Вменение среднего значения/режима.
Вменение включает в себя заполнение пропущенных значений расчетными значениями на основе доступных данных. Для числовых объектов обычным методом вменения является замена пропущенных значений средним значением или медианой объекта.
# Imputing missing values with the mean
mean_value = df['column'].mean()
df['column'].fillna(mean_value, inplace=True)
# Imputing missing values with the mode
mode_value = df['column'].mode()[0]
df['column'].fillna(mode_value, inplace=True)
- Заполнение вперед/назад.
Заполнение вперед (или заполнение) предполагает заполнение пропущенных значений последним не пропущенным значением перед ним, тогда как заполнение назад (или bfill) использует следующее не пропущенное значение.
Заполнение вперед/назад. >
# Forward fill missing values
df.fillna(method='ffill', inplace=True)
# Backward fill missing values
df.fillna(method='bfill', inplace=True)
- Интерполяция.
Интерполяция оценивает недостающие значения на основе тенденции или закономерности, наблюдаемой в существующих данных. К распространенным методам интерполяции относятся линейная, полиномиальная и сплайн-интерполяция.
# Linear interpolation
df['column'].interpolate(method='linear', inplace=True)
# Polynomial interpolation
df['column'].interpolate(method='polynomial', order=2, inplace=True)
# Spline interpolation
df['column'].interpolate(method='spline', order=2, inplace=True)
- Вменение на основе машинного обучения.
Другой подход заключается в использовании алгоритмов машинного обучения для прогнозирования пропущенных значений на основе других функций в наборе данных. Для этой цели можно использовать регрессионные модели, такие как линейная регрессия и случайный лес.
from sklearn.ensemble import RandomForestRegressor
# Create a new DataFrame without missing values
df_no_missing = df.dropna()
# Separate features and target variable
X_train = df_no_missing.drop('target', axis=1)
y_train = df_no_missing['target']
# Train a random forest regressor
model = RandomForestRegressor()
model.fit(X_train, y_train)
# Predict missing values
X_missing = df[df.isnull().any(axis=1)].drop('target', axis=1)
predicted_values = model.predict(X_missing)
# Fill missing values with predicted values
df.loc[df.isnull().any(axis=1), 'target'] = predicted_values
Обработка пропущенных значений — важный этап предварительной обработки данных. Мы обсудили несколько методов, включая удаление пропущенных значений, вменение среднего/моды, прямое/обратное заполнение, интерполяцию и вменение на основе машинного обучения. Выбор метода зависит от характера данных и конкретной проблемы. Используя эти методы, вы можете быть уверены, что пропущенные значения не повлияют на точность и надежность вашего анализа данных или моделей машинного обучения.