Εισαγωγή

Η παρούσα αναφορά συντάχθηκε για τον Portfolio Manager του fund με σκοπό την αξιολόγηση και την τριετή πρόβλεψη (12 τρίμηνα) των κερδών ανά μετοχή (EPS) της εταιρείας Johnson & Johnson, βασιζόμενη σε ιστορικά δεδομένα 84 τριμηνιαίων παρατηρήσεων (1960–1980).

Ως Financial Analysts, στόχος μας είναι η ανάλυση της χρονοσειράς, η σύγκριση εναλλακτικών μοντέλων πρόβλεψης (Seasonal Naïve, Holt-Winters, SARIMA) σε δεδομένα εκτός δείγματος (Test Set) και ο προσδιορισμός των διαστημάτων εμπιστοσύνης. Η τελική εισήγηση θα καθορίσει την επενδυτική στρατηγική του fund (Long ή Short θέση) στη συγκεκριμένη μετοχή, ελαχιστοποιώντας το επενδυτικό ρίσκο.

Setup

# --- Εγκατάσταση & Φόρτωση πακέτων ---

library(forecast)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(ggplot2)
library(gridExtra)

set.seed(42)

# --- Φόρτωση δεδομένων ---
data("JohnsonJohnson")
jj <- JohnsonJohnson

class(jj)            # έλεγχος: είναι ήδη ts object;
## [1] "ts"
start(jj); end(jj); frequency(jj)
## [1] 1960    1
## [1] 1980    4
## [1] 4
length(jj)           # 84 παρατηρήσεις (21 χρόνια × 4 τρίμηνα)
## [1] 84
head(jj, 12)
##      Qtr1 Qtr2 Qtr3 Qtr4
## 1960 0.71 0.63 0.85 0.44
## 1961 0.61 0.69 0.92 0.55
## 1962 0.72 0.77 0.92 0.60

Μέρος Α: Exploration & Decomposition

1. Οπτικοποίηση Χρονοσειράς

Δημιουργούμε το αρχικό διάγραμμα της χρονοσειράς με την autoplot() για να εξετάσουμε οπτικά την τάση, την εποχικότητα και τη διακύμανση των κερδών (EPS).

autoplot(jj) +
  ggtitle("Τριμηνιαία Κέρδη ανά Μετοχή (EPS) της Johnson & Johnson (1960–1980)") +
  xlab("Έτος") +
  ylab("EPS (USD)") +
  theme_minimal()

Τάση: Η χρονοσειρά παρουσιάζει μια ισχυρή, συνεχή και ξεκάθαρα εκθετική ανοδική τάση, με την κερδοφορία να επιταχύνεται μετά το 1970.

Εποχικότητα: Υπάρχει ένα έντονο, σταθερά επαναλαμβανόμενο εποχικό μοτίβο σε ετήσια βάση (ανά τέσσερα τρίμηνα).

Διακύμανση: Το εύρος των εποχικών διακυμάνσεων διευρύνεται όσο αυξάνεται το επίπεδο της σειράς, γεγονός που υποδηλώνει πολλαπλασιαστική συμπεριφορά.

2. Εποχικός έλεγχος

Δημιουργούμε τα διαγράμματα ggseasonplot() και ggsubseriesplot() για να απομονώσουμε την τριμηνιαία συμπεριφορά και να εντοπίσουμε ποιο τρίμηνο παρουσιάζει συστηματικά τη μεγαλύτερη κερδοφορία.

# Εποχικό διάγραμμα ανά έτος
ggseasonplot(jj, year.labels = TRUE) +
  ggtitle("Seasonal Plot:  Johnson & Johnson EPS") +
  theme_minimal()

  • Ισχυρότερα Τρίμηνα: Το 1ο (Q1) και το 3ο τρίμηνο (Q3) είναι τα δύο ισχυρότερα. Η κερδοφορία ξεκινάει πολύ ψηλά στο Q1, σημειώνει μια ξεκάθαρη βουτιά στο Q2, κάνει κορυφή στο Q3, και μετά πέφτει.

  • Ασθενέστερα Τρίμηνα: Το 4ο τρίμηνο (Q4) είναι σταθερά το πιο αδύναμο από όλα, με το 2ο τρίμηνο (Q2) να ακολουθεί ως η δεύτερη χαμηλότερη περίοδος της χρονιάς.

