本项目报告、代码和数据资料已分享至会员群

加入会员群

在数字化转型浪潮下,如何通过数据挖掘与机器学习技术从历史交易数据中提取有效信息,为投资决策提供科学支撑,已成为金融领域的重要研究方向。

本项目报告、代码和数据资料

下载资料(17页)

可口可乐作为全球软饮料行业的龙头企业,其股票交易数据具有时间跨度长、市场覆盖广、数据质量高的特点,是开展金融时间序列分析的优质样本。
本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。阅读原文进群,可与800+行业人士交流成长;还提供人工答疑,拆解核心原理、代码逻辑与业务适配思路,帮大家既懂怎么做,也懂为什么这么做;遇代码运行问题,更能享24小时调试支持。
本专题围绕可口可乐股票交易数据展开系统分析,核心目标是通过多维度数据挖掘与多模型建模,揭示股票价格波动规律、识别交易模式、量化特征影响权重并实现精准的短期价格预测。文章首先梳理了股票分析的业务背景与技术发展脉络,阐明多模型融合分析在金融决策中的必要性;随后依次展开数据获取与预处理、统计特征分析、可视化呈现、多模型建模与对比验证等工作;最终形成兼具理论参考与实践价值的分析结论,为投资者决策、风险管理及投资组合优化提供技术支撑。

项目文件目录截图

一、数据概述与预处理

1.1 数据获取

在金融数据分析实践中,数据的可靠性直接决定分析结果的价值。本项目采用专业金融数据获取方式,从权威公开数据源采集可口可乐1962年至2025年的股票交易数据,该数据源经过严格的数据校验与整理,能确保数据的准确性与完整性。选取该数据源的核心原因在于其覆盖时间跨度长,可完整反映不同经济周期下股票的表现特征,为长期趋势分析与模式识别提供充足的数据支撑。
关键源码(变量名与语法优化后):

数据介绍:

  • 数据规模:时间跨度从1962年至2025年,按日采集交易数据,包含数千条记录,可完整覆盖多个经济周期。
  • 核心字段:包含日期(date)、开盘价(open)、最高价(high)、最低价(low)、收盘价(close)、调整后收盘价(adj_close)、交易量(volume)7个关键维度,全面涵盖股票交易的核心信息。
  • 数据质量:初步核查显示无缺失值与重复值,数据完整性与一致性良好,为后续分析奠定了可靠基础。

1.2 相关Python包及说明

  • pandas:用于数据读取、清洗、转换等处理操作,是数据分析的核心工具。
  • numpy:提供数值计算支持,高效处理数组、矩阵等数据结构。
  • scipy.stats.pearsonr:计算皮尔逊相关系数,量化变量间线性关联程度。
  • matplotlib.pyplot:基础可视化工具,绘制折线图、散点图等图表。
  • seaborn:基于matplotlib的高级可视化库,生成更美观的热力图等可视化结果。
  • sklearn.preprocessing:提供归一化(MinMaxScaler)、标准化(StandardScaler)等数据预处理功能。
  • sklearn.cluster.KMeans:无监督聚类算法,用于交易模式分类。
  • tensorflow/keras:深度学习框架,构建LSTM神经网络模型。
  • sklearn.model_selection.train_test_split:划分训练集与测试集,支持模型验证。
  • sklearn.metrics:提供均方误差(mean_squared_error)等模型评估指标。
  • sklearn.ensemble:包含随机森林回归(RandomForestRegressor)、梯度提升回归(GradientBoostingRegressor)等集成学习模型。
  • 其他回归模型:LinearRegression(线性回归)、DecisionTreeRegressor(决策树回归)、KNeighborsRegressor(最近邻回归)、SVR(支持向量回归),用于多模型对比验证。

1.3 数据预处理

数据预处理是保障建模效果的关键环节,本项目针对股票数据的特性,开展了三步核心预处理工作:

1.3.1 缺失值检查

目标:确认数据集中是否存在缺失值,避免缺失数据对分析结果产生偏差。
关键源码(变量名与语法优化后):

预处理结果:数据集的每一列均没有缺失值,无需进行缺失值填充处理。

1.3.2 重复值检查

