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.sales 및 sh.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 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] REPLACE - 문자열 대체 (0) | 2023.08.16 |
---|---|
[오라클 레퍼런스 함수] REMAINDER - 나누기 후 나머지 반환 (0) | 2023.08.16 |
[오라클 레퍼런스 함수] REGEXP_SUBSTR - 정규 표현식 패턴을 사용하여 부분 문자열 추출 (0) | 2023.08.16 |
[오라클 레퍼런스 함수] REGEXP_REPLACE - 정규 표현식 패턴 검색 후 문자열 대체 (0) | 2023.08.15 |
[오라클 레퍼런스 함수] REGEXP_INSTR - 정규 표현식(regular expression)을 사용하여 부분 문자열 위치 반환 (0) | 2023.08.15 |
댓글