数据挖掘实战-基于SARIMA时间序列模型预测Netflix股票未来趋势

 

🤵‍♂️ 个人主页:@艾派森的个人主页

✍🏻作者简介:Python学习者
🐋 希望大家多多支持,我们一起进步!😄
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+


目录

1.项目背景

2.数据集介绍

3.技术工具

4.实验过程

4.1导入数据

4.2数据探索

4.3数据可视化

4.4ADF检验

4.5构建SARIMA模型

源代码


1.项目背景

        在当今日益复杂的金融市场环境中,对股票价格的准确预测成为了投资者、分析师以及市场研究机构关注的焦点。Netflix(NFLX)作为全球领先的流媒体娱乐服务提供商,其股价波动不仅反映了公司自身的经营状况,也深受市场环境、消费者偏好、技术革新等多重因素的影响。因此,开发一种能够有效预测Netflix股票未来趋势的模型,对于指导投资决策、优化风险管理具有重要意义。

        随着数据科学和机器学习技术的快速发展,时间序列分析在股票预测领域的应用日益广泛。时间序列分析是一种基于时间序列数据的统计方法,旨在揭示数据随时间变化的规律和趋势。其中,SARIMA(Seasonal Autoregressive Integrated Moving Average)模型作为一种强大的时间序列预测工具,不仅考虑了数据间的自相关性和依赖性,还充分考虑了季节性因素对股价波动的影响。这对于Netflix这样的具有明显季节性特征的上市公司来说尤为重要。

        Netflix的股价波动往往受到节假日、季度财报发布等季节性因素的影响。例如,在节假日期间,消费者可能更倾向于观看流媒体内容,从而带动Netflix的用户活跃度和收入增长;而在季度财报发布前后,市场对Netflix的盈利预期和业绩展望也会对其股价产生显著影响。因此,通过引入SARIMA模型来捕捉这些季节性因素对股价的影响,有望提高预测的准确性和可靠性。

        综上所述,本研究旨在利用SARIMA时间序列模型对Netflix股票的未来趋势进行预测。通过对Netflix股价历史数据的分析,结合市场环境、公司基本面等因素,建立适合Netflix的SARIMA预测模型,以期为投资者提供有价值的参考信息,帮助他们做出更加明智的投资决策。

2.数据集介绍

该数据集对 Netflix 过去十年的股票表现进行了深入分析,并结合了众多技术指标来检查其价格波动。它包括记录日期和一些重要统计数据:每个交易日的开盘价、最高价、最低价和收盘价,以及交易量。它还包含 7 天和 14 天相对强度指数 (RSI) 等动量指标,以确定股票是否超买或超卖。还包括 7 天和 14 天的商品通道指数 (CCI),通过将当前价格与历史平均值进行比较,帮助识别短期和中期市场趋势。该数据集整合了 50 天和 100 天简单移动平均线 (SMA) 和指数移动平均线 (EMA),揭示了股票的趋势方向。其他重要指标包括移动平均收敛分歧 (MACD)、用于评估价格波动性的布林线、真实波动幅度以及 7 天和 14 天平均真实波动幅度 (ATR),这些指标可衡量市场波动性。该数据集旨在预测第二天的收盘价,使其成为预测 Netflix 股票未来走势的重要工具。

数据集中各变量含义如下:

date:日期

open:股票在交易日交易所开盘时首次交易的价格。

high:股票在交易日内交易的最高价格。

low:股票在交易日内交易的最低价格。

close:股票在交易日内交易的最终价格。

volume:一个交易日内交易的股票总数。

RSI_7 / RSI_14:相对强弱指数 (RSI) 是衡量价格变动速度和变化的动量振荡器。 RSI_7 和 RSI_14 分别表示在 7 天和 14 天内计算的 RSI。

CCI_7 / CCI_14:商品通道指数 (CCI) 是一种多功能指标,可用于识别新趋势或警告极端情况。 CCI_7 和 CCI_14 分别在 7 天和 14 天内计算。

SMA_50 / SMA_100:简单移动平均线 (SMA) 是通过计算特定天数内股票价格的平均值来计算的。 SMA_50 和 SMA_100 分别是 50 天和 100 天的平均值。

EMA_50 / EMA_100:指数移动平均线 (EMA) 更加重视最近的价格,因此比 SMA 对价格变化的反应更快。 EMA_50 和 EMA_100 分别根据 50 天和 100 天计算。

MACD:移动平均线收敛分歧(MACD)是一种趋势跟踪动量指标,显示股票价格的两条移动平均线之间的关系。

布林线 (Bollinger):一组线条绘制了与股票价格简单移动平均线 (SMA) 的两个标准差(正向和负向)。