目标:剔除重复数据,保证数据的唯一性与准确性。
关键源码(变量名与语法优化后):

# 检查数据集重复行数量
duplicate_count = stock_data.duplicated().sum()
print(f"重复行数量:{duplicate_count}")

预处理结果:发现整个数据集均没有重复的行,无需进行重复值删除处理。

1.3.3 归一化处理

目标:将数据压缩至0-1区间,消除不同字段量级差异,适配机器学习模型的训练需求。
关键源码(变量名与语法优化后):

预处理结果:每列数据的分布范围被压缩到0和1之间,并保留了数据的原始分布特征,可直接用于后续建模。

二、统计分析与可视化

2.1 相关性分析(皮尔逊系数)

分析目标:探究收盘价(close)与交易量(volume)之间的线性关联程度,为理解价格与交易活跃度的关系提供依据。
关键源码(变量名与语法优化后):

# 导入相关性分析库
from scipy.stats import pearsonr
# 计算收盘价与交易量的皮尔逊相关系数及P值
corr_coef, p_val = pearsonr(stock_data['close'], stock_data['volume'])
print(f'皮尔逊相关系数:{corr_coef}')
print(f'P值:{p_val}')

分析结论:皮尔逊相关系数为0.47,介于0-0.5之间,表明收盘价与交易量存在中等强度的正线性相关关系;P值趋近于0,远小于0.05的显著性水平,说明该相关关系在统计上具有高度显著性,并非偶然形成。这一结果符合金融市场基本规律——价格波动往往伴随交易活跃度的变化。

2.2 月度交易活跃度分析

分析目标:统计1962年到2025年每个月份的平均单日交易股数,挖掘交易活跃度的季节性特征。
关键源码(变量名与语法优化后):

分析结论:3月和9月的平均单日交易股数最高,显著高于其他月份,表明这两个月份市场交易最为活跃,可能与季度末业绩总结、市场促销活动或特定行业周期因素有关;8月的平均单日交易股数最低,可能受暑期假期、市场流动性下降或季节性需求疲软等因素影响;多数月份的平均单日交易股数集中在880万至980万之间,显示全年大部分时间交易活跃度相对稳定。

2.3 年度成交量与价格趋势分析

2.3.1 年度成交量总和分析

分析目标:统计1962年到2025年按年份的成交量总和,观察长期成交量变化趋势。
关键源码(变量名与语法优化后):

分析结论:不同年份之间的成交量有较大的波动,早期1962-1966年成交量相对较低且数值接近;2021-2024年成交量明显较高,可能与市场发展、投资者关注度变化、宏观经济环境等因素相关;2025年成交量相比前几年有明显下降,或许暗示市场出现了不利于交易的因素。

2.3.2 年度价格指标分析

分析目标:按年份统计开盘价、最高价、最低价和收盘价的平均值,观察长期价格变化趋势。
关键源码(变量名与语法优化后):

# 按年份计算价格指标平均值
yearly_price = stock_data.groupby('year')[['open', 'high', 'low', 'close']].mean().reset_index()
print(yearly_price.head())

分析结论:随着年份的推移,可口可乐股票的开盘价、最高价、最低价和收盘价整体呈现上升趋势,反映出可口可乐公司长期经营向好,市场价值不断增长,公司盈利能力、市场地位等方面可能持续提升。

2.4 数据可视化展示

2.4.1 月度交易股数折线图

可视化目标:直观展示平均单日交易股数按月分布的波动特征。
关键源码(变量名与语法优化后):

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 绘制折线图
plt.plot(monthly_avg_volume['month'], monthly_avg_volume['按月平均单日交易股数'], color='deepskyblue')
plt.xlabel('月份')
plt.ylabel('平均交易股数', rotation=0, labelpad=30)
plt.title('按月平均单日交易股数')
plt.show()

可视化展示:

分析结论:除3月、9月的高峰和8月的低谷外,其他月份的平均交易股数呈现一定波动。1月至2月呈上升趋势,3月后逐渐下降,4月至6月持续走低,7月进一步下降,8月触底后9月大幅回升,随后再次波动变化。这表明市场活跃度受多种因素影响呈现周期性波动。

