Чтобы вспомнить, что мы сделали с ценами на авокадо, посмотрите предыдущий пост здесь.

Итак… краткий обзор наших предположений в прошлый раз.

  1. Средняя цена варьируется в зависимости от региона (можно предположить, что регион играет решающую роль в прогнозировании средней цены), и средняя цена обычного авокадо росла с 2015 по 2018 год независимо от региона.
  2. Органические авокадо дороже обычных.
  3. На среднюю цену авокадо влияют годы, регионы, сорта.

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

Шаг 1. Преобразование нечисловых данных

Перед построением моделей нам необходимо преобразовать нечисловые данные в числовые. Компьютеры не так сложны, как люди, поэтому нам нужно немного помочь им понять нечисловые данные, преобразовав их в фиктивные или категориальные переменные. Я покажу оба способа, чтобы вы поняли, как они работают.

  1. Преобразуйте данные в фиктивные переменные.

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

2. Преобразуйте данные в категориальные переменные

Просто чтобы дать вам представление о том, как выглядят данные в столбце «регион».

Сюжет.

Как вы можете видеть на Рисунке 3 выше, данные по 54 регионам довольно равны, хотя есть небольшая разница в WestTexNewMexico. Теперь нам нужно преобразовать этот столбец в категориальную переменную.

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

Сначала я конвертирую тип данных в категориальные данные. Однако это не означает, что данные были обработаны как числовые данные, это только означает, что мы успешно преобразовали данные в категориальные с их исходным типом данных (в случае региона это все еще тип объекта/строки, пока)

Затем мы кодируем категориальные данные в числовом формате. После этого у нас теперь есть категориальные данные для области столбца, и они закодированы в числовом формате!

Шаг 2. Преобразование данных DateTime

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

P.S. В этом наборе данных у нас есть столбцы «год» и «дата», мы можем рассматривать год как числовые данные, но нам все равно нужно масштабировать дату до более разумного уровня.

В этом случае я перемасштабирую Date на четверти.

Теперь мы можем проверить новую матрицу корреляции.

Шаг 3. Создание моделей

Перед построением моделей нам нужно установить целевую/зависимую переменную (обозначенную как Y), которая представляет собой столбец «Средняя цена» в наборе данных. Другими словами, возьмите другие столбцы в качестве входных/независимых переменных (обозначаемых как X) в качестве входных данных, а затем придумайте функцию для оценки среднего значения AveragePrice с заданными входными переменными.

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

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

  1. Модель множественной регрессии со всеми входными переменными

Вот результат для модели линейной регрессии, сгенерированной со всеми входными переменными.

Я просто выбрал несколько важных столбцов на рис. 6 для объяснения.

  • R-квадрат (R²): Объясняет, насколько хорошо модель соответствует данным в диапазоне от 0 до 1, чем выше R², тем лучше модель соответствует данным. (Опасения: если R² действительно близко к 1, мы можем подумать, что существует проблема переобучения.)
  • F-статистика: чем больше становится F-статистика, тем лучше работает модель. Обычно мы принимаем во внимание количество точек данных, когда решаем, насколько велики F-спутники, что является доказательством того, что модель хороша для прогнозирования.
  • coef: на сколько расчетное среднее значение выходной переменной изменит соответствующую переменную X на единицу.
  • t: в данном случае t-оценка объясняет, на сколько стандартных отклонений от среднего значения входная переменная.
  • P › |t|: значение p, объясняет, насколько сильно X соотносится с Y.

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

(a) Выбор модели: на основе результатов базовой модели

Мы можем просто выбрать входные переменные, которые имеют значимую связь с Y. Основываясь на рисунке 6, мы заметили, что есть 4 переменные, имеющие значимую связь с Y: «обычные», «органические», «Дата_Q» и «год». '. Следовательно, мы перестроили регрессионную модель, чтобы увидеть, как выглядит пересмотренная модель.

Как вы можете видеть на рисунке 7, R² медленнее, чем базовая линия (что означает, что модель хуже базовой линии при подгонке данных), но хорошие признаки заключаются в том, что F-статистика больше, и все переменные имеют значимые связи с Y (средняя цена).

(b) Выбор модели: f_regression

Помимо ссылки на базовую модель, мы можем использовать другие функции для выбора репрезентативных переменных. Например, функция f_regression в Sci-Kit Learn возвращает p-значение и F-статистику каждой переменной.

Вот результаты анализа f_regression.

И мы можем перестроить регрессионную модель на основе 4 самых информативных переменных: «обычные», «органические», «4046», «Общий объем».

Несмотря на то, что четыре функции имеют значительную связь с Y, F-статистика ниже, чем на рисунке 9, а R² ниже, чем в двух предыдущих моделях.

(Для других 3 моделей множественной регрессии, которые я пробовал, вы можете проверить мой код Kaggle здесь.)

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

Как показано на рисунке 11, R², полученное нами из регрессионной модели XGBoosted, составляет 0,89, что явно выше, чем в предыдущих моделях. Кроме того, модель также объясняет 87,80% дисперсии данных. Следовательно, мы выбрали регрессионную модель XGBoosted в качестве нашего выигрышного решения!

P.S. Вы можете проверить полную версию кода на моем GitHub.