prophet-ruby

prophet-ruby

Ruby的Prophet时间序列预测库

Prophet.rb是Ruby版的时间序列预测库,源自Facebook的Prophet项目。它支持多重季节性、线性和非线性增长、节假日效应,可处理缺失数据。提供简单和高级API,功能包括异常检测、饱和预测、趋势变点分析和模型诊断。Prophet.rb简化了预测、可视化和模型优化流程,适用于各种数据分析和预测任务。

Prophet时间序列预测Ruby数据分析机器学习Github开源项目

Prophet.rb

Ruby版时间序列预测库,移植自Prophet

支持:

  • 多重季节性
  • 线性和非线性增长
  • 节假日和特殊事件

并能优雅地处理缺失数据

构建状态

安装

在应用的Gemfile中添加以下行:

gem "prophet-rb"

简单API

预测

获取时间序列的未来预测

series = { Date.parse("2020-01-01") => 100, Date.parse("2020-01-02") => 150, Date.parse("2020-01-03") => 136, # ... } Prophet.forecast(series)

指定返回的预测数量

Prophet.forecast(series, count: 3)

Groupdate配合使用效果很好

series = User.group_by_day(:created_at).count Prophet.forecast(series)

支持高级API选项

Prophet.forecast(series, growth: "logistic", weekly_seasonality: false)

异常检测

检测时间序列中的异常

Prophet.anomalies(series)

指定不确定性区间的宽度(减小以获得更多异常)

Prophet.anomalies(series, interval_width: 0.99)

同样支持高级API选项

Prophet.anomalies(series, growth: "logistic", weekly_seasonality: false)

高级API

查看Prophet文档以获取所有功能的详细说明。高级API遵循Python API并支持相同的功能。它使用Rover处理数据框。

高级快速入门

说明

创建包含dsy列的数据框 - 这里有一个示例可供使用

df = Rover.read_csv("example_wp_log_peyton_manning.csv") df.head
dsy
2007-12-109.59076113
2007-12-118.51959031
2007-12-128.18367658
2007-12-138.07246736
2007-12-147.89357207

拟合模型

m = Prophet.new m.fit(df)

创建包含未来日期ds列的数据框

future = m.make_future_dataframe(periods: 365) future.tail
ds
2017-01-15
2017-01-16
2017-01-17
2017-01-18
2017-01-19

进行预测

forecast = m.predict(future) forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail
dsyhatyhat_loweryhat_upper
2017-01-158.211928407.525264428.92389960
2017-01-168.536963597.791249709.22620028
2017-01-178.324398917.624826999.04719328
2017-01-188.157023957.400799688.91301650
2017-01-198.169004337.456736788.83486188

绘图

要进行绘图,请安装matplotlib gem。

绘制预测图

m.plot(forecast).savefig("forecast.png")

预测

绘制组件图

m.plot_components(forecast).savefig("components.png")

组件

饱和预测

说明

预测逻辑增长而非线性增长

df = Rover.read_csv("example_wp_log_R.csv") df["cap"] = 8.5 m = Prophet.new(growth: "logistic") m.fit(df) future = m.make_future_dataframe(periods: 1826) future["cap"] = 8.5 forecast = m.predict(future)

饱和最小值

df["y"] = 10 - df["y"] df["cap"] = 6 df["floor"] = 1.5 future["cap"] = 6 future["floor"] = 1.5 m = Prophet.new(growth: "logistic") m.fit(df) forecast = m.predict(future)

趋势变点

说明

绘制变点

fig = m.plot(forecast) m.add_changepoints_to_plot(fig.gca, forecast)

调整趋势灵活性

m = Prophet.new(changepoint_prior_scale: 0.5)

指定变点位置

m = Prophet.new(changepoints: ["2014-01-01"])

节假日和特殊事件

说明

创建包含holidayds列的数据框。包括过去数据中的所有出现以及你想预测的未来出现。

playoffs = Rover::DataFrame.new({ "holiday" => "playoff", "ds" => [ "2008-01-13", "2009-01-03", "2010-01-16", "2010-01-24", "2010-02-07", "2011-01-08", "2013-01-12", "2014-01-12", "2014-01-19", "2014-02-02", "2015-01-11", "2016-01-17", "2016-01-24", "2016-02-07" ], "lower_window" => 0, "upper_window" => 1 }) superbowls = Rover::DataFrame.new({ "holiday" => "superbowl", "ds" => ["2010-02-07", "2014-02-02", "2016-02-07"], "lower_window" => 0, "upper_window" => 1 }) holidays = playoffs.concat(superbowls) m = Prophet.new(holidays: holidays) m.fit(df)

添加特定国家的节假日

m = Prophet.new m.add_country_holidays("US") m.fit(df)

指定自定义季节性

m = Prophet.new(weekly_seasonality: false) m.add_seasonality(name: "monthly", period: 30.5, fourier_order: 5) forecast = m.fit(df).predict(future)

指定额外的回归变量

nfl_sunday = lambda do |ds| date = ds.respond_to?(:to_date) ? ds.to_date : Date.parse(ds) date.wday == 0 && (date.month > 8 || date.month < 2) ? 1 : 0 end df["nfl_sunday"] = df["ds"].map(&nfl_sunday) m = Prophet.new m.add_regressor("nfl_sunday") m.fit(df) future["nfl_sunday"] = future["ds"].map(&nfl_sunday) forecast = m.predict(future)

乘法季节性

说明

指定乘法季节性

df = Rover.read_csv("example_air_passengers.csv") m = Prophet.new(seasonality_mode: "multiplicative") m.fit(df) future = m.make_future_dataframe(periods: 50, freq: "MS") forecast = m.predict(future)

添加季节性和回归变量时指定模式

m = Prophet.new(seasonality_mode: "multiplicative") m.add_seasonality(name: "quarterly", period: 91.25, fourier_order: 8, mode: "additive") m.add_regressor("regressor", mode: "additive")

不确定性区间

说明

指定不确定性区间的宽度(默认为80%)

Prophet.new(interval_width: 0.95)

获取季节性的不确定性

Prophet.new(mcmc_samples: 300)

异常值

说明

移除异常值

df = Rover.read_csv("example_wp_log_R_outliers1.csv") df["y"][(df["ds"] > "2010-01-01") & (df["ds"] < "2011-01-01")] = Float::NAN m = Prophet.new.fit(df)

非日常数据

说明

次日数据

df = Rover.read_csv("example_yosemite_temps.csv") m = Prophet.new(changepoint_prior_scale: 0.01).fit(df) future = m.make_future_dataframe(periods: 300, freq: "H") forecast = m.predict(future)

诊断

解释

交叉验证

df_cv = Prophet::Diagnostics.cross_validation(m, initial: "730 days", period: "180 days", horizon: "365 days")

自定义切点

cutoffs = ["2013-02-15", "2013-08-15", "2014-02-15"].map { |v| Time.parse("#{v} 00:00:00 UTC") } df_cv2 = Prophet::Diagnostics.cross_validation(m, cutoffs: cutoffs, horizon: "365 days")

获取性能指标

df_p = Prophet::Diagnostics.performance_metrics(df_cv)

绘制交叉验证指标图

Prophet::Plot.plot_cross_validation_metric(df_cv, metric: "mape")

超参数调优

param_grid = { changepoint_prior_scale: [0.001, 0.01, 0.1, 0.5], seasonality_prior_scale: [0.01, 0.1, 1.0, 10.0] } # 生成所有参数组合 all_params = param_grid.values[0].product(*param_grid.values[1..-1]).map { |v| param_grid.keys.zip(v).to_h } rmses = [] # 在此存储每组参数的RMSE # 使用交叉验证评估所有参数 all_params.each do |params| m = Prophet.new(**params).fit(df) # 使用给定参数拟合模型 df_cv = Prophet::Diagnostics.cross_validation(m, cutoffs: cutoffs, horizon: "30 days") df_p = Prophet::Diagnostics.performance_metrics(df_cv, rolling_window: 1) rmses << df_p["rmse"][0] end # 找出最佳参数 tuning_results = Rover::DataFrame.new(all_params) tuning_results["rmse"] = rmses p tuning_results

其他主题

解释

保存模型

File.write("model.json", m.to_json)

加载模型

m = Prophet.from_json(File.read("model.json"))

使用与Python相同的格式,因此模型可以在两种语言中保存和加载

平坦趋势

m = Prophet.new(growth: "flat")

更新已拟合的模型

def stan_init(m) res = {} ["k", "m", "sigma_obs"].each do |pname| res[pname] = m.params[pname][0, true][0] end ["delta", "beta"].each do |pname| res[pname] = m.params[pname][0, true] end res end df = Rover.read_csv("example_wp_log_peyton_manning.csv") df1 = df[df["ds"] <= "2016-01-19"] # 除最后一天外的所有数据 m1 = Prophet.new.fit(df1) # 使用除最后一天外的所有数据拟合的模型 m2 = Prophet.new.fit(df) # 添加最后一天,从头开始拟合 m2 = Prophet.new.fit(df, init: stan_init(m1)) # 添加最后一天,从m1热启动

资源

致谢

该库是从Prophet Python库移植而来,并使用相同的许可证。

历史

查看更新日志

贡献

我们鼓励每个人都参与改进这个项目。以下是一些您可以帮助的方式:

要开始开发,请执行以下操作:

git clone https://github.com/ankane/prophet-ruby.git cd prophet-ruby bundle install bundle exec rake vendor:all bundle exec rake test

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多