Насколько важна очистка данных для лучшей аналитики данных
В науке о данных на результаты анализа большое влияние будет оказывать качество используемых данных. качество данных означает наличие данных в соответствии с функцией, которая будет использоваться в анализе. Проще говоря, хорошие данные дадут хороший анализ, и наоборот.
Сам этап очистки данных является важным процессом в процессе анализа машинного обучения перед началом применения модели. В этом обсуждении будет рассмотрен пример прогнозирования цен на недвижимость с использованием линейной регрессии. Ранее пример статьи о линейном регрессионном анализе для прогнозирования цен на недвижимость можно было увидеть здесь, процесс анализа кейса осуществляется как есть, без предварительной обработки используемых данных. Таким образом, в процесс прогнозирования в качестве независимых переменных входят значения дат и порядковые номера, а значения мультиколлинеарности также предварительно не рассчитываются. Это, конечно, сделает анализ непригодным. пошаговую очистку данных для прогнозного моделирования можно увидеть следующим образом.
Как и в приведенном выше примере, используемые данные — это цены на недвижимость, предоставленные 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.
использованная литература