合理房租分摊模型探索

对于绝大多数在大城市打拼的人来说,租房是不可避免的一个环节,而通常在租房的时候会面临的一个现实问题就是,如何合理的与他人对房租进行分摊。

在最理想的情况下, 房东会为自己的房子的每个房间进行定价,这样留给租客的选择余地就很小了,也就基本不需要为分配房租而操心了,所以这种情况租客只需要根据自己的预算和喜好挑选适合自己的房子即可,因为是明码标价,自由挑选,租客间对于房租发生分歧的可能性较小,所以我姑且称之为最“理想”的情况。举一个我曾经接触过的例子来说,优客逸家是一家提供合租房的公司,他提供的房源基本都是统一装修后出租的,在每一套房源的页面,例如这间,都会给出详细的信息,包括

rent_model_example_1

rent_model_example_2

rent_model_example_3

  • 房子整体的户型图(每个独立的房间标注面积)
  • 每个房间的具体情况(朝向,窗户、面积、是否独卫、最多入住人数、定价等)
  • 本房屋的其他公共信息
  • 每个房间的实拍图

但是在更多的情况下,我们不会遇到这样理想的模型,所以我想参考这个思路来得到自己的评估模型。

首先搜索了一下有没有现成的方案供参考,直接搜索“房租分摊方案”,看到了一篇很有意思的博客,原文链接在此,文章的标题写的是一种实用的房租分摊模型,点进去看了一下,小有收获,因为我之前想到的方案更多是偏技术性的,而这篇则从博弈论的角度上来分析房租分摊这个问题。

这个方法总结起来是,大家分别对所有的房间给出自己认为合理的价格,最后每个房间归出价最高的人所有,获得者实际支付的费用是所有人对这个房间出的价格的平均值。经过这样的分配后,因为每个人最终得到的房间自己都是出价最高的人,所以实际成交价会小于自己的出价。所有在出价时真心出价者最后都得到了小于心理预期的价格,而恶意出价者(故意压低理想房间的价格,而对其他不喜欢的房间向上抬价)则会付出超过预期价格。

举例来讲,甲乙两人对A、B两个房间出价,总的房租是1000元。A房间条件好一些,B房间差一些。而甲倾向于拿下好一点的房间,乙因为想要省钱,可以接受差一些的B房间。所以甲最终出价A房间650元,B房间350元。而乙出价A房间600元,B房间400元。最后甲625元入住了A房间,乙375元入住了B房间。每个人都以低于自己出价25元的价格入住了目标房间。如果以上甲乙两人都是真心出价的话,最后真心出价者都得到了“实惠”。如果其中一方,假如甲,认为乙一定会选择B房间,从而尽可能地压低自己对于A房间的出价,比如出价A 590元,B 410元,那最终的结果是甲失去了心仪的A房间,并且以比高出实际心理最高价(350)的405元入住了并不喜欢的B房间,并且损失了至少55元。

所以初步看来,这是一个公平的方案,只是对于使用的情况有一些限制。

  1. 认可规则,可以接受依据该规则出价后产生的结果。
  2. 情况相近,房间、租房者之间不存在巨大迥异。

对于第一次听到这个方案的人来说,可能担心自己不知道如何正确评估每一个房间应该分担的价格,从而给出了一个过高/过低的价格而使这个方案的可操作性过低。于是我试着提出心里的一种可以执行的方案。

Step 1:确定公共区域和私人区域的分摊比例A

首先,假设整套房子的总价是已知且所有人都认可的。然后,房间里面住的人员数量和分布是稳定的。那么,一个房子根据使用的情况,大致可以分为私人与公共区域,私人区域指的是对于某一个房间的居住者而言的独占空间、比如卧室以及卧室所附带的区域(阳台、衣橱等)及家具,公共区域则是所有租房者共享的活动空间(比如客厅、洗手间、厨房和杂物间等)。可以根据私人区域和公共区域的面积和可用情况给定一个比例。

比如对于一个月租为6000元的三室一厅一厅一卫的房子,私人区域对应的是三个卧室分别占据的空间,公共区域可能包含客厅、厨房、卫生间。于是可以按照一定比例来分配公共区域和私人区域所分担房租的比例A。我认为20%80%是一个不错的比例。于是公共区域的租金是6000*20%=1200元,私人区域便是4800元。

