首页 > 其他分享 >【人工智能】案例分析和项目实践:使用高斯过程回归预测股票价格

【人工智能】案例分析和项目实践:使用高斯过程回归预测股票价格

时间:2024-08-22 20:51:35浏览次数:6  
标签:高斯 人工智能 模型 train test 股票价格 data model gpr

一、项目背景与目标

股票价格预测是金融领域的热门话题,对于投资者、金融机构及研究者而言具有重要意义。高斯过程回归(Gaussian Process Regression, GPR)作为一种强大的非参数贝叶斯回归方法,能够处理复杂的非线性关系,同时提供预测的不确定性估计,非常适合用于股票价格预测。

项目目标

  1. 利用历史股票价格数据训练高斯过程回归模型。
  2. 对未来股票价格进行预测,并给出预测的不确定性区间。
  3. 评估模型性能,分析预测结果。
二、架构设计

1. 数据收集与预处理

  • 数据源:从证券交易所或财经网站获取历史股票价格数据(如开盘价、收盘价、最高价、最低价、成交量等)。
  • 预处理:数据清洗(去除异常值、缺失值处理)、特征选择(可能仅使用收盘价)、时间序列转换(如滑动窗口法构建特征)。

2. 模型训练

  • 选择高斯过程核函数:常用的有RBF(径向基函数)、Matern等,根据数据特性选择或组合。
  • 超参数优化:使用如网格搜索、随机搜索或贝叶斯优化等方法优化核函数参数。
  • 训练模型:利用预处理后的数据训练GPR模型。

3. 预测与评估

  • 预测:使用训练好的模型对未来时间点的股票价格进行预测。
  • 评估:通过比较预测值与真实值(如使用均方误差MSE、平均绝对误差MAE等指标)评估模型性能。

4. 结果展示与报告

  • 可视化:绘制股票价格走势图、预测结果与真实值的对比图等。
  • 报告:撰写项目报告,包括数据描述、模型设计、实验结果及结论。
三、技术栈与框架

技术栈

  • Python:作为主要编程语言,因其强大的数据处理和机器学习库。
  • Pandas:用于数据清洗和处理。
  • NumPy:用于高效的数学运算。
  • Matplotlib/Seaborn:用于数据可视化。
  • Scikit-learn:虽然Scikit-learn不直接支持高斯过程回归,但可以使用scikit-learn中的预处理和评估工具。
  • GPy 或 scikit-learn.gaussian_process:用于高斯过程回归模型的实现。

框架

  • 无需特定框架,主要依赖Python的科学计算库和机器学习库。
四、示例代码

首先,我们需要安装必要的库:

pip install pandas numpy matplotlib scikit-learn

接下来,让我们开始编写代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.gaussian_process import GaussianProcessRegressor
from sklearn.gaussian_process.kernels import RBF, WhiteKernel, ConstantKernel as C
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import TimeSeriesSplit
from sklearn.externals import joblib  # For saving the model

# 读取数据
def load_data(file_path):
    data = pd.read_csv(file_path)
    return data

# 数据预处理
def preprocess_data(data):
    # 填充缺失值
    data.fillna(method='ffill', inplace=True)
    
    # 创建特征
    data['Date'] = pd.to_datetime(data['Date'])
    data['Date'] = (data['Date'] - data['Date'].min()) / np.timedelta64(1,'D')
    
    # 添加更多特征
    data['Volume'] = data['Volume'].apply(lambda x: np.log(x + 1))
    data['Return'] = data['Close'].pct_change().shift(-1)
    data.dropna(inplace=True)
    
    X = data[['Date', 'Volume', 'Return']].values
    y = data['Close'].values
    
    return X, y

# 训练模型
def train_model(X_train, y_train):
    kernel = C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2)) + WhiteKernel(noise_level=1, noise_level_bounds=(1e-5, 1e1))
    gpr = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9)
    gpr.fit(X_train, y_train)
    return gpr

# 优化模型参数
def optimize_hyperparameters(X_train, y_train):
    param_grid = {
        "kernel": [C(1.0, (1e-3, 1e3)) * RBF(10, (1e-2, 1e2)), 
                   C(1.0, (1e-3, 1e3)) * RBF(5, (1e-2, 1e2)),
                   C(1.0, (1e-3, 1e3)) * RBF(15, (1e-2, 1e2))],
        "alpha": np.logspace(-2, 0, 10),
        "n_restarts_optimizer": [0, 1, 2, 5, 9]
    }
    
    cv = TimeSeriesSplit(n_splits=5)
    grid_search = GridSearchCV(GaussianProcessRegressor(), param_grid, cv=cv, scoring='neg_mean_squared_error')
    grid_search.fit(X_train, y_train)
    
    best_params = grid_search.best_params_
    print("Best Parameters:", best_params)
    
    best_gpr = GaussianProcessRegressor(**best_params)
    best_gpr.fit(X_train, y_train)
    
    return best_gpr