# Διάγραμμα μεταβολής ανά τρίμηνο
ggsubseriesplot(jj) +
  ggtitle("Subseries Plot: Μεταβολή ανά Τρίμηνο") +
  theme_minimal()

  • Ισχυρότερο Τρίμηνο: Το 3ο τρίμηνο (Q3) έχει τον υψηλότερο μέσο όρο, ακολουθούμενο πολύ στενά από το 2ο (Q2) και το 1ο τρίμηνο (Q1).

  • Ασθενέστερο Τρίμηνο: Το 4ο τρίμηνο (Q4) έχει με διαφορά τον χαμηλότερο μέσο όρο κερδοφορίας διαχρονικά.

  • Ανάπτυξη: Η εκθετική καμπύλη μέσα σε κάθε τρίμηνο επιβεβαιώνει ότι η J&J αναπτύσσεται ραγδαία και με τον ίδιο ακριβώς ρυθμό σε όλες τις περιόδους του έτους.

3. Τύπος εποχικότητας

Η εποχικότητα είναι ξεκάθαρα πολλαπλασιαστική.

Παρατηρώντας το αρχικό διάγραμμα της χρονοσειράς και το Seasonal Plot, το πλάτος των εποχικών διακυμάνσεων δεν παραμένει σταθερό. Αντίθετα, όσο αυξάνεται το επίπεδο της σειράς και η τάση ανεβαίνει (ειδικά μετά το 1970), οι διακυμάνσεις μεγαλώνουν ανάλογα.

Στις αρχές της δεκαετίας του ’60, με χαμηλά κέρδη, οι διακυμάνσεις είναι μικρές σε απόλυτα μεγέθη, ενώ στα τέλη της δεκαετίας του ’70 γίνονται πολύ μεγαλύτερες. Αυτή η ανάλογη αύξηση της διακύμανσης με την τάση αποτελεί την κλασική ένδειξη multiplicative μοντέλου.

4. Decomposition

Εφαρμόζουμε τη συνάρτηση decompose() με τύπο type = "multiplicative" για να διαχωρίσουμε τη χρονοσειρά στα βασικά της συστατικά: την τάση, την εποχικότητα και το τυχαίο σφάλμα.

# Εκτέλεση πολλαπλασιαστικής αποσύνθεσης
dec_mult <- decompose(jj, type = "multiplicative")

# Οπτικοποίηση των συστατικών
autoplot(dec_mult) +
  ggtitle("Multiplicative Decomposition — Johnson & Johnson EPS") +
  theme_minimal()

  • Trend (Τάση): Η μακροπρόθεσμη τάση είναι ξεκάθαρα καμπυλωτή και όχι ευθύγραμμη. Παρουσιάζει μια ομαλή, εκθετικά επιταχυνόμενη ανοδική τροχιά, επιβεβαιώνοντας τη γεωμετρική ανάπτυξη της εταιρείας.

  • Seasonal (Εποχικότητα): Το εποχικό συστατικό απομονώνει το τριμηνιαίο μοτίβο. Επειδή η αποσύνθεση είναι πολλαπλασιαστική, οι δείκτες κυμαίνονται σταθερά γύρω από τη μονάδα σε όλο το μήκος του άξονα του χρόνου.

  • Remainder (Κατάλοιπα): Δείχνει το τυχαίο σφάλμα (θόρυβο) αφού αφαιρεθεί η τάση και η εποχικότητα. Κινείται γύρω από το 1.0, παρουσιάζοντας κάποιες μεμονωμένες έντονες αστάθειες, αλλά παραμένει γενικά ελεγχόμενο.

5. Log Transformation

Εφαρμόζουμε τον λογαριθμικό μετασχηματισμό log() στη σειρά και σχεδιάζουμε το αρχικό και το λογαριθμικό διάγραμμα δίπλα-δίπλα με την grid.arrange() για να συγκρίνουμε τη συμπεριφορά της τάσης και της διακύμανσης.

# Εφαρμογή λογαρίθμου
jj_log <- log(jj)

# Δημιουργία των δύο plots
p1 <- autoplot(jj) + ggtitle("Αρχική Σειρά") + theme_minimal()
p2 <- autoplot(jj_log) + ggtitle("Λογαριθμική Σειρά") + theme_minimal()

# Εμφάνιση δίπλα-δίπλα
grid.arrange(p1, p2, ncol = 2)

  • Γραμμικοποίηση της Τάσης: Η αρχική εκθετική τάση μετατρέπεται πλέον σε μια σχεδόν γραμμική ανοδική πορεία, γεγονός που διευκολύνει τη στατιστική μοντελοποίηση.

  • Σταθεροποίηση της Διακύμανσης: Το εύρος των εποχικών διακυμάνσεων έχει πλέον σταθεροποιηθεί σε όλο το μήκος του χρόνου. Δεν μεγαλώνει όσο ανεβαίνει η σειρά, μετατρέποντας τη συμπεριφορά από multiplicative σε additive.

Μέρος Β: Modeling & Forecasting

6. Train/Test Split

Διαχωρίζουμε τη χρονοσειρά χρονολογικά σε δύο σύνολα.

