基于BigQuery ML和AutoML的时间序列预测实战

基于BigQuery ML和AutoML的时间序列预测实战

asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

本文是Google Cloud Platform机器学习实战项目中的时间序列预测部分,重点介绍如何使用BigQuery ML和AutoML构建股票市场预测模型。

项目概述

本项目旨在利用历史股票市场数据,构建能够预测股票价格走势的机器学习模型。我们将采用两种不同的技术路线:

  1. 使用BigQuery ML直接在BigQuery中构建和训练模型
  2. 使用AutoML Tables构建更复杂的预测模型

环境准备

首先需要设置项目环境变量和必要的Python库:

from google.cloud import bigquery

# 设置项目ID和区域
PROJECT = "your-project-id"
REGION = "us-central1"

# 初始化BigQuery客户端
bq = bigquery.Client(project=PROJECT)

数据集准备

我们创建一个名为"stock_market"的数据集,并加载包含股票特征的数据表:

def create_dataset():
    dataset = bigquery.Dataset(bq.dataset("stock_market"))
    try:
        bq.create_dataset(dataset)
        print("数据集创建成功")
    except:
        print("数据集已存在")

def create_features_table():
    try:
        bq.query("""
        CREATE TABLE stock_market.eps_percent_change_sp500
        AS
        SELECT *
        FROM `stock_market.eps_percent_change_sp500`
        """).to_dataframe()
        print("数据表创建成功")
    except Exception as e:
        if "Already Exists" in str(e):
            print("数据表已存在")
        else:
            raise Exception("数据表创建失败")

create_dataset()
create_features_table()

数据探索

查看数据集中的前10条记录,了解数据结构:

SELECT *
FROM stock_market.eps_percent_change_sp500
LIMIT 10

数据集包含以下关键字段:

  • symbol: 股票代码
  • Date: 交易日期
  • Open: 开盘价
  • 各种技术指标(5日、20日、260日的最高价、最低价、均价、标准差等)
  • direction: 价格变动方向(UP/DOWN/STAY)
  • normalized_change: 标准化后的价格变动

使用BigQuery ML构建分类模型

我们将首先构建一个逻辑回归模型,预测股票价格变动方向(direction)。

模型创建

CREATE OR REPLACE MODEL
  stock_market.direction_model 
OPTIONS(
  model_type = "logistic_reg",
  input_label_cols = ["direction"]
) AS
SELECT
  symbol,
  Date,
  Open,
  close_MIN_prior_5_days,
  close_MIN_prior_20_days,
  close_MIN_prior_260_days,
  close_MAX_prior_5_days,
  close_MAX_prior_20_days,
  close_MAX_prior_260_days,
  close_AVG_prior_5_days,
  close_AVG_prior_20_days,
  close_AVG_prior_260_days,
  close_STDDEV_prior_5_days,
  close_STDDEV_prior_20_days,
  close_STDDEV_prior_260_days,
  direction
FROM
  `stock_market.eps_percent_change_sp500`
WHERE
  tomorrow_close IS NOT NULL
  AND ABS(MOD(FARM_FINGERPRINT(symbol), 15)) = 1
  AND ABS(MOD(FARM_FINGERPRINT(symbol), 15 * 100)) <= 15 * 70

这里使用了FARM_FINGERPRINT函数对股票代码进行哈希,确保训练集和验证集的分割是确定性的。

模型评估

评估模型在验证集上的表现:

SELECT *
FROM ML.EVALUATE(MODEL `stock_market.direction_model`,
  (SELECT ... FROM ... WHERE ...))

评估指标包括:

  • precision: 精确率
  • recall: 召回率
  • accuracy: 准确率
  • f1_score: F1分数
  • log_loss: 对数损失
  • roc_auc: ROC曲线下面积

训练过程分析

查看模型训练过程中的指标变化:

SELECT *
FROM ML.TRAINING_INFO(MODEL `stock_market.direction_model`)
ORDER BY iteration

基准对比

与简单基准(总是预测多数类)对比:

SELECT
  direction,
  (COUNT(direction)* 100 / (SELECT COUNT(*) FROM eval_data)) AS percentage
FROM eval_data
GROUP BY direction

使用BigQuery ML构建回归模型

接下来构建线性回归模型,预测标准化后的价格变动(normalized_change)。

模型创建

CREATE OR REPLACE MODEL
  stock_market.price_model 
OPTIONS(
  model_type = "linear_reg",
  input_label_cols = ["normalized_change"]
) AS
SELECT ... FROM ... WHERE ...

模型评估

SELECT *
FROM ML.EVALUATE(MODEL `stock_market.price_model`,
  (SELECT ... FROM ... WHERE ...))

回归模型的评估指标包括:

  • mean_absolute_error: 平均绝对误差
  • mean_squared_error: 均方误差
  • mean_squared_log_error: 均方对数误差
  • median_absolute_error: 中位数绝对误差
  • r2_score: R平方值
  • explained_variance: 解释方差

使用AutoML构建时间序列模型

AutoML提供了更高级的自动化机器学习能力,可以自动尝试多种模型架构和超参数组合。

实施步骤

  1. 创建数据集:在Vertex AI控制台中创建新的数据集
  2. 导入数据:从BigQuery导入eps_percent_change_sp500表
  3. 训练模型
    • 设置目标为分类任务
    • 选择direction作为目标列
    • 选择与BQML相同的特征列
    • 设置训练预算为1节点小时
  4. 模型评估
    • 查看各种评估指标
    • 分析特征重要性
    • 查看混淆矩阵
  5. 模型部署
    • 部署到端点进行预测

AutoML优势

相比BQML,AutoML具有以下优势:

  • 自动特征工程
  • 自动模型选择和调参
  • 支持更复杂的模型架构
  • 提供更详细的模型解释

总结

本文详细介绍了在Google Cloud Platform上使用BigQuery ML和AutoML构建时间序列预测模型的完整流程。通过这个实战项目,我们学习了:

  1. 如何使用SQL语法直接在BigQuery中创建和训练机器学习模型
  2. 如何评估分类和回归模型的性能
  3. 如何使用AutoML自动化机器学习流程
  4. 两种技术路线的对比和选择考量

对于需要快速原型开发的项目,BQML提供了简单高效的解决方案;而对于追求最佳性能的场景,AutoML则能提供更强大的预测能力。

asl-ml-immersion This repos contains notebooks for the Advanced Solutions Lab: ML Immersion asl-ml-immersion 项目地址: https://gitcode.com/gh_mirrors/as/asl-ml-immersion

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁景晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值