企业局域网做网站屏蔽网站建设和管理情况调查表
企业局域网做网站屏蔽,网站建设和管理情况调查表,那里有正规网站开发培训学校,网络服务无法启动AI股票分析师daily_stock_analysis模型训练#xff1a;从零开始保姆级教程
你是不是也想过#xff0c;要是能有个AI助手帮你分析股票就好了#xff1f;每天自动看盘、读新闻、写报告#xff0c;还能准时把分析结果推送到你手机上。听起来像是科幻电影里的情节#xff0c;…AI股票分析师daily_stock_analysis模型训练从零开始保姆级教程你是不是也想过要是能有个AI助手帮你分析股票就好了每天自动看盘、读新闻、写报告还能准时把分析结果推送到你手机上。听起来像是科幻电影里的情节但现在通过一个叫daily_stock_analysis的开源项目这事儿真的能办到。这个项目在GitHub上火了因为它把大模型和股票分析结合得挺巧妙。但你可能不知道除了直接用别人训练好的模型你还可以自己动手从数据准备开始一步步训练一个更懂你投资风格的“专属AI分析师”。今天这篇教程我就带你从零开始完整走一遍daily_stock_analysis背后模型的训练流程。我们不只讲怎么用更要讲清楚它为什么能工作以及如何让它为你工作得更好。整个过程就像搭积木我会把每块积木都讲明白保证你跟着做就能跑起来。1. 训练前准备理解核心与搭建环境在开始敲代码之前我们得先搞清楚要训练什么以及需要准备哪些东西。1.1 这个“AI分析师”到底在分析什么简单来说daily_stock_analysis项目里的AI干的不是预测股价涨跌这种“神仙活儿”。它的核心任务更像一个信息整合与报告生成助手。想象一下一个专业的股票分析师每天的工作他会看K线图技术面、研究公司股东变化筹码面、浏览行业新闻消息面最后综合所有信息写出一份带有观点和操作建议的报告。这个AI模型就是在模拟这个过程。它接收三类输入行情数据比如过去一段时间的价格、成交量、各种技术指标。新闻舆情关于这只股票或相关行业的最新新闻报道。基础信息股票代码、公司名称等。然后它需要输出结构化的分析结论通常包括核心观点用一两句话总结当前状态例如“缩量回踩支撑处于观望区间”。操作建议给出买入、观望或卖出的信号。关键依据列出支持这个建议的几个主要理由例如均线多头排列、乖离率安全。具体点位建议的买入价、止损价和目标价。所以我们的模型训练本质上是在教AI学会如何从一堆原始数据中提炼出符合专业分析师逻辑的、结构化的文本报告。1.2 搭建你的训练工作台我们需要一个能跑Python和机器学习库的环境。这里我推荐两种方式你可以选一个适合自己的。方式一本地环境适合喜欢折腾、调试方便的你如果你的电脑性能还不错尤其是显卡本地环境最灵活。安装Python确保你的电脑上有Python 3.8或更高版本。可以去Python官网下载。创建虚拟环境非常推荐这能避免不同项目的库版本冲突。# 打开你的终端或命令行工具 python -m venv stock_ai_train # 激活环境 # 在Windows上 stock_ai_train\Scripts\activate # 在Mac或Linux上 source stock_ai_train/bin/activate激活后命令行前面会出现(stock_ai_train)的提示。安装核心依赖库我们主要会用到PyTorch深度学习框架、TransformersHugging Face的模型库以及一些数据处理工具。pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 如果你有NVIDIA显卡用这个命令安装CUDA版本以加速 # 或者用CPU版本速度慢但通用 # pip install torch torchvision torchaudio pip install transformers datasets pandas numpy scikit-learn pip install akshare # 用于获取A股数据 pip install yfinance # 用于获取美股数据方式二云GPU平台适合电脑配置一般或想用强大算力的你训练模型尤其是稍大一点的模型有GPU会快很多。你可以使用一些提供GPU算力的云平台比如AutoDL、Google Colab免费但有限制等。这些平台通常已经预装好了基础环境你只需要在它们的Notebook里执行上述pip install命令即可。环境准备好后我们就可以进入最关键的环节——准备训练数据了。2. 数据准备喂养AI分析师的“粮食”模型训练得好不好七八成功劳在数据。对于股票分析模型我们需要两类数据原始数据和标注数据。2.1 获取原始行情与新闻数据原始数据是模型的“原料”。我们可以用一些免费的库来获取。获取股票历史行情与技术指标这里我们用akshare获取A股数据用yfinance获取美股数据作为示例。import akshare as ak import yfinance as yf import pandas as pd from datetime import datetime, timedelta def fetch_stock_data(symbol, marketA): 获取股票历史数据并计算简单技术指标 symbol: 股票代码如 600519A股, AAPL美股 market: A 表示A股 US表示美股 end_date datetime.now().strftime(%Y%m%d) start_date (datetime.now() - timedelta(days365)).strftime(%Y%m%d) # 取最近一年数据 if market A: # 使用akshare注意代码格式 df ak.stock_zh_a_hist(symbolsymbol, perioddaily, start_datestart_date, end_dateend_date, adjustqfq) if df.empty: return None # 重命名列以统一格式 df.rename(columns{日期:date, 开盘:open, 收盘:close, 最高:high, 最低:low, 成交量:volume}, inplaceTrue) df[date] pd.to_datetime(df[date]) elif market US: ticker yf.Ticker(symbol) df ticker.history(startstart_date, endend_date) df.reset_index(inplaceTrue) df.rename(columns{Date:date, Open:open, Close:close, High:high, Low:low, Volume:volume}, inplaceTrue) # 计算简单技术指标5日、10日、20日均线以及乖离率(BIAS) df[ma5] df[close].rolling(window5).mean() df[ma10] df[close].rolling(window10).mean() df[ma20] df[close].rolling(window20).mean() # 乖离率 (收盘价 - N日均线) / N日均线 * 100% df[bias5] (df[close] - df[ma5]) / df[ma5] * 100 # 计算涨跌幅 df[pct_change] df[close].pct_change() * 100 # 删除最初几天因为计算均线而产生的空值行 df df.dropna().reset_index(dropTrue) return df # 示例获取贵州茅台和苹果公司的数据 df_600519 fetch_stock_data(600519, marketA) df_aapl fetch_stock_data(AAPL, marketUS) print(f贵州茅台数据样例共{len(df_600519)}条) print(df_600519[[date, close, ma5, bias5]].tail()) print(\n苹果公司数据样例) print(df_aapl[[date, close, ma5, bias5]].tail())模拟新闻舆情数据实时新闻抓取涉及API对于训练我们可以先使用模拟数据或公开的历史新闻数据集。这里我们创建一个简单的模拟函数根据股价表现生成“正面”、“中性”或“负面”的舆情标签。import random def generate_sentiment_label(pct_change, bias): 一个简单的模拟函数根据价格变化和乖离率生成舆情标签。 在实际应用中这里应该替换为真实的新闻情感分析API结果。 if pct_change 2 and bias 0: return 正面 elif pct_change -2 and bias 0: return 负面 else: return 中性 # 为数据框添加模拟舆情 if df_600519 is not None: df_600519[sentiment] df_600519.apply(lambda row: generate_sentiment_label(row[pct_change], row[bias5]), axis1)2.2 构建训练样本与标注这是最有挑战性的一步。我们需要为每一组数据某只股票在某一天的技术面舆情面人工标注或利用规则/大模型生成一个理想的“分析报告”作为训练目标。方法A规则模板生成快速启动我们可以先定义一些简单的规则将数据转换成固定格式的文本。这虽然不是真正的“智能”但可以作为初版训练数据。def generate_analysis_by_rule(row, symbol_name某股票): 根据技术指标和舆情通过规则生成分析文本。 analysis_parts [] # 1. 判断趋势 if row[ma5] row[ma10] row[ma20]: trend 处于多头排列 elif row[ma5] row[ma10] row[ma20]: trend 处于空头排列 else: trend 均线交织趋势不明 # 2. 判断乖离率位置 if abs(row[bias5]) 2: bias_status 乖离率较小位置相对安全 elif row[bias5] 5: bias_status 乖离率超过5%警戒线提示追高风险 elif row[bias5] -5: bias_status 乖离率较低可能存在超卖反弹机会 else: bias_status 乖离率处于正常波动区间 # 3. 综合舆情 sentiment_map {正面: 舆情偏暖, 负面: 舆情承压, 中性: 舆情中性} # 4. 生成核心结论与建议 (非常简化的逻辑切勿用于真实投资) if trend 处于多头排列 and row[bias5] 2 and row[sentiment] ! 负面: conclusion f{symbol_name}技术面偏强{bias_status}{sentiment_map[row[sentiment]]}。可考虑寻找支撑位关注。 action 观望/逢低关注 elif trend 处于空头排列 or row[sentiment] 负面: conclusion f{symbol_name}{trend}{sentiment_map[row[sentiment]]}需注意风险。 action 保持谨慎 else: conclusion f{symbol_name}{trend}{bias_status}{sentiment_map[row[sentiment]]}。 action 中性观望 analysis_text f【核心观点】{conclusion}\n【操作建议】{action}\n【关键依据】1.{trend}2.{bias_status}3.{sentiment_map[row[sentiment]]}。 return analysis_text # 应用规则生成标注 if df_600519 is not None: df_600519[analysis_text] df_600519.apply(lambda row: generate_analysis_by_rule(row, 贵州茅台), axis1) print(生成的规则分析样例) print(df_600519.iloc[-1][analysis_text])方法B利用大模型辅助标注质量更高要获得更高质量、更像真人分析师写出的报告我们可以用现有的强大模型如GPT-4、Claude或DeepSeek来为我们的历史数据生成分析文本。思路是将我们获取到的行情数据日期、价格、指标、涨跌幅和模拟的舆情摘要组合成一段详细的“情况描述”然后提示大模型“假设你是一名资深股票分析师请根据以下信息撰写一份简短的专业分析报告包含核心观点、操作建议和依据。”这样我们就可以批量生成一批高质量的(数据描述 - 分析报告)配对数据用作训练我们自己小模型的“黄金标准”数据集。这个过程被称为“知识蒸馏”。2.3 整理成模型需要的格式无论是规则生成还是大模型标注我们最终都需要把数据整理成如下格式的列表每个元素是一个字典# 假设我们有一个列表 training_samples training_samples [] for idx, row in df_600519.iterrows(): # 构建输入文本将关键数据用自然语言描述 input_text f日期{row[date].strftime(%Y-%m-%d)}。{row[symbol_name]}收盘价{row[close]}元。 input_text f技术状态5日均线{row[ma5]:.2f}元10日均线{row[ma10]:.2f}元20日均线{row[ma20]:.2f}元。 input_text f当日乖离率{row[bias5]:.2f}%涨跌幅{row[pct_change]:.2f}%。舆情倾向{row[sentiment]}。 # 对应的输出文本分析报告 output_text row[analysis_text] training_samples.append({ input: input_text, output: output_text }) print(f共构建了 {len(training_samples)} 个训练样本。) print(第一个样本) print(输入, training_samples[0][input][:100], ...) print(输出, training_samples[0][output])数据准备好后我们就可以开始“教”模型了。3. 模型选择与训练打造专属分析师我们不需要从零开始设计一个模型架构那样太复杂了。站在巨人的肩膀上我们选择**微调Fine-tuning**一个现有的、擅长文本生成的大语言模型LLM。3.1 选择合适的基座模型对于本地化部署和训练我们需要一个参数量适中、在消费级GPU上能跑起来的模型。这里有几个不错的选择Qwen2.5-7B-Instruct / Qwen2.5-14B-Instruct通义千问的开源版本中文能力强指令跟随性好非常适合我们的任务。DeepSeek-V2-Lite深度求索的开源模型同样以强大的中文能力和经济性著称。Llama-3.2-3B-InstructMeta的最新小模型英文极强中文也不错3B参数在大多数显卡上都能流畅训练。这篇教程我们以Qwen2.5-7B-Instruct为例因为它对中文金融文本的理解可能更有优势。你可以从Hugging Face模型库下载。3.2 使用Transformers库进行微调Hugging Face的transformers库让模型训练变得非常简单。我们采用**指令微调Instruction Tuning**的方式。from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer from datasets import Dataset import torch # 1. 加载模型和分词器 model_name Qwen/Qwen2.5-7B-Instruct # 也可以换成本地路径 tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained(model_name, torch_dtypetorch.bfloat16, # 使用BF16节省显存 device_mapauto, trust_remote_codeTrue) # 设置padding token如果模型没有 if tokenizer.pad_token is None: tokenizer.pad_token tokenizer.eos_token # 2. 将我们的数据转换为模型输入格式 def format_instruction(sample): 将输入输出格式化为模型喜欢的指令格式。 # 使用Qwen的聊天模板 messages [ {role: system, content: 你是一名专业的股票分析师请根据提供的行情和舆情数据生成简洁、专业的分析报告。}, {role: user, content: sample[input]}, {role: assistant, content: sample[output]} ] # 使用tokenizer内置的apply_chat_template方法 text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptFalse) return {text: text} # 假设 training_samples 是我们之前准备好的数据列表 dataset Dataset.from_list(training_samples) dataset dataset.map(format_instruction) # 3. 对数据集进行分词 def tokenize_function(examples): return tokenizer(examples[text], truncationTrue, paddingmax_length, max_length512) tokenized_dataset dataset.map(tokenize_function, batchedTrue, remove_columns[text, input, output]) # 4. 划分训练集和验证集 split_dataset tokenized_dataset.train_test_split(test_size0.1) train_dataset split_dataset[train] eval_dataset split_dataset[test] # 5. 配置训练参数 training_args TrainingArguments( output_dir./qwen_stock_analyst, # 输出目录 evaluation_strategyepoch, # 每个epoch评估一次 save_strategyepoch, learning_rate2e-5, # 学习率微调通常较小 per_device_train_batch_size2, # 根据你的GPU调整7B模型batch_size通常很小 per_device_eval_batch_size2, num_train_epochs3, # 训练轮数 weight_decay0.01, logging_dir./logs, logging_steps10, fp16True, # 使用混合精度训练节省显存加速训练 # bf16True, # 如果你的GPU支持BF16如A100, H100用这个更好 gradient_accumulation_steps4, # 梯度累积模拟更大的batch size warmup_steps100, save_total_limit2, load_best_model_at_endTrue, report_tonone, # 不报告到wandb等平台 ) # 6. 创建Trainer并开始训练 trainer Trainer( modelmodel, argstraining_args, train_datasettrain_dataset, eval_dataseteval_dataset, tokenizertokenizer, ) print(开始训练...) trainer.train() print(训练完成) # 7. 保存微调后的模型 trainer.save_model(./my_finetuned_stock_analyst) tokenizer.save_pretrained(./my_finetuned_stock_analyst)这个过程可能需要几个小时甚至更久取决于你的数据量、模型大小和GPU性能。泡杯茶耐心等待你的AI分析师“学习成长”吧。4. 超参数调优与效果评估训练不是一蹴而就的我们需要看看模型学得怎么样并尝试调整让它学得更好。4.1 评估生成效果训练结束后Trainer会自动在验证集上计算损失loss但损失值低不代表生成的分析报告就一定好。我们更需要人工评估生成文本的质量。# 加载我们刚刚训练好的模型 model_path ./my_finetuned_stock_analyst model AutoModelForCausalLM.from_pretrained(model_path, device_mapauto, trust_remote_codeTrue) tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) # 准备一条新的、模型没见过的数据输入 test_input 日期2024-01-15。宁德时代收盘价180.5元。技术状态5日均线178.2元10日均线175.8元20日均线172.0元。当日乖离率1.3%涨跌幅2.5%。舆情倾向正面。 # 构建对话格式 messages [ {role: system, content: 你是一名专业的股票分析师请根据提供的行情和舆情数据生成简洁、专业的分析报告。}, {role: user, content: test_input} ] text tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) # 生成分析报告 inputs tokenizer(text, return_tensorspt).to(model.device) outputs model.generate(**inputs, max_new_tokens256, # 控制生成长度 temperature0.7, # 控制随机性越低越确定 do_sampleTrue, top_p0.9) generated_text tokenizer.decode(outputs[0], skip_special_tokensTrue) # 提取助手回复的部分简单处理实际可用更精准的解析 print(模型生成的分析报告) # 这里生成的文本包含整个对话历史我们需要截取出助手部分。 # 一种简单的方法是查找“assistant”标签后的内容具体取决于你的模板。 print(generated_text.split(assistant\n)[-1] if assistant\n in generated_text else generated_text)你需要检查生成的内容是否相关准确分析是否基于了输入的数据结构清晰是否有核心观点、建议和依据语言专业读起来像不像分析师的口吻逻辑合理建议是否与技术指标和舆情自洽虽然我们不强求预测准确4.2 关键超参数调优如果效果不理想可以回头调整训练时的“旋钮”学习率Learning Rate2e-5是微调的常用起点。如果模型“学不动”损失下降很慢可以尝试调到3e-5或5e-5。如果模型“学飞了”损失震荡或爆炸可以降到1e-5。训练轮数Epochs3轮是个保守的起点。如果数据量少几千条可以增加到5-10轮。要小心过拟合模型只记住了训练数据不会泛化到新数据。观察验证集损失如果训练集损失持续下降但验证集损失开始上升就是过拟合了需要早停。批次大小Batch Size在GPU显存允许的情况下越大越稳定。如果显存不够就用gradient_accumulation_steps来模拟大批次。提示模板Prompt Template系统指令systemmessage和用户问题的表述方式对生成效果影响巨大。多尝试几种不同的指令比如“你是一个保守的价值投资者分析师”和“你是一个关注短期技术面的交易员分析师”生成的报告风格会不同。调参是一个需要耐心和实验的过程有点像烹饪时调整火候和调料。5. 模型部署与集成训练出一个满意的模型后最后一步就是把它用起来集成到daily_stock_analysis这样的系统中。5.1 将模型封装成分析函数我们需要编写一个函数它接收股票数据调用我们训练好的模型返回分析结果。class MyStockAnalyst: def __init__(self, model_path./my_finetuned_stock_analyst): self.tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) self.model AutoModelForCausalLM.from_pretrained(model_path, device_mapauto, torch_dtypetorch.bfloat16, trust_remote_codeTrue) self.system_prompt 你是一名专业的股票分析师请根据提供的行情和舆情数据生成简洁、专业的分析报告。 def analyze(self, stock_data_dict): stock_data_dict: 一个字典包含预处理好的数据字段。 例如{date:2024-01-15, symbol:300750, name:宁德时代, close:180.5, ...} # 构建输入文本与训练时格式一致 input_text f日期{stock_data_dict[date]}。{stock_data_dict[name]}收盘价{stock_data_dict[close]}元。 input_text f技术状态5日均线{stock_data_dict.get(ma5, 0):.2f}元10日均线{stock_data_dict.get(ma10, 0):.2f}元20日均线{stock_data_dict.get(ma20, 0):.2f}元。 input_text f当日乖离率{stock_data_dict.get(bias5, 0):.2f}%涨跌幅{stock_data_dict.get(pct_change, 0):.2f}%。舆情倾向{stock_data_dict.get(sentiment, 中性)}。 messages [ {role: system, content: self.system_prompt}, {role: user, content: input_text} ] text self.tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) inputs self.tokenizer(text, return_tensorspt).to(self.model.device) with torch.no_grad(): outputs self.model.generate(**inputs, max_new_tokens300, temperature0.7, do_sampleTrue, top_p0.9) full_response self.tokenizer.decode(outputs[0], skip_special_tokensTrue) # 解析出助手的回复这里需要根据你的实际模板调整解析逻辑 # 假设模板最后是 “assistant\n” if assistant\n in full_response: analysis_result full_response.split(assistant\n)[-1].strip() else: analysis_result full_response.split(assistant)[-1].strip() return analysis_result # 使用示例 analyst MyStockAnalyst() sample_data { date: 2024-01-15, symbol: 300750, name: 宁德时代, close: 180.5, ma5: 178.2, ma10: 175.8, ma20: 172.0, bias5: 1.3, pct_change: 2.5, sentiment: 正面 } result analyst.analyze(sample_data) print(生成的报告) print(result)5.2 替换原项目中的分析模块daily_stock_analysis项目的核心分析逻辑在analyzer.py之类的文件里。你需要找到其中调用大模型API如Gemini、OpenAI的部分将其替换为调用你自己的MyStockAnalyst.analyze()函数。这样做的好处是完全本地化无需网络无需API密钥数据隐私有保障。定制化模型是根据你的数据或你认可的标注风格训练的分析结论可能更符合你的偏好。零持续成本一次训练完成后推理几乎不产生额外费用。6. 总结与展望走完这一整套流程你应该已经拥有了一个自己训练出来的、可以本地运行的AI股票分析模型。我们从理解任务开始经历了数据收集与标注、模型选择与微调、效果评估与调参最后完成部署集成。回顾一下最花时间的部分往往是数据准备和调参。模型训练本身在现有工具的帮助下反而像是按下一个按钮。整个过程的魅力在于你是在亲手塑造一个AI的“思维方式”让它用你提供的数据和规则生成你认为有价值的分析。当然这个教程只是一个起点。要让它真正变得实用和强大还有很长的路可以走。比如你可以收集更长时间跨度和更多股票的数据可以引入更复杂的财务指标和宏观数据可以尝试用更精细的提示工程Prompt Engineering或检索增强生成RAG技术来提升分析报告的深度和时效性。最重要的是始终记住这个工具是辅助你进行信息处理和初步筛选的而不是代替你做出投资决策。把它当作一个不知疲倦、能快速阅读大量数据的实习生最终的判断永远应该来自于你自己的深入研究和理性思考。希望这篇教程能帮你打开AI金融应用的一扇门。动手试试看也许你的“专属分析师”能给你带来不一样的视角。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。