对的!我之前说的每月余额合计部分=上月M0,M1,M2,M3,M4,M5,M6,M7滚到这月M1,M2,M3,M4,,M5,M6,M7的逾期金额以此类推前几个月的。。+这月新放款的金额+每期M1,M2,M3,M4,M5,M6,M7未滚到下一期M2,M3,M4,M5,M6,M7的金额合计以此类推(此类相当于客户到M1以后又全部催回来了变成M0了)+前几个月放款这月未到还款日期的金额
wangxishi
2020-11-19
有了逾期阶段的概念,迁移率或者你说的滚动率就好理解了。简单说,就是处于某一逾期阶段的客户转到其他逾期阶段的变化情况。迁移率通常可以用来预测不同逾期阶段的未来坏账损失。比如,M2-M3,说的是从逾期阶段M2转到逾期阶段M3的比例。
wangxishi
2020-11-19
在说迁移率之前,我们先定义逾期阶段的概念。逾期就是说你到了该还款的日子而没有还款,那你就进入了逾期。根据逾期天数,又分为M0-M7+等八个阶段。没有逾期的是M0,逾期1-29天的是为M1,逾期30-59的定义为M2,以此类推,逾期超过180天的定义为M7+。是这个意思吗
wangxishi
2020-11-19
左边列M0-M7的数据用滚动率按照给的公式计算,预测出2021年(就是未来一年)每月产生的余额合计,M0-M7其实就是预测各期会逾期的金额,然后每月的余额合计不仅要加上各期的逾期金额还要加上当月新放款的金额以及前几个月所有放款的金额未到还款期的金额合计,组成每月的余额合计,也就是表里面给的公式想表达的
wangxishi
2020-11-19
#导入库
import pandas as pd
#导入数据生成数据框
box=pd.read_excel("D:\\360安全浏览器下载\\金额包.xlsx",skiprows=0,usecols=[0,1,3,4,5])
waitbox=pd.read_excel("D:\\360安全浏览器下载\\待装箱清单.xlsx",skiprows=0,usecols=[0,1])
#waitbox为等待被分箱的数据
#对数据框waitbox,按照金额从到小的顺序进行排序
waitbox.sort_values(by="金额",ascending=False,inplace=True)
#重设数据框waitbox索引
waitbox.reset_index(inplace=True)
#准备waitbox的相关指标
waitbox["装箱编号"]=""
#准备box的相关指标
box["当前金额"]=0
box["剩余空间"]=box["上限"]-box["当前金额"]
box["为达下限还需要补充"]=box["下限"]-box["当前金额"]
box["订单集和"]=box["ID"].map(lambda x:list())
box["箱子是否达下限"]=False
#将箱子按照箱子上限进行排序,升序排列
box.sort_values(by="为达下限还需要补充",ascending=False,inplace=True)
#然后对每笔订单进行箱子分配
rows=waitbox.shape[0]
i=0 #用i表示第几个订单
while i<rows:
print("现在对第%d个订单进行分配"%i,end="")
#检验第i个物品是否可以放在根据"为达下限还需要补充"降序排序的第一个箱子
if box.loc[0,"剩余空间"]>waitbox.loc[i,"金额"]:
print(box.loc[0,"ID"])
box.loc[0,"当前金额"]=box.loc[0,"当前金额"]+waitbox.loc[i,"金额"]
box.loc[0,"剩余空间"]=box.loc[0,"上限"]-box.loc[0,"当前金额"]
box.loc[0,"为达下限还需要补充"]=box.loc[0,"下限"]-box.loc[0,"当前金额"]
waitbox.loc[i,"装箱编号"]=box["ID"][0]
新增物品=(waitbox.loc[i,"ID"],waitbox.loc[i,"金额"])
box["订单集和"][0]=box["订单集和"][0]+[新增物品]
if box.loc[0,"当前金额"]>=box.loc[0,"下限"]:
box.loc[0,"箱子是否达下限"]=True
#对各个箱子的剩余容量进行排序
box.sort_values(by=["箱子是否达下限","为达下限还需要补充"],ascending=[True,False],inplace=True)
box.reset_index(inplace=True,drop=True)
else:
print("第%d个物品没有办法再装了"%i,"金额为",waitbox.loc[i,"金额"],"准备装箱代码为",box.loc[0,"ID"],sep="")
break
i=i+1
box.to_excel("D:\\分箱后每个箱子的情况.xlsx")
waitbox.to_excel("D:\\每笔订单分箱结果.xlsx")wangxishi
2020-11-18
我增加了数据,两个文件分别是待装箱清单和金额包,这个是肯定能匹配出来的,用excel手工可以操作,看看用代码是否可以实现?每个金额包下限及上线定义都是一样的
wangxishi
2020-11-18
我查阅了一些资料,这个问题还真是挺复杂的,没查到专门针对这个问题的算法,因为这个问题要求箱子必须达到下限不能超过上限,不一定有解。但是我觉得这个问题特别有意义。你现在个问题,现有箱子一旦装不了,我可以决定换箱子吗。你给我的是三种规格20000,25000,30000的箱子分别一个共3个,我可以变成25000规格的箱子两个,2000规格的箱子一个吗,就是类似的这种替换可以吗。
wangxishi
2020-11-18
是的,上月销售金额合计=calculate(sum(金额),dateadd(你建的辅助日期,-1,month));上月销售数量合计同理。
SUKI-ZY
2020-11-17
是的,上月销售金额合计=calculate(sum(金额),dateadd(你建的辅助日期,-1,month));上月销售数量合计同理。
SUKI-ZY
2020-11-17