基于多变量ARIMAX的比特币价格预测属性判定及实现咨询
问题分类判定
你这个场景属于多变量时间序列预测问题,判断逻辑很明确:
- 单变量时间序列预测的核心定义是仅用目标变量自身的历史值做预测,不需要引入任何其他外生变量,比如你只拿过去180天的比特币价格数据预测未来价格,才属于单变量场景。
- 你现在除了目标变量(比特币价格)的历史数据外,还引入了x1-x4共4个外生特征参与预测,哪怕你把时间单独拆成小时、周几、月度这类时间特征当输入,也属于额外输入变量,完全符合多变量时间序列的定义。
补充说明:你之前看到的ARIMAX、单特征LSTM的例子如果没加其他变量,本质是单变量实现,不是这两类模型只能做单变量预测。ARIMAX里的X就指代外生变量,本身就原生支持多变量输入;LSTM也可以同时输入多维度特征序列做预测。
同类场景实现方案参考
特征组合测试思路
你要测试不同变量组合的效果,可以按以下框架落地:
- 先完成基础数据预处理:
- 把时间设为索引后,先做时间特征衍生,比如拆出
hour、day_of_week、is_weekend、month等特征,和x1-x4统一作为备选特征池 - 对所有特征做标准化/归一化处理,避免数值量级差异影响模型效果
- 按时间顺序切分训练集、验证集、测试集,不能用随机打乱的切分方式,避免数据泄露
- 特征组合对比测试方法:
- 先跑基线模型拿到基准效果:比如只用比特币历史价格的单变量ARIMA、单变量LSTM跑出来的精度当基准线
- 再逐一加入不同特征组合测试:比如先加时间特征、再加x1、再加x1+x2,以此类推,每个组合都跑相同的验证集看精度变化,筛选最优特征组
常用模型实现参考
- 统计模型类:直接用
statsmodels库的SARIMAX接口,传入外生变量参数exog即可实现多变量输入,代码示例片段:
from statsmodels.tsa.statespace.sarimax import SARIMAX # 训练集的目标变量、外生变量 train_y = train['btc_price'] train_exog = train[['hour','day_of_week','x1','x2','x3','x4']] model = SARIMAX(train_y, exog=train_exog, order=(1,1,1)) result = model.fit() # 预测时也要传入对应时段的外生变量 pred = result.predict(exog=test_exog)
- 深度学习类:LSTM的输入维度调整为
(样本数, 时间步长, 特征数),特征数包含你要输入的所有外生变量+目标变量,就可以实现多变量输入,代码示例片段:
from tensorflow.keras.layers import LSTM, Dense from tensorflow.keras.models import Sequential # 假设时间步长取30,特征数总共6个(目标变量+4个x+1个时间特征) model = Sequential() model.add(LSTM(64, input_shape=(30, 6))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse')
测试的时候统一用MAE、RMSE、MAPE三个指标评估不同组合的预测精度即可。
内容的提问来源于stack exchange,提问作者Mostafa Gholami
相关产品推荐
相关产品推荐