# 评估模型
def evaluate_model(gpr, X_test, y_test):
    y_pred, sigma = gpr.predict(X_test, return_std=True)
    mse = mean_squared_error(y_test, y_pred)
    mae = mean_absolute_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    print(f"Mean Squared Error: {mse}")
    print(f"Mean Absolute Error: {mae}")
    print(f"R^2 Score: {r2}")
    return y_pred

# 滚动窗口预测
def rolling_window_forecast(model, X, y, window_size=10, horizon=5):
    predictions = []
    for i in range(window_size, len(X)-horizon):
        X_train, y_train = X[:i], y[:i]
        model.fit(X_train, y_train)
        y_pred, _ = model.predict(X[i:i+horizon])
        predictions.extend(y_pred)
    
    return np.array(predictions)

# 可视化结果
def plot_results(X_train, y_train, X_test, y_test, y_pred, y_rolling=None):
    plt.figure(figsize=(12, 6))
    plt.scatter(X_train[:, 0], y_train, c='k', label='data')
    plt.plot(X_test[:, 0], y_pred, c='r', label='prediction')
    if y_rolling is not None:
        plt.plot(X_test[window_size:, 0], y_rolling, c='g', linestyle='--', label='rolling prediction')
    plt.plot(X_test[:, 0], y_test, 'b:', label=u'ground truth')
    plt.legend()
    plt.show()

# 保存模型
def save_model(model, filename):
    joblib.dump(model, filename)

# 加载模型
def load_model(filename):
    return joblib.load(filename)

# 主函数
if __name__ == '__main__':
    file_path = 'stock_data.csv'  # 假设这是股票数据文件路径
    data = load_data(file_path)
    X, y = preprocess_data(data)
    
    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
    
    # 参数优化
    gpr = optimize_hyperparameters(X_train, y_train)
    
    # 评估模型
    y_pred = evaluate_model(gpr, X_test, y_test)
    
    # 滚动窗口预测
    window_size = 10
    horizon = 5
    y_rolling = rolling_window_forecast(gpr, X, y, window_size=window_size, horizon=horizon)
    
    # 可视化结果
    plot_results(X_train, y_train, X_test, y_test, y_pred, y_rolling)
    
    # 保存模型
    save_model(gpr, 'gpr_model.pkl')
    
    # 加载模型
    loaded_gpr = load_model('gpr_model.pkl')
    y_pred_loaded, _ = loaded_gpr.predict(X_test, return_std=True)
    print("Prediction using loaded model:")
    evaluate_model(loaded_gpr, X_test, y_test)
五、功能说明
  1. 参数优化:使用GridSearchCV进行超参数优化,这里使用了时间序列交叉验证TimeSeriesSplit,因为它更适合时间序列数据。
  2. 滚动窗口预测:使用滚动窗口方法预测未来的多个时间点。这种方法在实际应用中非常有用,因为它模拟了在实时环境中逐步接收新数据的情况。
  3. 评估指标:除了均方误差(MSE),还增加了平均绝对误差(MAE)作为评估指标。
  4. 特征工程:增加了交易量(经过对数变换)和收益率作为额外的特征。这些特征有助于模型捕捉更多的市场动态。
  5. 多步预测:通过修改rolling_window_forecast函数,使其能够预测未来多个时间点的价格,而不是仅仅预测下一个时间点。
  6. 模型评估:引入了r2_score作为额外的评估指标,这有助于衡量模型的解释能力。
  7. 模型保存与加载:使用joblib库来保存训练好的模型,并能够加载模型进行预测。
六、注意事项
  1. 特征选择:确保选择的特征对预测目标有实际意义。
  2. 模型复杂度:虽然增加特征可以提高模型的预测能力,但过多的特征可能导致过拟合。
  3. 评估指标:不同的评估指标适用于不同的场景,确保选择适合你需求的指标。
  4. 滚动窗口预测:滚动窗口预测能够模拟实际应用中的情况,但在实际部署时需要考虑数据更新的速度和频率。
七、总结

以上代码提供了一个基本的框架来使用高斯过程回归预测股票价格。需要注意的是,股票市场是非常复杂的,单一的模型很难准确预测其未来走势。通常会结合多种模型和技术来进行预测,同时需要大量的历史数据以及市场分析才能得到较为可靠的结果。

