Как выполнить квантильную регрессию в Python

Как выполнить квантильную регрессию в Python

Линейная регрессия — это метод, который мы можем использовать для понимания взаимосвязи между одной или несколькими переменными-предикторами и переменной- откликом .

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

Однако вместо этого мы могли бы использовать метод, известный как квантильная регрессия , для оценки любого значения квантиля или процентиля значения ответа, такого как 70-й процентиль, 90-й процентиль, 98-й процентиль и т. д.

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

Шаг 1: Загрузите необходимые пакеты

Сначала загрузим необходимые пакеты и функции:

import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels. formula.api as smf
import matplotlib.pyplot as plt

Шаг 2: Создайте данные

Для этого примера мы создадим набор данных, который содержит часы обучения и результаты экзаменов, полученные для 100 студентов в каком-то университете:

#make this example reproducible
np.random.seed (0)

#create dataset
obs = 100

hours = np.random.uniform (1, 10, obs)
score = 60 + 2\*hours + np.random.normal (loc=0, scale=.45\*hours, size=100)

df = pd.DataFrame({'hours ': hours, 'score ': score})

#view first five rows
df.head ()

hours score
0 5.939322 68.764553
1 7.436704 77.888040
2 6.424870 74.196060
3 5.903949 67.726441
4 4.812893 72.849046

Шаг 3: Выполните квантильную регрессию

Далее мы подгоним модель квантильной регрессии, используя количество часов обучения в качестве переменной-предиктора и экзаменационный балл в качестве переменной-ответа.

Мы будем использовать модель для прогнозирования ожидаемого 90-го процентиля экзаменационных баллов на основе количества изученных часов:

#fit the model
model = smf. quantreg('score ~ hours', df). fit (q= 0.9 )

#view model summary
print(model. summary ())

 QuantReg Regression Results 
==============================================================================
Dep. Variable: score Pseudo R-squared: 0.6057
Model: QuantReg Bandwidth: 3.822
Method: Least Squares Sparsity: 10.85
Date: Tue, 29 Dec 2020 No. Observations: 100
Time: 15:41:44 Df Residuals: 98
 Df Model: 1
==============================================================================
 coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 59.6104 0.748 79.702 0.000 58.126 61.095
hours 2.8495 0.128 22.303 0.000 2.596 3.103
==============================================================================

На выходе мы можем увидеть оценочное уравнение регрессии:

90-й процентиль экзаменационного балла = 59,6104 + 2,8495*(часы)

Например, ожидается, что 90-й процентиль баллов для всех студентов, изучающих 8 часов, будет равен 82,4:

90-й процентиль экзаменационного балла = 59,6104 + 2,8495*(8) = 82,4 .

Выходные данные также отображают верхний и нижний доверительные пределы для точки пересечения и часов переменной предиктора.

Шаг 4: Визуализируйте результаты

Мы также можем визуализировать результаты регрессии, создав диаграмму рассеяния с подобранным уравнением квантильной регрессии, наложенным на график:

#define figure and axis
fig, ax = plt.subplots(figsize=(8, 6))

#get y values
get_y = lambda a, b: a + b \* hours
y = get_y(model. params ['Intercept'], model. params ['hours'])

#plot data points with quantile regression equation overlaid
ax.plot(hours, y, color='black')
ax.scatter (hours, score, alpha=.3)
ax.set_xlabel('Hours Studied', fontsize=14)
ax.set_ylabel('Exam Score', fontsize=14)
Квантильная регрессия в Python

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

Дополнительные ресурсы

Как выполнить простую линейную регрессию в Python
Как выполнить квадратичную регрессию в Python

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.