
分析师:He Bai

做股票分析总卡壳?传统方法抓不住股价的波动规律?模型跑出来准确率低,还不知道问题出在哪? 别慌!咱们这套方案源自真实金融咨询项目——一边用Python融合随机森林(RF)、决策树(DT)、XGBoost、逻辑回归(LR)、投票分类器+LSTM多模型,结合6大技术指标做基础预测;一边用DeepSeek+LangGraph搭AI分析助手,效率直接翻番,最终把Netflix股票涨跌预测准确率做到60.78%!所有代码、数据都经过实际业务校验,新手跟着做也能落地! 一、用DeepSeek+LangGraph分析股票?这才是效率革命!
传统股票分析要手动扒数据、算指标,耗时长还容易错,AI直接帮咱们解决这些麻烦——高效、多维、客观,三个优势直接戳中痛点!
不是随便找俩AI工具凑数,这俩组合在股票分析里是“黄金搭档”——一个善推理,一个善统筹,分工明确效率高:
咱们的AI助手不是花架子,是能落地的实战工具,核心分4个模块,代码文末会开源,新手也能跟着搭:

不用手动下CSV!用yfinance库直接抓Netflix的历史价格、财务指标(市盈率、负债率这些),还能自动洗数据——比如财报里的缺失值,AI会按行业均值补全,不用咱们一个个改。 关键优势:国内能用!yfinance国内访问稳定,要是想抓A股数据,换tushare库也能对接,兼容性拉满。
相关文章

咱们之前手动写函数算MA、RSI,AI助手直接调用TA-Lib库,不仅快,还能避免手写代码出错。比如算30日波动率,一行代码搞定,结果和手动算的完全一致,还能自动存到表格里,后续模型直接用。 创新点:用LangGraph的StateGraph做流程控制,确保“先抓数据→再算指标→指标不对重新算”,不会出现“数据没洗干净就算指标”的低级错误,可靠性拉满。
这步是核心!把清洗好的数据、算好的指标喂给DeepSeek,它会生成结构化分析报告,不是乱糟糟的文字,而是像这样的清晰结论:
- 趋势分析:Netflix股价2021年后跌破200日均线,短期趋势偏弱,但RSI=35(未超卖),暂无反弹信号; - 风险提示:2020年疫情期波动率达12%,需警惕类似黑天鹅事件对模型的影响; - 操作建议:结合逻辑回归模型预测结果(上涨概率58%),建议小仓位试仓,止损设5%。比咱们自己看图表猜趋势靠谱多了,还能避免“主观偏见”。
不用对着代码看输出!搭个Streamlit界面,输入Netflix股票代码(NFLX),点击“开始分析”,股价趋势图、模型准确率、DeepSeek的分析报告全出来,手机也能看,给别人演示也专业。

AI再好用也不是万能的,这三个点一定要记牢,不然容易亏:
数据核心字段很清晰:日期(Date)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、调整后收盘价(Adj Close)、成交量(Volume),覆盖股价分析的全维度。
用Python的pandas加载数据,咱们重命名数据框为nflx_df,方便后续区分其他数据;再用head(5)看前5行,快速确认数据格式对不对——这步能避免后续分析因字段错位翻车。
import pandas as pdimport numpy as np# 加载Netflix股票数据,重命名数据框,避免和其他数据集混淆# 查看前5行数据,确认字段、格式是否正确(实操必做!)nflx_df.head(5)加载后别忘用info()查缺失值和数据类型——咱们这套数据很干净,所有字段无缺失!日期是字符串类型(不用转datetime,后续可视化标注够用),数值字段格式正常,直接进下一步就行。

很多人直接跳过这步建模型,结果越跑越错!咱们先从3个维度分析Netflix股价规律,为后续模型打基础:
咱们选开盘价、最高价、最低价、收盘价、调整后收盘价5个核心字段,用matplotlib画时间序列图——一眼就能看出股价长期走势。
从图里能看明白:2013-2021年Netflix股价一路涨,2021年到峰值后开始落;而且调整后收盘价(紫色虚线)和收盘价几乎重合——说明这10年没拆股等大动作,数据稳定性超棒,不用额外处理!

用“对数收益率”衡量波动(公式:log(调整后收盘价t) - log(调整后收盘价t-1)),这个指标比普通收益率更能反映真实波动,尤其适合股票分析。
图里很明显:大部分时间波动围绕0值转,但2020年疫情初期、2022年公司业绩波动时,出现大的异常值——这说明这些时段股价波动骤增,后续模型得考虑“极端场景”,不然容易预测不准!

