DeepSeek总结的DuckDB anofox-forecast季节调整时间序列预测插件功能

来源:https://github.com/DataZooDE/anofox-forecast

!重要提示

本扩展处于早期开发阶段,可能存在缺陷和不兼容的变更。

请使用 issues 页面 报告缺陷或请求功能。

一个用于 DuckDB 的时间序列预测扩展,包含 32 个模型、数据准备和分析功能 ------ 全部使用纯 SQL 实现。

✨ 主要特性

🎯 预测(32 个模型)

  • 自动机器学习:AutoETS、AutoARIMA、AutoMFLES、AutoMSTL、AutoTBATS
  • 统计学模型:ETS、ARIMA、Theta、Holt-Winters、季节性朴素法
  • 高级模型:TBATS、MSTL、MFLES(支持多季节性)
  • 间歇需求模型:Croston、ADIDA、IMAPA、TSB
  • 外生变量:ARIMAX、ThetaX、MFLESX(支持外部回归变量)

📊 完整工作流

  • 探索性数据分析与数据质量:5 个函数(2 个表函数、3 个宏),用于探索性分析和数据质量评估
  • 数据准备:12 个宏,用于清洗和转换
  • 多键层次结构:4 个函数,用于组合、聚合和拆分层次时间序列(区域/商店/商品)
  • 交叉验证与回测:支持扩展窗口、固定窗口、滑动窗口、间隔、禁止期和可变预测范围
  • 共形预测:无需分布假设、具有保证覆盖概率的预测区间
  • 评估:12 个指标,包括覆盖率分析
  • 季节性检测:自动周期识别、季节性分类和峰值检测
  • 变点检测:带有概率的状态识别

🔢 特征计算

  • 76+ 个统计特征:为机器学习流水线提取全面的时间序列特征
  • GROUP BY 与窗口支持:面向多序列特征提取的 DuckDB 原生并行能力
  • 灵活配置:选择特定特征、自定义参数,或使用 JSON/CSV 配置
  • 兼容 tsfresh:与现有机器学习工作流无缝集成(后续也将兼容 hctsa)

⚡ 性能

  • 并行处理:基于 GROUP BY 的 DuckDB 原生并行能力
  • 可扩展:处理数百万条序列
  • 内存高效:列式存储、流式操作
  • 原生 Rust 核心:数据准备和预测的高性能原生实现

🎨 用户友好的 API

  • 零配置:所有宏自动加载
  • 一致的参数风格:基于映射(MAP)的参数方式
  • 可组合:轻松链式调用
  • 多语言支持:可从 Python、R、Julia、C++、Rust 等语言使用!

📋 目录

致谢

本扩展使用了 anofox-forecast Rust crate,并实现了多个开源项目的算法。

完整的致谢和许可证信息请参见 <THIRD_PARTY_NOTICES.md>。

安装

社区扩展安装

sql 复制代码
INSTALL anofox_forecast FROM community;
LOAD anofox_forecast;

从源代码构建

bash 复制代码
# 克隆仓库
git clone --recurse-submodules https://github.com/DataZooDE/anofox-forecast.git
cd anofox-forecast

# 构建扩展(选择其中一种方式)
# 此步骤需要 Rust 工具链和 CMake
make release -j$(nproc)      # 使用 Make
GEN=ninja make release       # 使用 Ninja(更快)

# 扩展将构建到:
# build/release/extension/anofox_forecast/anofox_forecast.duckdb_extension

🚀 M5 数据集上的快速开始

在 Dell XPS 13 上,预测大约需要 2 分钟。(需要 DuckDB v1.5.1+)

sql 复制代码
-- 加载扩展
LOAD httpfs;
LOAD anofox_forecast;

🌍 多语言支持

一次编写 SQL,随处使用! 该扩展可从任何带有 DuckDB 绑定的语言中使用。

语言 状态 说明
Python 通过 DuckDB Python 绑定
R 通过 DuckDB R 绑定
Julia 通过 DuckDB Julia 绑定
C++ 通过 DuckDB C++ 绑定
Rust 通过 DuckDB Rust 绑定
Node.js 通过 DuckDB Node 绑定
Go 通过 DuckDB Go 绑定
Java 通过 DuckDB JDBC 驱动

📚 API 参考

完整的函数签名、参数和详细文档,请参见 API 参考

文档结构

类别 说明 文档
入门 安装和首次预测 入门指南
模型选择 选择合适的模型 模型选择指南
交叉验证 评估预测精度 交叉验证指南

API 文档

主题 说明 参考文档
层次数据 多键层次函数 02-hierarchical.md
统计 34 个统计指标、数据质量 03-statistics.md
数据准备 清洗、填补、过滤 04-data-preparation.md
周期检测 季节性检测(12 种方法) 05-period-detection.md
变点检测 结构断点检测 06-changepoint-detection.md
预测 32 个预测模型 07-forecasting.md
交叉验证 回测和交叉验证函数 08-cross-validation.md
评估指标 12 个精度指标 09-evaluation-metrics.md
共形预测 无分布假设的预测区间 11-conformal-prediction.md
特征提取 117 个 tsfresh 兼容特征 20-feature-extraction.md

模型参考(32 个模型)

类别 模型 参考文档
基线模型 Naive、SMA、SeasonalNaive、RandomWalkDrift baseline/
指数平滑 SES、Holt、HoltWinters、SeasonalES exponential-smoothing/
状态空间模型 ETS、ARIMA、AutoETS、AutoARIMA state-space/
Theta 模型 Theta、OptimizedTheta、DynamicTheta、AutoTheta theta/
多季节性模型 MFLES、MSTL、TBATS(含自动变体) multi-seasonal/
间歇需求模型 Croston、CrostonSBA、ADIDA、IMAPA、TSB intermittent/