真实波动范围:以下中的最大者:当前最高价减去当前最低价、当前最高价的绝对值减去前一个收盘价,或当前最低价的绝对值减去前一个收盘价。

ATR_7 / ATR_14:平均真实波动幅度 (ATR) 是波动率的衡量标准,显示股票在给定时期内的平均波动程度。 ATR_7 和 ATR_14 分别按 7 天和 14 天计算。

次日收盘价:未来价格。股票下一个交易日的收盘价。可用作回归预测的目标变量。

3.技术工具

Python版本:3.9

代码编辑器:jupyter notebook

4.实验过程

4.1导入数据

import matplotlib as mpl
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.seasonal import seasonal_decompose
import warnings
warnings.filterwarnings('ignore')df = pd.read_csv('nflx_2014_2023.csv')
df

4.2数据探索

查看数据大小

查看数据基本信息

查看数据描述性统计

4.3数据可视化

创建股票价格时间序列数据帧

该数据集包含4种不同的股票价格:开盘价、最高价、最低价和收盘价。股票价格一词指的是股票在市场上交易的当前价格。当天的平均价格是典型的股票价格。投资者更喜欢使用典型价格而不是收盘价;典型的价格被看作是一条纯粹的简单移动平均线。典型的价格是最低价、最高价和收盘价除以3。我为日期和典型股票价格创建了一个时间序列数据框架。

典型的股价在2019冠状病毒病期间达到顶峰,并在2022年下跌。我按月重新采样时间序列数据;这是为了确保数据以一致的频率分布。正如我们在本笔记本前面看到的,所有周末都从数据中排除。一年大约有252个交易日。我按月重新抽样数据。

4.4ADF检验

结论是时间序列不是平稳的。增广Dickey-Fuller (ADF)检验是一种常用的统计检验,用于确定给定的时间序列是否平稳。如果ADF统计量的绝对值大于临界值,则拒绝该时间序列是非平稳的原假设。在这种情况下,我们不能拒绝零假设。现在,让我们看一下数据的一个小子集。我去掉了2018年之前的所有日期。所以数据范围从2018年到2023年底。

尽管如此,我还是不能拒绝非平稳性的零假设。与以前的结果相比,有一些证据表明趋于平稳性。

让我们看一下自相关函数图。该图评估了一个序列的当前值在多大程度上依赖于它的过去值。这幅图显示了一个衰减模式,直到达到10个滞后点。前4个滞后的系数在阴影区域之外;这表明统计上显著的相关性。

4.5构建SARIMA模型

SARIMA(Seasonal Autoregressive Integrated Moving Average)模型和ARIMA(Autoregressive Integrated Moving Average)模型在时序数据预测领域都是重要的工具,但它们之间存在一些显著的区别:

  1. 模型适应范围:ARIMA模型主要用于处理非季节性的时间序列数据,而SARIMA模型则更适用于具有明显季节性变化的时间序列数据。SARIMA模型通过加入季节性因素,能够更好地拟合具有季节性特征的时间序列数据。
  2. 模型复杂度:相对于ARIMA模型,SARIMA模型更为复杂。这是因为SARIMA模型需要考虑季节性因素的影响,因此需要在模型中引入季节性差分,并加入季节性项。这使得SARIMA模型在参数设置和模型构建方面需要更多的注意和技巧。
  3. 参数设置:ARIMA和SARIMA模型都有三个主要参数:p(自回归阶数)、d(差分阶数)和q(滑动平均阶数)。然而,在SARIMA模型中,还需要设置额外的季节性参数P、D、Q。这些参数可以通过样本数据的自相关图和偏自相关图来确定。因此,SARIMA模型的参数设置相对于ARIMA模型来说更为复杂。
  4. 预测性能:由于SARIMA模型考虑了季节性因素,因此在处理具有季节性变化的时间序列数据时,其预测性能通常优于ARIMA模型。然而,如果时间序列数据没有明显的季节性变化,那么ARIMA模型可能会提供更好的预测结果。

总的来说,SARIMA和ARIMA模型在时序数据预测领域各有优势,选择哪种模型取决于具体的数据特征和预测需求。

预测是2024-2025年股价会上涨。

源代码

