复式记账、财报、量化与图论

不会记账何以变富。

如果你去搜索“为什么记账”,大概会有无数条理由。大多数会提到:记录自己的开支、寻找可削减的开支等。但我认为记账的功效不止于此,它其实是量化自己的一步,也是自身财务管理的一步。如果你想要投资炒股,那记账更是你理解公司财报的重要一步。

如果说金融业的本质是合理资源配置(通俗来说就是“让钱去该去的地方”)的话,那记账就是自己财富资源配置的基础。

复式记账

先简单说说我的记账史:我大三开始记账,一开始用一款叫 Toshl (opens in a new tab) 的 APP,多端同步、界面大方(现在这家公司仍活的挺好,登录上还能看到我几年前的账单)。当时它没有自动同步功能,我靠纯手动记账坚持了大概一年半。直到我的信用卡多起来,可以自动同步信用卡账单的网易有钱 (opens in a new tab)进入我的视线,我在安全和便捷的博弈中倾向了便捷。靠网易有钱一直坚持记账了两年多。这期间不仅记余额、日常花销,还包括基金、股票的仓位等,让我对资产负债表慢慢有了概念。

Beancount

到后来我遇到 Beancount,发现这才是适合我这种强迫症的终极大杀器。同时我也接触到了复式记账这种更科学的记账方式,对资产=负债+权益也有了充分的理解。

珠玉在前,关于什么是 beancount、什么是资产、为什么用 beancount 记账、为什么要采用复式记账等等,都在 Beancount複式記賬 (opens in a new tab)Beancount —— 命令行复式簿记 (opens in a new tab)等文章中有详细介绍,我这里简单概括一下:

复式记账就是保证每笔账都要有至少两个(复数个)账户,且这些账户的和为零的记账方式。

简单举个例子:我们去便利店买了一瓶可乐,那么如果按普通的记账方式,账单上的记录为:

2020-01-01,买可乐,银行卡余额    -5 元

而复式记账为:

2020-01-01,银行卡余额    -5 元
            花销:饮料     +5 元

而同样的一笔交易,对于便利店来说是:

2020-01-01, 货物:可乐        -1 瓶
            公司账户余额      +5 元

可以看到,复式记账必须是多个“账户”,因为要保证加起来为 0。“花销”是可以作为一个账户的,这样你只要看这个账户就知道你总共花了多少钱。货物也可以是一个账户,因为货物是有价值的。

另一个层面,可以发现记账不仅可以记钱,还可以记任何你想记录的“货币”,比如例子中的可乐、会员卡积分、股票等等,实现量化一切。

优越性

下图是用 fava (opens in a new tab) 生成的网页,美观大方。

复式记账最大的好处在于能保证账目的一致性和完整性,这样让你对自己的资产情况一目了然。再加上 beancount 是基于纯文本记账(纯文本自由且强大),所以能实现更复杂的功能。比如可以用 beancount 记录自己资产的拆借、折旧:

上面举的这两种,具体例子可以到我前面提到的文章中找。总之它们都会涉及到多个账户多条账目,用普通的记账方式,很容易就搞不清楚钱到底花在哪,而用 beancount 复式记账可以清晰掌握,并生成损益表和资产负债表。

除此之外还有很多强大的功能,大家可以自行探索。

账单与财报

我们通常说一家公司的财报,其实主要说它的两个表:损益表资产负债表。当你记账久了就发现,公司的这两个表,和我们个人的没什么两样

上文中我提到的拆借折旧这两个就是很典型的例子,我们自身也有,只是我们很少像公司一样严格的记账。如果你有经营一家公司,你会很好的理解这一点,而如果你是一个只有工资一项收入的工具人,那你得稍微转换一下思路:

更严谨的记账可以帮你理解公司财务报表,帮助你在股票投资中避险;而对公司财报更深的理解,也能帮助你优化自身的资产结构,开源节流。两者相得益彰,这是我自己深有体会的。

当理解的很深的时候,甚至可以跳脱出财务的范畴,比如做技术也经常说技术债,其实就是把“技术“当成一家”公司“,你每行代码可以理解成给这家公司盖楼,数据可以算这家公司的无形资产。你写的不好的代码,相当于给”这栋楼“注入不良资产,产生的畸形数据之后还得清理,算是产生了”流动负债“……长期不维护的代码,也会”折旧“……以上。