相关视频
Python对多行业板块股票数据LSTM多任务学习预测:SMA、RSI
定义“涨”为对数收益率>0,“跌”为≤0,用饼图看涨跌天数占比——能判断股票整体趋势偏不偏。
# 建涨跌标签:1=涨,0=跌(后续模型要用到)nflx_df['up'] = nflx_df['log_return'] > 0# 统计涨跌天数up_days = nflx_df['up'].sum()down_days = len(nflx_df) - up_days# 画饼图,颜色用绿涨红跌,直观!plt.pie([up_days, down_days], labels=['Up Days', 'Down Days'], autopct='%1.1f%%', colors=['green', 'red'])plt.title('Proportion of Up vs Down Days')plt.show()结果出来了:上涨天数占52.3%,下跌47.7%——差距很小,符合成熟公司股票的特点,也说明咱们不能靠“赌涨”,得靠精细特征抓规律!

特征没做好,模型再强也白搭!咱们建“技术指标+滞后特征”的二维特征体系,覆盖“趋势、强弱、量能、波动”,具体这么做:
咱们写个函数calculate_tech_indicators,批量算移动平均线(MA)、RSI、OBV、波动率、动量、MACD——这些都是股票分析的“硬通货”,缺一不可。
def calculate_tech_indicators(input_df): # 复制数据,避免改乱原始数据(实操必做!) df = input_df.copy()下图能看到,MA_5、RSI_14、OBV等指标都成功加进去了,特征维度一下丰富了!

股票价格有时间相关性,咱们加“前5日收盘价”(close_t-1到close_t-5)作为滞后特征;再用Pipeline把“加滞后特征+标准化”串起来——这步能避免数据泄露,实操中特别重要!
def transform(self, X):很多新手用train_test_split随机分数据,这是错的!实际业务中不能用“未来数据”预测“过去”,咱们按时间顺序分:前80%训练,后20%测试。
from sklearn.model_selection import train_test_split# 按时间切分,split_index是80%的位置split_index = int(len(X) * 0.8)X_train = X[:split_index] # 前80%训练X_test = X[split_index:] # 后20%测试# 目标变量也要同步切分,保证和特征对齐y_train = y[-len(X):].reset_index(drop=True)[:split_index]y_test = y[-len(X):].reset_index(drop=True)[split_index:]咱们建6个模型:4个传统机器学习(随机森林、XGBoost、决策树、逻辑回归)+1个投票分类器(融合前4个)+1个LSTM(深度学习),用准确率、精确率、F1等指标比高低。
from sklearn.ensemble import RandomForestClassifierfrom xgboost import XGBClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.linear_model import LogisticRegression咱们写个evaluate_model函数,自动算指标;再以逻辑回归为例,画ROC曲线和混淆矩阵——直观看看模型准不准。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_reportfrom sklearn.metrics import roc_curve, auc, confusion_matrix, ConfusionMatrixDisplay# 自定义评估函数:输出4大指标+分类报告def evaluate_model(model_name, y_true, y_pred):逻辑回归的ROC曲线AUC约0.65——比随机猜测(0.5)高不少,区分能力合格;混淆矩阵显示,模型对“上涨”的预测准确率略高,和之前涨跌天数分布(涨52.3%)一致,很合理!


LSTM擅长抓时间序列依赖,咱们建两层LSTM,加Dropout防过拟合——但结果有点意外。
from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import LSTM, Dense, Dropoutfrom tensorflow.keras import regularizers# 关键:LSTM要3D数据(样本数,时间步长,特征数),咱们设时间步长=5TIME_STEPS = 5把所有模型结果整理成表格,一目了然:
# 转成DataFrame,保留4位小数results_df = pd.DataFrame(model_results).round(4)results_dfName | Accuracy | Precision | Recall | F1 Score | |
|---|---|---|---|---|---|
0 | Random Forest | 0.5985 | 0.5749 | 0.6371 | 0.6044 |
1 | XGBoost | 0.5948 | 0.5858 | 0.5405 | 0.5622 |
2 | Decision Tree | 0.5502 | 0.5359 | 0.4903 | 0.5121 |
3 | Logistic Regression | 0.6078 | 0.5822 | 0.6564 | 0.6171 |
4 | Voting Classifier | 0.5967 | 0.6019 | 0.4788 | 0.5333 |
5 | LSTM | 0.4860 | 0.4719 | 0.5521 | 0.5089 |
结论很明确:逻辑回归最优,准确率60.78%、F1 61.71%;随机森林、XGBoost紧随其后;LSTM表现最差——不是LSTM不行,是股票数据“噪声太多”,得加新闻舆情、行业数据等外部特征,才能发挥它的优势!
做股票预测、搭AI助手时,是不是常遇到这些问题?别担心,咱们有专属支持:


在此对 He Bai 对本文所作的贡献表示诚挚感谢,她在悉尼大学完成了数据科学专业的硕士学位,专注数据科学领域。擅长 Python、机器学习模型 。
He Bai 曾在网易传媒担任用户研究员、在益普索担任 SIA 助理研究员,具备用户研究与数据相关的实践经验,能够将数据科学知识与实际业务场景结合,为研究提供有力支持。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。