import matplotlib as mpl
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.seasonal import seasonal_decompose
import warnings
warnings.filterwarnings('ignore')df = pd.read_csv('nflx_2014_2023.csv')
df
df.shape
df.info()
df.describe().T#t 典型的股票价格等于最高、最低和收盘价格的平均值
df['typical'] = df[['high', 'low','close']].mean(axis=1)
df_timeseries = df[['date','typical']]
df_timeseries
df_timeseries['date'] = pd.to_datetime(df_timeseries['date'])
df_timeseries.set_index('date', inplace=True)
plt.plot(df_timeseries)
plt.ylabel('Typical Price')
plt.title('Typical Stock Price Over Time')
plt.show()# 按月重新抽样数据
monthly_data = df_timeseries.resample('M').mean()
plt.plot(monthly_data)
plt.ylabel('Typical Price')
plt.title('Typical Stock Price Over Time by Month')
plt.show()
# 提取时间序列值
ts_values = monthly_data['typical'].values  # 执行ADF检验
result = adfuller(ts_values)# 打印测试结果
print('ADF Statistic:', result[0])
print('p-value:', result[1])
print('Critical Values:')
for key, value in result[4].items():print(f'\t{key}: {value}')start_date = "2018-01-01"
end_date = "2023-12-31"
mask = (df_timeseries.index > start_date) 
df_timeseries_filtered = df_timeseries[mask]
df_timeseries_filtered
# 按月重新抽样数据
df_timeseries_filtered_monthly = df_timeseries_filtered.resample('M').mean()
plt.plot(df_timeseries_filtered_monthly)
plt.ylabel('Typical Price')
plt.title('Typical Stock Price Over Time by Month')
plt.show()
# 提取时间序列值
ts_values_2 = df_timeseries_filtered_monthly['typical'].values  # 执行ADF检验
reslt = adfuller(ts_values_2)# 打印测试结果
print('ADF Statistic:', reslt[0])
print('p-value:', reslt[1])
print('Critical Values:')
for key, value in reslt[4].items():print(f'\t{key}: {value}')# 假设您的时间序列数据存储在名为“ts”的系列中。
# Plot ACF
plot_acf(ts_values_2, lags=15)
plt.title('Autocorrelation Function (ACF)')
plt.show()# 进行季节性分解
decomposition = seasonal_decompose(df_timeseries_filtered_monthly, model='additive')
plt.figure(figsize=(10, 8))# 原始时间序列
plt.subplot(411)
plt.plot(df_timeseries_filtered_monthly, label='Original')
plt.legend()# 趋势组件
plt.subplot(412)
plt.plot(decomposition.trend, label='Trend')
plt.legend()# 季节性的组件
plt.subplot(413)
plt.plot(decomposition.seasonal, label='Seasonal')
plt.legend()# 残差分量
plt.subplot(414)
plt.plot(decomposition.resid, label='Residual')
plt.legend()plt.tight_layout()
plt.show()
ts = df_timeseries_filtered_monthly['typical']
# 定义并拟合SARIMA模型
model = SARIMAX(ts, order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
results = model.fit()
# 预测未来值
forecast = results.forecast(steps=12)  # 预测未来一年# 绘制原始数据和预测
plt.plot(ts.index, ts, label='Original Data')
plt.plot(forecast.index, forecast, label='Forecast')
plt.xlabel('Date')
plt.ylabel('Typical Stock Price')
plt.title('Time Series Forecasting with SARIMA')
plt.legend()
plt.show()

资料获取,更多粉丝福利,关注下方公众号获取

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java:多态的调用

1.什么是多态 允许不同类的对象对同一消息做不同的响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)。多态使用了一种动态绑定(dynamic binding)技术,指在执行期间判断所引用…

HbuildderX运行到手机或模拟器的Android App基座识别不到设备 mac

寻找模拟器 背景: 运行的是h5,模拟器是网易MuMu。 首先检查一下是否配置dab环境,adb version 配置一下hbuilderX的adb: 将命令输出的路径配置到hbuilderx里面去,然后重启下HbuilderX。 开始安装基座…一直安装不…

小程序 CRM 运营系统:提升用户体验的新利器

在当今数字化时代,小程序以其便捷、高效的特点迅速成为企业与用户互动的重要平台。而将客户关系管理(CRM)运营系统融入小程序中,更是为企业带来了全新的机遇与挑战。那么,如何构建一个成功的小程序CRM运营系统呢&#…

【362】基于springboot的在线租房和招聘平台

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统在线租房和招聘平台信息管理难度大,容错率低&…

华为Mate70前瞻,鸿蒙NEXT正式版蓄势待发,国产系统迎来关键一战

Mate 70系列要来了 上个月,vivo、小米、OPPO、荣耀等众多智能手机制造商纷纷发布了他们的年度旗舰产品,手机行业内竞争异常激烈。 同时,华为首席执行官余承东在其个人微博上透露,Mate 70系列将标志着华为Mate系列手机达到前所未有…