2.4.2 特征相关性热力图

可视化目标:展示各特征间的相关系数,明确价格指标与交易量的关联强度。
关键源码(变量名与语法优化后):

# 计算数值字段相关性矩阵
corr_matrix = stock_data.drop(['date', 'month', 'year', 'day'], axis=1).corr()
# 绘制热力图
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap='coolwarm', cbar_kws={'label': '相关系数'})
plt.yticks(rotation=0)
plt.title('数据特征相关性热力图')
plt.xlabel('特征')
plt.ylabel('特征', rotation=0)
plt.show()

可视化展示:

分析结论:价格指标间强正相关——开盘价、最高价、最低价、收盘价彼此间相关系数均为1.00,调整后收盘价与它们的相关系数为0.97,反映交易中价格体系的紧密联动性;交易量与各价格指标的相关系数介于0.44-0.48之间,属于弱相关,说明价格变化对交易量的直接影响不显著,二者关联不紧密。

2.4.3 年度价格趋势图

可视化目标:展示1962年至2025年可口可乐股票价格的长期变化趋势。
关键源码(变量名与语法优化后):

可视化展示:

分析结论:1960-2020年左右股价整体呈上升趋势,1990年前增长平缓,之后快速攀升;开盘价与收盘价走势相近,股价波动相对稳定;在价格上升尤其是快速上升阶段,最高价与最低价差距增大,股价波动加剧。

2.4.4 年度成交量总和柱状图

可视化目标:展示1962年至2025年可口可乐股票成交量的长期变化趋势。
关键源码(变量名与语法优化后):

可视化展示:

分析结论:从1960年到2025年左右,成交量总体呈上升趋势,早期年份成交量较低且增长缓慢,中间部分年份开始逐步攀升并出现明显增长态势,部分年份达到较高峰值,反映市场对可口可乐股票的关注度和交易活跃度不断提升;2025年成交量相较之前有明显回落,或暗示市场情况有所变化。


三、多模型建模与分析

3.1 交易模式识别(KMeans聚类)

建模目标:基于交易量和价格波动范围(最高价-最低价)对可口可乐股票的交易模式进行分类,探索数据中潜在的交易模式类别,理解市场交易行为的多样性。
关键源码(变量名与语法优化后,省略部分重复逻辑代码):

可视化展示:

建模结论:将交易模式分为三类:低交易量/低价格波动类(集中在低交易量、低价格波动范围区域,反映交易不活跃且价格稳定的模式)、中等综合特征类(交易量与波动分布分散,反映多样化市场状态)、相对高波动/中等或偏高交易量类(分布在中等或较高价格波动范围及不同交易量区间,体现多样化的交易活跃程度与价格波动组合模式)。该模型为理解交易行为提供了有价值的视角,具体经济含义需结合更多市场背景信息分析。

3.2 交易模式识别(层次聚类+高斯混合模型)

Yichen Tang曾参与多个数据分析与机器学习相关项目,在股票数据挖掘、金融时间序列分析、多模型融合建模等场景有丰富的实践经验,擅长将技术方法与业务需求结合,提供精准的数据分析解决方案。

相关技术图片

Python电力负荷预测:LSTM、GRU、DeepAR、XGBoost、Stacking、ARIMA结合多源数据融合与SHAP可解释性的研究

原文链接:https://tecdat.cn/?p=44127

探索观点

专题名称:金融时间序列分析与股票智能决策支持专题

可视化目标:展示各特征间的相关系数,明确价格指标与交易量的关联强度。

分析结论:皮尔逊相关系数为0.47,介于0-0.5之间,表明收盘价与交易量存在中等强度的正线性相关关系;P值趋近于0,远小于0.05的显著性水平,说明该相关关系在统计上具有高度显著性,并非偶然形成。这一结果符合金融市场基本规律——价格波动往往伴随交易活跃度的变化。

建模目标:基于交易量和开盘价,利用层次聚类算法和高斯混合模型对交易模式进行分类,从不同角度挖掘市场交易特征。
关键源码(变量名与语法优化后):

建模结论:

样本数量分布:

层次聚类散点图:


