来源: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> 了解贡献指南。
📞 支持
- 文档 :<docs/>
- 问题反馈 :GitHub Issues
- 讨论交流 :GitHub Discussions
- 电子邮件:sm@data-zoo.de
🎓 引用
如果您在研究中使用本扩展,请引用:
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-forecast ------ 核心预测库
- anofox-regression ------ 回归与特征提取
特别感谢 DuckDB 团队使扩展成为可能!
Anofox 团队 ❤️ 呈献
⭐ 如果您觉得有用,请给我们点个 Star!
📢 关注我们 获取更新:LinkedIn @datazoo
🚀 立即开始 :LOAD 'anofox_forecast';