首页 > 解决方案 > BigQuery GCP 回归模型问题

问题描述

我正在实验室工作,以在 GCP 上的 BigQuery 中构建回归模型。我几乎完全按照这些步骤操作,但是我运行的最后一个查询失败了。这就是我所做的。

  1. 在 BigQuery 中,我单击“创建数据集”以使用默认选项创建数据集。

  2. 我创建了一个表格并上传了一个 CSV 文件,该文件下载了股票价格的分时数据。该表包括以下列:时间(这只是报价编号)、价格和交易量。我保留了所有默认选项,但我勾选了“自动检测”选项。

  3. 我运行了以下查询并将其保存到数据表中:

    WITH
      raw AS (
      SELECT
        Time,
        Price,
        LAG(Price, 1) OVER(ORDER BY Time) AS min_1_Price,
        LAG(Price, 2) OVER(ORDER BY Time) AS min_2_Price,
        LAG(Price, 3) OVER(ORDER BY Time) AS min_3_Price,
        LAG(Price, 4) OVER(ORDER BY Time) AS min_4_Price
      FROM
        `dataset.table`
      ORDER BY
        Time DESC ),
      raw_plus_trend AS (
      SELECT
        Time,
        Price,
        min_1_Price,
        IF (min_1_Price - min_2_Price > 0, 1, -1) AS min_1_trend,
        IF (min_2_Price - min_3_Price > 0, 1, -1) AS min_2_trend,
        IF (min_3_Price - min_4_Price > 0, 1, -1) AS min_3_trend
      FROM
        raw ),
      ml_data AS (
      SELECT
        Time,
        Price,
        min_1_Price AS day_prev_Price,
        IF (min_1_trend + min_2_trend + min_3_trend > 0, 1, -1) AS trend_3_day
      FROM
        raw_plus_trend )
    SELECT
      *
    FROM
      ml_data
    
  4. 我通过运行此查询创建了一个回归模型:

    CREATE OR REPLACE MODEL `dataset.model`
    OPTIONS
      ( model_type='linear_reg',
        input_label_cols=['Price'],
        data_split_method='seq',
        data_split_eval_fraction=0.3,
        data_split_col='Time') AS
    SELECT
      Time,
      Price,
      day_prev_Price,
      trend_3_day
    FROM
      `dataset.model_data`
    
  5. 这是我失败的地方。我运行了这个查询来做出预测,但它没有产生任何结果。我只是用 130000 作为我的时间,因为我表中的刻度只上升到 124256。

    SELECT
      *
    FROM
      ml.PREDICT(MODEL `dataset.model`,
        (
        SELECT
          *
        FROM
          `dataset.model_data`
        WHERE
          Time >= 130000) )
    

这里出了什么问题?最后,我还尝试了相同的查询,时间 >= 124256,它只产生了一行结果,结果与原始表中的价格相同。

标签: machine-learninggoogle-cloud-platformgoogle-bigqueryregression

解决方案


推荐阅读