Scalecast
关于
Scalecast 帮助你进行时间序列预测。以下是如何初始化其主要对象:
from scalecast.Forecaster import Forecaster
f = Forecaster(
y = 值数组,
current_dates = 日期数组,
future_dates=预测周期长度,
test_length = 0, # 你想测试所有模型吗?如果是,要测试多少观测值或百分比?
cis = False, # 为所有模型评估一致性置信区间?
metrics = ['rmse','mape','mae','r2'], # 在验证/测试集上评估哪些指标?
)
通过 Forecaster
和 MVForecaster
接口提供统一的机器学习建模(包括来自多个库的模型,如 scikit-learn、statsmodels 和 tensorflow)、报告和数据可视化。数据存储和处理变得简单,因为所有适用的数据、预测和许多衍生指标都包含在几个对象中,并可通过不同模块进行大量自定义。欢迎功能请求和问题报告!别忘了给个星星!⭐
文档
热门功能
- **简易 LSTM 建模:**使用 tensorflow 为时间序列设置 LSTM 模型很困难。使用 scalecast 则很容易。许多为初学者设计的教程和 Kaggle 笔记本都使用 scalecast(参见文章)。
f.set_estimator('lstm')
f.manual_forecast(
lags=36,
batch_size=32,
epochs=15,
validation_split=.2,
activation='tanh',
optimizer='Adam',
learning_rate=0.001,
lstm_layer_sizes=(100,)*3,
dropout=(0,)*3,
)
- 自动滞后、趋势和季节性选择:
f.auto_Xvar_select( # 迭代不同协变量组合
estimator = 'lasso', # 使用哪个估计器?
alpha = .2, # 估计器超参数?
monitor = 'ValidationMetricValue', # 监控哪个指标来做决策?
cross_validate = True, # 交叉验证
cvkwargs = {'k':3}, # 3折
)
- 使用网格搜索和时间序列交叉验证进行超参数调优:
from scalecast import GridGenerator
GridGenerator.get_example_grids()
models = ['ridge','lasso','xgboost','lightgbm','knn']
f.tune_test_forecast(
models,
limit_grid_size = .2,
feature_importance = True, # 为每个模型保存 pfi 特征重要性?
cross_validate = True, # 交叉验证?如果为 False,则使用用户可以指定的单独验证集
rolling = True, # 滚动时间序列交叉验证?
k = 3, # 几折?
)
- **绘制结果:**绘制测试预测、预报、拟合值等。
import matplotlib.pyplot as plt
fig, ax = plt.subplots(2,1, figsize = (12,6))
f.plot_test_set(models=models,order_by='TestSetRMSE',ax=ax[0])
f.plot(models=models,order_by='TestSetRMSE',ax=ax[1])
plt.show()
- 包括转换、还原和回测的管道:
from scalecast import GridGenerator
from scalecast.Pipeline import Transformer, Reverter, Pipeline
from scalecast.util import find_optimal_transformation, backtest_metrics
def forecaster(f):
models = ['ridge','lasso','xgboost','lightgbm','knn']
f.tune_test_forecast(
models,
limit_grid_size = .2, # 对原始网格大小的20%进行随机网格搜索
feature_importance = True, # 为每个模型保存 pfi 特征重要性?
cross_validate = True, # 交叉验证?如果为 False,则使用用户可以指定的单独验证集
rolling = True, # 滚动时间序列交叉验证?
k = 3, # 几折?
)
transformer, reverter = find_optimal_transformation(f) # 这只是选择序列转换的几种方法之一
pipeline = Pipeline(
steps = [
('Transform',transformer),
('Forecast',forecaster),
('Revert',reverter),
]
)
f = pipeline.fit_predict(f)
backtest_results = pipeline.backtest(f)
metrics = backtest_metrics(backtest_results)
- **模型堆叠:**scalecast 有两种堆叠模型的方法,一种是使用 scikit-learn 的
StackingRegressor
,另一种是使用其自身的堆叠程序。
from scalecast.auxmodels import auto_arima
f.set_estimator('lstm')
f.manual_forecast(
lags=36,
batch_size=32,
epochs=15,
validation_split=.2,
activation='tanh',
optimizer='Adam',
learning_rate=0.001,
lstm_layer_sizes=(100,)*3,
dropout=(0,)*3,
)
f.set_estimator('prophet')
f.manual_forecast()
auto_arima(f)
# 堆叠先前评估的模型
f.add_signals(['lstm','prophet','arima'])
f.set_estimator('catboost')
f.manual_forecast()
- 多变量建模和多变量管道:
from scalecast.MVForecaster import MVForecaster
from scalecast.Pipeline import MVPipeline
from scalecast.util import find_optimal_transformation, backtest_metrics
from scalecast import GridGenerator
GridGenerator.get_mv_grids()
def mvforecaster(mvf):
models = ['ridge','lasso','xgboost','lightgbm','knn']
mvf.tune_test_forecast(
models,
limit_grid_size = .2, # 对原始网格大小的20%进行随机网格搜索
cross_validate = True, # 交叉验证?如果为 False,则使用用户可以指定的单独验证集
rolling = True, # 滚动时间序列交叉验证?
k = 3, # 几折?
)
mvf = MVForecaster(f1,f2,f3) # 可以接受 N 个 Forecaster 对象
transformer1, reverter1 = find_optimal_transformation(f1)
transformer2, reverter2 = find_optimal_transformation(f2)
transformer3, reverter3 = find_optimal_transformation(f3)
pipeline = MVPipeline(
steps = [
('Transform',[transformer1,transformer2,transformer3]),
('Forecast',mvforecaster),
('Revert',[reverter1,reverter2,reverter3])
]
)
f1, f2, f3 = pipeline.fit_predict(f1, f2, f3)
backtest_results = pipeline.backtest(f1, f2, f3)
metrics = backtest_metrics(backtest_results)
- 迁移学习(0.19.0版本新增): 在一个
Forecaster
对象中训练模型,并使用该模型对另一个单独的Forecaster
对象中的数据进行预测。
f = Forecaster(...)
f.auto_Xvar_select()
f.set_estimator('xgboost')
f.cross_validate()
f.auto_forecast()
f_new = Forecaster(...) # 与f不同的序列
f_new = infer_apply_Xvar_selection(infer_from=f,apply_to=f_new)
f_new.transfer_predict(transfer_from=f,model='xgboost') # 将f中的xgboost模型转移到f_new
安装
- 只需要安装基础包即可开始使用:
pip install --upgrade scalecast
- 可选附加包:
pip install tensorflow
(用于Windows上的RNN/LSTM)或pip install tensorflow-macos
(用于MAC/M1)pip install darts
pip install prophet
pip install greykite
(用于silverkite模型)pip install kats
(变点检测)pip install pmdarima
(自动ARIMA)pip install tqdm
(用于notebook的进度条)pip install ipython
(用于notebook的小部件)pip install ipywidgets
(用于notebook的小部件)jupyter nbextension enable --py widgetsnbextension
(用于notebook的小部件)jupyter labextension install @jupyter-widgets/jupyterlab-manager
(用于Lab的小部件)
使用scalecast的论文
- 使用机器学习技术预测疫情后客户服务行为
- 在不同气候条件下应用ANN和传统ML算法对堆肥生产进行建模
- 使用储层计算方法进行实际场景中的流量建模和预测
- 基于LSTM的循环神经网络提供有效的短期流感预测
- 使用能源价格和生产预测实施能源交易策略
- 购物中心访客数量的预测建模
Udemy课程
博客文章和notebook
使用不同模型类型进行预测
- Sklearn单变量
- Sklearn多变量
- RNN
- ARIMA
- Theta
- VECM
- 堆叠
- 其他Notebook
转换和还原
- 轻松实现时间序列转换(和还原)
- 笔记本
置信区间
- 时间序列的简易无分布共形区间
- 适用于任何时间序列模型的动态共形区间
- 笔记本1
- 笔记本2
动态验证
- 如何不被时间序列模型蒙蔽
- 时间序列的模型验证技术
- 笔记本
模型输入选择
- 时间序列的变量减少技术
- 使用机器学习技术进行时间序列的自动模型规范
- 笔记本1
- 笔记本2
多个序列的规模化预测
- 愿预测与你同在
- 介绍性笔记本部分
迁移学习
- 笔记本1
- 笔记本2
异常检测
- 使用蒙特卡罗模拟进行时间序列异常检测
- 笔记本1
- 笔记本2
贡献
- Contributing.md
- 想要一些未列出的内容?请提出问题!
如何引用scalecast
@misc{scalecast,
title = {{scalecast}},
author = {Michael Keith},
year = {2024},
version = {<你的版本>},
url = {https://scalecast.readthedocs.io/en/latest/},
}