본문 바로가기

[오라클 레퍼런스 함수] REGR_ (Linear Regression) Functions - REGR_ (선형 회귀) 함수들

by ㅇㅍㅍ 2023. 8. 16.
[오라클 레퍼런스 함수] REGR_ (Linear Regression) Functions - REGR_ (선형 회귀) 함수들
728x90

 

 

 

REGR_ (Linear Regression) Functions

 

구문

{ REGR_SLOPE 
| REGR_INTERCEPT 
| REGR_COUNT 
| REGR_R2 
| REGR_AVGX
| REGR_AVGY 
| REGR_SXX 
| REGR_SYY 
| REGR_SXY
}
(expr1 , expr2)
[ OVER (analytic_clause) ]

 

참고:

expr의 유효한 형식을 포함한 구문, 의미, 그리고 제한 사항에 대한 정보는 "Analytic Functions"에 대한 내용을 참조하세요.

 

목적

선형 회귀(linear regression) 함수는 숫자 쌍의 집합에 대해 최소제곱 회귀선(ordinary-least-squares regression)을 적합(fit)시킵니다. 이 함수들은 집계 및 분석 함수로 모두 사용할 수 있습니다.

 

참고:

"Aggregate Functions" 및 expr의 유효한 형식에 대한 정보는 "About SQL Expressions"를 참조하십시오.

 

이 함수들은 숫자 데이터 유형 또는 숫자 데이터 유형으로 암시적으로 변환될 수 있는 비숫자 데이터 유형을 인수로 받습니다. 오라클은 가장 높은 숫자 우선순위를 가진 인수를 결정하고, 나머지 인수를 해당 데이터 유형으로 암시적으로 변환한 후 해당 데이터 유형을 반환합니다.

 

참고:

암묵적 변환에 대한 자세한 내용은 표 2-8을 참조하고, 숫자 우선순위에 관한 정보는 "Numeric Precedence"를 참조하십시오.

 

오라클은 함수를 (expr1, expr2) 쌍의 집합에 적용하며, 이때 expr1 또는 expr2가 null인 모든 쌍은 제외됩니다. 오라클은 데이터를 한 번의 패스로 동시에 모든 회귀 함수를 계산합니다.

여기서 expr1은 종속 변수(수식으로 나타낼 때 y 값), expr2는 독립 변수(수식으로 나타낼 때 x 값)의 값으로 해석됩니다.

  • REGR_SLOPE는 선의 기울기를 반환합니다. 반환 값은 숫자 데이터 타입이며 null일 수 있습니다. null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    COVAR_POP(expr1, expr2) / VAR_POP(expr2)


  • REGR_INTERCEPT는 회귀선의 y-절편을 반환합니다. 반환 값은 숫자 데이터 타입이며 null일 수 있습니다. null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)


  • REGR_COUNT는 회귀선을 적합하기 위해 사용된 non-null 숫자 쌍의 개수를 반환하는 정수입니다.

  • REGR_R2는 회귀 분석의 결정 계수(coefficent of determination 또는 R-제곱 또는 적합도 측정)를 반환합니다. 반환 값은 숫자 데이터 타입이며 null일 수 있습니다. VAR_POP(expr1)VAR_POP(expr2)는 null 쌍을 제거한 후에 계산됩니다. 반환 값은 다음과 같습니다:
                         NULL if VAR_POP(expr2)  = 0
    
                            1 if VAR_POP(expr1)  = 0 and 
                                 VAR_POP(expr2) != 0
    
    POWER(CORR(expr1,expr),2) if VAR_POP(expr1)  > 0 and
                                 VAR_POP(expr2  != 0

 

나머지 회귀 함수는 숫자 데이터 타입을 반환하며 null일 수 있습니다:

  • REGR_AVGX는 회귀선의 독립 변수 (expr2)의 평균을 계산합니다. null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    AVG(expr2)


  • REGR_AVGY는 회귀선의 종속 변수 (expr1)의 평균을 계산합니다. null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    AVG(expr1)


REGR_SXY, REGR_SXX, REGR_SYY는 다양한 진단 통계량을 계산하는 데 사용되는 보조 함수입니다.

  • REGR_SXX는 null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    REGR_COUNT(expr1, expr2) * VAR_POP(expr2)


  • REGR_SYY는 null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    REGR_COUNT(expr1, expr2) * VAR_POP(expr1)


  • REGR_SXY는 null인 (expr1, expr2) 쌍을 제거한 후 다음 계산을 수행합니다:
    REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)

다음 예제는 sh.salessh.products 샘플 테이블을 기반으로 합니다.

 

일반 선형 회귀(General Linear Regression) 예제

다음 예제는 다양한 선형 회귀 함수의 분석적 형태를 비교합니다. 이러한 함수의 분석적 형태는 모델에 의해 각 직원별 예측된 급여와 같은 계산에 회귀 통계를 사용하고자 할 때 유용할 수 있습니다. 다음으로 나오는 각각의 선형 회귀 함수에 대한 섹션에서는 이러한 함수의 집계 형태 예제가 포함되어 있습니다.

