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

  • Географии (штат / регион / страна)
  • Портфели (артикул / бренд / компания)
  • Время (день / неделя / год)

Построение «хорошей» модели для одного дочернего объекта, такого как состояние или номер SKU, требует нескольких шагов и не является простым делом. Учитывая это, как можно эффективно построить десятки или даже сотни точных дочерних моделей? Более того, даже если вы зашли так далеко, как вы можете использовать несколько дочерних моделей, чтобы помочь создать наиболее точный родительский прогноз?

Вот один из способов сделать это:

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

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

Метод 1. Интеллектуальный поиск / случайный поиск

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

Подробнее см .: http://hyperopt.github.io/hyperopt/

Метод 2. Последовательное сокращение вдвое

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

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

Подробнее см. Https://arxiv.org/abs/1603.06560.

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

Укладка моделей

После того, как вы нашли высокопроизводительные модели для каждой дочерней сущности, вы можете наложить на них метамодель, чтобы использовать сильные стороны конкурирующих моделей. В этой области ведется много исследований, поэтому я кратко упомяну отличное видео на YouTube Кейт Майерс-Крам https://www.youtube.com/watch?v=3gpf1lGwecA.

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

Постройте родительскую модель (но не «тупую»)

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

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

  • Индивидуальные данные ребенка
  • Агрегированные дочерние данные (сумма вышеперечисленного)
  • Прогнозы от дочерних моделей

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

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

Есть много других деталей, выходящих за рамки этой статьи (например, плюсы и минусы использования дополнительных типов моделей), но не стесняйтесь обращаться ко мне, если у вас есть какие-либо вопросы. Кроме того, если вы имеете дело с одномерными данными, вы можете использовать библиотеку R thief, что означает Temporal HIErarchical Forecasting. См. Подробнее здесь: https://robjhyndman.com/hyndsight/thief/

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