Το σύνολο εκπαίδευσης (Train set: 1960 Q1 – 1978 Q4, 76 παρατηρήσεις) για την προσαρμογή των μοντέλων και το σύνολο ελέγχου (Test set: 1979 Q1 – 1980 Q4, 8 παρατηρήσεις) για την αξιολόγηση των προβλέψεων εκτός δείγματος.

# Χρονολογικός διαχωρισμός με τη window()
train <- window(jj, end = c(1978, 4))
test  <- window(jj, start = c(1979, 1))

# Έλεγχος των συνόλων
length(train)
## [1] 76
length(test)
## [1] 8

7. Έλεγχος στασιμότητας

Ελέγχουμε αν η αρχική σειρά εκπαίδευσης (train) είναι στάσιμη χρησιμοποιώντας τη δοκιμασία Augmented Dickey-Fuller (adf.test()).

library(tseries)
adf.test(train)
## Warning in adf.test(train): p-value greater than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  train
## Dickey-Fuller = 0.85296, Lag order = 4, p-value = 0.99
## alternative hypothesis: stationary
  • p-value: \(0.99\) (μεγαλύτερο από το κρίσιμο επίπεδο σημαντικότητας \(\alpha = 0.05\)).

  • Απόφαση: Αποτυγχάνουμε να απορρίψουμε την μηδενική υπόθεση (\(H_0\): η σειρά έχει μοναδιαία ρίζα / δεν είναι στάσιμη).

  • Συμπέρασμα: Η αρχική σειρά train είναι μη στάσιμη. Αυτό είναι απόλυτα αναμενόμενο, καθώς η σειρά κυριαρχείται από την ισχυρή εκθετική ανοδική τάση και την έντονη εποχικότητα που είδαμε στο Μέρος Α.

8. ACF & PACF της Διαφορισμένης Σειράς

Επειδή η σειρά δεν είναι στάσιμη, εφαρμόζουμε πρώτα τις κατάλληλες διαφορές και στη συνέχεια σχεδιάζουμε τα διαγράμματα Αυτοσυσχέτισης (ggAcf()) και Μερικής Αυτοσυσχέτισης (ggPacf()) δίπλα-δίπλα για να αναγνωρίσουμε τις παραμέτρους ενός πιθανού μοντέλου ARIMA.

# Παράδειγμα για πρώτη και εποχική διαφορά στη λογαριθμική σειρά
jj_diff <- diff(diff(log(train), lag = 4))

# Δημιουργία των ACF και PACF plots
p_acf  <- ggAcf(jj_diff) + ggtitle("ACF") + theme_minimal()
p_pacf <- ggPacf(jj_diff) + ggtitle("PACF") + theme_minimal()

# Εμφάνιση δίπλα-δίπλα
grid.arrange(p_acf, p_pacf, ncol = 2)

  • ACF:

    • Lag 1: Παρουσιάζει μια πολύ ισχυρή, αρνητική και στατιστικά σημαντική τιμή (~ -0.38), ξεπερνώντας κατά πολύ το κάτω μπλε διακεκομμένο όριο.

    • Lag 4: Δείχνει επίσης μια σημαντική αρνητική τιμή που οριακά ξεπερνά το όριο.

    • Lag 7: Εμφανίζει μια σημαντική θετική τιμή που ξεπερνά το πάνω όριο σημαντικότητας.

    • Τα υπόλοιπα lags (όπως το 11) βρίσκονται οριακά πάνω ή μέσα στα όρια.

  • PACF:

    • Lag 1: Δείχνει μια έντονη, στατιστικά σημαντική αρνητική τιμή (~ -0.38).

    • Lag 4: Παρουσιάζει μια εξίσου ισχυρή αρνητική κορυφή (~ -0.33) που ξεπερνά καθαρά το κάτω όριο.

    • Κανένα άλλο lag στο PACF δεν ξεπερνά τα μπλε διακεκομμένα όρια σταθερότητας.

9. Εκπαίδευση & Πρόβλεψη Τριών Μοντέλων

Εκπαιδεύουμε τρία διαφορετικά μοντέλα στο σύνολο εκπαίδευσης (train) για να προβλέψουμε τα επόμενα 8 τρίμηνα (2 έτη), όσο δηλαδή είναι και το μέγεθος του test set.

  • Στο μοντέλο Holt-Winters χρησιμοποιούμε seasonal = "multiplicative", καθώς στο Μέρος Α τεκμηριώσαμε ότι η διακύμανση αυξάνεται μαζί με την τάση.

  • Στο ARIMA χρησιμοποιούμε lambda = 0 (λογαριθμικός μετασχηματισμός) μέσα στην auto.arima() για να σταθεροποιήσουμε τη διακύμανση και να γραμμικοποιήσουμε την τάση.

library(forecast)

# (α) Seasonal Naïve
fit_snaive <- snaive(train, h = 8)

# (β) Holt-Winters (Πολλαπλασιαστικό)
fit_hw <- hw(train, h = 8, seasonal = "multiplicative")

# (γ) ARIMA (με αυτόματο λογάριθμο μέσω lambda=0)
fit_arima_model <- auto.arima(train, lambda = 0)
fit_arima <- forecast(fit_arima_model, h = 8)

# Εμφάνιση των summary
summary(fit_snaive)
## 
## Forecast method: Seasonal naive method
## 
## Model Information:
## Call: snaive(y = train, h = 8) 
## 
## Residual sd: 0.8214 
## 
## Error measures:
##                     ME      RMSE       MAE      MPE     MAPE MASE      ACF1
## Training set 0.5884722 0.8214427 0.5920833 14.27463 14.77554    1 0.6642405
## 
## Forecasts:
##         Point Forecast     Lo 80     Hi 80     Lo 95    Hi 95
## 1979 Q1          11.88 10.827279 12.932721 10.270002 13.49000
## 1979 Q2          12.06 11.007279 13.112721 10.450002 13.67000
## 1979 Q3          12.15 11.097279 13.202721 10.540002 13.76000
## 1979 Q4           8.91  7.857279  9.962721  7.300002 10.52000
## 1980 Q1          11.88 10.391227 13.368773  9.603119 14.15688
## 1980 Q2          12.06 10.571227 13.548773  9.783119 14.33688
## 1980 Q3          12.15 10.661227 13.638773  9.873119 14.42688
## 1980 Q4           8.91  7.421227 10.398773  6.633119 11.18688
summary(fit_hw)
## 
## Forecast method: Holt-Winters' multiplicative method
## 
## Model Information:
## Holt-Winters' multiplicative method 
## 
## Call:
## hw(y = train, h = 8, seasonal = "multiplicative")
## 
##   Smoothing parameters:
##     alpha = 0.197 
##     beta  = 0.1082 
##     gamma = 1e-04 
## 
##   Initial states:
##     l = 0.5902 
##     b = 0.0072 
##     s = 0.8267 1.0468 1.0827 1.0439
## 
##   sigma:  0.1337
## 
##      AIC     AICc      BIC 
## 174.6172 177.3444 195.5938 
## 
## Error measures:
##                     ME      RMSE       MAE       MPE     MAPE      MASE
## Training set 0.0420402 0.3595992 0.2602222 0.5285725 9.289055 0.4395027
##                   ACF1
## Training set 0.1282904
## 
## Forecasts:
##         Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
## 1979 Q1       12.83495 10.636472 15.03343  9.472669 16.19723
## 1979 Q2       13.76326 11.303396 16.22312 10.001224 17.52529
## 1979 Q3       13.74580 11.122117 16.36949  9.733221 17.75839
## 1979 Q4       11.19950  8.872544 13.52645  7.640730 14.75826
## 1980 Q1       14.57307 11.235132 17.91102  9.468132 19.67802
## 1980 Q2       15.56606 11.610776 19.52135  9.516974 21.61515
## 1980 Q3       15.48923 11.116368 19.86209  8.801514 22.17695
## 1980 Q4       12.57631  8.637829 16.51479  6.552923 18.59970
summary(fit_arima_model)
## Series: train 
## ARIMA(2,0,0)(1,1,0)[4] with drift 
## Box Cox transformation: lambda= 0 
## 
## Coefficients:
##          ar1     ar2     sar1   drift
##       0.3131  0.2432  -0.2970  0.0386
## s.e.  0.1244  0.1300   0.1285  0.0046
## 
## sigma^2 = 0.008377:  log likelihood = 71.78
## AIC=-133.56   AICc=-132.65   BIC=-122.18
## 
## Training set error measures:
##                       ME      RMSE       MAE      MPE     MAPE      MASE
## Training set 0.001523642 0.3596867 0.2419193 -0.16328 6.770657 0.4085899
##                    ACF1
## Training set -0.1186641
  • Seasonal Naïve (Baseline): Έχει τη χειρότερη προσαρμογή με RMSE = 0.8214 και MAPE = 14.78%, καθώς αδυνατεί να ακολουθήσει την έντονη ανοδική τάση της σειράς.

  • Holt-Winters (Multiplicative): Εξαιρετική βελτίωση με RMSE = 0.3596 και MAPE = 9.29%. Το \(\gamma = 1e-04\) δείχνει ότι το εποχικό μοτίβο είναι απόλυτα σταθερό διαχρονικά.

  • ARIMA(2,0,0)(1,1,0)[4] με drift (λ = 0): Το κορυφαίο μοντέλο στο training set με το χαμηλότερο MAPE = 6.77% (RMSE = 0.3597). Ο λογάριθμος (\(\lambda=0\)) σταθεροποίησε τη διακύμανση, ενώ το drift αποτυπώνει με ακρίβεια την τάση.

10. Residual diagnostics