Step 2:分别确定私人区域分配比例B和公共区域内各部分的具体分配比例C(可选)

在确定了私人区域的总租金后,可以根据每个房间的面积、朝向、屋内设施、隔音效果(是否隔断)等为每一个卧室设定分配比例,在具体执行时,可以采用总房价/房间数平均计算后,上下进行浮动,最终获得一个分配比例,例如40%/33%/27%。而公共区域,如没有特殊需要(存在独卫,某区域只由两房间共享等),可以直接按照总人数来平分,或者设定比例后和私人区域按照相同的方法进行分配。

Step 3:计算各房间总价,就最终方案达成一致

在上一步分配后,已经可以计算出各房间的总价,应该是每个人相对科学的对各个方案按照自己的标准得出的价格,这时所有人可以采用协商或者作为文中开头提到的方法作为竞价提出并按照游戏规则获得房间。

经过以上三步,应该可以在没有历史租金的参考下对一个新房子完成房租分配,而目前我也亲自实践了一下这种分配方案。在花了不到一天的时间考察各房间情况后,给我所住的房子给出了一个房租分配方案。之后我参考了同小区相似户型的商业分配方案(自如合租、蛋壳公寓等),发现给出的方案和他们给出的大致比例相差不大,因为这个问题很难存在一个完美的最优解,所以我姑且认为我给出的方案是合理可行的。

如果你通过搜索引擎访问到了我这篇文章,希望我提到的这个方法可以给你一些帮助。写的时候没有具体深入到太多的细节,只提供了一个思路,如果对方案中的细节和问题有疑问,欢迎留言讨论。

[DNSMasq] 解决 No DNS Rebind 误杀内网域名A记录

前两天给自己的域名下添加了两条 A 记录,指向了内网的两个IP地址(192.168..)。当时是通过 VPN 连到了这个 192.168.. 的网段,两条记录在添加后直接就生效了。奇怪的是晚上回到家后,发现无法通过这两个域名访问内网的页面,Chrome 里的错误信息提示 “ERR_NAME_NOT_RESOLVED”,当时试着用路由器里配置的三个 DNS 解析了下自己的域名,发现都可以正常解析,但是在浏览器里却始终没法访问,重启了路由器无果,当时没什么思路,猜想可能是某些缓存机制影响,就先扔在了一边。

今天继续排查这个问题,之前在查看 DNSMasq 的配置时,发现默认开启了 “No DNS Rebind” 的选项,简单地查了一下,DNS Rebinding 的维基百科介绍中提到了

This attack can be used to breach a private network by causing the victim’s web browser to access machines at private IP addresses and returning the results to the attacker. It can also be used to use the victim machine for spamming, distributed denial-of-service attacks and other malicious activities.

这一段话提到了 DNS Rebind 可能和内网有关,于是打开路由器的 DD-WRT 管理界面,找到 Status 下的 Syslog 查看系统日志,看能否发现有关的线索,果然看到了一条相关的日志

Nov 30 00:21:10 DD-WRT daemon.warn dnsmasq[10942]: possible DNS-rebind attack detected: internal.record.bydell.com

也就是说,这两条指向到内网 IP 的记录被 DNSMasq 当成是 DNS Rebind 攻击被拦截掉了,这也就解释了为什么我路由器中配置的3个 DNS 服务器都可以正常解析,但是在终端上却无法得到正确的结果。于是 Google 了一下解决方案,DNSMasq 支持对特定域名记录加入白名单,使用方法如下:

可以添加静态记录

address=/abc.example.com/1.1.1.1

也可以对整个域名允许绕过 No DNS Rebind 的限制

–rebind-domain-ok=example.com

第一种方式不需要对域名进行解析,相当于在本地添加一条 hosts 记录,适合内部网络使用。

不过还是推荐使用第二种方式,这样不论任何时候记录发生变化,不需要维护 DNSMasq 里面的配置,直接修改对应的 DNS 记录,会灵活一些。