FinGPT_Forecaster-基于AI的股票预测工具


这是AI4Finance - Foundation在GitHub上的FinGPT项目中的FinGPT_Forecaster部分,主要提供了一个基于AI的股票预测工具,以下是详细总结:

项目概述

  • FinGPT - Forecaster功能:以过去几周与指定公司相关的市场新闻及可选的基本财务信息为输入,输出公司的积极发展和潜在问题,进而预测下周股价走势并给出分析总结。
  • 训练基础:在Llama - 2 - 7b - chat - hf模型上使用LoRA方法,基于过去一年的道琼斯30指数(DOW30)市场数据进行微调,且在其他股票代码上也展现出良好的泛化能力。
  • 项目定位:作为一个易于部署的初级机器人顾问,是向目标迈进的一个里程碑。

演示与使用

  • 演示地址:可在https://huggingface.co/spaces/FinGPT/FinGPT - Forecaster体验演示。
  • 输入要求:需输入股票代码(推荐道琼斯30成分股中的公司,如AAPL、MSFT、NVDA等)、预测日期(格式为yyyy - mm - dd)、获取市场新闻的过去周数(1到4之间选择)以及是否使用最新基本财务信息。
  • 输出示例:例如输入AAPL相关信息后,会输出如积极发展(如苹果新M3芯片技术在新Mac产品中的应用)、潜在问题等内容,以及对下周股价走势的预测与分析。但需注意演示中随机选择新闻可能导致结果有偏差,详细和定制化使用可参考项目。

部署方法

  • 模型获取:已在HuggingFace上发布基于2022 - 12 - 30至2023 - 9 - 1的DOW30市场数据训练的FinGPT - Forecaster模型(fingpt - forecaster_dow30_llama2 - 7b_lora)。
  • 环境准备:多数关键依赖在requirements.txt中,使用前需执行pip install -r requirements.txt
  • 模型加载与使用
    • 参考demo.ipynb中的部署和评估脚本,先加载模型,示例代码如下:
from datasets import load_dataset
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
import torch

base_model = AutoModelForCausalLM.from_pretrained(
   'meta-llama/Llama-2-7b-chat-hf',
    trust_remote_code=True,
    device_map="auto",
    torch_dtype=torch.float16,   # 若有足够显存可省略
)
tokenizer = AutoTokenizer.from_pretrained('meta-llama/Llama-2-7b-chat-hf')

model = PeftModel.from_pretrained(base_model, 'FinGPT/fingpt-forecaster_dow30_llama2-7b_lora')
model = model.eval()
- 准备好新闻和股价走势等信息组成的提示(prompt),格式如下(使用llama格式),然后生成预测结果:
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"

prompt = B_INST + B_SYS + {SYSTEM_PROMPT} + E_SYS + {YOUR_PROMPT} + E_INST
inputs = tokenizer(
    prompt, return_tensors='pt'
)
inputs = {key: value.to(model.device) for key, value in inputs.items()}

res = model.generate(
    **inputs, max_length=4096, do_sample=True,
    eos_token_id=tokenizer.eos_token_id,
    use_cache=True
)
output = tokenizer.decode(res[0], skip_special_tokens=True)
answer = re.sub(r'.*\[/INST\]\s*', '', output, flags=re.DOTALL) # 需导入re模块

数据准备

  • 数据获取源:公司概况、市场新闻、基本财务信息和股价通过yfinance和finnhub获取。
  • 提示格式:提示组织格式如上述代码中的SYSTEM_PROMPT和prompt变量所示,包括公司介绍、股价变动、新闻内容、基本财务信息(可选)等部分,要求模型基于这些信息分析积极发展、潜在问题并预测股价走势。

FinGPT_Forecaster