Εφαρμόζουμε τη συνάρτηση checkresiduals() στο καλύτερο μοντέλο μας (ARIMA) για να ελέγξουμε αν τα κατάλοιπα (residuals) συμπεριφέρονται ως λευκός θόρυβος (white noise), δηλαδή αν είναι ασυσχέτιστα, με μηδενικό μέσο όρο και σταθερή διακύμανση.

# Έλεγχος καταλοίπων για το μοντέλο ARIMA
checkresiduals(fit_arima_model)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,0,0)(1,1,0)[4] with drift
## Q* = 3.7985, df = 5, p-value = 0.5788
## 
## Model df: 3.   Total lags used: 8
  • Έλεγχος Ljung-Box: Το p-value είναι \(0.5788\), το οποίο είναι κατά πολύ μεγαλύτερο από το κρίσιμο επίπεδο \(\alpha = 0.05\). Συνεπώς, αποδεχόμαστε τη μηδενική υπόθεση ότι τα κατάλοιπα είναι ανεξάρτητα και ασυσχέτιστα.

  • Διάγραμμα ACF καταλοίπων: Όλες οι ράβδοι αυτοσυσχέτισης των σφαλμάτων βρίσκονται εντός των μπλε διακεκομμένων ορίων σημαντικότητας, γεγονός που επιβεβαιώνει την απουσία εναπομένουσας συσχέτισης.

  • Ιστόγραμμα: Η κατανομή των καταλοίπων είναι καμπυλωτή, συμμετρική και ακολουθεί ικανοποιητικά την κανονική κατανομή (πορτοκαλί γραμμή) με μέσο όρο πολύ κοντά στο μηδέν.

Συμπέρασμα: Τα κατάλοιπα του ARIMA μοντέλου αποτελούν λευκό θόρυβο (white noise). Αυτό σημαίνει ότι το μοντέλο έχει εξαγάγει όλη τη διαθέσιμη πληροφορία από τα δεδομένα και οι προβλέψεις του είναι έγκυρες.

11. Σύγκριση προβλέψεων

Σχεδιάζουμε την αρχική σειρά εκπαίδευσης (train) και προσθέτουμε πάνω στο ίδιο γράφημα ως ξεχωριστά επίπεδα (autolayer) τις πραγματικές τιμές ελέγχου (test), καθώς και τις μέσες προβλέψεις (mean) και των τριών μοντέλων που εκπαιδεύσαμε, ώστε να συγκρίνουμε οπτικά την ακρίβειά τους.

# Οπτικοποίηση όλων των προβλέψεων μαζί με το Test set
autoplot(train) +
  autolayer(test,            series = "Πραγματικά", lwd = 0.8) +
  autolayer(fit_snaive$mean, series = "Seasonal Naïve", lwd = 0.8) +
  autolayer(fit_hw$mean,     series = "Holt-Winters", lwd = 0.8) +
  autolayer(fit_arima$mean,  series = "ARIMA", lwd = 0.8) +
  ggtitle("Σύγκριση Προβλέψεων Μοντέλων vs Πραγματικά Δεδομένα") +
  xlab("Έτος") + ylab("EPS") +
  theme_minimal() +
  scale_colour_manual(values=c("Πραγματικά"="black", "Seasonal Naïve"="red", 
                               "Holt-Winters"="blue", "ARIMA"="green4"))

  • Seasonal Naïve (Κόκκινη): Αποτυγχάνει πλήρως. Υποτιμά τη σειρά γιατί επαναλαμβάνει το παρελθόν χωρίς να βλέπει την ανοδική τάση.

  • Holt-Winters (Μπλε) & ARIMA (Πράσινη): Εξαιρετική πρόβλεψη. Ακολουθούν πιστά και την ανοδική τάση και τις έντονες τριμηνιαίες διακυμάνσεις των πραγματικών δεδομένων (Μαύρη γραμμή).

  • Συμπέρασμα: ARIMA και Holt-Winters δίνουν «μάχη στήθος με στήθος», με το ARIMA να αποτυπώνει οριακά καλύτερα τις ακραίες κορυφές του test set.

12. Accuracy Metrics

Υπολογίζουμε τους δείκτες ακρίβειας των τριών μοντέλων εκτός δείγματος (out-of-sample) χρησιμοποιώντας τη συνάρτηση accuracy() σε συνδυασμό με το test set, ώστε να αναδείξουμε τον τελικό νικητή βάσει των σφαλμάτων RMSE, MAE και MAPE.

# Υπολογισμός σφαλμάτων στο test set
acc_snaive <- accuracy(fit_snaive, test)[2, c("RMSE", "MAE", "MAPE")]
acc_hw     <- accuracy(fit_hw, test)[2, c("RMSE", "MAE", "MAPE")]
acc_arima  <- accuracy(fit_arima, test)[2, c("RMSE", "MAE", "MAPE")]

