此文章為VIP限定
前情提要
本益成長比(簡稱:PEG)是本益比(簡稱:PE)的延伸,將公司未來獲利成長因素納入考量,解決PE對成長股反應過慢、估值過高的問題。
在進化後的本益成長比這篇文章中我們說明了PEG的概念,並帶大家實作和小幅度更改了PEG的公式獲得更好的回測績效。這次我將詳細的介紹PEG,提出數十種不同方式計算PEG,並找出最適合的那一個!
什麼是PEG?
在開始之前,讓我先帶大家認識一下本益成長比PEG!
1992年,PEG於《祖魯法則》一書被英國傳奇投資人吉姆·史萊特(Jim Slater)所提出,震撼當時的英國金融界。PEG也隨後被美國傳奇基金經理人彼得·林區(Peter Lynch)大力推崇,而後廣為人知。
有PE了,為什麼還需要PEG?
可能大家會想,不是有PE了嗎,為何還需要什麼PEG?
試想,今天你發現了阿榤公司搭上了產業浪潮,獲利將以每年翻5倍的速度急遽成長,而目前的股價8塊,EPS為0.2元。這樣算下來本益比為40倍! 這時你心想:「天啊,40倍的本益比誰買得下去?」
但仔細想想,聰明的你發現阿榤公司明年EPS會成長5倍,那明年的本益比不就剩下8倍嗎? 因此雖然目前40倍的本益比看似昂貴,你還是買了阿榤公司的股票,進而把該公司的本益比進一步往上推。
市場上也是如此,成長幅度越大、前景越看好的那些成長股,當下的本益比往往都是高的嚇人。
投資人漸漸發現PE適合拿來衡量穩健的績優股、景氣循環股等等,卻不適合成長股。為了找出方法來衡量成長股,PEG就此應運而生。
PEG的公式
根據超越祖魯法則一書,PEG公式如下:
本益成長比(PEG) = 預估本益比 / 預估盈餘成長率
預估本益比 = 現在股價 / 未來一年EPS
預估盈餘成長率=未來一年EPS / 過去一年EPS
以下為Jim Slater對PEG的看法:
PEG>1: 不需要關注
1>PEG>0.75: 可以考慮
PEG<0.75: 值得好好下功夫檢驗一番
以阿榤公司為例:
預估本益比是8倍,盈餘成長率為500%,計算出的PEG=8/500=0.016。
阿榤公司的本益比高達40倍,PEG卻只有0.016。在一般投資人眼中非常昂貴的公司,加入了成長性的考量後卻變得十分便宜,這就是PE跟PEG的差異。PEG的出現讓我們得以將公司的成長幅度進行量化,算出更準確的估值。
PEG定義
科普完畢進入正題!
PEG=預估本益比/成長率,而預估本益比=股價/預估EPS。
加上股價是已知資訊,因此廣義上的PEG只有以下部分能進行調整:
- 明年預估EPS
- 預估成長率
只要這兩個算出來,PEG就有了。因此當我們用不同的方法去計算預估EPS和預估成長率,就會得到不一樣的PEG,其效度也不同。
舉上一篇提過的例子,原始的PEG公式中使用稅後盈餘成長率作為預估成長率,雖然直觀卻常帶有一次性獲利的雜訊,因此我們將其改為營業利益成長率,最後也得到了較好的效果。
這次我經由上網查找、看書、發想等方式,蒐集了7種計算預估EPS、預估成長率的方式,總共會得出7×7=49種不同的PEG指標。同時我會藉由回測,告訴大家如何從49種PEG中找出有效的PEG的方式。
實驗開始
切分資料集
首先進行資料及的切分! 我希望讓兩組資料集都經歷過市場的多空循環,這樣挑出來的參數較具有參考性 。
因此這邊將資料集切割如下:
以下所有步驟除了最終model測試除外,都使用training dataset,以盡量避免overfitting的狀況發生。
單用PEG回測
篩出PEG值在市場中前10%小的股票持有,並在訓練集中進行回測。
可以發現效果差強人意,績效近乎等同大盤,有些年甚至跑輸大盤。做到這裡我也不禁想,難道PEG其實是個水貨,一點用處都沒有嗎?
進一步詳細檢查持股,發現持股有很多是因為業外收入認列導致EPS暴增,而進一步導致PEG極低的情況。這種業外暴增的情形並不符合當初設計PEG的本意,因此需要進一步思考如何過濾掉這種情況。
搭配濾網設計
PEG是為了找出低估的成長股,若單純使用PEG作為選股條件,會把機會財、業外認列等造成的「假性」成長一併列入,導致回測結果失真。
那該如何檢驗業內是否成長呢? 最直觀的就是月營收了。因此我在回測系統中設計了月營收的濾網,藉由月營收確保本業有持續增長。
下列是5種月營收轉強的濾網表現(上半為績效、下半為持股數目):
- 月營收短MA > 長MA
- 月營收MA連續上升
- 月營收YOY短MA > 長MA
- 月營收YOY連續上升
- 月營收MOM連續上升
除了最後一個濾網之外,其他的濾網表現都不錯,所以還需要進行下一步篩選。謹記著加入月營收濾網的目的並非提升績效,而只是為了確保本業在增長,因此不篩掉過多的股票才是我們的第一要務。
綜合上述所說,最後決定使用「月營收YOY短MA > 長MA」作為濾網,能在保留大部分股票的同時獲得不錯的績效。
PEG跟月營收配嗎?
我猜大家可能還在想,PEG真的不能單獨回測,一定得搭配月營收嗎?
為了證明我一開始的猜想,我分別用剛提過的五種月營收濾網作為基準,用PEG、月營收、PEG+月營收這三種方式去跑模擬績效。
可以發現除了「月營收MOM連續上升」該濾網本身效度不足外,其他四種月營收濾網,PEG+MONTH(深藍色)的績效表現都大幅上升,足以證明PEG和月營收的結合具有非常強的化學效應!
PEG 設計
只要有明年預估的EPS、預估成長率,就能算出PEG,因此大家都可以建構出自己的PEG。
以下是我建構其中一種PEG的範例:
from finlab import data
# 讀取股票收盤價、EPS
close = data.get('etl:adj_close')
EPS = data.get('fundamental_features:每股稅後淨利')
# 用最近4季的EPS總合/最近8季~最近四季的EPS總合,來算EPS成長率
EPS成長率 = EPS.rolling(4).sum()/EPS.shift(4).rolling(4).sum()-1
# 用EPS成長率*近四季EPS,推算接下來一年的預估EPS
預估EPS = EPS*EPS成長率
# 將EPS成長率轉成以%為單位,方便計算PEG
EPS成長率 = (EPS成長率-1)*100
#計算PEG
預估本益比 = close/預估EPS
peg = 預估本益比/EPS成長率
因為算法的可能性太多種我就不一一贅述,歡迎大家自行發揮想像空間,發明越多種的PEG算法越好。
註: PEG不適用EPS、成長率為負的股票,在回測前要記得進行處理。
PEG選擇
接下來我會說明如何從一拖拉庫PEG挑出理想的PEG!
假設現在我們已經有了許多種PEG的算法,接下來可以使用不同的PEG算法計算報酬並作圖如下,x軸是用該PEG分類後的策略報酬,y軸則是不同的PEG指標。
以綠色方框處舉例,使用了近四季EPS作為明年預估EPS、年複合EPS成長率作為預估成長率來計算PEG。0%~20%的格子代表PEG前20%小的股票搭配月營收濾網的報酬,以此類推。顏色越淺代表報酬越高。
可以看出綠色方框處的PEG算法效度很差,因為無論PEG值是大是小,報酬都沒有顯著的改變(顏色幾乎完全沒有變化)。相較之下,紅色方框處就是一個十分優秀的PEG算法,隨著PEG越大報酬逐漸縮小,因此顏色也隨著由淺至深。
如果比較細心的同學會發現,以全市場股票分群來說,每個row的顏色平均應該會差不多,但是圖中綠色框中的顏色普遍偏深,而紅色框普遍偏淺,代表分群以外,還有其他的因素在影響績效表現。
這是因為在進行PEG分群之前,會先將負PEG的股票刪除,而負值的原因可能是預估EPS或成長率為負。
若是一個好的PEG算法,就能比較正確的預估成長率和EPS,進而只刪除缺乏成長性的股票,使整體績效進步; 反之若該算法不佳,就容易把高成長性的股票在分群之前就剔除掉,進而導致整個row的績效都不好(顏色偏深)。
定義數學式: PEG_importance
我們雖能透過肉眼大致看出PEG算法的好壞,但要具體分辨哪種PEG算法最好,還是需要經由定義數學式來達成。
首先我對熱力圖中的每一個row(代表一種PEG算法)作圖,x軸是分群rank的上限,y軸則是該分群的平均報酬,以綠色方框處作圖如下。
以圈起來的紅點為例,其坐標為(0.8,1.22),代表PEG數值60%~80%的股票平均報酬為1.22。接下來我對這五個點做linear regression(圖中藍線),這條線的斜率說明了分群後的股票與報酬之間的相關性,當斜率的絕對值越大,代表著分群後的股票與報酬之間有明顯的相關性(正、負相關都有可能)。
以紅框處的圖作對比,可以從紅點分佈發現,隨著PEG Rank越大報酬就越小,因此linear regression所做出來的直線也較為傾斜,斜率達到了-1.92(綠色方框處斜率只有-0.19)。
綜合上述,最後決定以線性迴歸直線的斜率的絕對值,作為排序PEG重要性的因子,因而得出以下式子。
PEG_importance = | Slope(by linear regression) |
對所有的PEG算法計算其PEG_importance,作圖如下:
在49種PEG計算方式裡面,前面幾名的分數遙遙領先,而剩下算法彼此間差異不大。在經過回測後,發現PEG_importance超過1以上的算法,對比大盤才有較明顯的提升效果,這代表設計一個好的PEG並不是那麼容易,因為有一半以上的算法PEG_importance都沒超過1。往後大家撰寫PEG相關策略時,若策略績效不理想也可以優先考慮從PEG計算方式作修改!
註: 雖然沒有公布各種PEG的計算方式,但核心觀念已經藏在PEG的命名中了,去找吧,我把所有的PEG算法都藏在那裡了! XD
程式實作範例
計算PEG主要取決於預估EPS和預估成長率的算法,因此只要將改動這兩個部分的算法,其餘的程式碼都可以維持不變。
透過不同的算法就可以構成不同的PEG進行績效回測,其餘的部分如月營收濾網則保持不動做為控制變因。如此一來我們就能對不同的PEG算法之間的效度、報酬率進行比較,並選出最適合的那一個!
完整程式碼
以下是完整的程式碼範例和註解,我使用了跟文章開頭相同的算法做示範。大家可以直接複製到Colab上直接服用,也可以將其改成自己的算法重新進行回測!
!pip install finlab
from finlab import data
from finlab.backtest import sim
# 計算PEG
close = data.get('etl:adj_close')
EPS = data.get('fundamental_features:每股稅後淨利')
EPS成長率 = EPS.rolling(4).sum()/EPS.shift(4).rolling(4).sum()-1 # 用最近4季的EPS總合/最近8季~最近四季的EPS總合,來算EPS成長率
預估EPS = EPS*EPS成長率 # 用EPS成長率*近四季EPS,推算接下來一年的預估EPS
EPS成長率 = (EPS成長率-1)*100 # 將EPS成長率轉成以%為單位,方便計算PEG
預估本益比 = close/預估EPS
peg = 預估本益比/EPS成長率
# 月營收濾網 (短均>長均)
rev_yoy = data.get('monthly_revenue:去年同月增減(%)')
rev_yoy_3ma=rev_yoy.average(3) #三個月的短期均線
rev_yoy_12ma=rev_yoy.average(12) #十二個月的短期均線
cond_month_revenue = rev_yoy_3ma>rev_yoy_12ma # 短期均線>長期均線 => 持有
# 回測
result = peg*(cond_month_revenue)
result = result[result>0] #月營收增長是負的沒有意義,拿掉
lower_bound = result.quantile_row(0) #0百分位數(最小值)
upper_bound = result.quantile_row(0.2) #20百分位數
position = (result>=lower_bound)&(result<=upper_bound) #取peg前20%小的做持有
report = sim(position,trade_at_price='close',upload=True) #含手續費的回測結果
策略回測(第一名的PEG算法)
接下來我們採用PEG_importance最高PEG的計算方式,並取PEG前20%小的股票,搭配月營收濾網進行回測。
近期表現(Test: 2020~2021)
過去表現(Train: 2014~2019)
結論
回測發現,近期績效和過去績效相差不大,年報酬率都在40%左右,但相對近兩年大盤的漲幅而言,近期績效就不算太過亮眼了。
在大盤大漲的時候,PEG相關的策略往往較難發揮; 當大盤走平或下跌時,PEG策略所挑出的個股在隨後卻常有較大幅度的彈升,進而讓整體的績效勝過大盤。
我自己的解釋是當市場恐慌時,所有股票都一起下殺,成長股當然也難以倖免,但只要市場的信心一恢復,投資人又願意給成長股較高的本益比,這一來一往的本益比評價調整,讓成長股的績效表現更為出色。
這次的研究就到這裡結束了,希望有幫助大家更瞭解PEG!
窩4阿榤,下次見,掰!