欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 用Python实现时间序列模型实战——Day 25: 时间序列模型的实际应用

用Python实现时间序列模型实战——Day 25: 时间序列模型的实际应用

2024/10/25 13:19:06 来源:https://blog.csdn.net/qq_41698317/article/details/142304523  浏览:    关键词:用Python实现时间序列模型实战——Day 25: 时间序列模型的实际应用
一、学习内容
1.1 时间序列模型的实际应用领域
  • 金融领域:金融市场数据如股票价格、利率、外汇等通常表现为时间序列数据,时间序列模型可以用来进行价格预测、风险评估等。
  • 气象领域:温度、降水、风速等天气数据通常是按时间排列的,时间序列模型可以用于天气预测。
  • 经济领域:经济指标如GDP、消费指数等是时间序列数据,模型可以用于经济趋势分析和预测。
1.2 时间序列分析的特定挑战与解决方案
  • 非平稳性:许多时间序列数据是非平稳的,必须通过差分、去趋势等技术处理。
  • 长序列依赖性:在某些应用中,过去的数据对当前的预测非常重要,需要捕捉长序列的依赖性,这时模型需要设计得足够复杂,如使用 LSTM、GRU 模型。
  • 异常值处理:金融数据、气象数据中可能存在异常值,需要进行异常检测与处理。
二、实战案例:金融时间序列分析

我们将应用 ARIMA 模型来分析和预测股票市场的价格。这个案例可以展示时间序列模型在金融领域中的应用,重点在于如何使用模型预测股票价格。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_squared_error# 1. 使用 yfinance 加载股票市场数据 (例如 Apple 的股票)
stock_ticker = 'AAPL'  # 你可以选择其他股票代码,例如 'GOOG', 'MSFT'
data = yf.download(stock_ticker, start='2015-01-01', end='2022-01-01')# 我们选择“Adj Close”作为分析数据
stock_data = data[['Adj Close']]

代码解释:

  • 加载股票市场数据:我们加载了一个假设的股票市场数据集,并对其进行处理,选择调整后的收盘价 (Adj Close) 作为预测目标。

# 2. 数据可视化
plt.figure(figsize=(10, 6))
plt.plot(stock_data.index, stock_data['Adj Close'], label=f'{stock_ticker} Stock Price')
plt.title(f'{stock_ticker} Stock Price Over Time')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

代码解释: 

  • 数据可视化:对股票价格数据进行可视化,以便对数据进行初步分析,观察数据的走势和趋势。

结果输出:

# 3. 拆分训练集和测试集
train_size = int(len(stock_data) * 0.8)
train_data, test_data = stock_data.iloc[:train_size], stock_data.iloc[train_size:]

代码解释: 

  • 拆分数据:将数据集分为训练集和测试集,80% 用于训练,20% 用于测试。训练集用于构建时间序列模型,测试集用于检验模型的性能。

# 4. 使用 ARIMA 模型
# 定阶过程可以通过 AIC/BIC 来自动选择合适的阶数,这里为了简化手动选择 (p, d, q)
p, d, q = 5, 1, 0
model = ARIMA(train_data, order=(p, d, q))
model_fit = model.fit()

代码解释: 

  • 使用 ARIMA 模型

    • 使用 ARIMA 模型对数据进行建模,这是一种常用的时间序列预测方法,能够捕捉数据中的自回归部分、差分部分和移动平均部分。
    • p 表示自回归项的阶数,d 表示差分次数,q 表示移动平均项的阶数。这里选择了 (5, 1, 0) 的参数组合,表示一个差分的五阶自回归模型。
# 5. 进行预测
start = len(train_data)
end = len(train_data) + len(test_data) - 1
predictions = model_fit.predict(start=start, end=end, typ='levels')# 6. 预测结果可视化
plt.figure(figsize=(10, 6))
plt.plot(test_data.index, test_data, label='Actual Price')
plt.plot(test_data.index, predictions, color='red', label='Predicted Price')
plt.title(f'{stock_ticker} ARIMA Model Predictions vs Actual Prices')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()

代码解释: 

  • 预测和可视化:使用训练好的 ARIMA 模型对测试集进行预测,并将预测结果与实际数据进行对比,绘制图表进行可视化。

结果输出:

# 7. 评估模型性能
mse = mean_squared_error(test_data, predictions)
print(f'Mean Squared Error: {mse}')

代码解释: 

  • 模型评估:通过均方误差 (MSE) 对模型的预测性能进行评估,MSE 越低,模型的预测性能越好。

结果输出:

Mean Squared Error: 776.447967321871
三、结果分析
3.1 预测结果
  • ARIMA 模型根据历史数据对股票价格进行了预测,并与实际价格进行比较。通过图表可以直观地看到模型的预测效果。
3.2 模型性能
  • 模型的均方误差 (MSE) 提供了一个量化指标,用来衡量模型预测的准确性。MSE 越低,说明模型的预测误差越小。
3.3 金融领域的挑战
  • 在金融市场中,股票价格通常受到众多因素的影响,价格波动剧烈。因此,预测股票价格存在较大难度。常见的挑战包括数据的非平稳性、异常波动等,使用适当的时间序列模型(如 ARIMA、LSTM)有助于更好地应对这些问题。
四、总结

通过本次案例,我们展示了如何在金融领域应用 ARIMA 模型进行时间序列预测。金融市场的时间序列分析具有挑战性,但通过时间序列模型,可以有效地捕捉价格中的趋势和波动,为投资决策提供支持。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com