基于BigQuery ML和AutoML的时间序列预测实战
本文是Google Cloud Platform机器学习实战项目中的时间序列预测部分,重点介绍如何使用BigQuery ML和AutoML构建股票市场预测模型。
项目概述
本项目旨在利用历史股票市场数据,构建能够预测股票价格走势的机器学习模型。我们将采用两种不同的技术路线:
- 使用BigQuery ML直接在BigQuery中构建和训练模型
- 使用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提供了更高级的自动化机器学习能力,可以自动尝试多种模型架构和超参数组合。
实施步骤
- 创建数据集:在Vertex AI控制台中创建新的数据集
- 导入数据:从BigQuery导入eps_percent_change_sp500表
- 训练模型:
- 设置目标为分类任务
- 选择direction作为目标列
- 选择与BQML相同的特征列
- 设置训练预算为1节点小时
- 模型评估:
- 查看各种评估指标
- 分析特征重要性
- 查看混淆矩阵
- 模型部署:
- 部署到端点进行预测
AutoML优势
相比BQML,AutoML具有以下优势:
- 自动特征工程
- 自动模型选择和调参
- 支持更复杂的模型架构
- 提供更详细的模型解释
总结
本文详细介绍了在Google Cloud Platform上使用BigQuery ML和AutoML构建时间序列预测模型的完整流程。通过这个实战项目,我们学习了:
- 如何使用SQL语法直接在BigQuery中创建和训练机器学习模型
- 如何评估分类和回归模型的性能
- 如何使用AutoML自动化机器学习流程
- 两种技术路线的对比和选择考量
对于需要快速原型开发的项目,BQML提供了简单高效的解决方案;而对于追求最佳性能的场景,AutoML则能提供更强大的预测能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考