SELECT job_id, employee_id ID, salary,
REGR_SLOPE(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) intcpt,
REGR_R2(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) rsqr,
REGR_COUNT(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) count,
REGR_AVGX(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) avgx,
REGR_AVGY(SYSDATE-hire_date, salary)
   OVER (PARTITION BY job_id) avgy
   FROM employees
   WHERE department_id in (50, 80)
   ORDER BY job_id, employee_id;

JOB_ID        ID     SALARY SLOPE    INTCPT  RSQR  COUNT       AVGX      AVGY
---------- ----- ---------- ----- --------- ----- ------ ---------- ---------
SA_MAN       145      14000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       146      13500  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       147      12000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       148      11000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       149      10500  .355 -1707.035  .832      5  12200.000  2626.589
SA_REP       150      10000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       151       9500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       152       9000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       153       8000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       154       7500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       155       7000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       156      10000  .257   404.763  .647     29   8396.552  2561.244
. . .

 

REGR_SLOPE 및 REGR_INTERCEPT 예제

다음 예제는 시간 고용 (SYSDATE - hire_date)과 급여를 사용하여 선형 회귀 모델의 기울기와 회귀를 계산합니다. 결과는 job_id로 그룹화되어 hr.employees 샘플 테이블을 사용합니다.

SELECT job_id,
REGR_SLOPE(SYSDATE-hire_date, salary) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary) intercept
   FROM employees
   WHERE department_id in (50,80)
   GROUP BY job_id
   ORDER BY job_id;

JOB_ID     SLOPE    INTERCEPT
---------- ----- ------------
SA_MAN      .355 -1707.030762
SA_REP      .257   404.767151
SH_CLERK    .745   159.015293
ST_CLERK    .904   134.409050
ST_MAN      .479  -570.077291

 

REGR_COUNT 예제

다음 예제는 시간 고용 (SYSDATE - hire_date) 및 급여에 대한 job_id별 count를 계산합니다. 결과는 job_id로 그룹화되어 hr.employees 샘플 테이블을 사용합니다.

SELECT job_id,
REGR_COUNT(SYSDATE-hire_date, salary) count
   FROM employees
   WHERE department_id in (30, 50)
   GROUP BY job_id
   ORDER BY job_id, count;

JOB_ID          COUNT
---------- ----------
PU_CLERK            5
PU_MAN              1
SH_CLERK           20
ST_CLERK           20
ST_MAN              5

 

REGR_R2 예제

다음 예제는 시간 고용 (SYSDATE - hire_date) 및 급여에 대한 선형 회귀의 결정 계수를 계산합니다. 결과는 hr.employees 샘플 테이블을 사용합니다.

SELECT job_id,
REGR_R2(SYSDATE-hire_date, salary) Regr_R2
   FROM employees
   WHERE department_id in (80, 50)
   GROUP by job_id
  ORDER BY job_id, Regr_R2;

JOB_ID        REGR_R2
---------- ----------
SA_MAN      .83244748
SA_REP     .647007156
SH_CLERK   .879799698
ST_CLERK   .742808493
ST_MAN      .69418508

 

REGR_AVGY 및 REGR_AVGX 예제

다음 예제는 시간 고용 (SYSDATE - hire_date) 및 급여에 대한 평균 값을 계산합니다. 결과는 hr.employees 샘플 테이블을 사용하며, job_id로 그룹화됩니다.

SELECT job_id,
REGR_AVGY(SYSDATE-hire_date, salary) avgy,
REGR_AVGX(SYSDATE-hire_date, salary) avgx
   FROM employees
   WHERE department_id in (30,50)
   GROUP BY job_id
   ORDER BY job_id, avgy, avgx;

JOB_ID           AVGY       AVGX
---------- ---------- ----------
PU_CLERK    2950.3778       2780
PU_MAN      4026.5778      11000
SH_CLERK    2773.0778       3215
ST_CLERK    2872.7278       2785
ST_MAN      3140.1778       7280

 

REGR_SXY, REGR_SXX 및 REGR_SYY 예제

다음 예제는 시간 고용 (SYSDATE - hire_date) 및 급여에 대한 선형 회귀의 세 가지 유형의 진단 통계량을 계산합니다. 결과는 hr.employees 샘플 테이블을 사용합니다.

SELECT job_id,
REGR_SXY(SYSDATE-hire_date, salary) regr_sxy,
REGR_SXX(SYSDATE-hire_date, salary) regr_sxx,
REGR_SYY(SYSDATE-hire_date, salary) regr_syy
   FROM employees
   WHERE department_id in (80, 50)
   GROUP BY job_id
   ORDER BY job_id;
 
JOB_ID       REGR_SXY    REGR_SXX   REGR_SYY
---------- ---------- ----------- ----------
SA_MAN        3303500   9300000.0    1409642
SA_REP     16819665.5  65489655.2 6676562.55
SH_CLERK      4248650   5705500.0    3596039
ST_CLERK      3531545   3905500.0 4299084.55
ST_MAN        2180460   4548000.0  1505915.2

 


출처: 오라클 레퍼런스

원문 링크: Oracle REGR_ (Linear Regression) Functions 함수 문서

 

반응형

댓글