时间序列预测算法中的预测概率化笔记
文章目录
- 1 预测概率化的前情提要
- 2 预测概率化的代码示例
- 3 预测概率化在实际商业应用场景探索
- 3.1 智能库存与供应链优化
1 预测概率化的前情提要
笔者看到【行业SOTA,京东首个自研十亿级时序大模型揭秘】提到:
预测概率化组件:由于大部分纯时序大模型输出的是确定性的预测,没有预测的概率,这样无法计算RL中KL散度,策略概率的损失,我们构建了一个公用的组件,适配所有的时序模型(不限于大模型),我们利用分布建模的方法,将时序的预测以及好坏的预测假设服从N(μ,1)的正态分布,对于均值的计算则直接利用输出的预测的均值则可以计算而成,这样可以快速输出预测的概率。
大多数传统时序模型只输出一个确定性预测值,假设是预测销量,实际上,真实销量很少会正好是100件,它可能在98到102之间波动,或者有更宽的范围。
强化学习(RL)在做决策时,比如决定备多少货,它不仅想知道“最可能”的销量是多少,更想知道各种可能销量发生的“概率”。比如,备100件货,亏损的概率是多大?备105件货,过剩的风险有多高?这些都离不开概率信息。
文章中提到,多元时序模型给出一个确定性预测值(比如100件)时,这个组件并不会直接用这个100。它会把这个100视为一个中心点或均值。
然后,它假设实际的销量会以这个中心点为基础,在一个钟形曲线(即正态分布)的范围内波动。
“钟形曲线” N(μ,1) 的解读:
- μ(均值): 这个就是你的时序模型预测出来的那个确定性销量值。比如,如果时序预测是100件,那么这个概率分布的中心就是100。
- 1(方差): 它强制规定这个钟形曲线的“胖瘦”(即不确定性)是固定的,方差永远是1。为什么要固定为1? 是为了简化和标准化,为了让所有预测都能快速转换为RLHF所需的概率格式,组件选择了一个固定的、简单的方差,让RLHF能够统一地处理这些概率信息,从而方便地计算KL散度
2 预测概率化的代码示例
让大模型给出一些多元时序预测的案例:
import numpy as np
import pandas as pd
import xgboost as xgb # 用于模拟XGBoost模型
from sklearn.model_selection import train_test_split
from scipy.stats import norm # 用于构建N(μ,1)正态分布
import matplotlib.pyplot as plt
import seaborn as sns# 设置绘图风格
sns.set_theme(style="whitegrid")# --- 1. 模拟多元时间序列数据 ---
# 假设我们有销量、价格、促销活动(0/1)作为特征
np.random.seed(42) # 为了结果可复现# 创建时间索引
dates = pd.date_range(start='2023-01-01', periods=100, freq='D')# 模拟目标变量:销量
sales = 100 + np.sin(np.arange(100) / 10) * 20 + np.random.normal(0, 5, 100)
# 模拟特征:价格(与销量负相关),促销活动(与销量正相关)
price = 50 - np.cos(np.arange(100) / 10) * 10 + np.random.normal(0, 2, 100)
promotion = np.random.randint(0, 2, 100) # 0: 无促销, 1: 有促销# 创建DataFrame
data = pd.DataFrame({'sales': sales, 'price': price, 'promotion': promotion}, index=dates)print("--- 模拟多元时间序列数据 (部分) ---")
print(data.head())
print("\n")# --- 2. 模拟XGBoost模型进行预测 ---
# 在多元时间序列预测中,通常会构建滞后特征 (lag features)
def create_lag_features(df, target_col, lags):"""为目标列创建滞后特征"""df_lagged = df.copy()for lag in lags:df_lagged[f'{target_col}_lag_{lag}'] = df_lagged[target_col].shift(lag)return df_lagged# 为销量创建滞后特征
lags = [1, 2, 7] # 假设考虑前1天、前2天和前7天的销量
data_with_lags = create_lag_features(data, 'sales', lags)# 移除含有NaN的行 (由于滞后特征导致)
data_with_lags = data_with_lags.dropna()# 定义特征 (X) 和目标 (y)
features = [f'sales_lag_{lag}' for lag in lags] + ['price', 'promotion']
X = data_with_lags[features]
y = data_with_lags['sales']# 划分训练集和测试集 (简单的时间序列划分,通常是按时间点划分)
# 这里为了演示简单,我们取最后1行为测试集进行预测
X_train = X.iloc[:-1]
y_train = y.iloc[:-1]
X_test = X.iloc[-1:] # 用于预测的最新一行数据print("--- XGBoost 模型训练与预测 ---")
# 初始化并训练XGBoost回归模型
xgb_model = xgb.XGBRegressor(objective='reg:squarederror', n_estimators=100, random_state=42)
xgb_model.fit(X_train, y_train)# 使用训练好的XGBoost模型进行预测
# .predict() 方法会返回一个确定性的预测值数组
xgboost_deterministic_prediction = xgb_model.predict(X_test)[0] # 取第一个预测值print(f"XGBoost模型预测的未来销量 (确定性预测): {xgboost_deterministic_prediction:.2f} 件")
print("\n")# --- 3. 【预测概率化组件】的实现 ---
def probabilistic_prediction_component(deterministic_forecast: float):"""【预测概率化组件】的核心逻辑:将一个确定性预测值转换为一个N(μ, 1)的正态概率分布。Args:deterministic_forecast (float): 从时序模型(如XGBoost)获得的确定性预测值。Returns:scipy.stats._distn_infrastructure.rv_continuous_frozen:一个表示N(μ, 1)正态分布的frozen分布对象。"""# 均值 (μ):直接使用时序模型(XGBoost)给出的确定性预测值。# 这是构建正态分布的中心点。mean_of_distribution = deterministic_forecast# 方差固定为1,因此标准差 (σ) 也是1。# 这是该组件的标准化处理,意味着所有预测的“不确定性宽度”是统一的。std_dev_of_distribution = 1.0# 构建并返回一个正态分布对象。# norm(loc=mean, scale=std_dev) 创建一个正态分布,# loc是均值,scale是标准差。probabilistic_dist = norm(loc=mean_of_distribution, scale=std_dev_of_distribution)return probabilistic_distprint("--- 应用【预测概率化组件】 ---")
# 应用组件,将XGBoost的确定性预测转化为概率分布
sales_prob_distribution = probabilistic_prediction_component(xgboost_deterministic_prediction)print(f"经组件处理后,销量预测被表示为一个均值为 {sales_prob_distribution.mean():.2f},")
print(f"标准差为 {sales_prob_distribution.std():.2f} 的正态分布。")# --- 4. 如何利用这个概率分布进行强化学习相关计算 (示例) ---# 例如,计算某个销量值(例如95.0件)在当前分布下的概率密度
target_sales_value = 95.0
pdf_at_target = sales_prob_distribution.pdf(target_sales_value)
print(f"\n在当前概率分布下,销量为 {target_sales_value:.1f} 件的概率密度: {pdf_at_target:.4f}")# 计算销量在某个范围内的概率(例如,销量在 90.0 到 100.0 之间)
lower_bound = 90.0
upper_bound = 100.0
# CDF (Cumulative Distribution Function) 给出小于或等于某个值的累积概率
probability_in_range = sales_prob_distribution.cdf(upper_bound) - sales_prob_distribution.cdf(lower_bound)
print(f"销量在 {lower_bound:.1f} 到 {upper_bound:.1f} 件之间的概率: {probability_in_range:.4f}")# --- 5. 可视化这个概率分布 ---
# 生成一系列可能的销量值,用于绘制概率密度函数 (PDF) 曲线
# 范围通常取均值上下几个标准差(这里取均值±4个标准差)
x_values = np.linspace(xgboost_deterministic_prediction - 4, xgboost_deterministic_prediction + 4, 500)# 计算每个销量值对应的概率密度
pdf_values = sales_prob_distribution.pdf(x_values)plt.figure(figsize=(10, 6))
plt.plot(x_values, pdf_values, label=f'N(μ={xgboost_deterministic_prediction:.2f}, σ=1) 分布')plt.title('XGBoost预测销量经【预测概率化组件】处理后的概率分布')
plt.xlabel('预测销量 (件)')
plt.ylabel('概率密度')
plt.axvline(xgboost_deterministic_prediction, color='r', linestyle='--', label='XGBoost确定性预测值 (μ)')
plt.fill_between(x_values, 0, pdf_values,where=(x_values >= (xgboost_deterministic_prediction - 1)) & (x_values <= (xgboost_deterministic_prediction + 1)),color='lightgreen', alpha=0.5, label='μ ± 1σ 范围 (约68%概率)')
plt.legend()
plt.grid(True)
plt.show()
最终会输出:
--- 模拟多元时间序列数据 (部分) ---sales price promotion
2023-01-01 102.483571 37.169259 1
2023-01-02 101.305347 39.208668 1
2023-01-03 107.211829 39.513905 0
2023-01-04 113.525553 38.842081 1
2023-01-05 106.617600 40.466819 0--- XGBoost 模型训练与预测 ---
XGBoost模型预测的未来销量 (确定性预测): 93.52 件--- 应用【预测概率化组件】 ---
经组件处理后,销量预测被表示为一个均值为 93.52,
标准差为 1.00 的正态分布。在当前概率分布下,销量为 95.0 件的概率密度: 0.1328
销量在 90.0 到 100.0 件之间的概率: 0.9998
3 预测概率化在实际商业应用场景探索
3.1 智能库存与供应链优化
举例思考:在化妆品公司如何应用这一组件
预测概率化组件的核心在于将一个单一的、确定的销量预测(比如“下个月卖出1000支口红”),转化成一个包含不确定性信息的概率分布(比如“下个月有95%的几率销量在950到1050支之间”)。
如果销量预测模型预测下个月销量是15,000支,传统上可能会直接安排生产15,000支。如果实际销量是15,500支,就可能卖断货;如果是14,500支,就会有500支积压。
假设: 对于明星产品,公司决定将缺货风险控制在2%。这意味着,他们希望有98%的几率能够满足所有客户的需求。
利用步骤2得到的 N ( 15000 , 1 ) N(15000,1) N(15000,1)概率分布,找到其累积概率达到98%时的销量值(这个值被称为98%分位数)。这个值就是为了确保98%的需求都能被满足,我们总共需要准备的库存量。
来看看一个较为完整的利用该组件数据驱动步骤步骤:
- 我们知道销量分布是 N ( 15000 , 1 ) N(15000,1) N(15000,1)。
- 通过统计计算(例如使用Python的
scipy.stats.norm.ppf(0.98, loc=15000, scale=1)
),可以得出大约是 15,001.95支。 - 向上取整,为确保98%的需求满足几率,公司需要的总库存量是15,002支。
- 缓冲库存量 = 15,002支 - 15,000支 = 2支。这2支就是为了应对那2%的“销量超出预测”的风险而准备的。
- 最终生产/补货量决策:假设目前仓库中“明星产品”的现有库存为 500支,下个月需要安排生产的量 = 15,002支(目标总库存) - 500支(当前库存) = 14,502支
相关文章:

时间序列预测算法中的预测概率化笔记
文章目录 1 预测概率化的前情提要2 预测概率化的代码示例3 预测概率化在实际商业应用场景探索3.1 智能库存与供应链优化 1 预测概率化的前情提要 笔者看到【行业SOTA,京东首个自研十亿级时序大模型揭秘】提到: 预测概率化组件:由于大部分纯时…...

2025-05-28 Python深度学习8——优化器
文章目录 1 工作原理2 常见优化器2.1 SGD2.2 Adam 3 优化器参数4 学习率5 使用最佳实践 本文环境: Pycharm 2025.1Python 3.12.9Pytorch 2.6.0cu124 优化器 (Optimizer) 是深度学习中的核心组件,负责根据损失函数的梯度来更新模型的参数,使…...

篇章二 数据结构——前置知识(二)
目录 1. 包装类 1.1 包装类的概念 1.2 基本数据类型和对应的包装类 1.3 装箱和拆箱 1.4 自动装箱和自动拆箱 1.5 练习 —— 面试题 2. 泛型 2.1 如果没有泛型——会出现什么情况? 2.2 语法 2.3 裸类型 1.没有写<> 但是没有报错为什么? …...
如果是在服务器的tty2终端怎么查看登陆服务器的IP呢
1. 如果是在服务器的tty2终端怎么查看登陆服务器的IP呢 在服务器的 tty2 或其他终端会话中,要查看与该服务器的连接相关的 IP 地址,可以使用几种命令来获取这些信息: 1.1 使用 who 命令: who 命令可以显示当前登录到服务器上的…...
Java求职面试:从核心技术到AI与大数据的全面考核
Java求职面试:从核心技术到AI与大数据的全面考核 第一轮:基础框架与核心技术 面试官:谢飞机,咱们先从简单的开始。请你说说Spring Boot的启动过程。 谢飞机:嗯,Spring Boot启动的时候会自动扫描组件&…...
ubuntu24.04与ubuntu22.04比,有什么新特性?
Ubuntu 24.04 LTS (Noble Numbat) 相较于 Ubuntu 22.04 LTS (Jammy Jellyfish) 带来了许多重要的新特性和改进。以下是一些关键的亮点: Linux Kernel: Ubuntu 24.04 LTS: 搭载了更新的 Linux Kernel 6.8(发布时)。 Ubuntu 22.04 LTS: 发布时…...

Flutter Container组件、Text组件详解
目录 1. Container容器组件 1.1 Container使用 1.2 Container alignment使用 1.3 Container border边框使用 1.4 Container borderRadius圆角的使用 1.5 Container boxShadow阴影的使用 1.6 Container gradient背景颜色渐变 1.7 Container gradient RadialGradient 背景颜色渐…...

Telegram平台分发其聊天机器人Grok
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
文章目录 定时器输出比较定时器通道结构输出比较通道(高级) PWM 信号原理输出比较 8 种工作模式互补输出概念极性选择内容 PWM硬件部分舵机直流电机及驱动简介 定时器输出比较 定时器通道结构 通道组成:定时器有四个通道,以通道一为例,中间是…...
用 NGINX 还原真实客户端 IP ngx_mail_realip_module
一、模块作用与使用前提 作用:解析 TCP 会话第一行的 PROXY 协议头,将客户端 IP/端口写回 NGINX 的内部变量,使后续 ngx_mail_proxy_module、认证模块、日志模块都能获取真实来源。 前提:监听指令中必须启用 proxy_protocol&…...
Mysql中索引B+树、最左前缀匹配
这里需要对索引的相关结构有一个基础的认识,比如线性索引,树形索引(二叉树,平衡二叉树,红黑树等),这个up主我觉得讲的还是比较清楚的,可以看下。 终于把B树搞明白了(一)_B树的引入…...

Python训练营打卡 Day38
Dataset和Dataloader类 知识点回顾: Dataset类的__getitem__和__len__方法(本质是python的特殊方法)Dataloader类minist手写数据集的了解 作业:了解下cifar数据集,尝试获取其中一张图片 Dataset和Dataloader类 1. Data…...

【机器学习基础】机器学习入门核心算法:K均值(K-Means)
机器学习入门核心算法:K均值(K-Means) 1. 算法逻辑2. 算法原理与数学推导2.1 目标函数2.2 数学推导2.3 时间复杂度 3. 模型评估内部评估指标外部评估指标(需真实标签) 4. 应用案例4.1 客户细分4.2 图像压缩4.3 文档聚类…...

Python Day37
Task: 1.过拟合的判断:测试集和训练集同步打印指标 2.模型的保存和加载 a.仅保存权重 b.保存权重和模型 c.保存全部信息checkpoint,还包含训练状态 3.早停策略 1. 过拟合的判断:测试集和训练集同步打印指标 过拟合是指模型在训…...

RabbitMQ集群与负载均衡实战指南
文章目录 集群架构概述仲裁队列的使用1. 使用Spring框架代码创建2. 使用amqp-client创建3. 使用管理平台创建 负载均衡引入HAProxy 负载均衡:使用方法1. 修改配置文件2. 声明队列 test_cluster3. 发送消息 集群架构 概述 RabbitMQ支持部署多个结点,每个…...
怎么开机自动启动vscode项目
每次开机都得用 vscode 打开多个工程,然后用 vscode 里的终端启动,怎么设置成开机自动启动,省事点。 创建 bat 文件,用 cmd 启动,然后将 bat 文件放到 windows 启动文件夹中 yqp1.bat echo on cls d: cd D:\yqp\add…...
Unity 中 Update、FixedUpdate 和 LateUpdate 的区别及使用场景
在Unity开发中,Update、FixedUpdate 和 LateUpdate 是生命周期函数中最常见也最容易混淆的一组。 一、调用时机 方法名调用频率调用时机说明Update()每帧调用一次跟随帧率(帧率高则调用频率高)FixedUpdate()固定时间间隔调用默认每 0.02 秒执行一次LateUpdate()每帧调用一次…...

linux安装ffmpeg7.0.2全过程
编辑 白眉大叔 发布于 2025年4月16日 评论关闭 阅读(341) centos 编译安装 ffmpeg 7.0.2 :连接https://www.baimeidashu.com/19668.html 下载 FFmpeg 源代码 在文章最后 一、在CentOS上编译安装FFmpeg 以常见的CentOS为例,FFmpeg的编译说明页面为h…...