# Συγκέντρωση των αποτελεσμάτων
metrics_summary <- rbind(
  "Seasonal Naive" = acc_snaive,
  "Holt-Winters"   = acc_hw,
  "ARIMA"          = acc_arima
)

metrics_summary
##                     RMSE       MAE      MAPE
## Seasonal Naive 2.7765401 2.5425000 17.899110
## Holt-Winters   1.0865532 1.0427583  7.763851
## ARIMA          0.8136629 0.7225012  5.419212
  • Seasonal Naïve: Το χειρότερο μοντέλο με RMSE = 2.78 και MAPE = 17.90%, λόγω αδυναμίας προσαρμογής στην τάση.

  • Holt-Winters: Πολύ καλή επίδοση, μειώνοντας το σφάλμα σε RMSE = 1.09 και MAPE = 7.76%.

  • Τελικός Νικητής (ARIMA): Το μοντέλο ARIMA(2,0,0)(1,1,0)[4] με drift κυριαρχεί σε όλους τους δείκτες με το χαμηλότερο RMSE = 0.81 και MAPE = 5.42%.

Συμπέρασμα: Ο αυτόματος λογάριθμος (\(\lambda = 0\)) και η στοχαστική δομή του ARIMA αποτύπωσαν άριστα τη δυναμική της σειράς, δίνοντας την ακριβέστερη πρόβλεψη εκτός δείγματος.

13. Τελική πρόβλεψη για τον portfolio manager

Επανεκπαιδεύουμε το νικητήριο μοντέλο (ARIMA) στο πλήρες σύνολο δεδομένων (jj), ενσωματώνοντας και τις τελευταίες παρατηρήσεις του test set ώστε να αξιοποιήσουμε όλη τη διαθέσιμη πληροφορία. Στη συνέχεια, πραγματοποιούμε πρόβλεψη για τα επόμενα 12 τρίμηνα (3 χρόνια μπροστά) για τις ανάγκες του Portfolio Manager.

# Επανεκπαίδευση του νικητήριου ARIMA στο πλήρες dataset
final_arima_model <- auto.arima(jj, lambda = 0)

# Πρόβλεψη για 12 τρίμηνα (3 έτη) μπροστά
final_forecast <- forecast(final_arima_model, h = 12)

# Εμφάνιση των αριθμητικών προβλέψεων
print(final_forecast)
##         Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1981 Q1       18.51527 16.53479 20.73297 15.57364 22.01253
## 1981 Q2       17.06041 15.17457 19.18062 14.26218 20.40766
## 1981 Q3       18.88704 16.68561 21.37892 15.62610 22.82850
## 1981 Q4       13.46536 11.87766 15.26528 11.11443 16.31355
## 1982 Q1       21.59675 18.40188 25.34630 16.90664 27.58795
## 1982 Q2       19.83398 16.84548 23.35265 15.45032 25.46140
## 1982 Q3       21.89227 18.51659 25.88334 16.94573 28.28271
## 1982 Q4       15.68610 13.25288 18.56606 12.12155 20.29887
## 1983 Q1       25.12898 20.58554 30.67519 18.52304 34.09080
## 1983 Q2       23.10456 18.87243 28.28574 16.95557 31.48350
## 1983 Q3       25.52715 20.77142 31.37172 18.62382 34.98935
## 1983 Q4       18.26814 14.84986 22.47328 13.30742 25.07811
# Οπτικοποίηση με διακριτά διαστήματα εμπιστοσύνης (80% και 95%)
autoplot(final_forecast) +
  ggtitle("Τελική Πρόβλεψη EPS για τα Επόμενα 3 Έτη (ARIMA)") +
  xlab("Έτος") + ylab("EPS") +
  theme_minimal()

  • Πορεία: Το ARIMA συνεχίζει ιδανικά την εκθετική ανοδική τάση και το έντονο εποχικό μοτίβο της σειράς για την τριετία 1981–1983.

  • Αβεβαιότητα: Τα διαστήματα εμπιστοσύνης διευρύνονται φυσιολογικά όσο μακραίνει ο ορίζοντας πρόβλεψης, αποτυπώνοντας το ρίσκο για τον Portfolio Manager.

  • Επενδυτικό Συμπέρασμα: Η μετοχή δείχνει ισχυρή αναπτυξιακή δυναμική. Οι ιστορικές κορυφές των ~16 μονάδων αναμένεται να ξεπεραστούν, με τις νέες αιχμές να προσεγγίζουν τις 25 μονάδες EPS στα τρίμηνα αιχμής.

14. Επιχειρηματική Ανάγνωση & Growth Rate

