Quantile Regression은 기존의 선형회귀와 많은 부분이 비슷하지만, conditional mean이 아닌 conditional median을 추정한다는 큰 차이점이 있습니다. 우리나라 말로는 분위수 회귀라고도 합니다. 오늘 포스팅에서는 분위수 회귀에 대해 디테일하게 살펴보고, R로 적용해보는 시간을 갖도록 하겠습니다.
1) 최소자승법과의 차이?
분위수회귀는 최소자승법의 수학적 구조와는 다른 방향성을 갖고 있습니다. 선형대수학적 관점으로 봤을 때 최소자승법은 inner product space에서의 projection matrix등의 문제로 접근할 수 있지만, 분위수회귀는 선형프로그래밍을 simplex method로 해결하는 방식입니다. simplex method에 대해서는 다음의 두 링크를 알아보시기를 추천드립니다.
4.2: Maximization By The Simplex Method
The simplex method uses an approach that is very efficient. It does not compute the value of the objective function at every point; instead, it begins with a corner point of the feasibility region …
math.libretexts.org
2) 분위수에 대한 정의
물론 분위수는 직관적으로 이해가 되는 값입니다. 어떠한 확률변수가 취할 수 있는 값들의 확률을 누적했을 때, n%에서 그 값이 몇이냐는 것이죠. 수학적인 정의를 조금만 더 살펴봅시다.
여기서 대문자 F는 누적확률분포(CDF)입니다. 쉽게 말해서 누적확률분포의 역함수라는거죠.
3) 분위 손실함수(Quantile loss)
이제 분위손실함수를 최소화하는 값을 찾아 분위수회귀를 실행할 수 있습니다. 분위손실함수(quantile loss)를 설명하는 다양한 글들과 리소스가 있지만 수학멍청이인 저는 다음의 설명이 가장 와닿았습니다. 손실함수를 다음과 같이 정의합시다. 다른 글들에서는 indicator function을 이용해 작성한 글들이 많지만 저는 이렇게 나눠쓰는게 훨씬 눈에 더 잘 들어오더라구요.
이 함수를 최소화하면 quantile t를 찾을 수 있다는 건데요. 이해를 돕기 위해 X가 [0,1]에서 정의된 uniform distribution이라고 해 봅시다. 그리고 t = 0.25인 분위수를 찾는다고 해 봅시다. 이 때 이 손실함수는 m = 0.25에서 최소화됩니다. 왜 그럴까요? Uniform distribution이니 t 기준으로 좌측에 있는 값들의 크기와 우측에 있는 값의 크기(혹은 질량)가 정확히 1:3이 될 것입니다.
이 때 수식을 다시 써 보면 다음과 같은 모양이겠죠.
그런데 X-m이 양수인 방향, 곧 질량이 세배였던 쪽에 붙은 실수값 0.25는 그 반대방향(질량이 양수쪽의 1/3이었던)의 질량의 1/3이 되었습니다. 곧 질량의 크기의 밸런스가 맞춰졌죠. 그런데 이 수식은 어디선가 많이 보던 수식입니다. 바로 Mean Absolute Error(MAE), 평균절대오차이죠. 따라서 Quantile loss를 Weighted MAE로 부르기도 합니다. MAE에 각 t값에 적절한 weight를 부여하게 된다는 거죠. 결국에는 이를 최소화하는 m값을 찾는 문제가 됩니다. (+t가 0.5라면 상하 수식이 동일해지고 이는 중위수(median)을 찾는 것과 같아지겠죠?)
이 값이 최소화되려면 어떻게 되어야 할까요? 우리가 지금 하고자 하는 건 t 분위수인 m을 찾는 것입니다. 방금 weight를 수식에 부여해 줌으로써 원래는 1:3이었던 질량의 비율이 1:1로 밸런스가 맞춰졌습니다. 이 상황에서 loss가 생기지 않으려면 위 수식을 최소화 하는 값이 중위수여야 합니다(중위수의 정의 자체가 1:1로 분포를 나눠주는 값이니까요). 결국 m은 0.25여야합니다. 물론 X ~ Unif(0,1)인 케이스에서 생각해 본 것이지만, 다른 분포에서도 이러한 로직이 동일하게 적용된다는 것을 확인할 수 있습니다.
결론적으로 이 손실함수를 최소화함으로써 우리는 원래의 분포가 무엇이던간에 q = t인 값을 찾아낼 수 있습니다.
4) quantreg 패키지
R의 quantreg 패키지를 이용하면 분위수회귀를 손쉽게 구현할 수 있습니다.
다음과 같은 샘플 데이터가 있다고 합시다.
quantreg::rq 함수를 이용하면 분위수 회귀를 실시합니다. tau = 인자를 통해 nth percentile을 출력할 것인지 결정할 수 있습니다. 아무것도 입력하지 않으면 0.5, 곧 중위수 회귀입니다.
분석 결과를 플롯에 표시해봅시다. 빨간색은 OLS를 이용한 회귀선, 파란색은 중위수 회귀선입니다.
ggplot2의 geom_quantile을 이용하면 rq 결과를 플로팅할 수 있습니다. geom_quantile 자체에서 가져와 사용하는 것 자체가 quantreg 패키지의 함수들입니다.
rqss를 method 인자로 넣으면 additive quantile regression smoothing 방법을 실행합니다.
출처
medium.com/analytics-vidhya/prediction-intervals-in-forecasting-quantile-loss-function-18f72501586f stats.stackexchange.com/questions/251600/quantile-regression-loss-function
분위수 손실(Quantile loss)에 대한 직관적 이해 – 숨은원리 데이터사이언스: R로 하는 데이터 사이
분위수 손실(Quantile loss)에 대한 직관적 이해
ds.sumeun.org
Quantile regression: Loss function
I am trying to understand the quantile regression, but one thing that makes me suffer is the choice of the loss function. $\rho_\tau(u) = u(\tau-1_{\{u<0\}})$ I know that the minimum of the
stats.stackexchange.com
'수학 및 통계학 > 회귀분석' 카테고리의 다른 글
(PRA) 회귀분석 1. 데이터 분석의 전반적 컨셉 (0) | 2021.03.22 |
---|---|
(토막글 및 잡설) 선형회귀에서 '선형'의 의미 (0) | 2020.11.20 |