比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)
数据入口:【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com
本数据集包含 2014 - 2024 的比特币美元价格数据,具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下:
字段 | 说明 |
---|---|
Date | 日期,比特币的交易日期 |
Open (Open price per unit) | 开盘价,每天比特币交易开始时的价格 |
High (Highest price per unit) | 最高价,每天交易期间比特币的最高成交价格 |
Low | 最低价,每天交易期间比特币的最低成交价格 |
Close (Adj Close) | 收盘价,指当天交易结束时的价格,调整后的收盘价考虑了股息等因素 |
Volume | 成交量,每天比特币的交易量,通常以比特币的单位表示 |
在发布的基础与进阶一中,具体分析了价格波动与趋势分析、成交量与市场波动关系分析、价格异常波动检测和成交量异常值检测以及市场特征聚类分析等。在本文中,将从时间序列分析与预测角度入手。
首先读取处理过的数据:
import pandas as pd
file_path = 'data.csv'
data = pd.read_csv(file_path)data
一:检测平稳性
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 5))
plt.plot(data['Adj Close'], label='Adj Close')
plt.title('Time Series of Adjusted Closing Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()
我们绘制了“调整后的收盘价”的时间序列图,以便更好地了解数据的趋势和季节性:
从“调整后的收盘价”时间序列图中,我们可以看到数据呈现出一定的波动性,但没有明显的趋势或季节性模式。接下来,我们将使用ADF(Augmented Dickey-Fuller)测试来确定数据的平稳性。如果数据不是平稳的,我们可能需要进行差分以使其平稳。
from statsmodels.tsa.stattools import adfullerresult = adfuller(data['Adj Close'])adf_test_statistic = result[0]
p_value = result[1]adf_test_statistic, p_value
ADF测试的统计量为-1.332,p值为0.614。由于p值大于常用的显著性水平(例如0.05),我们不能拒绝原假设,即数据存在单位根,因此数据不是平稳的。
为了使数据平稳,我们可以对数据进行差分。首先,我们将尝试一阶差分,并再次进行ADF测试以检查平稳性。
data_diff = data['Adj Close'].diff().dropna()result_diff = adfuller(data_diff)adf_test_statistic_diff = result_diff[0]
p_value_diff = result_diff[1]adf_test_statistic_diff, p_value_diff
对数据进行一阶差分后,ADF测试的统计量为-8.964,p值接近0。由于p值远小于常用的显著性水平(例如0.05),我们可以拒绝原假设,即差分后的数据不存在单位根,因此数据是平稳的。
接下来,我们将绘制差分后数据的ACF和PACF图,以确定ARIMA模型的参数。
二:确定ARIMA模型的参数
from statsmodels.graphics.tsaplots import plot_acf, plot_pacfplt.figure(figsize=(12, 6))plt.subplot(1, 2, 1)
plot_acf(data_diff, lags=20, ax=plt.gca())
plt.title('ACF of First-Differenced Data')plt.subplot(1, 2, 2)
plot_pacf(data_diff, lags=20, ax=plt.gca())
plt.title('PACF of First-Differenced Data')plt.tight_layout()
plt.show()
从ACF和PACF图中,我们可以观察到:
- ACF图显示滞后项逐渐减少,但没有明显的截尾。
- PACF图在滞后1后迅速下降,表明ARIMA模型中的AR项的阶数可能为1。
基于这些观察结果,我们可以尝试构建ARIMA(1,1,0)模型,其中1,1,0分别代表ARIMA模型中的p,d,q参数。
接下来,我们将使用ARIMA(1,1,0)模型对数据进行拟合,并进行预测。
三:ARIMA模型建立与预测
from statsmodels.tsa.arima.model import ARIMAmodel = ARIMA(data['Adj Close'], order=(1, 1, 0))model_fit = model.fit()forecast = model_fit.forecast(steps=5)forecast_values = forecast.tolist()
forecast_values
ARIMA(1,1,0)模型预测的接下来五个时间步的“调整后的收盘价”如下:
- 41623.5449
- 41623.5492
- 41623.5491
- 41623.5491
- 41623.5491
这些预测值是可以与实际结果相比较,从而评价模型的优劣性。
附录:每日股票行情数据
想要探索多元化的数据分析视角,可以关注之前发布的相关内容。