All thing of the world!

Oracle CORR 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle CORR 설명 : 오라클 함수

WorldSeeker 2021. 3. 31. 09:04

1. 함수의 목적 
   
    Oracle CORR는
인수로 들어온 두 숫자 사이의 상관계수 리턴한다.

   * 상관계수란? 
      데이터 분석에 많이 사용하는 개념으로 두 변수 사이의 상관도를 숫자로 표현한 것이다. 두 변수 X가 변량에 따라 Y도 같이 변한다면 상관도가 있는 것이며, 상관계수가 +이면 양의상관, -이면 음의상관이다.   (자세한 것은 구글링이나 네이버링을 참고)


2. 샘플을 통한 개념 퀵뷰

WEIGHT_CLASS별로 LIST_PRICE컬럼과 MIN_PRICE컬럼과의 상관계수를 구하라.
(OE.PRODUCT_INFORMATION 샘플DB)

SELECT weight_class, CORR(list_price, min_price) "Correlation"
FROM product_information
GROUP BY weight_class
ORDER BY weight_class, "Correlation";

WEIGHT_CLASS Correlation
------------ -----------
1              .999149795
2              .999022941
3              .998484472
4              .999359909
5              .999536087

3. 사용방법  

4. 함수 PARAMETER 설명

[expr1][expr2]
상관분석 대상이 되는 두 변수를 입력하는 곳으로 데이터타입은 숫자형이여야 한다.
문자라도 숫자로 변환이 가능하다면 숫자로 변환되서 입력된다.
첫번째의 데이터타입이 다르다면 가장 높은 우선 순위의 데이터타입으로 내부적으로 변환하고, 리턴 데이터 타입도 역시 내부적으로 변환한 데이터 타입에 맞게 반환한다.

expr1 또는 expr2 둘 중 하나가 null 인 쌍을 제거한 후 (expr1, expr2) 세트에 적용한후, Oracle은 다음과 같은 계산을 수행한다.


COVAR_POP(expr1, expr2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2))

null로 인해 상관계수를 계산할 수 없다면,  null을 반환한다.

* 참고 : CORR는 피어슨상관계수(Pearson's correlation coefficient)를 사용한다. 피어슨상관계수는  인수로 숫자형 표현을 요구한다.  오라클은 이외에도 Spearman's rho상관 계수를 사용한 CORR_S와 Kendall's tau-b 상관계수를 사용한 CORR_K를 지원한다.  

5. 다양한 샘플표현

example1) 다음 예는 회사근무기간과 직원의 직급별 연봉간의 상관관계를 보여준다.
결과 집합은 각 직원에 대해 동일한 상관 관계를 보여준다.


SELECT employee_id, job_id,
TO_CHAR((SYSDATE - hire_date) YEAR TO MONTH ) "Yrs-Mns", salary,
CORR(SYSDATE-hire_date, salary) OVER(PARTITION BY job_id) AS "Correlation"
FROM employees
WHERE department_id in (50, 80)
ORDER BY job_id, employee_id;

EMPLOYEE_ID JOB_ID Yrs-Mns SALARY Correlation
----------- ---------- ------- ---------- -----------
145 SA_MAN +04-09 14000 .912385598
146 SA_MAN +04-06 13500 .912385598
147 SA_MAN +04-04 12000 .912385598
148 SA_MAN +01-08 11000 .912385598
149 SA_MAN +01-05 10500 .912385598
150 SA_REP +04-05 10000 .80436755
151 SA_REP +04-03 9500 .80436755
152 SA_REP +03-10 9000 .80436755
153 SA_REP +03-03 8000 .80436755
154 SA_REP +02-07 7500 .80436755
155 SA_REP +01-07 7000 .80436755
. . .


example2) null이 있고 데이터가 충분하지 않아 상관계수를 계산할 수 없어, null을 반환한다.

select corr(f1, f2)
    from (select 1 f1, 
null f2 from dual
          union all
          select 1 f1, 2 f2 from dual);

CORR(F1,F2)
-----------


example3) null이 포함되어 있지만, 상관계수를 계산할 수있는 충분한 데이터가 있다면 null을 반환하지 않고 계산결과를 보여준다.

select corr(f1, f2)
    from (select 1 f1, 
null f2 from dual
       union all
       select 1 f1, 3 f2 from dual
       union all
       select 2 f1, 5 f2 from dual
       union all
       select 5 f1, 10 f2 from dual);


CORR(F1,F2)
-----------
 .999260081

Comments