【Java Web】JSP实现数据传递和保存(中)中文乱码 转发与重定向

文章目录 中文乱码转发与重定向转发重定向区别 升级示例1 中文乱码 JSP 中默认使用的字符编码方式:iso-8859-1,不支持中文。常见的支持中文的编码方式及其收录的字符: gb2312:常用简体汉字gbk:简体和繁体汉字utf-8&a…

Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized

这里是Themberfue 在上一节的最后,我们讨论两个线程同时对一个变量累加所产生的现象 在这一节中,我们将更加详细地解释这个现象背后发生的原因以及该如何解决这样类似的现象 线程安全问题 public class Demo15 {private static int count 0;public …

React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 React 是由 Facebook 开发并开源的前端框架,用于构建用户界面。它通过虚拟DOM、高效的渲染机制和组件化的开发模式&am…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了,但是需要调用腾讯云翻译,一直没成功。 第一步就是,按照这上面方法做:百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是:Zotero PDF translat翻译:申请腾讯翻译接口 主要是…

kelp protocol

道阻且长,行而不辍,未来可期 有很长一段时间我都在互联网到处拾金,but,东拼西凑的,总感觉不踏实,最近在老老实实的看官方文档 & 阅读白皮书 &看合约,挑拣一些重要的部分配上官方的证据,和过路公主or王子分享一下,愿我们早日追赶上公司里那些可望不可及大佬们。…

如何以开源加速AI企业落地,红帽带来新解法

CSDN 看到,生成式 AI 的火爆正在引发计算、开发、交互三大范式全面的升级和转换,全行业或将迎来一次全新的科技变革周期,可能比移动与云计算变革更加剧烈。不过 AI 经历了追求千亿模型效果和芯片、集群硬件的军备竞赛后,如何真正落…

vue的组件使用

1.安装element plus组件库 npm install element-plus --save 2. 3.在页面使用

人保财险(外包)面试分享

前言: 这是本月面的第三家公司,太难了兄弟们,外包都不好找了,临近年底,金九银十已经错过了,金三银四虽然存在,但按照这几年的行情,金九银十和金三银四其实已经是不复存在了&#xf…

Linux-c TCP服务模型

1、TCP模型,服务端与客户端的搭建时序图 2、TCP模型,在创建阶段和通信阶段,对套接字的理解 2.1、tcp连接阶段 2.2、tcp通信状态 一个服务端与多个客户端的通信状态 TCP与UDP的对比 (下图是笔者理解所画,可能也许有错…

卡码网KamaCoder 127. 骑士的攻击

题目来源:127. 骑士的攻击 C题解(来源A * 算法精讲 (A star算法) | 代码随想录):Astar Astar 是一种 广搜的改良版。 有的是 Astar是 dijkstra 的改良版。 其实只是场景不同而已 我们在搜索最短路的时候&…

浅谈语言模型推理框架 vLLM 0.6.0性能优化

在此前的大模型技术实践中,我们介绍了加速并行框架Accelerate、DeepSpeed及Megatron-LM。得益于这些框架的助力,大模型的分布式训练得以化繁为简。 然而,企业又该如何将训练完成的模型实际应用部署,持续优化服务吞吐性能&#xf…

闯关leetcode——3222. Find the Winning Player in Coin Game

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-winning-player-in-coin-game/description/ 内容 You are given two positive integers x and y, denoting the number of coins with values 75 and 10 respectively. Alice and Bob a…

斗破QT编程入门系列之二:GUI应用程序设计基础:UI文件(四星斗师)

斗破Qt目录: 斗破Qt编程入门系列之前言:认识Qt:Qt的获取与安装(四星斗师) 斗破QT编程入门系列之一:认识Qt:初步使用(四星斗师) 斗破QT编程入门系列之二:认识…

高级 HarmonyOS主题课—— 帮助快速构建各种文本识别应用的课后习题

天地不仁&#xff0c;以万物为刍狗&#xff1b; 圣人不仁&#xff0c;以百姓为刍狗。 天地之间&#xff0c;其犹橐龠乎&#xff1f; 虚而不屈&#xff0c;动而俞出。 多闻数穷&#xff0c;不若守于中。 本文内容主要来自 <HarmonyOS主题课>帮助快速构建各种文本识别应用 …

达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?

前言 我在使用达梦数据库DM时&#xff0c;一开始使用的是达梦数据库自带的连接工具DM管理工具。自带的有它自己的好处&#xff0c;起码对于修改新增字段等是比较兼容的。后面我发现DBeaver也是支持连接达梦数据库的&#xff0c;所以后面用DBeaver也在连接达梦数据库。 我在一…