在金融行業(yè)工作的人每天都在處理現(xiàn)金流預(yù)測,但大多是用Excel。事實上,Excel確實易于使用且透明??梢栽趲追昼妰?nèi)構(gòu)建一個現(xiàn)金流預(yù)測模型——編寫幾個公式,然后向下拖動復(fù)制。在本文中,我們將學(xué)習(xí)如何用Python構(gòu)建一個簡單的現(xiàn)金流預(yù)測模型,最終形成一個更復(fù)雜的模型。在這個模型中,我們用Python構(gòu)建了一個抵押計算器。 用于現(xiàn)金流預(yù)測的Python工具 我們可以使用列表或pandas庫來預(yù)測現(xiàn)金流??赡苓€有其他工具或庫,有興趣的可以進(jìn)一步研究,但這里只使用列表和pandas。 示例 假設(shè)我們有一項資產(chǎn)可以產(chǎn)生30年的收入。第一年收入是100美元,在接下來的29年里每年增長6%(30年后就沒有收入了)。計算該項資產(chǎn)的現(xiàn)值,每年貼現(xiàn)2%。 Excel模型 Excel用戶可能已經(jīng)知道如何(在Excel中)對此問題建模。多個輸入值、公式和下拉列表,讓我們看看下面的例子。這里只顯示了10年,但實際的Excel文件顯示了30年。 圖1 使用列表建模 Python列表是一種有序的數(shù)據(jù)結(jié)構(gòu),這正是我們建模時間序列數(shù)據(jù)(即隨時間變化的現(xiàn)金流)所需要的。需要說明的是,雖然我們可以使用列表來模擬現(xiàn)金流,但這樣做并不是一個好主意,因為我們必須自己做很多低級數(shù)據(jù)操作。這里,我們只是演示這個想法,實際上我們應(yīng)該使用pandas(或numpy)來模擬現(xiàn)金流預(yù)測。 income_first_yr = 100 growth_rt = 0.06 discount_rt = 0.02 其次,在列表中設(shè)置初始值,cashflow=[income_first_yr]。然后,再循環(huán)29次,計算隨后每年的收入,并將其添加到列表中。我們有一個30年的現(xiàn)金流預(yù)測。 cashflow = [income_first_yr] for i in range(29): cashflow.append(cashflow[i] * (1 + growth_rt)) 接下來,我們將在另一個列表中設(shè)置貼現(xiàn)現(xiàn)金率。 discount_vector = [1] for i in range(29): discount_vector.append(discount_vector[i] / (1 + discount_rt)) 如果想直觀地看到這兩個向量,我們可以把它們并排放置,可以使用zip()函數(shù)來實現(xiàn)。它基本上在每個第i項上組合兩個列表,并將它們作為元組返回,如下圖所示。注意,這個zip()函數(shù)實際上創(chuàng)建了30個元組。 圖2 我們知道,對于在zip()函數(shù)中創(chuàng)建的每個元組,第一個元素是收入,第二個元素是貼現(xiàn)率,因此我們可以將它們相乘以獲得貼現(xiàn)現(xiàn)金流。讓我們通過元組循環(huán)計算貼現(xiàn)現(xiàn)金流,并將其放入另一個列表中。這樣,當(dāng)前值就是結(jié)果列表的總和。 discounted_cashflow = [] for item in zip(cashflow,discount_vector): discounted_cashflow.append(item[0] * item[1]) 圖3 使用pandas建模 使用pandas創(chuàng)建現(xiàn)金流預(yù)測比僅使用列表更容易,因為我們可以使用一些內(nèi)置的方法。讓我們從創(chuàng)建一個包含30行和2列的pandas數(shù)據(jù)框架開始——一列用于收入預(yù)測,另一列用于貼現(xiàn)率。 圖4 一旦我們有了這兩個向量,我們可以將它們相乘得到貼現(xiàn)現(xiàn)金流,然后求和sum()得到現(xiàn)值。 圖5 注:本文學(xué)習(xí)整理自pythoninoffice.com。
|
|