当前位置: 首页 > news >正文

数据挖掘实战-基于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.mrgr.cn/news/68266.html

相关文章:

  • Linux和,FreeRTOS 任务调度原理,r0-r15寄存器,以及移植freertos(一)
  • 004-Kotlin界面开发快速入水之TicTacToe
  • uniapp 整合 OpenLayers - 测距测面
  • 软件设计师-上午题-15 计算机网络(5分)
  • 现代Web开发:React Hooks深入解析
  • 高活跃社区 Doge 与零知识证明的强强联手,QED 重塑可扩展性
  • 虚拟化数据恢复—XenServer虚拟机中SQL Server数据库数据恢复案例
  • 常用滤波算法(十一)-卡尔曼滤波
  • 【数据结构】哈希/散列表
  • 制造业数据架构设计顶层规划方案
  • fs 中的 rmSync 中的参数配置
  • JDBC入门
  • 前端 Canvas 绘画 总结
  • Hive简介 | 体系结构
  • 【AIGC探索】AI实现PPT生产全流程
  • unplugin-auto-import 库作用
  • Excel和微软小冰的结合应用
  • (62)使用RLS自适应滤波器进行系统辨识的MATLAB仿真
  • 220亿巨资注入,农业强国梦想加速启航!
  • 小张求职记六
  • 【云原生开发】K8S集群管理后端开发设计与实现
  • 员工培训对六西格玛管理的落地有哪些帮助?
  • 每日八股——java中的注解原理是什么?
  • C++网络编程之IO多路复用(二)
  • 中阳智能模型的量化投资创新及前景
  • 解决windows server 2016 安装IIS失败问题