量化一切

通过上文的赘述,是不是你已经有点眉目了,发现不管主体是公司还是个人,不管记录的东西是金钱还是其它,都可以量化。

之前在和一个朋友讨论记账时,他说:”我花 10 分钟去记账,它带给我的收益我不知道有多少,唯一增加的就是账本厚度了“,我突然想到,如果时间算作一个账户,那么他这句话可以记作:

2020-01-01   时间           -10 分钟
             账本厚度        +5  行

时间就是金钱,这句话不是空谈,我们所做的每一件事,其中都包含时间成本。进而再想,发现不止是时间可以量化,而是任何事物都可以。比如

2020-01-01  去跑步运动   时间         -40 分钟
                       体力值       +10
2020-01-02  学习编程     时间         -60 分钟
                       体力值        -10
                       编程技术      +30
2020-01-10  上班        时间         -60 分钟
                       银行卡余额     100 元
                       收入          -100 元
                       编程技术       +5

从这个账单中,可以看出,跑步能让你体力充沛,更好地学习。同时工作一小时对编程技术的提升远没有自己单独坐下来用心去学的多。另外为什么时间和收入都是负数呢,你可以这么理解,你的时间本来是无限的(不确定你能活到几百岁),你从中拿走了几十分钟用来做事。收入同理,你可以理解成你的钱本来是无限的(不确定你能成为亿万还是兆万富翁),你从中拿走了 100 元放入了银行。多挣钱你就可以理解成从自己无限的可能中尽可能地多拿钱出来到银行里,因为只有拿出来才能花……

总之,什么都是可以量化的,只要你设定一个价格。比如刚才例子中的 40 分钟跑步 = 体力值+10,这些怎么定义都取决于你。如果你看过《奇特的一生》 (opens in a new tab)就发现作者就是近乎苛刻地将自己一生的时间都做了量化。当然我不是建议你去这么做,也不是说完全量化会有多么好,只是说明有这种可能,让你更好的理解“万物皆有价”,让你更好的理解你的一切。

记账与图论

复式记账保证了每一条账目,都会有至少两个账户和至少一条交易。而图这种数据结构是点和边的集合。如果我们把账户当作节点,把交易当作边,即:

账户 = 节点,交易 = 边

就很容易构成了一个图。

图论是研究事物之间关系的科学,万物之间都是有千丝万缕联系的,任何有联系(联接)的东西都可以抽象成图这种数据结构。抽象成图之后,更好做分析,比如分析哪个节点影响力最大,哪条路径最为关键,预测哪个方向会出现更多节点等等(对网络科学感兴趣的,可以看网络科学宗师巴拉巴西写的 《链接》 (opens in a new tab))。

我是在读了Accounting for Computer Scientists (opens in a new tab)这篇文章之后大彻大悟的。这篇文章算是写给程序员的记账指南,一路从单笔记账写到财报。

上图通过把账单抽象成图之后,很明显可以看到自己钱的流向:合伙人给公司账户 5000$,其中 500 用来买公司需要的家具,5块还了信用卡,由于买食物刷了 13 块,所有还欠信用卡 8 块。但最最神奇的是,不管你切断其中的哪条边,总能保证两个子图加起来的总和为 0,不信你可以试一试,这就是复式记账的威力。

而通过给节点上色,则很容易分辨出资产(绿色)、损益(蓝色)、启动资金(粉红)。具体的接下来再怎么分析,可以看我刚才提到的文章。

总之将账单抽象成图,是一个我以前没有想到过的思路,兴许将来的某一天我可以将自己的账单用Force-directed graph (opens in a new tab) 画出来玩玩。说不定能看出“哪笔支出是造成我现在没钱的原因”,“哪些债务影响了我在某类别上的支出”,或者直接预测出未来我将会在哪方面花更多的钱,防微杜渐。

记账,尤其是用 beancount 记账,让我变身小会计,让我能理解公司的财报,让我对很多事情有了量化的思维。量化自己的好处就是能随时把数据拿来做个像模像样的分析 (opens in a new tab),同时也能把自己当作一家公司来运营,这点我在我的文章里都提到过很多次了。

兴许在将来的哪一天,我可以对着自己的账单发现某些可优化的点,实现财务自由呢。玩笑话说归说,但把计算机思维运用到生活中 (opens in a new tab)我已经在无形中尝试过很多了,还真有用。