Создавать модели машинного обучения — это КРУТО! Ваша первая модель не должна быть сложной и причудливой. Нет! Это ваша первая попытка; получайте удовольствие, делая это!

Моей первой моделью была модель линейной регрессии для прогнозирования цен на жилье в зависимости от размера квартиры. Мой второй? Я предсказал цены на жилье в зависимости от местоположения. Затем третий — прогнозирование цен на жилье в зависимости от размера, местоположения и типа района. Я наконец научился обучать модели на основе наборов данных временных рядов; они были немного продвинутыми. Тем не менее, все это были увлекательные занятия.

Занимаясь этим, я понял, что построение простой модели машинного обучения обычно требует определенного набора шагов.

Я расскажу о них ниже.

ПОКАЗАТЕЛЬНЫЙ ПРИМЕР: В этой статье я построю модель линейной регрессии для прогнозирования цен на жилье («house_price_usd») с учетом размера («house_size_m2») и местоположения («широта», «лон»).

Этап №1: Подготовка данных

Прежде всего, аналитики данных должны иметь доступ к соответствующим данным. Обычно его не подают на серебряной тарелке. Частью работы аналитика данных является преобразование НЕОБЫЧНЫХ ДАННЫХ в «чистый» набор данных, который должен предоставить значимую информацию.

Выберите свои любимые инструменты — Python, R, MS Excel, SPSS и т. д. — и погрузитесь в эти три вида деятельности:

Импортировать данные

Мой любимый подход к очистке и изучению характера моего набора данных — использование его исходного формата. Например, я часто использую Microsoft Excel для изучения данных, хранящихся в файлах или форматах CSV и XLSX, перед их импортом в Python — это считается хорошей практикой.

Далее, испачкайте руки!

#importing CSV files into Python
df = pd.read_csv(filepath)

Изучите данные

Исследование данных похоже на искусство: у каждого может быть свой уникальный стиль исследования данных. Однако ваши исследовательские вопросы ВСЕГДА должны быть вашим путеводным компасом.

Сначала изучите нулевые значения (NaN) и то, как они повлияют на ваш анализ — отбросьте/заполните их, если они незначительны/значительны.

#identify columns with more than 50% NaN values
df.isnull().sum() / len(df)

#drop columns with more than 50% NaN values
df.drop(columns=[
  "column1",
  "column2"
],
   inplace=True)

Другие вопросы, которые следует рассмотреть, прежде чем переходить к следующему этапу:

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

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

Утечки в вашем наборе данных.Утечки могут возникнуть, когда ваша модель имеет доступ к «будущей информации» — информации, которая, как ожидается, не будет доступна во время прогнозирования. Думайте об этом как о получении ответов на экзамен перед сдачей экзаменов. Или ваша модель знает некоторую часть тестовых данных после обучения. Например, если цены на жилье указаны в долларах США, то любой столбец, отражающий цены на жилье в местной валюте (обмен валюты), должен быть удален.

То есть любые данные, относящиеся к целевой функции, не должны использоваться для обучения модели.

Мультиколлинеарность:Это ситуация, когда функции сильно коррелируют. Если две функции сильно коррелируют, отбросьте одну. Особенно тот, у которого меньше записей (строк).

Отличный способ проверить мультиколлинеарность — использовать тепловую карту.

#import necessary library
import seaborn as sns

#create a correlation matrix and convert it to a heatmap
corr_matrix = df.select_dtypes("numbers").corr()
sns.heatmap(corr)

**Список не является исчерпывающим. Изучите другие характеристики ваших данных, исходя из потребностей и ожиданий вашего анализа.

Разделить данные

Определите свой «целевой вектор» и «матрицу признаков». В нашем случае целью являются цены на жилье, а характеристиками — размер и местоположение (широта и долгота).

#define your target: price in USD
target = "house_price_usd"
y_train = df[target] #use y for dependent variables

#define your features: size, and location of the house
features = ["house_size_m2", "lat", "lon"]
X_train = df[features] #use X for independent variables

Обратите внимание, что целевая переменная не имеет квадратных скобок []. Это потому, что нам нужна целевая переменная в одном измерении (ВЕКТОР — одна строка, ноль столбцов), а не в многомерном (МАТРИЦА — несколько строк и столбцов). Противоположное верно для переменной «функции».

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

В любом случае на данный момент у вас есть чистый и пригодный к использованию набор данных. И вы готовы построить свою модель линейной регрессии.

