查看原文
其他

为什么别的程序员天天吃鸡,你却顿顿吃土?

倪家禹 CSDN 2018-10-26

作者 | 倪家禹

责编 | 胡巍巍

上周七夕节的时候,我的暗恋对象邀我共进晚餐,这把我激动的!!!万年单身的我终于可以不再寂寞了。去了才知道,原来她被闺蜜们放了鸽子,奈何近期有喜事,需要找人一起喝酒,所以才有了我的出现。

当然我还是珍惜这难得的机会,到底是什么事如此迫不及待呢?主要有三件:

  • 暗恋对象最近学习了 Python 数据分析,换了一份月薪 1W 的工作,成为了一名优秀的数据分析师,并且公司每月会根据绩效给予 1500 元左右的奖金;

  • 暗恋对象在世界杯期间,参与了体育竞猜游戏,幸运地选中了法国队,还清了蚂蚁花呗巨额欠款;

  • 暗恋对象说,有钱了,可以随心所欲地浪,不用再担心还不起花呗吃土了,所以今天她请客。

对于前两件事,无疑是难得的。但第三件,为了防止她过度挥霍导致债台高筑,我决定用 Python 进行一次模拟测算,默默提醒她,体现我的贴心。

利用刚学会的蒙特卡洛原理,我决定建立收入支出模型进行测算:如果当月花费全部由花呗支付,当月花呗欠款大于当月可支出收入时,就要“吃土了”。预设计算 120 个月(十年),假如十年都没能吃上土,那就代表愿望成真。


  收入多少:每月净收入模型 


每月的净收入公式如下:

净收入=月薪-五险一金+奖金-个人所得税

其中,五险一金基数为月薪,个税基数为扣除五险一金后,月薪与奖金的和。

上海市五险一金缴纳系数:

以下所有图片,点击查看更清晰

个税政策:

奖金的数学模型设为以 1500 元为均值、200 元为标准差的正态分布:

据此,用 Python 建立计算每月净收入的模型如下:

def tax(salary_sum):
if salary_sum <= 3500:
return 0
elif salary_sum <= 5000:
return (salary_sum - 3500) * 0.03
elif salary_sum <= 8000 :
return (salary_sum - 5000) * 0.1 + 45
elif salary_sum <= 12500 :
return (salary_sum - 8000) * 0.2 + 345
elif salary_sum <= 38500 :
return (salary_sum - 12500) * 0.25 + 1245
elif salary_sum <= 58500 :
return (salary_sum - 38500) * 0.3 + 7745
elif salary_sum <= 83500 :
return (salary_sum - 58500) * 0.35 + 13745
else:
return (salary_sum - 80000) * 0.45 + 22495

def insurance(salary):
if salary <= 21396:
return (salary - salary * 0.175)
else:
return salary - 3744.58

def final_income(s,b_avg): 
salary = s
salary_get = insurance(salary)
bonus = pd.Series(np.random.normal(loc=b_avg,scale=200,size=120))\
.map(lambda x: round(x,2))
salary_sum = salary_get + bonus
income = salary_sum - salary_sum.apply(lambda x : tax(x))
return income


  花费多少:每月开支模型 


根据暗恋对象的自述和我对她的深刻了解,我模拟出了她每月开支的模型。

基本生活支出:

以她奢侈的生活,一天 100 不在话下。但由于是基本支出,变化也不会太大。我设定以 3000 元和 3500 元为限,均匀分布。 

购物支出:

暗恋对象有句名言,“工资一分二,购物拿一半。”所以,模型设定为以 5000元为均值,500 元为标准差的正态分布。

娱乐支出:

暗恋对象闺蜜众多,每周一次的 girl’s night 是不能少的,一次至少花个 100,多则 300 不过分吧。所以,模型设定以 400 元和 1200 元为限,均匀分布。

学习支出:

爱学习,应该是暗恋对象少有的优点,某在线平台课程,价格大概在 100 元到 500 元不等。所以,这个也可以设定个均匀分布的模型。

其他支出:

每个月总会有些意外什么的,比如出门掉了个钱包等等。所以,为了计算尽可能接近真实,我设定 500 元为均值,40 元为标准差的正态分布模型。

综上,总支出=基本生活+购物+娱乐+学习+其他

啧啧,大概是一名挥霍无度的月光少女吧。


  是否吃土:每月收支模型 


下面,我们正式开始模拟每月的收支情况,看看要不要吃土。

整理几个约束条件:

  • 每月先还欠款,再消费。

  • 所有的支出除还款外,都可以使用花呗透支。

  • 当这月的收入小于等于需要还款的金额,就代表你要吃土了。

第一回合:不使用分期功能

当月支出,下月需全部还清。算法模型如下: 

ef case_a():
data_1 = []
for i in range(0,120):
if -debt[i] >= income[i]:
print('第{}个月,没钱了,要吃土了!'.format(str(i+1)))
break
if saving[i] >= 0:
money = saving[i] + income[i] + debt[i] - expense[i]
if money >= 0:
saving[i+1] = money
else:
debt[i+1] = money
data_1.append([i+1,income[i],debt[i],expense[i],saving[i+1],debt[i+1]])
result_a = pd.DataFrame\
(data_1,columns=['月份','收入','需还贷款','支出总计','本月余钱','欠债'])
return result_a

