当前位置: 首页 > 面试题库 >

在Oracle / SQL中预测时间序列数据

彭烨熠
2023-03-14
问题内容

有没有一种方法可以使用Oracle分析功能为数据集生成时间序列预测?我们如何在SQL / ORACLE中执行外推。

下面是我的需要

我有如下数据集,我想预测/推断明年

Cust_id  Year  Revnue
1        2016  679862
1        2017  705365
1        2018  ?
2        2016  51074
2        2017  50611
2        2018  ?
3        2016  190706
3        2017  90393
3        2018  ?
4        2016  31649
4        2017  19566
4        2018  ?

问题答案:

您可以使用REGR线性回归函数创建简单的预测。

--Ordinary least squares forecast for each customer for the next year.
select
    cust_id,
    max(year) +1 forecast_year,
    -- y = mx+b
    regr_slope(revenue, year)
        * (max(year) + 1)
        + regr_intercept(revenue, year) forecasted_revenue
from customer_data
group by cust_id;

CUST_ID   FORECAST_YEAR   FORECASTED_REVENUE
-------   -------------   ------------------
1                  2018               730868
2                  2018                50148
4                  2018                 7483
3                  2018                -9920

下面是示例架构。或者,您可以使用此SQLFiddle。

create table customer_data
(
    cust_id number,
    year number,
    revenue number
);

insert into customer_data
select 1, 2016, 679862 from dual union all
select 1, 2017, 705365 from dual union all
select 2, 2016, 51074  from dual union all
select 2, 2017, 50611  from dual union all
select 3, 2016, 190706 from dual union all
select 3, 2017, 90393  from dual union all
select 4, 2016, 31649  from dual union all
select 4, 2017, 19566  from dual;

REGR函数处理数字对,它不理解诸如“收入不能低于0”之类的业务规则。如果您希望将预测限制为始终保持在0或之上,则CASE表达式可能会有所帮助:

--Forecasted revenue, with minimum forecast of 0.
select cust_id, forecast_year,
    case when forecasted_revenue < 0 then 0 else forecasted_revenue end forecasted_revenue
from
(
    --Ordinary least squares forecast for each customer for the next year.
    select
        cust_id,
        max(year) +1 forecast_year,
        -- y = mx+b
        regr_slope(revenue, year)
            * (max(year) + 1)
            + regr_intercept(revenue, year) forecasted_revenue
    from customer_data
    group by cust_id
);

CUST_ID   FORECAST_YEAR   FORECASTED_REVENUE
-------   -------------   ------------------
1                  2018               730868
2                  2018                50148
4                  2018                 7483
3                  2018                    0


 类似资料:
  • 我正在阅读Keras中关于使用LSTM进行多元时间序列预测的教程https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/#comment-442845 我已经看完了整个教程,遇到了一个如下的问题- 在本教程中,在步骤“t-1”中,列车和测试拆分有8个功能,即“污染”、“露水”、“温度”、

  • 我目前正在处理一个样本数据,该样本数据要求我在R中对给定的数据集执行时间序列预测。所以我需要每天做预测。我收到以下错误消息。 (x,趋势):二进制运算符的非数字参数 我的数据格式 在项目栏中我有三种类型,在区域栏中有18个区域,每个区域我有三个项目,每个项目我有两年的数据(2016-01-01至2017-01-31),我需要预测下一年的数量栏(2018-01-31) 我正在使用下面的代码 当我运行

  • 问题内容: 我想在假期中获得有关Keras的经验,我想我将从股票数据时间序列预测的教科书示例开始。因此,根据过去48小时的平均价格变化(自上次以来的百分比),我想做的是,预测接下来一小时的平均价格变化是多少。 但是,当根据测试集(甚至训练集)进行验证时,预测序列的振幅会逐渐减小,有时会偏移为始终为正或始终为负,即偏离0%变化,即I认为这种事情是正确的。 我提出了以下最小示例来说明问题: 如您所见,

  • 问题内容: 我正在尝试为我的表创建一个触发器,该触发器根据某个标志设置为“ Y”的时间自动添加发布日期 我没有创建触发器的丰富经验,但到目前为止,这是我所拥有的 更新列时出现此错误 触发器“ USER.ADD_CREATE_DT”无效且重新验证失败 有任何想法吗? 谢谢 问题答案: 使用WHEN子句: 或使用IF: 在这种情况下,WHEN更合适,更有效。

  • 问题内容: 我想到一个与使用pybrain进行时间序列回归相关的问题。我计划在pybrain中使用LSTM层来训练和预测时间序列。 我在下面的链接中找到了示例代码 例如请求:递归神经网络,用于预测序列中的下一个值 在上面的示例中,网络能够在训练后预测序列。但是问题是,网络通过将数据一次性输入到输入层来获取所有顺序数据。例如,如果训练数据每个都有10个特征,那么这10个特征将同时被同时馈送到10个输

  • 我的组织有一个活动,我们有2016年、2017年、2018年的门票销售历史数据。该数据包含按日出售的门票数量,考虑到所有销售期间。 在2019年版的这场活动中,我被要求预测一天的门票销售数量,考虑到所有的销售期,这在某种程度上是为了指导我们度过这段时间,这意味着我们将掌握信息,如果我们高于或低于预期的销售平均水平。 问题是,历史数据以天为单位的销售期大小不同: