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
n.p. random . seeds (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                          
==================================================== ============================
Dept. Variable: Pseudo R-squared score: 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
                                        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*(시간)

예를 들어, 8시간 공부한 모든 학생의 90번째 백분위수 점수는 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에서 2차 회귀를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다