분위수 변환(quantile transformation)

1. quantile transformation의 이론적인 설명

 

 

주어진 데이터 $x _{1},x _{2} ,...,x _{n}$의 분포를 그려보니 다루기 힘들거나 마음에 안들어서 분포를 변환할 필요가 있다고 합시다.

 

주어진 데이터 $x _{1},x _{2} ,...,x _{n}$의 분포를 나타내는 누적확률분포함수 $F(x)$를 먼저 구해봅시다.

 

그런데 관측된 값으로는 이것을 구할 수 없으니 경험적 분포함수로 누적확률분포함수를 추정합니다.

 

주어진 데이터 $x _{i}$에 대하여 $F(X) \approx F(x _{i} )$로 추정했다고 합시다.

 

분포함수에 관한 theorem 1에서 "$X$의 누적확률분포함수가 $F(x)$라면 확률변수 $Y=F(X)$는 $U(0,1)$을 따른다라고 했습니다.

 

이것이 무슨 의미를 가지냐면 경험적 분포함수를 이용하여 각 데이터 $x _{i}$에 대하여 추정된 누적확률분포함수 $F(x _{1} ),F(x _{2} ),...,F(x _{n} )$은 $U(0,1)$을 따른다는 것입니다.

 

이제 $x _{1} ,x _{2} ,...,x _{n}$의 분포를 바꾸고자하는 target 분포가 있을 것입니다.

 

원하는 확률분포면 아무거나 상관없지만 보통은 uniform distribution이나 normal distribution으로 바꿉니다.

 

편의상 예를 들어 normal distribution으로 바꾸고 싶다고 합시다.

 

normal distribution은 너무나 특별해서 누적확률분포함수를 기호로 $X \sim N(0,1)$이면 $P(X \leq x)=\phi (x)$으로 표시합니다.

 

이제 분포함수에 관한 theorem 2를 보면 연속확률변수 $Y$가 $U(0,1)$을 따르고 (중간 생략) 그렇다면 연속확률변수 $$X=F ^{-1} (Y)$$는 $F(x)$를 누적확률분포함수(cumulative distribution function)로 가진다.”라고 했습니다.

 

이것이 무슨 의미를 가지는지 생각해보면

 

바꾸고 싶어하는 누적확률분포함수 $F(x)$의 역함수 $F ^{-1} (x)$에 $U(0,1)$을 따르는 값들을 넣어주기만 하면 원하는 확률분포를 가지는 데이터로 바꿀 수 있다는 것을 의미합니다.

 

그러므로 우리의 데이터 $x _{1} ,x _{2} ,...,x _{n}$가 $N(0,1)$을 따르도록 바꾸고 싶다면

 

$x _{1} ,x _{2} ,...,x _{n}$이 $U(0,1)$을 따르도록 추정된 누적확률분포함수(경험적 분포함수)에 넣어서 $$F(x _{1} ),F(x _{2} ),...,F(x _{n} )$$을 구했고 

 

이것을 바꾸기를 원하는 $N(0,1)$의 누적확률분포함수인 $P(X \leq x)=\phi (x)$의 역함수인 $\phi  ^{-1} (x)$에 집어넣기만 한다면

 

, $$\phi  ^{-1} (F(x _{1} )),\phi  ^{-1} (F(x _{2} )),...,\phi  ^{-1} (F(x _{n} ))$$가 바로 $N(0,1)$을 따른다는 것입니다.

 

바로 우리가 가지고 있는 $x _{i}$를 $$y _{i} =\phi  ^{-1} (F(x _{i} ))$$mapping 시키는 작업이 바로 quantile transformation입니다.

 

그런데 왜 quantile이냐? 누적확률분포함수의 역함수, normal의 경우 $\phi  ^{-1} (x)$quantile을 구해주는 quantile function이기 때문입니다.

 

 

2. quantile transformation의 구현

 

이론적인 설명에 따라 직접 원하는 함수의 quantile function을 이용하여 구현할 수 있습니다.

 

scipy에서 여러가지 probability distribution function을 제공합니다.

 

혹은 sklearn에서 quantile transformation 함수를 제공합니다.

 

sklearn.preprocessing.quantile_transform — scikit-learn 1.0.1 documentation

 

sklearn.preprocessing.quantile_transform

Examples using sklearn.preprocessing.quantile_transform: Effect of transforming the targets in regression model Effect of transforming the targets in regression model,

scikit-learn.org

 

TAGS.

Comments