数据挖掘实战-基于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()

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Permissions 0755 for ‘/etc/ssh/ssh_host_rsa_key‘ are too open.问题解决

1、问题背景 代码上库公司git后,将项目上出的程序烧录到设备中,wifi能够正常链接,但是通过wifi链接 ssh登录设备失败。把调试串口引出,查看linux启动log,发现如下打印信息: WARNING: UNPROTECTED PRIVATE KEY FILE! Permissions 075…

第三十五篇:HTTP报文格式,HTTP系列二

HTTP 是超⽂本传输协议,也就是HyperText Transfer Protocol。 前面我们讲到第三章中网络协议的定义,网络协议的定义:网络协议是通信计算机双方必须共同遵从的一组约定。就像两个人要进行交流,如果不制定一套约定,一方…

嵌入式学习(8)-EventOS 事件驱动管理

一、概述 EventOS,是一个面向单片机、事件驱动的嵌入式开发平台。它主要有两大技术特色:一是事件驱动,二是超轻量。 EventOS的主要特性列举如下: (1)事件总线为核心组件,灵活易用&#xff0c…

json字符串与python字典的区别与联系

json字符串与python中自带的字典类型外表长的很像,很容易区分不清楚,它们之间有着本质的区别,可以通过内置的json模块来互相转换。 文章目录 1、Python字典2、JSON数据格式3、JSON与python字典的区别4、JSON与python字典相互转换4.1 json字符…

Ubuntu 20.04 安装 QGC v4.3 开发环境

Ubuntu 20.04 安装 QGC开发环境 1. 准备安装 Qt 5.15.2安装依赖获取源码 2. 编译参考 前言 QGC ( QGroundControl) 是一个开源地面站,基于QT开发的,有跨平台的功能。可以在Windows,Android,MacOS或Linux上运行。它可以将PX4固件加…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十二:在屏幕上显示多路视频播放,可以有不同的分辨率,格式和帧率。

上图是在安防领域的要求,一般都是一个屏幕上有显示多个摄像头捕捉到的画面,这一节,我们是从文件中读取多个文件,显示在屏幕上。 一 改动UI文件 这里我们要添加两个label,为了区分我们设置一下背景色(这个是…

【数据集】【YOLO】【目标检测】道路垃圾识别数据集 8805 张,垃圾堆放识别数据集,YOLO垃圾识别算法实战训练教程!

数据集介绍 【数据集】道路垃圾识别、垃圾堆放识别数据集 8805 张,目标检测,包含YOLO/VOC格式标注。 数据集中包含2种分类:{0: garbage, 1: garbage_bag},分别是普通垃圾和垃圾袋。 数据集来自国内外图片网站和视频截图&#x…

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(2)

《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(2) 《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(2)回声客户端的完美实现回声客户端的问题回声客户端问题的解决方…

类加载过程详解

类的生命周期 类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析&#xff08…

03-构建数据中台的三要素:方法论、组织和技术

03-构建数据中台的三要素:方法论、组织和技术 知道要转型,要建设数据中台,却不知咋做,咋办? 现在有很多讲“如何建设数据中台”文章,观点各不相同: 数据中台是数据建设方法论,按照数…

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

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

源代码防泄密管理分享

随着信息技术的快速发展,软件已成为现代企业不可或缺的核心资产之一。然而,源代码作为软件的心脏,其安全性直接关系到企业的核心竞争力。为了有效防止源代码泄露,构建一套全面且高效的源代码安全管理体系显得尤为重要。以下是六个…

从神经元到神经网络:深度学习的进化之旅

神经元、神经网络 神经元 Neuron ),又名感知机( Perceptron ),在模型结构上与 逻辑回归 一致,这里以一个二维输入量的例子对其进行进一步 的解释: 假设模型的输 入向 量是一 维特征向 (x1,x2). 则单神 经元的模型结构 如下…

[C语言]strstr函数的使用和模拟实现

1.strstr函数的使用 char * strstr ( const char *str1, const char * str2); 返回一个指向str1中str2第一次出现的指针&#xff0c;如果str2中没有str1则返回 NULL。。 实例&#xff1a; #include <stdio.h> #include <string.h> int main() {char str[] "…

【论文速读】| RePD:通过基于检索的提示分解过程防御越狱攻击

基本信息 原文标题&#xff1a;RePD: Defending Jailbreak Attack through a Retrieval-based Prompt Decomposition Process 原文作者&#xff1a;Peiran Wang, Xiaogeng Liu, Chaowei Xiao 作者单位&#xff1a;University of Wisconsin–Madison 关键词&#xff1a;越狱…

React 前端通过组件实现 “下载 Excel模板” 和 “上传 Excel 文件读取内容生成对象数组”

文章目录 一、Excel 模板下载01、代码示例 二、Excel 文件上传01、文件展示02、示例代码03、前端样式展示04、数据结果展示 三、完整代码 本文的业务需求是建立在批量导入数据的情况下&#xff0c;普通组件只能少量导入&#xff0c;数据较多的情况都会选择 Excel 数据导入&…

基于YOLOv8 Web的安全帽佩戴识别检测系统的研究和设计,数据集+训练结果+Web源码

摘要 在工地&#xff0c;制造工厂&#xff0c;发电厂等地方&#xff0c;施工人佩戴安全帽能有效降低事故发生概率&#xff0c;在工业制造、发电等领域需要进行施工人员安全帽监测。目前大多数的 YOLO 模型还拘泥于公司、企业开发生产的具体产品中&#xff0c;大多数无编程基础…

内部知识库:优化企业培训流程的关键驱动力

在当今快速变化的商业环境中&#xff0c;企业培训的重要性日益凸显。内部知识库作为整合、管理和分享企业内部学习资源的关键工具&#xff0c;正逐步成为优化企业培训流程的核心。以下将探讨内部知识库如何通过多种功能&#xff0c;助力企业提升培训效率、质量和员工满意度。 …

TapData 发布官方性能测试报告,针对各流行数据源,在多项指标中表现拔群

近日&#xff0c;TapData 官方发布了最新的性能测试报告&#xff0c;该报告详细展示了 TapData v3.5.13 在各种数据源下的性能表现&#xff0c;包括全量同步、增量同步、读写延迟等关键性能指标。 随着企业对实时数据集成和处理能力需求的提升&#xff0c;TapData 凭借其高效、…

JDK1.5 java代码打包jar HmacSha256

文章目录 demo地址背景实现编写代码编译class文件打包 JAR 文件执行生成的 JAR 文件辅助验证方式 常见问题和解决方法常规生成jar方案maven插件idea工具 demo地址 https://github.com/xiangge-zx/HmacSha256 背景 最近接到一个需求,做一个可以用来HmacSha256加密的小工具&am…