Σύνθετος ετήσιος ρυθμός μεγένθυσης

Αθανάσιος Σταυρακούδης

Εργαστήριο Εφαρμογών Πληροφορικής και Υπολογιστικών Οικονομικών

01/12/2023

Ετήσια στοιχεία

CAGR

  • CAGR: Compound Annual Growth Rate
  • ΣΕΠΜ: Σύνθετο Ετήσιο Ποσοστό Μεγέθυνσης

\[ CAGR = \left(\frac{\text{Τελική τιμή}}{\text{Αρχική τιμή}}\right)^{\frac{1}{\text{Πλήθος περιόδων}}} - 1 \]

Ή ως ποσοστό:

\[ CAGR = \left[ \left( \frac{\text{Τελική τιμή}}{\text{Αρχική τιμή}} \right)^{\frac{1}{\text{Πλήθος περιόδων}}} -1 \right] \times 100 \]

Για παράδειγμα εάν ένα μέγεθος έχει αρχική τιμή \(x_0 = 100\) μετά από 5 περιόδους (συνολικά 6 έτη) έχει τελική τιμή \(x_5 = 120\) τότε:

\[ CAGR = \left(\frac{110}{120}\right)^{\frac{1}{5}} -1 = \sqrt[5]{1.2} \approx 0.0371373 \text{ ή } \approx 3.71\%\]

Ανάλυση παραδείγματος

  • Οι στήλες \(x^1\), \(x^2\), \(x^3\), απεικονίζουν 3 διαφορετικές πορείες μεταβολής του \(χ\) από το \(x_0=100\) στο \(x_5=120\).
  • Οι στήλες \(r^1\), \(r^2\), \(r^3\) απεικονίζουν του ρυθμούς μεταβολής \(r = \frac{x_{t} - x_{t-1}}{x_{t-1}}\)
  • Οι μέσες τιμές \(\bar{r^1}\), \(\bar{r^2}\), \(\bar{r^3}\) ταυτίζονται μεταξύ τους: ανεξάρτητα από τις ενδιάμεσες τιμές ο αριθμητικός μέσος είναι ο ίδιος
  • Η στήλη \(y\) έχει υπολογιστεί με βάση το μέσο ρυθμό μεταβολής 0.0371373

Γενίκευση του τύπου

Ο τύπος ισχύει για οποιαδήποτε σταθερή χρονική μεταβολή, όχι μόνο ετήσια. Η χρονική περίοδος μπορεί να είναι έτος, τρίμηνο, μήνας, εβδομάδα, ημέρα, ώρα, κλπ.

\[ \mathrm{CAGR} = \left( \frac{V(t_n)}{V(t_0)} \right)^\frac{1}{n} - 1 \]

Μπορεί να ονομασία να περιέχει το ετήσιος (συνήθης εφαρμογή στα χρηματοοικονομικά) αλλά η περίοδος μπορεί να είναι οποιαδήποτε άλλη.

Αν μετά την πάροδο n περιόδων η τιμή της μεταβλητής V αλλάξει από \(V_{t_0}\) σε \(V_{t_n}\) τότε ο μέσος ρυθμός μεταβολής υπολογίζεται ως άνω.

Τριμηνιαία στοιχεία

Εφαρμογή σε περιπτώσεις διαφορετικής χρονικής μονάδας.

ΑΕΠ των ΗΠΑ

Με την βοήθεια του πακέτου fImport μπορούμε εύκολα να εισάγουμε τα στοιχεία του ΑΕΠ των ΗΠΑ (σε τριμηνιαία βάση) από τη βάση δεδομένων της Κεντρικής Τράπεζας των ΗΠΑ (FRED):

library(fImport)
GDP <- fredSeries('GDP', from = "2000-01-01")
GDP <- as.ts(GDP)
plot(GDP)

Πως υπολογίσουμε το συντελεστή CAGR

Βρίσκουμε τις δύο ακραίες τιμές, την πρώτη (head) και τελευταία (tail):

a <- GDP |> head(n = 1) 
b <- GDP |> tail(n = 1) 

Βρίσκουμε το πλήθος των περιόδων, εδώ αυτό αντιστοιχεί στο μέγεθος του διανύσματος GDP μείον ένα:

n <- length(GDP) - 1

Υπολογίζουμε τον τύπο: \[ r = \left(\frac{b}{a}\right)^{1/n} - 1\]

r <- (b/a)**(1/n) - 1

Πως κατασκευάζουμε τη θεωρητική σειρά GDP

\[ y_i = a \times (1+r)^i, \,\,\ i = 0, 1, 2,\ldots,n \]

