Насколько важна очистка данных для лучшей аналитики данных

В науке о данных на результаты анализа большое влияние будет оказывать качество используемых данных. качество данных означает наличие данных в соответствии с функцией, которая будет использоваться в анализе. Проще говоря, хорошие данные дадут хороший анализ, и наоборот.

Сам этап очистки данных является важным процессом в процессе анализа машинного обучения перед началом применения модели. В этом обсуждении будет рассмотрен пример прогнозирования цен на недвижимость с использованием линейной регрессии. Ранее пример статьи о линейном регрессионном анализе для прогнозирования цен на недвижимость можно было увидеть здесь, процесс анализа кейса осуществляется как есть, без предварительной обработки используемых данных. Таким образом, в процесс прогнозирования в качестве независимых переменных входят значения дат и порядковые номера, а значения мультиколлинеарности также предварительно не рассчитываются. Это, конечно, сделает анализ непригодным. пошаговую очистку данных для прогнозного моделирования можно увидеть следующим образом.

Как и в приведенном выше примере, используемые данные — это цены на недвижимость, предоставленные Kaggle, которые можно увидеть здесь.

Сначала импортируйте библиотеку, необходимую для чтения набора данных из формата csv, и сохраните данные в переменной.

import numpy as np
import pandas as pd
re_dataset = pd.read_csv("real_estate.csv")
re_dataset.head()

Есть 6 независимых переменных, используемых для определения стоимости единицы недвижимости, записанной от X1 до X6 в наборе данных. Начинаем процесс очистки данных с удаления пустых данных, но предварительно проверяем, есть ли пустые данные.

re_dataset.isna().sum()

Поскольку пустых данных нет, нам не нужно выполнять процесс удаления, и этот процесс выполняется путем исключения неиспользуемых переменных. На основе существующих переменных мы не будем использовать переменную даты транзакции, а также порядковый номер транзакции, хотя он и не включен в переменную, он все равно включен в столбец набора данных, поэтому два столбца в наборе данных будут исключены. для дальнейшей обработки.

re_dataset.pop(“no”)
re_dataset.pop(“transaction_date”)
re_dataset.head()

Следующим шагом является нормализация данных, учитывая, что все используемые данные имеют различный диапазон.

from sklearn import preprocessing
re_col = re_dataset.columns
normalize_df = preprocessing.normalize(re_dataset, axis=0)
normalize_df = pd.DataFrame(normalize_df, columns=re_col)
normalize_df.head()

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

from sklearn.model_selection import train_test_splitdf_train, df_test = train_test_split(normalize_df, train_size=0.8, test_size=0.2)
y_train = df_train["house_price"]
x_train = df_train[["house_age", "distance_to_mrt", "num_convinience", "latitude", "longitude"]]

Еще одна подготовка перед проведением регрессионного анализа заключается в проверке мультиколлинеарности между переменными, мультиколлинеарность - это состояние, при котором переменная имеет очень высокую привязанность к другой переменной, например, регрессионный анализ используется для трех независимых переменных, а именно a, b и c, которые имеют a значение a * b Это означает, что переменная c имеет высокую коллинеарность по отношению к другим переменным, поскольку изменение переменной a или b сильно повлияет на значение переменной c. Самый простой способ устранить эту мультиколлинеарность — исключить эту переменную из процесса анализа. Проверка значения мультиколлинеарности переменной осуществляется следующим образом.

from statsmodels.stats.outliers_influence import variance_inflation_factor
vif_data = pd.DataFrame()
vif_data[“feature”] = x_train.columns
vif_data[“VIF”] = [variance_inflation_factor(x_train.values, i)
 for i in range(len(x_train.columns))]
print(vif_data)

Допустимое значение коллинеарности на основе VIF находится в диапазоне от 1 до 5, а если оно больше, то его лучше не включать в анализ, видно, что значения широты и долготы имеют значение около 6,43, так что они должны быть исключены. Поэтому мы должны перенастроить используемые независимые переменные, а также объявить переменные тестовых данных.

x_train = x_train[[‘house_age’, ‘distance_to_mrt’, ‘num_convinience’]]
y_test = df_test['house_price']
x_test = df_test[['house_age', 'distance_to_mrt', 'num_convinience']]

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

from sklearn.linear_model import LinearRegression
lm = LinearRegression()
model = lm.fit(x_train, y_train)
y_predictions = model.predict(x_test)

Если данные были предсказаны, чтобы выяснить, достаточно ли хороша сделанная модель, необходимо проверить точность. Метод проверки точности, который можно выполнить, заключается в использовании средней абсолютной ошибки и R2.

from sklearn.metrics import mean_absolute_error, r2_score
mae = mean_absolute_error(y_test, y_predictions)
r2 = r2_score(y_test, y_predictions)
print(mae)
print(r2)

Результаты точности зафиксированы на уровне около 0,009 для средней абсолютной ошибки и 0,373 для R2, ​​эти результаты указывают на значительное увеличение результатов, достигнутых ранее без очистки данных, показанных здесь, а именно 5,77 для средней абсолютной ошибки и 0,657 для R2.

использованная литература