Одна вещь, которую вы могли не знать о линейной регрессии

Как обучить одну модель с несколькими выходами

Вероятно, более чем в 95% случаев использования линейной регрессии (по крайней мере, в тех, которые освещаются в основных средствах массовой информации), у нас есть набор функций (X) и столбец целей (y), которые мы хотим предсказать. Однако линейная регрессия - это один из алгоритмов, способных одновременно обрабатывать несколько выходных данных. Нейронные сети тоже могут это делать, а деревья решений (и модели, основанные на ансамблях деревьев) - нет.

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

Пример на Python

Настраивать

Как всегда, мы начинаем с импорта необходимых библиотек.

Данные

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

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

Подготовка функций и целей

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

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

Данные выглядят следующим образом:

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

Затем мы отделяем функции от целей. Это момент, который отличается от наиболее распространенных задач - цель фактически состоит из 3-х столбцов. Сделав это, мы разбиваем данные на обучающий и тестовый набор. Мы используем 20% наблюдений для тестовой выборки. Помните, что при работе с временными рядами мы не должны перемешивать наблюдения при разделении данных.

Обучение модели

Обучение модели выглядит точно так же, как и в случае модели с одним выходом.

Проверка результатов

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

Сначала мы смотрим на чистую правду.

plot_multistep_forecast(y_test, "Actuals", freq="M");

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

plot_multistep_forecast(y_pred, "Forecasts", freq="M");

Если честно, не все так плохо! Мы можем ясно видеть те же закономерности, что и в фактических данных выше, хотя есть некоторые различия. Например, почти для всех дат прогноз меняется (иногда довольно сильно) в зависимости от того, на какой горизонт мы смотрим. Но для этого простого упражнения результатов однозначно достаточно.

Выводы

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

Вы можете найти код, использованный для этой статьи, на моем GitHub. Также приветствуются любые конструктивные отзывы. Вы можете связаться со мной в Твиттере или в комментариях.

Понравилась статья? Станьте участником Medium, чтобы продолжить обучение, читая без ограничений. Если вы воспользуетесь этой ссылкой, чтобы стать участником, вы поддержите меня без каких-либо дополнительных затрат для вас. Заранее спасибо и до встречи!

Вам также может быть интересно одно из следующего: