智能 “先预测,再优化”

导读

论文题目《Smart “Predict, then Optimize”》。该论文于2021年发表于《Management Science》,文章提出了一种SPO框架,利用优化问题的结构,来设计更好的预测模型。

摘要

许多现实世界的分析问题涉及两个重要挑战:预测和优化。由于每个挑战通常都非常复杂,标准的范式是“先预测,再优化”。大体上,机器学习工具旨在最小化预测误差,并未考虑预测结果将在下游优化问题中的使用。相反,本文提出了一个新的且非常通用的框架,称为智能“先预测,再优化”(SPO),该框架直接利用优化问题的结构,即其目标和约束,以设计更好的预测模型。本文框架的一个关键组成部分是SPO损失函数,它衡量预测引起的决策误差。相对于SPO损失训练预测模型在计算上具有挑战性,因此本文使用对偶理论推导出一个凸替代损失函数,称为SPO+损失。最重要的是,本文证明了在温和条件下,SPO+损失在统计上与SPO损失一致。本文的SPO+损失函数可以切实处理任何具有线性目标的多面体、凸或甚至混合整数优化问题。关于最短路径和投资组合优化问题的数值实验表明,SPO框架可以在“先预测,再优化”范式下显著改进,特别是当训练的预测模型被误设定时。本文发现,使用SPO+损失训练的线性模型往往优于随机森林算法,即使在真实情况高度非线性时也是如此。

介绍

在许多现实世界的运筹学分析应用中,决策的制定通常结合了机器学习和优化。通常,优化模型用于生成决策,而机器学习工具则用于生成预测模型,以预测优化模型中的关键未知参数。由于这两项任务本身的复杂性,分析实践中常采用的广泛方法是“先预测,再优化”范式。例如,考虑一个每天可能多次解决的车辆路径问题。首先,先前训练的预测模型基于当前的交通、天气、假期、时间等因素,为道路网络上所有边的行驶时间提供预测。然后,优化求解器使用预测的行驶时间作为输入,提供近似最优的路线。

本文强调,大多数现实世界的分析问题解决系统都涉及预测和优化的某个组件。除了少数有限的选项外,机器学习工具通常不会有效地考虑预测将在下游优化问题中的使用方式。在本文中,本文提出了一个称为智能“先预测,再优化”(SPO)的通用框架,用于训练预测模型,该框架有效地利用名义优化问题的结构——即其约束和目标。本文的SPO框架基本上是为了生成旨在最小化决策误差而非预测误差的预测模型。

本文的贡献总结如下:

1. 本文首先正式定义了一个新损失函数,本文称之为SPO损失,该损失衡量预测具有线性、凸或整数约束的名义优化问题的成本向量时的误差。该损失对应于由于实施由预测成本向量引起的可能不正确的决策而导致的相对于真实/历史成本向量的次优差距。不幸的是,SPO损失函数在预测中可能是非凸且不连续的,这意味着在SPO损失下训练ML模型可能具有挑战性。

2. 鉴于SPO损失函数的难处理性,本文开发了一个替代损失函数,称为SPO+损失。所得的SPO+损失函数在预测中是凸的,这使本文能够设计基于随机梯度下降的算法来最小化SPO+损失。

3. 本文证明了在本文的SPO框架的一个非常简单和特殊的实例下,与经典机器学习的基本连接。即,在该实例下,SPO损失正是0-1分类损失,而SPO+损失正是铰链损失。铰链损失是流行的支持向量机(SVM)方法的基础,是一个近似最小化0-1损失的替代损失,因此,本文的框架将这一概念推广到具有约束的广泛优化问题族。

4. 本文证明了SPO+损失函数的一个关键一致性结果,这进一步激励了它的使用。即,在完全分布知识下,如果满足两个温和条件,最小化SPO+损失函数实际上等价于最小化SPO损失:给定特征的成本向量的分布是连续且关于其均值对称的。

5. 最后,本文通过最短路径和投资组合优化问题的数值实验验证了本文的框架。本文将SPO框架与标准的“先预测,再优化”方法进行比较,并根据SPO损失评估其样本外性能。

(本笔记仅涉及对SPO及SPO+相关概念的解释,其性质及证明推导可以查询原文)

方法论

SPO 损失函数

根据PO范式,给定一个成本向量预测 b8f38c23841c536c43fc8b3ea490cbf0.png,通过解决c747c8c2445b631456a651b1be04f8f4.png来实现一个决策4c0763ef618a272c71a20507f7bc16a1.png。在实施决策b088f9e1ac18526edb0ff638a761fe01.png之后,产生的成本是关于实际实现的成本向量c。由于fa50a524f16939dc846e5a8953a83ba0.png可能相对于c是次优的,因此额外成本为31d3ac8eb00a052f77bcdaa29842fc71.png,本文称之为SPO损失。