Java中的设计模式实战:单例、工厂、策略模式的最佳实践
Java中的设计模式实战:单例、工厂、策略模式的最佳实践 在Java开发中,设计模式是构建高效、可维护、可扩展应用程序的关键。本文将深入探讨三种常见且实用的设计模式:单例模式、工厂模式和策略模式,并通过详细代码实例࿰…...
DexGarmentLab 论文翻译
单个 专家 演示 装扮 15 任务 场景 2500+ 服装 手套 棒球帽 裤子 围巾 碗 帽子 上衣 外套 服装-手部交互 捕捉 摇篮 夹紧 平滑 任务 ...... 投掷 悬挂 折叠 ... 多样化位置 ... 多样化 变形 ... 多样化服装形状 类别级 一般化 类别级(有或没有变形) 服装具有相同结构 变形 生…...
Elasticsearch性能优化全解析
Elasticsearch作为一款分布式搜索和分析引擎,其性能优化是实际生产环境中必须深入研究的课题。本文基于Elastic官方文档,系统性地总结了从硬件配置、索引设计到查询优化的全链路优化策略,帮助用户构建高性能、高稳定性的集群。 Elasticsearch的优化需结合业务场景综合决策:…...

2025.05.28【Parallel】Parallel绘图:拟时序分析专用图
Improve general appearance Add title, use a theme, change color palette, control variable orders and more Highlight a group Highlight a group of interest to help people understand your story 文章目录 Improve general appearanceHighlight a group探索Paralle…...
tc3975开发板上有ft2232这块的电路,我想知道这个开发板有哪些升级方式,重点关注是怎样通过ft2232实现的烧录升级的
关于TC3975开发板上FT2232芯片支持的升级方式,特别是如何通过FT2232实现烧录升级的问题。首先,我得回忆一下FT2232的基本功能和常见应用场景。 FT2232是FTDI公司的一款双通道USB转UART/FIFO芯片,常用于嵌入式系统的调试和编程。它支持多种协议…...

自动驾驶与智能交通:构建未来出行的智能引擎
随着人工智能、物联网、5G和大数据等前沿技术的发展,自动驾驶汽车和智能交通系统正以前所未有的速度改变人类的出行方式。这一变革不仅是技术的融合创新,更是推动城市可持续发展的关键支撑。 一、自动驾驶与智能交通的定义 1. 自动驾驶(Auto…...
Kotlin Multiplatform与Flutter深度对比:跨平台开发方案的实战选择
简介 在当今多平台应用开发的浪潮中,Kotlin Multiplatform与Flutter代表了两种截然不同的技术路线。KMP以"共享代码、保留原生"为核心理念,允许开发者在业务逻辑层实现高达80%的跨平台代码共享,而Flutter则采用统一渲染引擎,在UI层提供100%的代码共享率。这两种…...

ELectron 中 BrowserView 如何进行实时定位和尺寸调整
背景 BrowserView 是继 Webview 后推出来的高性能多视图管理工具,与 Webview 最大的区别是,Webview 是一个 DOM 节点,依附于主渲染进程的附属进程,Webview 节点的崩溃会导致主渲染进程的连锁反应,会引起软件的崩溃。 …...

深兰科技董事长陈海波率队考察南京,加速AI大模型区域落地应用
近日,深兰科技创始人、董事长陈海波受邀率队赴南京市,先后考察了南京高新技术产业开发区与鼓楼区,就推进深兰AI医诊大模型在南京的落地应用,与当地政府及相关部门进行了深入交流与合作探讨。 此次考察聚焦于深兰科技自主研发的AI医…...

《深度关系-从建立关系到彼此信任》
陈海贤老师推荐的书,花了几个小时,感觉现在的人与人之间特别缺乏这种深度的关系,但是与一个人建立深度的关系并没有那么简单,反正至今为止,自己好像没有与任何一个人建立了这种深度的关系,那种双方高度同频…...

IT选型指南:电信行业需要怎样的服务器?
从第一条电报发出的 那一刻起 电信技术便踏上了飞速发展的征程 百余年间 将世界编织成一个紧密相连的整体 而在今年 我们迎来了第25届世界电信日 同时也是国际电联成立的第160周年 本届世界电信日的主题为:“弥合性别数字鸿沟,为所有人创造机遇”,但在新兴技术浪潮汹涌…...

【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)
目录 1 准备工作:python库包安装1.1 安装必要库 案例说明:模拟视频帧的时序建模ConvLSTM概述损失函数说明(python全代码) 参考 ConvLSTM的原理说明可参见另一博客-【ConvLSTM第一期】ConvLSTM原理。 1 准备工作:pytho…...