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

Этот параметр идеально подходит для Байесовской иерархической модели, и кажется, что нет лучшего способа обучения таких моделей, чем использование Stan. В следующем блокноте Jupyter Python я прохожу обучение таких моделей и сравниваю их со стандартными/другими потенциальными подходами. В частности, я показываю и сравниваю следующие типы моделей.

  1. Единая байесовская модель для разных мест в Стэне.
  2. Отдельная байесовская модель для каждого местоположения в Стэне.
  3. Байесовская иерархическая модель в Stan.
  4. Единая логистическая регрессия, с использованием scikit-learn, в том числе с различными уровнями регуляризации.
  5. Регуляризованные логистические регрессии как с отдельными параметрами для каждого местоположения, так и с совместными параметрами с использованием scikit-learn.

Примечание 1. Я не являюсь ни экспертом Стэна, ни байесовским статистиком, поэтому я полагаю, что есть ускорение кода и другие лучшие практики, которые я пропустил. Этот блокнот является результатом обучения на выходных или около того. Пожалуйста, прокомментируйте здесь или напишите мне на [email protected], чтобы исправить любые ошибки/отметить любые улучшения.

Примечание 2: Доступ к необработанному блокноту здесь.