为了使结果更为精确,结合以上收支模型我进行了 1 万次模拟,模拟的过程是这样的:

模拟结果如下:

横坐标代表第 x 个月要吃土;柱形图高度 h 代表 1w 次模拟中,结果恰好为第 x 个月要吃土的模拟次数。

显然,在不分期借贷的情况下,她几乎会在一年后面临吃土,而最快只要 6 个月。那么,可以分期会不会好一点呢?

第二回合:允许分期

分期相当于把当月需要还的款项,分摊到之后数个月,当月的负担减小了,但代价是支付一定的利息。此时我快速翻出了花呗的利率表:

蚂蚁花呗的利率表:

看明白了吗?数学好的可以仔细算算。现在余额宝年化 3.5%,而花呗分期10%!

如果每期欠款都做分期偿还,则算法模型如下: 

def case_b():
data_1 = []
for i in range(0,1200):
if -debt[i] >= income[i]:
print('第{}个月,没钱了,要吃土了!'.format(str(i+1)))
break
if saving[i] >= 0:
money = saving[i] + income[i] + debt[i] - expense[i]
if money >= 0:
saving[i+1] = money
else:
money_piece = (money+ money*0.025)/3
debt[i+1] = money_piece + debt[i+1]
debt[i+2] = money_piece + debt[i+2]
debt[i+3] = money_piece + debt[i+3]
else:
money = income[i] + debt[i] - expense[i]
if money >= 0:
saving[i+1] = money
else:
money_piece = (money+ money*0.025)/3
debt[i+1] = money_piece + debt[i+1]
debt[i+2] = money_piece + debt[i+2]
debt[i+3] = money_piece + debt[i+3]
data_1.append([i+1,income[i],debt[i],expense[i],saving[i+1],debt[i+1]])
result_b = pd.DataFrame\
(data_1,columns=['月份','收入','需还贷款','支出总计','本月余钱','欠债'])
return result_b

同样一万次模拟。先来看看分期三月的情况: 

果然效果显著,大大延缓了吃土的日子,可以尽情挥霍 20 个月。

分期六、九个月和一年的情况分布在图上是这样的:  

注意图上标注的“平均 XX 个月后吃土”。结果已经很明朗了,虽然没有达到预定的十年吃不上土的标准,但是分期时间越长,可以尽情挥霍不吃土的时间就越长,表明通过透支、借贷,能够大大延缓面临吃土的时间。

挥霍四年才会破产,已经大大地出乎我的意料。并且我相信,我在这段时间内,能靠自己的天分,从“高帅”变成“高富帅”,她爱上我,嫁了我,吃土的问题,就可以迎刃而解了!

曾经,有人和我说,“还完花呗,月月吃土!”,我现在通过测算,可以很肯定地说,这不存在!只要敢分期,不怕没钱花。

......但是当我打开我的花呗首页时,我发现一个问题:我的信用总额度只有 1.5 万:

我选取了分期十二个月、一万次模拟中的一次数据,看了下吃土前夕最后 12 个月欠款项总额:

 

有谁蚂蚁花呗额度是 6 万的?看她的样子就不像,只能继续研究下了。


考虑实际:有额度限制的收支模型 


这次我对分期十二月的算法增加一个限制,当未来 12 个月欠款金额大于等于 1.5 万,则剁手,不再使用花呗。我截取了额度用尽时的时间点。

图表显示,在第 20 个月额度用尽,未来 12 个月所需偿还的贷款总额为 16544 元,符合正常额度。而当月需还 2291 元,而后每月递减。2000 元的还款,绝对不会让我的暗恋对象吃土,只是,或许当月 shopping 额度,就没那么多了。

当然,真实情境可能更为纠结,当月初还完款,总会有部分额度恢复,那么是不是又可以透支起来了呢?这真是满满的套路啊!

花呗会诱使你尽可能的使用完每一份额度,但绝不会允许你还不上。所谓“有了花呗,再也不用吃土!”只是挥霍无度,过度透支,但又乐在其中的错觉罢了。


彩蛋:同时使用多个平台?  


有些世外高人,想出了一个绝妙的主意:市面上借贷平台,又不止花呗一家,只要在手机上装上足够多的 App ,没了花呗还有买呗、用呗......叠加起来,额度限制就不是问题了!

这......你肯定没有好好看文章,我来给你回顾下!

选取分期十二个月、一万次模拟中的一次数据:第 55 月以后,需要还款的金额,就超过了当月收入(开始吃土),图上是每个月需还款的数量。从此时开始,是不能用借贷平台的,并且当月就需要还款 9000+。

在这段令人忧伤的时间里,我建议任何想在刷爆边缘疯狂试探的小伙伴们,学一首歌,捧一只碗,买一张地铁票,遨游一下上海的地下世界。

作者:数据侠倪家禹,城市数据团特约撰稿人,数据分析师(Python)微专业学员,喜欢用数据挖掘生活中的小秘密。对数据研究有着敏锐的洞察力,善于把复杂的问题简单化,简单的问题流程化。希望大家通过数据感受生活的魅力。

声明:本文为作者投稿,版权归对方所有。



征稿啦

CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。

如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。


————— 推荐阅读 —————


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存