📦 开发

前提条件

在构建之前,请安装所需的依赖项:

Manjaro/Arch Linux

bash 复制代码
sudo pacman -S base-devel cmake ninja openssl eigen

Ubuntu/Debian

bash 复制代码
sudo apt update
sudo apt install build-essential cmake ninja-build libssl-dev libeigen3-dev

Fedora/RHEL

bash 复制代码
sudo dnf install gcc-c++ cmake ninja-build openssl-devel eigen3-devel

macOS

bash 复制代码
brew install cmake ninja openssl eigen

Windows(选项 1 - vcpkg,推荐):

powershell 复制代码
# 安装 vcpkg
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat

# 安装依赖项
.\vcpkg\vcpkg install eigen3 openssl

# 使用 vcpkg 工具链构建
cmake -DCMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake .
cmake --build . --config Release

Windows(选项 2 - MSYS2/MinGW):

bash 复制代码
# 在 MSYS2 MinGW64 终端中
pacman -S mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja
pacman -S mingw-w64-x86_64-openssl mingw-w64-x86_64-eigen3

# 然后正常构建
make -j$(nproc)

Windows(选项 3 - WSL,最简单):

bash 复制代码
# 在 WSL 中使用 Ubuntu
wsl --install
# 然后按照上面的 Ubuntu 说明操作

必需项

  • C++ 编译器(GCC 9+ 或 Clang 10+)
  • CMake 3.15+
  • OpenSSL(开发库)
  • Eigen3(线性代数库)
  • Make 或 Ninja(构建系统)

从源代码构建

bash 复制代码
# 克隆仓库(包含子模块)
git clone --recurse-submodules https://github.com/DataZooDE/anofox-forecast.git
cd anofox-forecast

# 设置 Git 钩子(推荐)
./scripts/setup-hooks.sh

# 构建(选择其中一种方式)
make -j$(nproc)              # 使用 Make
GEN=ninja make release       # 使用 Ninja(更快)

代码质量

本项目使用 Git 钩子在提交前确保代码质量:

  • cargo fmt ------ 强制执行一致的代码格式
  • cargo clippy ------ 捕获常见错误并强制执行最佳实践

克隆后设置钩子:

bash 复制代码
./scripts/setup-hooks.sh

手动运行检查:

bash 复制代码
cargo fmt --all           # 格式化代码
cargo clippy --workspace  # 运行代码检查工具
cargo test --workspace    # 运行测试

验证安装

bash 复制代码
# 测试扩展
./build/release/duckdb -c "
LOAD 'build/release/extension/anofox_forecast/anofox_forecast.duckdb_extension';
SELECT '扩展加载成功! ✅' AS status;
"

加载扩展

sql 复制代码
-- 在 DuckDB 中
LOAD 'path/to/anofox_forecast.duckdb_extension';

-- 验证所有函数是否可用
SELECT * FROM TS_FORECAST('sales', date, amount, 'AutoETS', 7, {'seasonal_period': 7});

📄 许可证

商业源代码许可证 1.1(BSL 1.1)

要点

允许生产使用 ------ 在您的企业内部使用

允许开发使用 ------ 用于构建应用程序

允许研究使用 ------ 学术和科研用途

不得作为托管服务提供 ------ 不可向第三方提供 SaaS 服务

不得嵌入商业产品 ------ 禁止向第三方分发

🔄 转换为 MPL 2.0 ------ 首次发布 5 年后自动转换

完整条款请参见 <LICENSE> 文件。

🤝 贡献

欢迎贡献!请参阅 <CONTRIBUTING.md> 了解贡献指南。

📞 支持

🎓 引用

如果您在研究中使用本扩展,请引用:

bibtex 复制代码
@software{anofox_forecast,
  title = {Anofox Forecast: Time Series Forecasting for DuckDB},
  author = {Joachim Rosskopf, Simon Müller, DataZoo GmbH},
  year = {2025},
  url = {https://github.com/DataZooDE/anofox-forecast}
}

🏆 致谢

本扩展构建在以下项目之上:

特别感谢 DuckDB 团队使扩展成为可能!


Anofox 团队 ❤️ 呈献

如果您觉得有用,请给我们点个 Star!

📢 关注我们 获取更新:LinkedIn @datazoo

🚀 立即开始LOAD 'anofox_forecast';

相关推荐
meta INGU1 小时前
mysql数据被误删的恢复方案
数据库·mysql
xyq20241 小时前
SVG 阴影
开发语言
27669582921 小时前
acw_sc__v2
数据库·acw_sc__v2·acw_sc__v2逆向·acw_sc__v2算法分析·acw_sc__v2分析·acw_sc__v2还原·acw_sc__v2-ck
好奇龙猫1 小时前
[大学院ーpython-base learning3: python and recommendation system ]
开发语言·python
澈2071 小时前
C++引用与指针:核心区别全解析
开发语言·数据结构·c++
沐知全栈开发1 小时前
Scala Iterator(迭代器)
开发语言
Empty-Filled1 小时前
Claude Gateway 排查教程
网络·数据库·人工智能
篮子里的玫瑰1 小时前
Python与网络爬虫——字典与集合
开发语言·python
良木生香1 小时前
【C++初阶】STL——Vector从入门到应用完全指南(1)
开发语言·c++·神经网络·算法·计算机视觉·自然语言处理·数据挖掘