如果文章内容对您有所触动,别忘了点赞、关注,收藏!

推荐阅读:

1.【人工智能】项目实践与案例分析:利用机器学习探测外太空中的系外行星

2.【人工智能】利用TensorFlow.js在浏览器中实现一个基本的情感分析系统

3.【人工智能】TensorFlow lite介绍、应用场景以及项目实践:使用TensorFlow Lite进行数字分类

4.【人工智能】使用NLP进行语音到文本的转换和主题的提取项目实践及案例分析一

5.【人工智能】使用NLP进行语音到文本的转换和主题的提取项目实践及案例分析二

标签:高斯,人工智能,模型,train,test,股票价格,data,model,gpr
From: https://blog.csdn.net/weixin_51306394/article/details/141404458

相关文章

  • 零基础学习人工智能—Python—Pytorch学习(七)
    前言本文主要讲神经网络的下半部分。其实就是结合之前学习的全部内容,进行一次神经网络的训练。神经网络下面是使用MNIST数据集进行的手写数字识别的神经网络训练和使用。MNIST数据集,是一个常用的手写数字识别数据集。MNIST数据集包含60,000张28x28像素的灰度训练图像和......
  • Spring Boot 应用案例:打造股票价格自动通知平台
    在本篇博文中,我们将构建一个简单的SpringBoot应用来演示如何创建一个股票价格更新系统,并在股票价格变动时自动通知订阅用户。这个示例将涵盖SpringBoot的核心功能,包括Web模块、数据持久化、消息队列以及简单的用户订阅机制。项目结构和依赖首先,我们需要创建一个新的Spring......
  • 人工智能 | 结对编程助手GithubCopilot
    简介GitHubCopilot是一款AI结对程序员,可帮助您更快、更少地编写代码。它从注释和代码中提取上下文,以立即建议单独的行和整个函数。GitHubCopilot由GitHub、OpenAI和Microsoft开发的生成式AI模型提供支持。它可作为VisualStudioCode、VisualStudio、Neovim和Jet......
  • 电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26
      ......
  • 人工智能基础
    在机器学习中,数据并非通常意义上的数量值,而是对于对象某些性质的描述。被描述的性质叫做属性,属性的取值称为属性值,不同的属性值有序排列得到的向量就是数据,也叫实例。根据输入输出类型的不同,预测问题可分为一下三类。分类问题:输出变量为有限个离散变量,当个数为2时即为最简单的二......
  • 零基础学习人工智能—Python—Pytorch学习(六)
    前言本文主要讲神经网络的上半部分。另外,我发现我前面文章写的有歧义的地方还是挺多,虽然,已经改了一部分,但,可能还有没发现的,大家看的时候尽量多理解着看吧。本着目的是学会使用神经网络的开发,至于数学的部分,就能过就过吧。神经网络先学个例子先结合以前的知识理解一个例子,理......
  • Python为什么是人工智能领域的首选语言?
      Python作为人工智能领域的首选语言之一,其强大功能和丰富的库支持使得它在这一领域得到了广泛应用。Python人工智能框架主要分为机器学习框架、深度学习框架以及自然语言处理(NLP)库等几大类。以下是这些框架的详细介绍:一、机器学习框架1.Scikit-learn  概述:Scik......
  • 交互式智能代理基础模型:迈向通用人工智能的新途径
     人工智能咨询培训老师叶梓转载标明出处传统的AI系统主要集中在收集有用的感官信息上,而新一代的通用AI系统不仅要能够理解环境,还要能够以有意义的方式与之交互。交互式智能代理基础模型代表了开发具有跨任务和数据模态单一神经模型训练能力的通用AI系统的重要一步,这种方法......
  • 人工智能:引领商业创新的未来
    在人工智能的浪潮中,企业如何驾驭这股力量,实现商业的飞跃?本文将带您深入了解人工智能在商业领域的应用,并探讨其对未来工作方式的影响。应用领域:认知自动化、参与与洞察人工智能的应用主要分为三个领域:认知自动化、认知参与和认知洞察。在认知自动化方面,机器学习、机器人流程自......
  • 零基础小白看过来!人工智能到底是学习什么?算法是什么?难不难学?
    #人工智能到底是学什么?#以豆包、ChatGPt、文心一言、通义千问为代表的大模型;以百度、华为、特斯拉、蔚小理为代表的自动驾驶;以讯飞、百度为代表的语音识别技术,以及手机上的人脸识别等等,都依托于人工智能技术。可见人工智能是个广义的学科,涉及基础层、技术层、应用层的技术,......