Optimization 基于加权平均准则的贷款组合优化

Optimization 基于加权平均准则的贷款组合优化,optimization,linear-programming,solver,pulp,mixed-integer-programming,Optimization,Linear Programming,Solver,Pulp,Mixed Integer Programming,编辑:我意识到我以前试图用一种方法来描述这个问题并没有什么帮助,实际上我没有很好地模拟我目前正在做的事情,所以我重写了这篇文章。我已经包括了我的工作代码。我将使用的示例中的数据是lending club贷款数据(csv格式),可从以下位置下载: 我目前正在使用python中的PuLP和pandas来解决我目前遇到的一个优化问题。我对线性规划很陌生,最近利用它来解决最小化成本问题 以这个借贷俱乐部为例,假设我有100000美元。鉴于借贷俱乐部贷款是证券化的,可以由个人投资,我想分配100000美元

编辑:我意识到我以前试图用一种方法来描述这个问题并没有什么帮助,实际上我没有很好地模拟我目前正在做的事情,所以我重写了这篇文章。我已经包括了我的工作代码。我将使用的示例中的数据是lending club贷款数据(csv格式),可从以下位置下载:

我目前正在使用python中的PuLP和pandas来解决我目前遇到的一个优化问题。我对线性规划很陌生,最近利用它来解决最小化成本问题

以这个借贷俱乐部为例,假设我有100000美元。鉴于借贷俱乐部贷款是证券化的,可以由个人投资,我想分配100000美元,以便:

Sum of weighted interest rates => 0.08
Sum of weighted debt-income ratios <= 10 
1.投资10万美元的加权平均利率不得低于8%

2.投资10万美元的加权平均债务收入比不得超过10

暂时忽略3.为了最大限度地减少任何一笔贷款的风险敞口,银行的平均贷款规模 优化的投资组合不能超过10000美元。)

我很难实施约束3和我的投资上限100000美元的约束。对于约束1和约束2,我已按贷款规模对贷款进行加权,并将利率和债务收益率乘以权重,因此可以以线性方式对这些约束进行建模,以便:

Sum of weighted interest rates => 0.08
Sum of weighted debt-income ratios <= 10 
加权利率之和=>0.08
加权债务-收入比率之和您正在对整数进行线性规划,这比使用reals(double)更麻烦。由于您的金额可以被视为双倍,请删除整数

id_变量是否应该持有数量或比例(加1)?如果是后者,则需要对其总和进行额外限制。(对于二进制设置,它将意味着一个1和n-1个0。)如果它们是金额,那么你的加权平均数就不是平均数,例如,按照目前的情况,你可以确保利率总和(而不是平均数)至少为8%,这可以通过8笔贷款以1%的利率实现

此外: 如果我正确理解了语法(我熟悉LP,但不熟悉您的库),那么您正试图最大化投资金额,但必须至少达到100000。这是出乎意料的:为什么不最大化回报

约束2“平均债务收入比不能超过10”在数学上是错误的。如果您有两项投资,债务为d1和d2,收益为i1和i2,比例为a和1-a,则该地块的债务与收益比率为[a*d1+(1-a)d2]/[ai1+(1-a)i2],而非ad1/i1+(1-a)*d2/i2


约束3最好作为一系列约束来实现(如评论中所暗示的):loanmix[i]=minloan[i]。一个黑客可能是离散化:使用1000美元的增量代替最小值1000美元。但是你又回到了Integerland。

请在PuLP中发布你解决这个问题的最佳尝试,然后社区可以帮助指导你。嗨,托马斯,我已经重写了这个示例,并包含了我所有的工作代码。我非常感谢您能提供的任何帮助。约束3是假的(不能实现其声明的目的)。你可以有一笔99900美元的大额贷款和一笔1美元的99笔小额贷款,平均贷款规模将不到1000美元,但你仍然会“极度暴露”于一笔贷款。在贷款俱乐部和我正在研究的现实世界的例子中,有一些最低要求,这将阻止这种情况发生。我将编辑此帖子以忽略该限制,但感谢您的输入。为了澄清之前的帖子,这里有最低贷款要求(例如,不可少于500或1000美元)。在支出上限为100000美元的限制下,我将如何在现有代码中实现这一点?