Αυτό μπορεί να γίνει πολύ εύκολο στην R:

y <- a*(1+r)**(0:n)

Για λόγους συμβατότητας με τη δομή δεδομένων της σειράς GDP και για την ευκολία γραφικής απεικόνισης ως χρονοσειράς μετατρέπουμε την ποσότητα y σε ts (time series) με έναρξη το 2000 και συχνότητα τιμών 4 (τριμηνιαία στοιχεία):

y <- ts(y, start = 2000, freq = 4)

Σύγκριση πραγματικής και θεωρητικής σειράς

plot(GDP, col = "black", lwd = 2)
lines(y, col = "red", lwd = 2)

Οι δύο χρονοσειρές αρχίζουν από το ίδιο σημείο και τελειώνουν στο ίδιο σημείο (εξ ορισμού).

Η διαφορά βρίσκεται στις ενδιάμεσες τιμές. Στην πραγματικότητα η σχετική μεταβολή είναι μη σταθερή (τυχαία). Η προσέγγιση CAGR απαντά στο ερώτημα:

Ποιος είναι εκείνος ο σταθερός ρυθμός μεταβολής ώστε αν μια γεωμετρική πρόοδος ξεκινήσει από το σημείο \(V_{t=0}\) να φτάσει μετά από \(n\) περιόδους στο σημείο \(V_{t=n}\):

\[ V_{t=n} = V_{t=0} \times (1+r)^n\]

Ο μέσος ρυθμός μεταβολής

Ο ρυθμός μεταβολής ενός χρονικά μεταβαλλόμενου μεγέθους είναι: \[ \rho = \frac{x_t - x_{t-1}}{x_{t-1}}\]

Για το GDP μπορούμε εύκολα να το υπολογίσουμε ως εξής:

rho <- returns(GDP)

Και να εξάγουμε πληροφορίες για τα περιγραφικά στατιστικά:

summary(rho)
       V1           
 Min.   :-0.086232  
 1st Qu.: 0.007193  
 Median : 0.011403  
 Mean   : 0.010815  
 3rd Qu.: 0.014931  
 Max.   : 0.083516  
 NA's   :1          

Τι παρατηρούμε πολύ εύκολα: Οι τιμές \(r\) (CAGR) και \(\hat{\rho}\) (μέση μεταβολή) διαφέρουν. Προσοχή σε αυτό. Δεν είναι τυχαίο. Πάντα διαφέρουν, εξ ορισμού.

Ημερήσια στοιχεία

Τιμές μετοχών IBM για το έτος 2021.

IBM stock market data

library(tidyquant)
IBM <- tq_get("IBM", from = "2021-01-01", to = "2021-12-31")
head(IBM, 3)
# A tibble: 3 × 8
  symbol date        open  high   low close  volume adjusted
  <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
1 IBM    2021-01-04  120.  120.  118.  118. 5417443     102.
2 IBM    2021-01-05  120.  121.  119.  121. 6395872     104.
3 IBM    2021-01-06  121.  126.  121.  124. 8322708     107.
plot(IBM[, c("date", "close")], type = "l", lwd = 2)

Μέσος ρυθμός μεταβολής

Λάθος τρόπος. Μας δίνει τη μέση τιμή ενός μεγέθους, αλλά όχι αυτό που θέλουμε.

rho <- mean(diff(IBM$close), na.rm = TRUE)
a   <- head(IBM$close, 1)
b   <- tail(IBM$close, 1)
y1  <- seq(from = a, to = b, by = rho)
IBM$y1 <- y1
plot(IBM[, c("date", "close")], type = "l", lwd = 2, col = "black")
lines(IBM[, c("date", "y1")], type = "l", lwd = 2, col = "red")

CAGR

Σωστός τρόπος. Μας δίνει αυτό που θέλουμε.

a   <- head(IBM$close, 1)
b   <- tail(IBM$close, 1)
n   <- length(IBM$close) - 1
r   <- (b/a)**(1/n) - 1
y2  <- a*(1+r)**(0:n)
IBM$y2 <- y2
plot(IBM[, c("date", "close")], type = "l", lwd = 2, col = "black")
lines(IBM[, c("date", "y2")], type = "l", lwd = 2, col = "blue")

Σύγκριση

plot(IBM[, c("date", "close")], type = "l", lwd = 2, col = "black")
lines(IBM[, c("date", "y1")], type = "l", lwd = 2, col = "red")
lines(IBM[, c("date", "y2")], type = "l", lwd = 2, col = "blue")