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

Набор данных, используемый в этой статье, был создан на основе данных Департамента финансов Нью-Йорка.

Простота — это то, что я бы назвал основной характеристикой деревьев решений. Этот алгоритм в основном похож на Угадай, кто? Игра, в которой вы задавали вопросы своему противнику, чтобы предсказать, каким был его персонаж: «Ваш персонаж — женщина?», «Да», «Да». она поет?», «Нет», «Тогда ваш персонаж — Серена Уильямс», «ДА!». С технической точки зрения, эти деревья построены на структуре узлов (вопросов), соединенных ребрами (ответы да/нет). Получив ответы на эти вопросы, дерево классифицирует данные, чтобы получить результат; этот результат называется конечным узлом, и в дереве решений их может быть несколько.

После этого краткого объяснения деревьев решений мы будем использовать один из двух существующих типов: первый регрессионный. Это работает с числовыми данными. Если вы хотите предсказать что-то относительно категориальных данных, вам нужно будет использовать дерево классификации. Чего мы постараемся достичь, так это построить модель прогнозирования, которая может прогнозировать цены продажи недвижимости на Манхэттене за период n+1 на основе исторических данных. Используемый набор данных содержит информацию о недвижимости, проданной на Манхэттене за период с 2019 по 2021 год.

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

Как видите, данные, которые мы можем получить из этого набора, это: дата продажи, район, в котором находится недвижимость, цена, по которой она была продана, а также год и месяц с даты продажи. Теперь, когда мы это знаем, нам нужно преобразовать наши данные в нужный формат, чтобы подогнать к нему регрессор дерева. Для этого воспользуемся функцией pivot_table от pandas.

Благодаря предыдущему шагу у нас теперь есть фрейм данных, который содержит среднее значение цен продажи для каждого района Манхэттена и для каждого месяца с января 2019 года по декабрь 2021 года. Имея наши данные в правильном формате, пришло время использовать функцию, которая разделяет весь набор для обучения и тестирования, в этом случае мы определим его с нуля с помощью подхода, установленного Николасом Вандепутом в его книге Наука о данных для прогнозирования цепочки поставок (если вы хотите получить более подробную информацию об этой функции и многих других интересных знаниях купите книгу Николаса на его веб-сайте SupChains).

В этом случае мы укажем функцию для передачи данных за 16 месяцев в набор поездов и данных за 16 месяцев в набор тестов, чтобы модель могла предсказать 1 месяц в будущем (в данном случае январь 2022 года). Как только наша функция train-test-split определена, мы можем использовать ее в нашем фрейме данных. После этого единственные оставшиеся шаги — вписать регрессор дерева в наш обучающий набор и сделать прогноз в нашем тестовом наборе.

После завершения прогнозирования теста мы сможем оценить производительность нашей регрессионной модели, рассчитав среднюю абсолютную ошибку (MAE). Как видно ниже, наша модель работала лучше на нашем тренировочном наборе с MAE 27,9%, тогда как на нашем тестовом наборе MAE достигла 55,9%. Эта потеря производительности на 28 процентных пунктов является возможным признаком переобучения.

Определенно мы должны попытаться оптимизировать модель, так как это будет выглядеть примерно так: Представьте, что вы решили переехать в один из районов Манхэттена и потратите все свои сбережения, чтобы купить там недвижимость. Вы каким-то образом знали о существовании этой модели и думаете попробовать. Модель прогнозирования показывает, что недвижимость будет стоить 100 тысяч долларов в следующем месяце, поэтому вы говорите: «Вау, это потрясающе! Это только то, что у меня есть на моем банковском счете». Уверенный в предсказании, вы начинаете готовиться к покупке квартиры. Когда вы приезжаете со своим агентом по недвижимости, он говорит следующее: «На самом деле цены на недвижимость сильно упали, и теперь мы сможем получить вашу квартиру всего за 44 тысячи долларов». Замечательно! Это на 56% меньше вашего бюджета; но что, если бы все было наоборот: «На самом деле цены на недвижимость сильно выросли, и ваша квартира будет стоить вам 156 тысяч долларов». Вам определенно нужно отложить свой план переезда на Манхэттен немного дальше.

Чтобы добиться оптимизации нашего регрессора, нам нужно найти наилучшие значения для параметров max_depth и min_samples_leaf. Вместо того, чтобы вводить случайные числа, чтобы найти себе наиболее оптимальное решение, мы выполним GridSearchCV. В двух словах, это класс scikit-learn, который находит «лучшие» параметры для использования, выполняя перекрестный поиск по сетке параметров, которую вы загружаете. В этом случае мы настроили эту сетку так, чтобы она имела диапазон значений max_depth от 5 до 12 и от 5 до 30 для параметра min_samples_leaf. Как только это будет сделано, мы создаем новый регрессор дерева решений и передаем его в GridSearchCV вместе с нашей сеткой параметров. Следующие шаги такие же, как и с нашей первой моделью.

Как видите, мы уменьшили ошибку прогнозирования на 9,9 балла, используя параметры, найденные GridSearchCV (в данном случае max_depth= ​​5 и min_samples_leaf= 13). Хотя это хорошее снижение почти на 18%, я все же считаю, что было бы не так уж хорошо платить на 46% больше вашего прогноза.

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

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

Вандепут, Николас. (2021). Наука о данных для прогнозирования цепочки поставок.