You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python时间序列:多期持久化朴素预测的向量化回测实现

实现14天朴素预测(向量化)与回测、SQLite存储

1. 数据准备(规范日期索引)

先确保你的DataFrame日期列是datetime类型,优先设为索引,方便后续操作:

import pandas as pd
import numpy as np

# 示例日度数据(替换为你的真实数据)
dates = pd.date_range(start='2012-01-01', end='2012-02-28')
df = pd.DataFrame({'value': np.random.randint(80, 120, size=len(dates))}, index=dates)

2. 向量化生成14天朴素预测

用numpy广播实现无循环的预测生成,直接将每个日期的数值映射到未来14天:

# 提取原始日期和对应数值
original_dates = df.index.values
original_values = df['value'].values

# 生成每个原始日期对应的14天预测日期(d+1 到 d+14)
offsets = np.timedelta64(1, 'D') * np.arange(1, 15)  # 1到14天的时间偏移
pred_dates = original_dates[:, np.newaxis] + offsets  # 广播生成所有预测日期

# 将原始数值广播为和预测日期匹配的形状
pred_values = np.broadcast_to(original_values[:, np.newaxis], pred_dates.shape)

# 整理成标准预测结果DataFrame
predictions = pd.DataFrame({
    'base_date': np.repeat(original_dates, 14),  # 预测基准日期(当日)
    'pred_date': pred_dates.flatten(),           # 被预测的日期
    'pred_value': pred_values.flatten(),         # 预测值
    'model_type': 'naive_14day'                  # 模型标识,方便多模型对比
})

# 可选:过滤超出数据时间范围的预测(最后14天的部分预测可能无实际值)
max_valid_pred_date = df.index.max()
predictions = predictions[predictions['pred_date'] <= max_valid_pred_date]

3. 回测计算误差指标

将预测结果和实际值合并,计算MAE、RMSE等常用误差指标:

# 合并实际值与预测值
backtest = predictions.merge(
    df.reset_index().rename(columns={'index': 'pred_date', 'value': 'actual_value'}),
    on='pred_date',
    how='left'
)

# 计算误差项
backtest['abs_error'] = np.abs(backtest['pred_value'] - backtest['actual_value'])
backtest['squared_error'] = backtest['abs_error'] ** 2

# 输出误差指标
print(f"朴素14天预测 MAE: {backtest['abs_error'].mean():.2f}")
print(f"朴素14天预测 RMSE: {np.sqrt(backtest['squared_error'].mean()):.2f}")

4. 存储预测结果到SQLite

用pandas内置的to_sql方法直接写入数据库,无需手动拼接SQL:

import sqlite3

# 连接SQLite数据库(文件不存在则自动创建)
conn = sqlite3.connect('your_database.db')  # 替换为你的数据库文件名

# 写入预测表(if_exists可选replace/append,根据需求选择)
predictions.to_sql('naive_predictions', conn, if_exists='replace', index=False)
# 写入回测结果表
backtest.to_sql('naive_backtest', conn, if_exists='replace', index=False)

# 关闭连接
conn.close()

关键说明

  • 全程无迭代行操作,numpy广播和pandas向量化方法保证了大数据量下的运行效率;
  • 若原始数据存在日期缺失,上述方法依然有效,因为每个基准日期的预测窗口独立生成;
  • 多模型对比时,只需给不同模型的预测结果添加唯一model_type标识,即可统一存储在同一张表中,方便后续分析。

内容的提问来源于stack exchange,提问作者13sen1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:15:42