蓝色点(agg_cluster为0)和绿色点(agg_cluster为1)在开盘价维度上分区明显:蓝色点集中在开盘价相对较高区域,绿色点集中在开盘价相对较低区域;成交量方面,蓝色点在整个成交量范围都有分布,且中高成交量区域更集中,绿色点主要集中在低成交量区域。这表明高开盘价时市场活跃度更高、交易更频繁,低开盘价时市场活跃度相对较低,两类交易情况存在显著差异,为研究股票交易行为和市场趋势提供数据支撑。

高斯混合模型散点图:


绿色点(gmm_cluster为1)占据大部分区域,蓝色点(gmm_cluster为0)仅在低开盘价区域少量分布,两类样本数量差异较大。蓝色聚类集中在低开盘价、低成交量区域且分布集中;绿色聚类覆盖宽开盘价范围,成交量在不同水平都有分布。该模型强调一种主要交易特征模式(绿色聚类),与层次聚类对数据结构的理解不同,提示需结合多种模型结论综合分析,更全面把握股票交易规律。

3.3 特征重要性量化(随机森林回归)

建模目标:用随机森林模型量化各特征对可口可乐股票收盘价的影响程度,明确不同特征在预测收盘价过程中的作用大小,为投资者和分析师提供精准决策依据。
关键源码(变量名与语法优化后):

建模结论:模型均方根误差(RMSE)为0.153,预测误差较小,在预测收盘价任务上表现较好;特征重要性方面,高价(high)和低价(low)的重要性分别为0.5197和0.4655,是影响收盘价预测的核心因素,贡献最大;开盘价(open)重要性为0.0148,对模型有一定影响但远低于高、低价;成交量(volume)、年(year)、月(month)、日(day)的重要性趋近于0,对预测收盘价的贡献微乎其微,可在后续模型优化中简化或剔除这些特征。随机森林模型能较好地预测可口可乐收盘价,且高价与低价是主导预测的关键特征。

3.4 短期价格预测(LSTM模型)

建模目标:利用过去30天的开盘价、最高价、最低价、收盘价数据,构建LSTM模型预测未来1天的收盘价,挖掘价格序列的时间依赖关系,实现收盘价的定量预测。
关键源码(变量名与语法优化后,省略部分训练细节代码):

可视化展示(预测结果):

建模结论:训练过程中,验证集损失(val_loss)呈现波动变化,最终测试集均方根误差(RMSE)为0.0118,决定系数(R²)高达0.9909,表明模型对测试集数据的预测值与真实值高度契合,能精准捕捉价格序列的内在规律,具备出色的拟合能力与预测有效性,训练过程未出现明显过拟合或欠拟合问题。RMSE较小且R²趋近于1,反映模型预测误差极低、对数据的解释能力极强,可为投资者提供有参考价值的预测结果。但需明确,股票市场受宏观经济、政策导向、突发事件等多重复杂因素影响,该模型仅基于历史价格数据建模,实际应用中需融合更多元信息综合研判。

3.5 多模型性能对比

建模目标:通过计算RMSE和R²,对比线性回归、决策树回归、随机森林回归、梯度提升回归、最近邻回归、支持向量回归等模型对股票收盘价的预测准确性,筛选最适合的预测模型。
关键源码(变量名与语法优化后):



建模结论:线性回归表现尚可(RMSE=0.0117,R²=0.9909),预测偏差极小、解释能力强,但未显式利用时间序列特性,需谨慎评估;LSTM模型作为时间序列模型,擅长处理时间依赖关系,契合股票数据特性,表现出色;决策树回归(RMSE=0.1637,R²=-0.7546)、随机森林回归(RMSE=0.1533,R²=-0.5384)、梯度提升回归(RMSE=0.1547,R²=-0.5675)的R²为负,预测效果不如“用均值预测”的基线模型,无法捕捉股票数据规律;最近邻回归(RMSE=0.1765,R²=-1.0397)和部分支持向量回归(如R²=-49.4584)的RMSE极大、R²极低,严重欠拟合或受异常值影响,无法提供有效预测。实际应用中,LSTM模型可作为优先选择,但需结合市场宏观因素、行业动态等外部信息综合判断股票走势。