在图1中,本文展示了两个具有相同预测误差的c值如何导致不同的决策和不同的SPO损失。本文考虑一个二维多面体和椭圆作为可行区域S。本文绘制了(负的)真实成本向量c,以及两个候选预测值ˆcA和ˆcB,它们与c等距,因此具有相同的LS损失。可以看到,对于ˆcA的最优决策与c的最优决策一致,因为82295acdeb8f6a6999af84b5e26ec97c.png,因此SPO损失为零。相反,本文看到0a7f1c8ebda63ca5346f11cfff5b6758.png,因此导致正的SPO损失。在多面体例子中,任何其负值不在灰色区域内的预测成本向量将导致正的SPO损失,而在椭圆例子中,任何与c不完全平行的预测成本向量都会导致正的SPO损失。定义1正式定义了当实际成本向量为c时,与某一特定优化oracle f9f40ef20a1db144db379aaf96b418e5.png相关的预测d04a812d8a40f8623291406d9670d360.png的真实SPO损失。

b271e4239f4cbca4ce50688ade409491.png

图1 SPO损失的几何说明

定义1(SPO损失):给定一个成本向量预测243c03f722614f3e05e0fa2010d9f3f8.png和一个实现的成本向量c,关于优化e94c6f52bb6d21ca734a8bac24e24bcd.png的真实SPO损失 562dbac388267ce5a7f4476e31e3f243.png 定义为 b57a86708ca4dbc44a4c1c6f84bd9983.png

注意定义1有一个不幸的缺陷,即其依赖于解决(2)的特定7796e230f56d207437d05960471f99bc.png。实际上,这个缺陷并不是一个主要问题,因为本文通常应该期望ae755be994ae3d50041de0b6cffd65c8.png是唯一的最优解——即,本文应该期望242b534fd3ae625cf85bd8d869732b41.png是一个单点集。注意,如果损失函数可以使用3ae9387476a4b757445678a9be6e06ab.png中的任何解,那么损失函数本质上变成8cbff8025c4dad4d4a3276bc89a26cd3.png

无论如何,如果想要解决定义1中对特定bcd7f98d2f969c9c1f537e4a16239e40.png的依赖性,那么最自然的方法是假设实施的决策在c方面具有最坏情况的行为。定义2是一个不依赖于特定优化14f1e265100dbb14c5171570d84f9c42.png的替代SPO损失函数。

明确的SPO损失

定义2(明确的SPO损失):给定一个成本向量预测2415388f6972521f9b34f402d5eafc17.png和一个实现的成本向量c,(明确的)真实SPO损失6212f12f448d828fff809039dc9a4ca9.png定义为907615965afaf6803713030f04dc21fd.png

注意定义2提出了一个真实SPO损失的版本,其上界定义1的版本——即,对于所有aa445e44bdd3d2e49eb4ca4c1a8b8a53.png,都有 17cc149ed069f6518a02a4bd862492b1.png。如前所述,定义1和定义2之间的区别仅在退化情况下才相关。在本文的结果和讨论中,本文使用定义2给出的明确的真实SPO损失。回想定义2上界定义1,并且两个损失函数几乎总是相等的,除了在9c7f280e14b9d85947cc5d2cf16ba686.png具有多个最优解的退化情况下。

现在,给定训练数据,本文感兴趣的是确定具有最小真实SPO损失的成本向量预测模型。因此,给定前述的真实SPO损失定义,预测模型将通过遵循经验风险最小化原则确定,导致以下优化问题:

2251a5058b61985534062a473d9b8d7e.png

不幸的是,上述优化问题在理论和实践上都很难解决。实际上,对于固定的c,e265f4f67ce6011bda8d6b344d64c0ed.png19556a70af6dadfd445501a690d77786.png上甚至可能不连续,因为79b0a89c0726683aea99c7324989c4c8.png(以及整个集合0e76505d81a8982b909a9f81e638285b.png)在1669fabf8804677d0b19e4816cd79916.png上可能不连续。因此,本文有动机开发方法来产生“合理”近似解,满足以下两个条件:(i) 比标准PO方法表现更好,(ii) 适用于大规模问题,其中训练样本数量n和/或假设类H的维数可能非常大。

说明性示例

为了建立直观理解,本文现在通过一个说明性示例比较 SPO 损失和经典的最小二乘(LS)损失函数。考虑一个非常简单的最短路径问题,其中有两个节点,s 和 t。s 到 t 有两条边,边1和边2。因此,在这个设置中,成本向量 c 是二维的,目标是选择成本较低的边。在决策时,本文不会直接观察到 c,而是只会看到与向量 c 相关的一个一维特征 x。本文的数据由 (xi, ci) 对组成,ci 是 xi 的非线性函数生成的。

在图2(a)中,LS 损失函数的残差用虚线表示。残差是预测值与真实值之间的距离。在图2(b)中,SPO 损失函数的残差用虚线黑线表示。当预测值顺序正确时,残差为零。否则,残差是实际值之间的距离。决策者的目标是通过使用简单的线性回归模型,根据特征来预测每条边的成本。在预测-然后-优化框架中,两条线(对应每条边)的交点将表明决策边界。决策者将尝试使用 SPO 和 LS 损失函数进行线性回归。在图2中,本文通过可视化一个特定数据集和预测边1和边2成本的线性模型的残差,说明 LS 和 SPO 的区别。在 LS 回归中,目标是最小化残差平方和,如图2(a)中的虚线绿色和红线所示。使用 SPO 损失时,本文考虑“决策残差”,这些残差仅在预测导致选择错误边时发生。在这些情况下,SPO 成本是边1和边2的两个真实成本之间的差值,如图2(b)中的虚线黑线所示。

