Используйте байесовский вывод, чтобы получить распределение ваших прогнозов

Мотивация

При подгонке линии регрессии к выборочным данным вы можете получить линию регрессии, как показано ниже:

Вместо того, чтобы получать одну линию регрессии, было бы неплохо, если бы вы могли вместо этого получить распределение прогнозов?

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

Что такое линейная регрессия на самом деле?

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

Начните с примера

Самый простой способ понять алгоритм — начать с примера.

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

Постройте данные:

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

Если у вас есть переменные 𝑛, ваше уравнение линейной регрессии будет выглядеть следующим образом:

где 𝑦 — переменная ответа, 𝑥 — объясняющие переменные, 𝛽ᵢ — вес переменной 𝑥ᵢ, а ε — ошибка.

Поскольку в наших данных есть только одна объясняющая переменная, наше уравнение линейной регрессии будет выглядеть так:

где 𝑦 — прогнозируемый балл по португальскому языку, а 𝑥 — наблюдаемый балл по математике.

В матричной форме уравнение принимает вид:

Есть несколько возможных значений 𝛽, но мы выберем только такое значение 𝛽, которое минимизирует остаточную сумму квадратов (RSS). RSS – это сумма квадратов разностей между 𝑦ᵢ и 𝑦̂ᵢ, где 𝑦ᵢ – i -е фактическое значение из данных, а 𝑦̂ᵢ       – это i-е значение, предсказанное с помощью регрессии.

Минимизация RSS даст нам оценку 𝛽. Давайте попробуем применить этот метод, используя модель линейной регрессии scikit-learn.

Постройте линию регрессии:

Найдите коэффициент:

array([0.4335796])

Найдите перехват:

7.403346211071996

Глядя на коэффициент и график, мы можем сказать, что если балл по математике увеличивается на 1, средний балл по португальскому языку увеличивается на 0,43. Если оценка по математике равна 0, прогнозируемое значение оценки по португальскому языку составляет 7,403.

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

Постройте байесовскую модель линейной регрессии Используя Bambi

Что такое Бэмби?

Bambi — это высокоуровневый байесовский интерфейс построения моделей, написанный на Python. Он построен на основе фреймворков программирования PyMC3. Таким образом, Bambi похож на PyMC3, но гораздо проще в использовании.



Чтобы установить Бэмби, введите:

pip install bambi

Постройте модель линейной регрессии

Построить модель линейной регрессии с помощью Bambi несложно. Поскольку мы хотим использовать mat (счет по математике) для предсказания por (счет по португальскому языку), мы можем написать:

Используйте PyMC3 для получения 1000 образцов из каждой из 4 цепочек (один запуск MCMC):

По умолчанию Bambi использует family="gaussian", что подразумевает линейную регрессию с нормальной ошибкой.

Анализ распределения коэффициентов

Постройте результаты с помощью ArviZ:

На приведенном выше графике Intercept и mat представляют собой 𝛽₀ и 𝛽₁ соответственно из уравнения 𝑦 = 𝛽₀ + 𝛽₁𝑥 + ε. Графики слева показывают распределения переменных. Графики справа показывают значение каждой переменной на каждой итерации.

Глядя на графики слева, мы можем сказать, что:

  • Распределения 𝛽₀ и 𝛽₁ близки к нормальному распределению.
  • Среднее значение 𝛽₀ составляет от 7,2 до 7,5.
  • Среднее значение 𝛽₁ составляет от 0,42 до 0,44.

Это очень круто! Вместо получения только одной точечной оценки для 𝛽₀ и 𝛽₁ мы получаем распределения 𝛽₀ и 𝛽₁.

Форма распределения также помогает нам понять, насколько мы уверены в значениях 𝛽₀ или 𝛽₁. Конкретно:

  • Чем больше разброс распределения (больше σ), тем меньше мы уверены в значениях 𝛽₀ и 𝛽₁.
  • Чем меньше разброс распределения (меньше σ), тем больше мы уверены в значениях 𝛽₀ и 𝛽₁.

Сравните результаты байесовской линейной регрессии и МНК

Как средние значения 𝛽₀ и 𝛽₁, сгенерированные байесовской линейной регрессией Бэмби, сравниваются со значениями 𝛽₀ и 𝛽₁, сгенерированными с помощью обычной линейной регрессии наименьших квадратов scikit-learn? Начните с поиска средних значений 𝛽₀ и 𝛽₁, сгенерированных Бэмби.

Среднее значение 𝛽₀:

0.43346411871369533

Среднее значение 𝛽₁:

7.403637994335104

Они очень близки к значениям 𝛽₀ и 𝛽₁, сгенерированным scikit-learn!

Постройте линии регрессии

Всего имеется 4 x 1000 = 4000 образцов 𝛽₀ и 𝛽₁. Для каждой пары 𝛽₀ и 𝛽₁ мы можем получить одну оценку 𝑦.

Давайте посмотрим на 10 прогнозов, используя 10 разных пар 𝛽₀ и 𝛽₁:

Прохладный! Теперь давайте используем среднее значение 𝛽₀ и среднее значение 𝛽₁, чтобы получить единую оценку 𝑦 (представленную черной линией).

Из приведенного выше графика видно, что черная линия хорошо отображает все зеленые линии.

График распределения всех прогнозов

Другой способ сравнить отдельные прогностические распределения со средним прогностическим распределением — наложить их распределения друг на друга.

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

Постройте интервал наибольшей плотности прогнозов

Каковы наиболее распространенные прогнозы для определенного значения 𝑥? Давайте выясним это, используя az.plot_hdi (HDI означает интервал максимальной плотности).

На графике выше

  • Темно-красный интервал — это место, где лежат 38% прогнозов при значении 𝑥.
  • Светло-красный интервал — это место, где ложатся 68% прогнозов при значении 𝑥.

Например, если оценка по математике равна 10, мы можем сказать, что 38% предсказаний результатов по португальскому языку находятся в диапазоне от 10,5 до 12,8.

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

Заключение

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

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

Исходный код этой статьи можно найти здесь:



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

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









Ссылка

Кёрсен, В. (20 апреля 2018 г.). Введение в байесовскую линейную регрессию. Середина. Получено 29 декабря 2021 г. с https://towardsdatascience.com/introduction-to-bayesian-linear-regression-e66e60791ea7.