四、结论与应用方向

4.1 核心结论

  1. 交易模式特征:通过KMeans聚类、层次聚类、高斯混合模型三种算法从不同维度识别交易模式,KMeans将交易分为低交易量-低波动、中等综合特征、高波动-中等/偏高交易量三类;层次聚类基于开盘价和成交量划分高/低开盘价两类模式;高斯混合模型识别出以“高开盘价+全成交量范围”为主的核心模式,多模型互补验证了市场交易的多样性。
  2. 特征影响规律:随机森林模型证实,最高价和最低价是影响收盘价的核心因素,合计贡献超过98%,开盘价影响微弱,交易量和日期信息对收盘价的贡献可忽略,为模型优化提供了明确的特征筛选依据。
  3. 预测模型优势:LSTM模型在短期价格预测任务中表现最优,测试集RMSE仅为0.0118,R²达0.9909,远优于传统回归模型,能精准捕捉价格序列的时间依赖关系,具备实用的短期预测价值。

4.2 应用方向

  1. 投资决策辅助:投资者可结合LSTM模型的短期价格预测结果与多聚类算法识别的交易模式,制定差异化买卖策略。例如,在高波动-高交易量模式下,参考预测结果把握短期买卖时机;在低波动模式下,采取长期持有策略。
  2. 风险管理:利用价格波动预测与交易模式分析,设置合理的止损止盈点。针对高波动交易模式,提高风险警惕性,缩小仓位规模;针对低波动模式,可适当放宽风险阈值,提升资金使用效率。
  3. 投资组合优化:将可口可乐股票的分析结论纳入投资组合管理,结合其价格稳定性、预测趋势等特征,与高风险资产进行搭配,优化组合风险收益比,实现资产的多元化配置。
  4. 金融研究拓展:为金融领域的时间序列预测、市场微观结构研究提供实践案例,推动LSTM、多聚类算法等方法在股票市场分析中的应用深度与广度,助力探索更复杂的市场行为与规律。

五、问题与解决方法

5.1 日期数据格式不统一

问题:原始日期字段存在字符串格式不规范(如不同年份表示方式、月份/日期补零问题),导致无法直接用于时间序列分析。
解决方法:使用pandas.to_datetime()函数统一转换日期格式,确保日期字段为datetime类型,并提取年份、月份、日等时间特征,便于后续统计分析和模型输入。

5.2 模型过拟合风险

问题:在构建LSTM模型时,训练集损失持续下降但验证集损失波动,可能出现过拟合。
解决方法:引入Dropout层(dropout_rate=0.2-0.3)抑制过拟合,同时采用早停机制(EarlyStopping)监控验证集损失,当损失连续10个epoch无改善时停止训练并恢复最优权重,有效保障模型的泛化能力。

5.3 特征冗余与重要性筛选

问题:初始特征包含开盘价、最高价、最低价、交易量、日期等,需确定哪些特征对收盘价预测贡献显著。
解决方法:通过随机森林模型量化特征重要性,筛选出最高价、最低价两个核心特征,剔除交易量、日期等冗余特征,优化模型输入维度,提升预测效率与准确性。

5.4 时间序列数据建模复杂性

问题:LSTM模型需要将历史数据转换为特定的时间步长格式(如过去30天数据预测未来1天),数据预处理逻辑较复杂。
解决方法:定义create_dataset函数,将归一化后的价格数据按时间步长分割为输入序列(X)和目标值(Y),确保输入数据维度符合LSTM模型要求([样本数,时间步长,特征数]),并通过train_test_split按时间顺序划分数据集(不打乱顺序),保留时间序列的时序性。

5.5 可视化结果解读偏差

问题:相关性热力图中价格指标间强相关(相关系数≥0.97),但交易量与价格指标弱相关,需验证是否存在数据清洗不彻底或特征工程疏漏。
解决方法:重新检查数据预处理步骤,确认无缺失值、重复值,且归一化方法(MinMaxScaler)未破坏数据分布;结合金融理论分析,交易量与价格的弱相关性符合市场实际(价格波动可能由供需以外的因素驱动),最终确认可视化结果合理。

封面