Oracle 下的预测分析
SQL 查询通过 REGR_SLOPE 和 REGR_INTERCEPT 函数基于 EMP 表中员工的入职年份(hiredate 的年份部分)来预测薪资(SAL)。
文章目录
- Oracle 下的预测分析
- SQL 查询的功能
- SQL 查询逻辑分解
- 解释结果
- 应用场景
- SQL 模型的扩展
- 总结
SQL 查询的功能
回归分析模型:使用线性回归(Regression)来分析和预测薪资(SAL)如何随员工入职年份(EXTRACT(YEAR FROM hiredate))变化。
预测薪资:通过回归方程计算预测值。
Predicted_SALARY=SLOPE×YEAR(HIREDATE)+INTERCEPT
SQL 中的实现:
REGR_SLOPE:计算回归模型中 SAL 对入职年份的斜率(每年薪资变化量)。
REGR_INTERCEPT:计算回归模型的截距(在入职年份为 0 时的薪资)。
Predicted_Salary:根据回归模型预测当前员工的薪资。
SELECT empno,
ename,
hiredate,
sal,
REGR_SLOPE(sal, EXTRACT(YEAR FROM hiredate)) OVER () AS slope,
REGR_INTERCEPT(sal, EXTRACT(YEAR FROM hiredate)) OVER () AS intercept,
(REGR_SLOPE(sal, EXTRACT(YEAR FROM hiredate)) OVER () * EXTRACT(YEAR FROM hiredate) +
REGR_INTERCEPT(sal, EXTRACT(YEAR FROM hiredate)) OVER ()) AS predicted_salary
FROM emp
ORDER BY hiredate;
SQL 查询逻辑分解
REGR_SLOPE(sal, EXTRACT(YEAR FROM hiredate)) OVER ():
计算 SAL 对 YEAR(HIREDATE) 的线性回归斜率。
表示每增加 1 年,SAL 的平均变化量。
REGR_INTERCEPT(sal, EXTRACT(YEAR FROM hiredate)) OVER ():
计算回归方程的截距。
表示当入职年份为 0 时的薪资。
Predicted_Salary:
使用回归方程:
Predicted_SALARY=SLOPE×YEAR(HIREDATE)+INTERCEPT
结果按 hiredate 排序:
更直观地查看薪资随时间的变化趋势。
解释结果
SLOPE (斜率):
表示 SAL 每年增加的平均金额(120.50)。
例如,1980 到 1981 年,预测薪资平均增加约 120.50。
INTERCEPT (截距):
表示在回归方程中,YEAR(HIREDATE) 为 0 时的薪资(-239000.50)。
这主要是数学意义上的值,实际不具备业务意义。
Predicted_Salary:
通过回归方程计算出的预测薪资。
例如,SMITH 在 1980 年的预测薪资为:
𝑃𝑅𝐸𝐷𝐼𝐶𝑇𝐸𝐷_𝑆𝐴𝐿𝐴𝑅𝑌=120.50×1980+(−239000.50)=934.50
应用场景
薪资趋势分析: 分析员工薪资随着入职年份的变化趋势,发现薪资政策的变化规律。
预测未来薪资: 使用回归模型预测新入职员工的薪资范围。
例如,假设一个员工在 1990 年入职,根据公式:
PREDICTED_SALARY=120.50×1990+(−239000.50)=2750
检测异常值: 比较实际薪资和预测薪资,找出偏离趋势的员工。例如,如果实际薪资远低于或高于预测薪资,可以进一步分析原因。
SQL 模型的扩展
预测未来特定年份的薪资
预测未来某一年份(如 1995 年)的薪资:
SELECT 1995 AS year,
(REGR_SLOPE(sal, EXTRACT(YEAR FROM hiredate)) OVER () * 1995 +
REGR_INTERCEPT(sal, EXTRACT(YEAR FROM hiredate)) OVER ()) AS predicted_salary
FROM emp
FETCH FIRST 1 ROW ONLY;
按部门分析薪资趋势
按部门编号(DEPTNO)进行分组分析:
SELECT deptno,
REGR_SLOPE(sal, EXTRACT(YEAR FROM hiredate)) OVER (PARTITION BY deptno) AS slope,
REGR_INTERCEPT(sal, EXTRACT(YEAR FROM hiredate)) OVER (PARTITION BY deptno) AS intercept
FROM emp
ORDER BY deptno;
总结
这段 SQL 查询基于线性回归模型,利用 Oracle 的内置回归函数(如 REGR_SLOPE 和 REGR_INTERCEPT),实现了员工薪资的趋势分析和预测功能。通过扩展,可以进一步应用于分组分析、未来薪资预测和异常值检测等场景,为企业的薪资管理和决策提供数据支持。