Python的Darts库实现时间序列预测

2025-09-14 23:50

本文主要是介绍Python的Darts库实现时间序列预测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python的Darts库实现时间序列预测》Darts一个集统计、机器学习与深度学习模型于一体的Python时间序列预测库,本文主要介绍了Python的Darts库实现时间序列预测,感兴趣的可以了解...

在人工智能和数据分析领域,时间序列预测 是一个极其重要的分支,它贯穿了金融、能源、医疗、交通、零售等多个行业。从预测股票价格、能源消耗,到销售量、疾病传播趋势,时间序列建模已成为数据科学家必须掌握的核心技能。

而在 python 生态中,有一个优雅且功能强大的时间序列预测库正在迅速流行起来,它就是——Darts

本文将深入解析 Darts 库的设计理念、核心组件、使用方法和典型应用案例,帮助你快速掌握这一工具并将其用于实际项目中。

目录

  1. 什么是 Darts?
  2. 安装与基本配置
  3. 时间序列数据结构与预处理
  4. 多种模型接口:ARIMA、Prophet、RNN、Transformer 等
  5. 模型训练与评估
  6. 多变量、多步预测与反向验证
  7. 实战案例:预测电力消耗曲线
  8. 与其他时间序列工具对比
  9. 优势android与局限性
  10. 总结与展望

一、什么是 Darts?

Darts 是一个 Python 时间序列分析和预测库,由 Unit8 公司开发,目标是提供一个统一、简单的接口来使用包括经典统计模型、机器学习模型和深度学习模型在内的各种时间序列方法。

“从 ARIMA 到 Transformer,只用几行代码。”——这是 Darts 的宗旨。

核心功能包括:

  • 单变量与多变量预测
  • 单步与多步预测(Recursive, Direct, Mixed)
  • 时间序列的平滑、差分、归一化等预处理工具
  • 集成多个主流模型(ARIMA、Prophet、LSTM、NBEATS、Transformer、XGBoost)
  • 模型组合与集成
  • 时间序列回测与评估
  • 与 pandas/Numpy 深度集成,极易上手

二、安装与基本配置

安装 Darts

pip install u8darts[all]  # 安装所有依赖,包括深度学习模型

或者只安装核心功能:

pip install u8darts

注意:建议使用 Python 3.8+ 环境,并提前安装 PyTorch、lightgbm、xgboost 等依赖包。

导入基础模块

from darts import TimeSeries
from darts.models import NBEATSModel, ExponentialSmoothing
from darts.metrics import mape
http://www.chinasem.cn

三、编程时间序列数据结构与预处理

在 Darts 中,核心数据结构是 TimeSeries 对象,类似于 pandas DataFrame 但为时间序列优化

创建一个简单序列:

import pandas as pd
from darts import TimeSeries

df = pd.read_csv("air_passengers.csv", parse_dates=["Month"])
series = TimeSeries.from_dataframe(df, "Month", "#Passengers")

常见预处理操作:

# 插值填补缺失值
series = series.interpolate()

# 平滑处理
smoothed = series.rolling(window=12)

# 归一化
from darts.dataprocessing.transformers import Scaler
scaler = Scaler()
normalized = scaler.fit_transform(series)

四、多种模型接口:从经典到深度学习

Darts 内置多种模型,统一 API:

模型类别模型名称
统计模型ARIMA, ExponentialSmoothing, Theta, KalmanFilter
ML 模型RegressionModel (支持 XGBoost, LightGBM)
DL 模型RNN, LSTM, NBEATS, Transformer, TCN, blockRNN
外部模型Prophet, TBATS

示例:使用 ARIMA

from darts.models import ARIMA

model = ARIMA()
model.fit(series[:-36])
forecast = model.predict(36)

使用深度模型(如 N-BEATS)

model = NBEATSModel(input_chunk_length=36, output_chunk_length=12, n_epochs=100)
model.fit(series[:-36])
forecast = model.predict(36)

五、模型训练与评估

划分训练集与测试集

train, val = series.split_before(0.8)

训练与预测

model = ExponentialSmoothing()
model.fit(train)
pred = model.predict(len(val))

评估结果

from darts.metrics import mape

error = mape(val, pred)
print(f"MAPE: {error:.2f}%")

还可以使用 RMSE、MASE、sMAPE 等指标。

六、多变量、多步预测与回测

Darts 非常适合多变量预测和多步预测,适合多特征建模。

多变量输入:

# 将多个 TimeSeries 合并为 multivariate series
combined = TimeSeries.from_dataframe(df, time_col="Date", value_cols=["Temp", "Humidity", "PowerLoad"])

多步预测策略:

  • Direct:为每一个未来时间点训练一个独立模型;
  • Recursive:一个模型递归预测;
  • Mixed:结合两者优点。

Darts 的模型大部分支持这三种策略,自动处理长序列预测问题。

七、实战案例:电力负荷预测

我们以电力系统的负荷曲线为例,预测未来一周的电力需求。

Step 1:加载数据

df = pd.read_csv("power_load.csv", parse_dates=["timestamp"])
series = TimeSeries.from_dataframe(df, "timestamp", "load_kw")

Step 2:训练集与测试集划分

train, val = series.split_before(pd.Timestamp("2023-06-01"))

Step 3:建立模型并训练

model = TransformerModel(input_chunk_length=48, output_chunk_length=24, n_epochs=150)
model.fit(train)

Step 4:预测与评估

forecast = model.predict(n=72)
mape_score = mape(val[:72], forecast)

Step 5:可视化结果

series.plot(label="Actual")
forecast.plot(label="Forecast")

结果曲线可以明显看出模型预测能力强,且具有平滑性。

八、与其他时间序列库对比

特性DartsProphetstatsmodelsgluontssktime
多模型统一接口
多步预测支持
深度学习支持
多变量支持部分
易用性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

九、优势与局限性分析

✅ 优势:

  • 统一 API:无论是 ARIMA 还是 LSTM,一套接口调用;
  • 模型丰富:融合统计与深度模型,适配各种数据;
  • 可扩展性强:支持定制模型、集成多个模型;
  • 支持 PyTorch 后端:深度模型训练快速;
  • 强大的时间序列处理模块:平滑、差分、补全、归一化一步到位;
  • 回测与模型选择模块完善:可以实现自动模型选择。

❌ 局限性:

  • 模型训练速度相较 scikit-learn 稍慢;
  • 深度学习模型训练需 GPU 否则效率低;
  • 在大规模部署场景下还需与其它工具配合(如 Apache Kafka);
  • 学习曲线相对 Prophet、statsmodels 略高。

十、总结与展望

Darts 是当前 Python 时间序列预测领域功能最全、结构最优雅的库之一,适合数据科学家、研究人员与开发者快速构建预测系统。

无论你是做传统的财务China编程指标预测,还是深度学习驱动的能源需求预测,Darts 都提供了强大而灵活的工具链。随着其社区持续扩展,未来有望成为时间序列领域的“scikit-learn”。

到此这篇关于Python的Darts库实现时间序列预测的文章就介绍到这了,更多相关Python Darts库时间序列内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Python的Darts库实现时间序列预测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155928

相关文章

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima