如何在Facebook Prophet库中获取股价最后一段趋势线段的斜率?
获取Facebook Prophet最后一段趋势的斜率
方法1:从模型拟合参数提取
Prophet的分段趋势斜率变化存储在模型的params['delta']中,初始趋势斜率为params['k']。最后一段趋势的斜率等于初始斜率加上所有delta的总和:
# 假设已拟合好模型model initial_slope = model.params['k'][0] total_delta = sum(model.params['delta'][0]) final_slope = initial_slope + total_delta # 判断趋势方向 if final_slope > 0: print("上涨趋势") elif final_slope < 0: print("下跌趋势") else: print("横盘趋势")
方法2:从预测结果的趋势列计算
如果需要结合具体预测时间点的趋势值,可通过预测结果的trend列,取最后两个时间点计算斜率:
# 假设预测结果为forecast last_two_points = forecast[['ds', 'trend']].tail(2) # 计算时间差(单位:天) time_interval = (last_two_points['ds'].iloc[1] - last_two_points['ds'].iloc[0]).days # 计算斜率 slope = (last_two_points['trend'].iloc[1] - last_two_points['trend'].iloc[0]) / time_interval # 判断趋势方向 if slope > 0: print("上涨趋势") elif slope < 0: print("下跌趋势") else: print("横盘趋势")
补充说明
- 方法1直接调用模型拟合的原生参数,能精准反映模型学习到的最后一段趋势斜率;
- 方法2基于预测输出计算,更贴合实际预测的时间节点趋势;
- 若开启了MCMC采样(默认关闭),
params中的参数会是数组形式,此时可取均值来代表最终斜率:initial_slope = model.params['k'].mean(),total_delta = model.params['delta'].mean().sum()。
内容的提问来源于stack exchange,提问作者Anton Bocharov
相关产品推荐
相关产品推荐