Этап № 2: Построение модели

Этот этап включает в себя извлечение информации и знаний из вашего набора данных и установление связей между переменными. Модель подчеркнет степень связи (коэффициент) между зависимыми и независимыми переменными. Этот этап можно разбить на ТРИ этапа:

Базовый уровень

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

Для простой модели линейной регрессии базовая метрика получается из СРЕДНЕГО целевого значения и СРЕДНЕЙ АБСОЛЮТНОЙ ОШИБКИ вашей простой модели. Давайте посмотрим, как это можно сделать:

#find the mean of your target (house_prices)
y_mean = y_train.mean()

#create you predicrion baseline from the mean value above
y_prediction_baseline = [y_mean] * len(y_train)

#use the two results to calculate the mean absolute error (MAE) baseline
from sklearn.metrics import mean_absolute_error #import MAE from scikit-learn library
MAE_baseline = mean_absolute_error(y_train, y_prediction_baseline)

#print the mean house price and the baseline MAE
print("Mean house price:" round(y_mean, 2))
print("Baseline MAE:" MAE_baseline.round(2)) 

Итерировать

Итерация означает использование определенных методов или инструментов циклами или частями для уточнения и улучшения вашей модели. То есть подогнать модель, содержащую один или несколько счетчиков и предиктор из библиотеки Scikit-learn.

Простая модель будет работать с одним предиктором следующим образом:

#instantiate the LinearRegression model
from sklearn.linear_model import LinearRegression
model = LinearRegression()

#fit the model to the data, X_train and y_train
model.fit(X_train, y_train)

Интересно, что Scikit-learn позволяет аналитикам данных определить набор шагов для обработки данных, прежде чем делать какие-либо прогнозы. Вы можете сделать это, создав конвейер — конвейер состоит из одного или нескольких преобразователей (импутеров) и заканчивается предиктором, как показано в примере ниже.

Примеры импутеров или преобразователей в Scikit-learn включают SimpleImputer, MinMaxScaler, Ordinal Encoder, One Hot Encoder и Power Transformer.

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

#instantiate the LinearRegression model
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline

model = make_pipeline(
  SimpleImputer(), #SimpleImputer is a transformer
  LinearRegression() #LinearRegression is a predictor
)                       

#fit the model to the data, X_train and y_train
model.fit(X_train, y_train)

Оценивать

Вы обучили свою модель. Теперь, как он работает в соответствии с установленными стандартами? Вам нужно будет сравнить MAE_baseline и MAE_pred_training. См. ниже:

#check code for MAE_baseline above
#perform house prices prediction using your model
y_predictions = model.predict(X_train)

#calculate the MAE_pred_training
MAE = mean_absolute_error(y_train, y_predictions)

#print the results
print("Training MAE:" MAE.round(2))

Критерии оценки:Значение MAE_pred_training должно быть намного меньше, чем MAE_baseline.

Этап №3: Обнародование результатов

Функция прогнозирования

Что ваша модель говорит о переменных? Обычно это можно определить путем анализа коэффициентов каждой переменной. Глядя на простую функцию линейной регрессии, «m» — это коэффициент переменной «x», тогда как «y» — это цель, а «c» — это точка пересечения.

y = mx + c

Ту же функцию можно расширить при наличии нескольких переменных следующим образом:

y = β1 + β2(x2) + β3(x3)

Сначала давайте найдем коэффициент, связанный с переменными “house_size_m2”, “lot” и “lon”.

#coefficient of a model without a transformer
coefficient = round(model.coef_[0],2) #first coefficient

#coefficienct of a model with a transformer/pipeline
coefficient = model.named_steps["linearregression"].coef_.round(2)

Затем вам нужно будет найти перехват:

#intercept of a model without a transformer
intercept = round(model.intercept_, 2)

#intercept of a model with a transformer
intercept = model.named_steps["linearregression"].intercept_.round(2)

Наконец, у нас есть модель линейной регрессии вида:

#print the linear regression equation determined by your model
print(
   "house price USD = {} + ({}* house size) + ({}*lat) + ({}*lon)"
  .format(intercept,
   coefficient[0],
   coefficient[1],
   coefficient[2])
)

Размер коэффициентов будет определять степень влияния характеристики на цель (цены на жилье в долларах США).

Интерактивная панель диаграммы

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

Хорошей практикой при работе с моделями линейной регрессии является сопоставление их с соответствующими наборами данных.

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