fcf65f6228615e3e114e54df2da49db2.png

图2 预测残差与决策残差的区别

664d2219e87c6b649ed319d9132afcfa.png

图3 解释案例

在图3中,本文考虑另一个数据集,但这次绘制的是最优的 LS 和 SPO 线性回归模型。在图3的左上角面板中,本文绘制了数据集和最优决策边界。在右上角面板中,本文绘制了数据的最佳 LS 拟合线,在下方的两个面板中,本文绘制了 SPO 线性回归的两个不同的最优解。垂直虚线对应真实模型和预测模型下的决策边界。注意,图3中的 SPO 损失为零,因为没有决策错误,如图2所述。

从图3可以看出,LS 线非常接近非线性数据,尽管 LS 的决策边界与最优决策边界相距甚远。对于虚线黑线和红线之间的任何 x 值,决策者将选择错误的边。相比之下,SPO 线不需要很好地拟合数据,但它们的决策边界几乎是最优的。实际上,SPO 线的训练误差为零,尽管它们并未拟合数据。关键的直觉是,任何时候选择错误的边时就会产生 SPO 损失,在这个示例中,可以构造出在正确决策边界交叉的线,从而永远不会选择错误的边,从而导致零 SPO 损失。需要注意的是,唯一重要的考虑是线的交点,因此,SPO 线性回归不一定会最小化预测误差。当然,可以使用 SPO 和 LS 损失的凸组合来克服产生的异常线。实际上,对于 SPO 损失的经验风险最小化(ERM)问题有无数个最优解,只需确保线的交点在 x 值为1.2和1.3之间。

SPO+ 损失函数

定义 3(SPO+ 损失):给定一个成本向量预测 150aebc27767d3339a6d104c2a31379c.png 和实际成本向量 c,SPO+ 损失定义为:

3333f404e8c90a1e90c0d7e311e46704.png

659227e972961c9c76b3128e27467369.png是 S 的支撑函数,即 eb72dd9975a9bfb76e4436676b6056ba.png。用这个符号表示,SPO+ 损失可以等价地表示为:

4e11f166d662075f3cd1879fcdfa0ff3.png

SPO+损失函数有以下性质:给定一个固定的实现成本向量 c,有:

1. 对于所有的 59b95b75186dbdeae2c5a039c25db9c3.png,都有 92c51486f77b5367396eaa5dd1f0d43c.png

2. f1ef7cd81127a3a078394b0a8f4a2fa8.png 是成本向量预测 a7ed6df12b63d0008cf91c07025c7cdf.png 的凸函数

3. 对于任意给定的 c51a8f6bfa23cf0a246a31814388c1db.png96d4fa0712463c368a628b57dbed3a00.png 是 SPO+ 在 09277b4704e2cabdd5066a7b2de8ab59.png 处的次梯度,即 765bbfdf2403ad65c1d7eca43ccc0e5c.png

以上性质使得SPO+损失函数在解决预测优化问题中能作为SPO损失函数的近似解。

实验

本文以最短路径问题及投资组合优化问题用于实验比较,实验结果如下图所示:cfb3d77cb1d05262117a72fb672c0a60.png

图4 在最短路径问题实例上的SPO损失

5bb91979490eb85e31ed07f7d06eb622.png

图5 在投资组合优化实例上的测试集SPO损失

Attention

欢迎关注微信公众号《当交通遇上机器学习》!如果你和我一样是轨道交通、道路交通、城市规划相关领域的,也可以加微信:Dr_JinleiZhang,备注“进群”,加入交通大数据交流群!希望我们共同进步!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
房价预测是一个非常重要的问题,人工智能可以帮助我们更准确地预测房价。下面是一个基于Python的房价预测优化代码示例: ``` # 导入必要的库 import numpy as np import pandas as pd from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 读取数据集 data = pd.read_csv('house_prices.csv') # 数据清洗和处理 data = data.drop(['Id', 'Alley', 'PoolQC', 'Fence', 'MiscFeature'], axis=1) data = data.fillna(data.mean()) # 特征选择 X = data.iloc[:, :-1] y = data.iloc[:, -1] # 数据集划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 线性回归模型训练 regressor = LinearRegression() regressor.fit(X_train, y_train) # 模型评估 y_pred = regressor.predict(X_test) mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) print("RMSE:", rmse) # 模型优化 # TODO:根据需要进行模型优化,比如特征工程、模型参数调整等 ``` 这段代码中,我们首使用Pandas库读取了一个名为“house_prices.csv”的数据集,并进行了数据清洗和处理。然后,我们选择了所有的特征作为模型的输入,并使用train_test_split函数将数据集划分为训练集和测试集。接下来,我们使用Sklearn库中的LinearRegression类训练了一个线性回归模型,并进行了模型评估。最后,我们留下了一个TODO,这里可以进行模型优化,比如特征工程、模型参数调整等,以提高预测的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

当交通遇上机器学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值