Για να αξιολογήσουμε αν οι προβλέψεις του ARIMA για την τριετία 1981–1983 είναι ρεαλιστικές, υπολογίζουμε και συγκρίνουμε τον Μέσο Ετήσιο Ρυθμό Ανάπτυξης (CAGR) των κερδών ανά μετοχή (EPS) μεταξύ της ιστορικής περιόδου και της περιόδου πρόβλεψης.

Χρησιμοποιούμε τον τύπο του CAGR:

$$CAGR = \left( \frac{\text{Τελική Τιμή}}{\text{Αρχική Τιμή}} \right)^{\frac{1}{n}} - 1$$

# 1. Ιστορικό Growth Rate (1960 vs 1980 - Χρήση μέσων όρων έτους)
historical_1960 <- mean(window(jj, start = c(1960, 1), end = c(1960, 4)))
historical_1980 <- mean(window(jj, start = c(1980, 1), end = c(1980, 4)))
cagr_historical <- (historical_1980 / historical_1960)^(1 / 20) - 1

# 2. Προβλεπόμενο Growth Rate (1980 vs 1983)
forecast_1983   <- mean(window(final_forecast$mean, start = c(1981, 1), end = c(1983, 4))) 
# Σημείωση: Χρησιμοποιούμε το mean του 1983 ως τελικό έτος πρόβλεψης (3 έτη μετά το 1980)
cagr_forecast   <- (forecast_1983 / historical_1980)^(1 / 3) - 1

# Εκτύπωση αποτελεσμάτων σε ποσοστό
cat("Ισтоρικό CAGR (1960-1980):", round(cagr_historical * 100, 2), "%\n")
## Ισтоρικό CAGR (1960-1980): 16.78 %
cat("Προβλεπόμενο CAGR (1980-1983):", round(cagr_forecast * 100, 2), "%\n")
## Προβλεπόμενο CAGR (1980-1983): 10.84 %
  • Σύγκριση: Το ιστορικό CAGR είναι 16.78%, ενώ το προβλεπόμενο υποχωρεί ελαφρώς στο 10.84%.

  • Ρεαλισμός: Ναι, είναι απόλυτα ρεαλιστικό. Το μοντέλο αποφεύγει την παγίδα της απεριόριστης εκρηκτικής ανάπτυξης και προτείνει μια πιο ώριμη, συντηρητική πορεία.

Συμπέρασμα: Η πρόβλεψη είναι ασφαλής για τον Portfolio Manager, δείχνοντας ότι η εταιρεία διατηρεί ισχυρή, διψήφια αναπτυξιακή δυναμική παρά το μεγάλο μέγεθός της.

15. Εναλλακτικό Σενάριο

# Προσαρμογή αυτόματου μοντέλου ETS
fit_ets <- ets(train)
summary(fit_ets)
## ETS(M,A,A) 
## 
## Call:
## ets(y = train)
## 
##   Smoothing parameters:
##     alpha = 0.16 
##     beta  = 0.1018 
##     gamma = 0.3989 
## 
##   Initial states:
##     l = 0.6253 
##     b = 4e-04 
##     s = -0.1882 0.1782 -0.0081 0.0181
## 
##   sigma:  0.092
## 
##      AIC     AICc      BIC 
## 117.2365 119.9638 138.2131 
## 
## Training set error measures:
##                     ME     RMSE       MAE      MPE     MAPE      MASE
## Training set 0.0492013 0.418255 0.2614132 1.321354 7.079831 0.4415143
##                    ACF1
## Training set 0.02747311
# Σύγκριση ακρίβειας στο test set
accuracy(forecast(fit_ets, h = 8), test)[2, c("RMSE", "MAE", "MAPE")]
##     RMSE      MAE     MAPE 
## 1.167089 1.099160 8.185848
  • Μοντέλο: Επιλέχθηκε το ETS(M,A,A).

  • Ερμηνεία (M,A,A): Multiplicative σφάλμα, Additive τάση, Additive εποχικότητα.

  • Σύγκριση: Δεν νικάει το Holt-Winters. Το hw() υπερέχει στο test set με MAPE = 7.76% (έναντι 8.19% του ETS).

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

Απαντήσεις Ερωτήσεων

Α Μέρος

  1. Τι παρατηρείτε για την τάση της J&J; Είναι γραμμική ή εκθετική;

    Η τάση είναι εκθετική. Ο ρυθμός ανάπτυξης επιταχύνεται ραγδαία όσο πλησιάζουμε προς το 1980, με την καμπύλη να αποκτά όλο και μεγαλύτερη κλίση προς τα πάνω.

  2. Σε ποιο τρίμηνο εμφανίζουν οι κερδοφορίες την ισχυρότερη εποχική ώθηση; Δώστε μια πιθανή επιχειρηματική εξήγηση.

    Η κορύφωση συμβαίνει στο 2ο τρίμηνο (Q2). Οφείλεται στην αυξημένη ζήτηση για καταναλωτικά προϊόντα υγείας/φροντίδας (π.χ. αντηλιακά, προϊόντα περιποίησης) ενόψει καλοκαιριού, σε αντίθεση με το Q4 όπου οι φαρμακαποθήκες μειώνουν τα αποθέματά τους για το κλείσιμο του έτους.

  3. Multiplicative ή additive; Τεκμηριώστε την απάντηση με βάση τα plots. Είναι Multiplicative. Καθώς το επίπεδο (trend) της σειράς ανεβαίνει, το εύρος της εποχικής διακύμανσης μεγαλώνει. Η απόσταση μεταξύ κορυφών και πυθμένων αυξάνεται συνεχώς, αποδεικνύοντας ότι η εποχικότητα λειτουργεί ως ποσοστό και όχι ως σταθερό ποσό.

Β Μέρος

  1. Ποιο μοντέλο νίκησε στο test set; Με πόση διαφορά από το baseline (Seasonal Naïve);
  • Μοντέλο: ARIMA(2,0,0)(1,1,0)[4] με drift.

  • Διαφορά από Baseline: Τεράστια υπεροχή. Το ARIMA πέτυχε MAPE = 5.42% έναντι 17.90% του Seasonal Naïve, μειώνοντας το ποσοστιαίο σφάλμα κατά 12.48%.

  1. Τι μοντέλο διάλεξε η auto.arima(); Ερμηνεύστε τα (p,d,q)(P,D,Q)₌.

Επιλέχθηκε το μοντέλο ARIMA(2,0,0)(1,1,0)[4] με drift με μετασχηματισμό \(\lambda = 0\) (λογάριθμος).

  1. p=2: Εξάρτηση από τις τιμές των 2 προηγούμενων τριμήνων (AR).
  2. d=0: Δεν χρειάστηκε απλή διαφοροποίηση (η τάση αντιμετωπίστηκε με το drift και τον λογάριθμο).
  3. q=0: Δεν υπάρχει εξάρτηση από προηγούμενα τυχαία σφάλματα (MA).
  4. P=1: Εξάρτηση από την τιμή του αντίστοιχου τριμήνου του προηγούμενου έτους (Seasonal AR).
  5. D=1: Εφαρμόστηκε μία εποχική διαφοροποίηση για να αφαιρεθεί το εποχικό μοτίβο.
  6. Q=0: Δεν υπάρχει εποχικός κινητός μέσος όρος.
  7. [4]: Τριμηνιαία δεδομένα.
  8. Drift: Επιτρέπει στο μοντέλο να ακολουθεί τη συνεχή ανοδική τάση.
  9. Συμπεριφέρονται ως white noise τα residuals; Τι σημαίνει αυτό;
  • Συμπεριφορά: Ναι, συμπεριφέρονται ως λευκός θόρυβος (White Noise), καθώς δεν έχουν συστηματική δομή και οι αυτοσυσχετίσεις τους (ACF) είναι εντός των ορίων σημαντικότητας.

  • Σημασία: Σημαίνει ότι το μοντέλο «απορρόφησε» όλη τη διαθέσιμη πληροφορία και το μοτίβο των δεδομένων. Ό,τι απέμεινε είναι καθαρά τυχαίο σφάλμα που δεν μπορεί να προβλεφθεί περαιτέρω.

  1. Πόσο μεγαλώνει το 95% prediction interval για το 1ο τρίμηνο vs το 12ο; Τι σας λέει αυτό για την αβεβαιότητα;
  • Παρατήρηση: Το εύρος του διαστήματος (ανοιχτό μπλε) στο 12ο τρίμηνο είναι σχεδόν διπλάσιο σε σχέση με το 1ο τρίμηνο πρόβλεψης.

  • Ερμηνεία για Αβεβαιότητα: Δείχνει ότι η αβεβαιότητα αυξάνεται σωρευτικά όσο απομακρυνόμαστε από το παρόν. Η πρόβλεψη για το άμεσο μέλλον είναι πιο σίγουρη, ενώ για το τέλος της 3ετίας το ρίσκο μεγαλώνει λόγω αστάθμητων παραγόντων.

  1. Σύσταση προς τον portfolio manager: βάση των προβλέψεών σας, θα συστήνατε long ή short θέση στη μετοχή; Τεκμηριώστε.
  • Σύσταση: Long θέση (Αγορά).

  • Τεκμηρίωση: Η μετοχή παρουσιάζει ισχυρή και υγιή εκθετική τάση. Ακόμη και στο πιο συντηρητικό επιχειρηματικό σενάριο (CAGR = 10.84%), η κερδοφορία (EPS) προβλέπεται να σπάσει το ιστορικό φράγμα των ~16 μονάδων και να αγγίξει νέες κορυφές κοντά στις 25 μονάδες στα τρίμηνα αιχμής της επόμενης τριετίας.