library(forecast)
library(tseries)
library(ggplot2)
library(gridExtra)
set.seed(42)
# --- Φόρτωση δεδομένων ---
data("JohnsonJohnson")
jj <- JohnsonJohnson
class(jj) ## [1] "ts"
## [1] 1960 1
## [1] 1980 4
## [1] 4
## [1] 84
## 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
Με βάση τα παραπάνω αποτελέσματα, προκύπτουν τα εξής βασικά συμπεράσματα για τη δομή της κερδοφορίας:
Τύπος Αντικειμένου (class = “ts”): Τα δεδομένα είναι ήδη αναγνωρισμένα ως Time Series (Χρονοσειρά). Αυτό σημαίνει ότι φέρουν ενσωματωμένη τη χρονική πληροφορία και είναι έτοιμα για προηγμένα στατιστικά μοντέλα (ARIMA, Holt-Winters) χωρίς να απαιτούνται μετατροπές.
Χρονικό Εύρος & Συχνότητα (1960 Q1 – 1980 Q4): Το dataset καλύπτει ακριβώς 21 έτη με συχνότητα 4, που υποδηλώνει τριμηνιαία δεδομένα (Quarterly Earnings Per Share - EPS).
Μέγεθος Δείγματος (84 παρατηρήσεις): Το μέγεθος του δείγματος (\(21 \text{ έτη} \times 4 \text{ τρίμηνα} = 84\)) είναι επαρκές και επαρκώς μεγάλο για να εκπαιδεύσουμε σταθερά μοντέλα και να παράγουμε αξιόπιστες προβλέψεις για τα επόμενα 3 έτη (12 τρίμηνα).
Πρώτη Ματιά στα Κέρδη (head):
autoplot(jj) +
ggtitle("Τριμηνιαία Κέρδη ανά Μετοχή (EPS) της Johnson & Johnson (1960-1980)") +
xlab("Έτος") +
ylab("Earnings Per Share (USD)") +
theme_minimal()Με βάση το παραπάνω διάγραμμα, προκύπτουν τρία κρίσιμα συμπεράσματα για τη χρηματοοικονομική συμπεριφορά της μετοχής:
Εκθετική Μακροχρόνια Τάση (Exponential Trend): Η εταιρεία παρουσιάζει μια εντυπωσιακή και συνεχή οργανική ανάπτυξη. Η τάση αυτή δεν είναι γραμμική (ευθύγραμμη) αλλά εκθετική. Κατά τη δεκαετία του ’60 η άνοδος είναι ήπια (τα κέρδη κινούνται κάτω από τα $2), όμως μετά το 1970 ο ρυθμός ανάπτυξης επιταχύνεται ραγδαία (compounding growth), οδηγώντας τα κέρδη κοντά στα $16 το 1980.
Πολλαπλασιαστική Εποχικότητα (Multiplicative Seasonality): Παρατηρείται ένα μεγάλο «άνοιγμα» (το εύρος) στις εποχικές διακυμάνσεις (τα σκαμπανεβάσματα της γραμμής). Το 1960, η διαφορά μεταξύ του υψηλότερου και του χαμηλότερου τριμήνου είναι μικρότερη από $0.50. Το 1980, η διαφορά αυτή ξεπερνά τα $5. Επειδή το εύρος της εποχικότητας αυξάνεται ανάλογα με την αύξηση της τάσης, η εποχικότητα είναι πολλαπλασιαστική (multiplicative) και όχι προσθετική (additive).
p1 <- ggseasonplot(jj, year.labels = TRUE, year.labels.left = TRUE) +
labs(title = "Seasonal Plot ανά Έτος", y = "EPS") + theme_minimal()
p2 <- ggsubseriesplot(jj) +
labs(title = "Subseries Plot ανά Τρίμηνο", y = "EPS") + theme_minimal()
grid.arrange(p1, p2, ncol = 1)Εξετάζοντας συνδυαστικά το Seasonal και το Subseries plot, προκύπτουν τα εξής συμπεράσματα:
Το Ισχυρότερο Τρίμηνο (Q3 / Q1): Η μπλε οριζόντια γραμμή στο Subseries Plot δείχνει τον μέσο όρο κερδών κάθε τριμήνου για όλη την 21ετία. Ο μέσος όρος του Q3 είναι ο υψηλότερος όλων (λίγο πάνω από τα $5), καθιστώντας το ιστορικά το ισχυρότερο τρίμηνο.
Το Ασθενέστερο Τρίμηνο (Q4): Το 4ο τρίμηνο καταγράφει συστηματικά τη χαμηλότερη κερδοφορία σε κάθε ένα από τα 21 έτη του δείγματος, με τη μέση τιμή του (μπλε γραμμή) να είναι η χαμηλότερη όλων.
Ως αναλυτές, αυτή η κυκλικότητα στα κέρδη (EPS) μιας πολυεθνικής υγείας και καταναλωτικών αγαθών όπως η Johnson & Johnson μπορεί να ερμηνευτεί από τις πρακτικές της αγοράς:
Διαχείριση Αποθεμάτων Χονδρικής (Supply Chain Inventory Loading): Οι μεγάλες αλυσίδες φαρμακείων και οι διανομείς τείνουν να προχωρούν σε μεγάλες παραγγελίες και αναπλήρωση αποθεμάτων (restocking) στις αρχές του έτους (Q1) ή αμέσως μετά το καλοκαίρι (Q3) για να προετοιμαστούν για τις περιόδους αυξημένης εποχικής ζήτησης (φθινοπωρινές/χειμερινές ιώσεις, αλλεργίες).
Κλείσιμο Οικονομικού Έτους (Q4 Seasonality): Η κατακόρυφη πτώση του Q4 οφείλεται συχνά σε λογιστικές προσαρμογές τέλους έτους (year-end accounting adjustments), αυξημένες δαπάνες marketing και R&D που εγγράφονται παραδοσιακά στο τελευταίο τρίμηνο, ή στην τάση των νοσοκομείων και ασφαλιστικών ταμείων να εξαντλούν τους ετήσιους προϋπολογισμούς τους νωρίτερα, μειώνοντας τις νέες αγορές το Q4.
Στην περίπτωση της Johnson & Johnson, η εποχικότητα είναι ξεκάθαρα Πολλαπλασιαστική (Multiplicative).
Κοιτάζοντας το αρχικό γράφημα της χρονοσειράς (και το Seasonal Plot), η πολλαπλασιαστική συμπεριφορά είναι αδιαμφισβήτητη για τους εξής λόγους:
1. Διεύρυνση του Εποχικού Εύρους (Fanning-Out Effect): Στις αρχές της χρονοσειράς (δεκαετία του ’60), όπου τα κέρδη (EPS) είναι χαμηλά (κάτω από $2), η απόλυτη διαφορά μεταξύ του ισχυρότερου τριμήνου (Q3) και του ασθενέστερου (Q4) είναι ανεπαίσθητη, μικρότερη από $0.50. Αντίθετα, στο τέλος της χρονοσειράς (δεκαετία του ’80), όπου η τάση έχει εκτινάξει τα κέρδη κοντά στα $15, η διαφορά μεταξύ Q3 και Q4 ξεπερνά τα $5.
2.Αναλογικότητα Διακύμανσης και Επιπέδου: Το μέγεθος του εποχικού κύκλου είναι ανάλογο με το ύψος της κερδοφορίας. Η εταιρεία δεν αναπτύσσεται προσθέτοντας ένα σταθερό ποσό δολαρίων κάθε χρόνο, αλλά αναπτύσσεται με ποσοστιαίο ρυθμό (growth rate).
dec_mult <- decompose(jj, type = "multiplicative")
autoplot(dec_mult) +
ggtitle("Multiplicative Decomposition — JJ")Κοιτάζοντας το γράφημα της αποσύνθεσης, εστιάζουμε στα εξής δομικά στοιχεία:
1. Η Τάση (Trend Component): Το γράφημα της τάσης είναι ξεκάθαρα καμπυλωτό (curvilinear) και όχι ευθύγραμμο (γραμμικό).
2. Η Εποχικότητα (Seasonal Component): Επειδή επιλέξαμε type = “multiplicative”, η R κράτησε το εποχικό μοτίβο σταθερό σε ποσοστιαία βάση (κυμαίνεται μεταξύ \(0.85\) και \(1.12\)). Αυτό σημαίνει ότι σε κάθε έτος, το ισχυρότερο τρίμηνο ενισχύει τα κέρδη κατά περίπου 12% πάνω από την τάση, ενώ το ασθενέστερο τρίμηνο τα μειώνει κατά 15% κάτω από την τάση.
3. Τα Κατάλοιπα (Remainder / Random Component): Δείχνει τον αστάθμητο θόρυβο (random noise) αφού αφαιρεθεί η τάση και η εποχικότητα. Οι τιμές κινούνται γύρω από τη μονάδα (\(1.0\)), που είναι το αναμενόμενο για πολλαπλασιαστικό μοντέλο, χωρίς να εμφανίζουν κάποιο ανησυχητικό pattern, εκτός από 1-2 μεμονωμένες ακραίες τιμές (outliers) γύρω στο 1961 και το 1968.
jj_log <- log(jj)
p_raw <- autoplot(jj) + labs(title = "Αρχική Σειρά (Μη-σταθερή διακύμανση)", y = "EPS") + theme_minimal()
p_log <- autoplot(jj_log) + labs(title = "Λογαριθμημένη Σειρά (Σταθεροποιημένη διακύμανση)", y = "Log(EPS)") + theme_minimal()
grid.arrange(p_raw, p_log, ncol = 2)Το παραπάνω διάγραμμα δείχνει ξεκάθαρα τη μετάβαση από μια «δύσκολη» και ασταθή σειρά σε μια γραμμική και ελεγχόμενη δομή.
Συγκρίνοντας τα δύο γραφήματα, παρατηρούμε δύο ριζικές και εξαιρετικά σημαντικές αλλαγές στη συμπεριφορά της χρονοσειράς:
1. Σταθεροποίηση της Διακύμανσης (Variance Stabilization):
Πριν (Αριστερά): Το εύρος των εποχικών διακυμάνσεων (το ύψος των «δοντιών» του γραφήματος) μεγαλώνει όσο προχωράει ο χρόνος (πολλαπλασιαστική δομή). Αυτή η μη-σταθερή διακύμανση (ετεροσκεδαστικότητα) παραβιάζει τις βασικές υποθέσεις των γραμμικών στατιστικών μοντέλων.
Μετά (Δεξιά): Μετά την εφαρμογή του log(), το εύρος των εποχικών κυματισμών σταθεροποιείται και γίνεται ομοιόμορφο από την αρχή (1960) έως το τέλος (1980) της σειράς. Η δομή έχει μετατραπεί επιτυχώς σε προσθετική (additive).
2. Γραμμικοποίηση της Τάσης (Linearization of Trend):
Πριν (Αριστερά): Η μακροχρόνια τάση είναι εκθετική (καμπυλωτή), παρουσιάζοντας μια απότομη επιτάχυνση μετά το 1970 που είναι δύσκολο να προβλεφθεί με απλές μεθόδους.
Μετά (Δεξιά): Η εκθετική καμπύλη έχει «ισιώσει» και έχει μετατραπεί σε μια σταθερή, ευθύγραμμη ανοδική τάση.
train <- window(jj, end = c(1978, 4))
test <- window(jj, start = c(1979, 1))
print(paste("Train length:", length(train), "| Test length:", length(test)))## [1] "Train length: 76 | Test length: 8"
Αρχικά ελέγχουμε εάν η σειρά είναι στάσιμη
## 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.05 –> ΔΕΝ απορρίπτουμε μηδενική υπόθεση –> Η σειρά είναι ΜΗ-ΣΤΑΣΙΜΗ
Αυτο επιβεβαιώνεται και από το διάγραμμα καθώς διαπιστώθηκε ότι υπάρχει τάση και εποχικότητα
Αφού η σειρά είναι μη-στάσιμη πρέπει να μετατραπεί σε στάσιμη:
train_stationary <- diff(diff(log(train)), lag = 4)
autoplot(train_stationary) +
ggtitle("Μετά από log + 1η διαφόριση + εποχιακή διαφόριση")## Warning in adf.test(train_stationary): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: train_stationary
## Dickey-Fuller = -6.3584, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
Το γράφημα και το test δείχνουν με απόλυτη στατιστική σαφήνεια ότι η διαδικασία του διπλού διαφορισμού πέτυχε τον στόχο της.
p-value = 0.01 < 0.05 –> Απορρίπτουμε Μηδενική Υπόθεση –> Η νέα σειρά είναι στάσιμη
Κοιτάζοντας το νέο διάγραμμα, παρατηρούμε τα εξής χαρακτηριστικά μιας στάσιμης χρονοσειράς:
Σταθερή Μέση Τιμή: Η σειρά δεν «τρέχει» πλέον προς τα πάνω. Έχει οριζοντιωθεί πλήρως και ταλαντώνεται γύρω από το μηδέν (\(0.0\)). Η εκθετική τάση εξαλείφθηκε.
Σταθερή Διακύμανση: Το εύρος των διακυμάνσεων (οι κορυφές και οι πυθμένες) είναι πλέον ομοιόμορφο κατά μήκος όλου του άξονα του χρόνου. Δεν υπάρχει το φαινόμενο της «βεντάλιας» που βλέπαμε αρχικά.
p_acf <- ggAcf(train_stationary) + labs(title = "ACF") + theme_minimal()
p_pacf <- ggPacf(train_stationary) + labs(title = "PACF") + theme_minimal()
grid.arrange(p_acf, p_pacf, ncol = 2)Εξετάζοντας τα δύο διαγράμματα, εντοπίζουμε τα εξής κρίσιμα στοιχεία:
1. Διάγραμμα ACF (Autocorrelation Function):
Lag 1 (Μη-Εποχικό): Παρατηρείται μια πολύ ισχυρή, αρνητική ακίδα (spike) στο Lag 1 (~ -0.38) η οποία ξεπερνά κατά πολύ το όριο σημαντικότητας. Αυτό που έγινε αυτό το τρίμηνο σχετίζεται πολύ ισχυρά (και αρνητικά) με αυτό που έγινε το αμέσως προηγούμενο τρίμηνο. Άρα υπάρχει ένας Κινητός Μέσος Όρος (Non-seasonal MA(1)), δηλαδή \(q = 1\).
Lag 4 (Εποχικό): Υπάρχει μια σημαντική αρνητική ακίδα ακριβώς στο Lag 4 (το πρώτο εποχικό lag για τριμηνιαία δεδομένα). Αυτό αποτελεί κλασική ένδειξη ύπαρξης ενός Εποχικού όρου Κινητού Μέσου (Seasonal MA(1)), δηλαδή \(Q = 1\).
Λοιπά Lags: Η σημαντική τιμή στο Lag 7 (κοντά στο 8) ενισχύει την άποψη ότι η εποχική συνιστώσα έχει ισχυρή μνήμη.
2. Διάγραμμα PACF (Partial Autocorrelation Function):
# (α) Seasonal Naïve — Το baseline μοντέλο μας
fit_snaive <- snaive(train, h = 8)
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
# (β) Holt-Winters — Εκθετική εξομάλυνση με πολλαπλασιαστική εποχικότητα
fit_hw <- hw(train, h = 8, seasonal = "multiplicative")
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
# (γ) ARIMA — Αυτοματοποιημένη επιλογή με λογαριθμικό μετασχηματισμό (lambda = 0)
fit_arima <- auto.arima(train, lambda = 0)
summary(fit_arima)## 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
1.Μοντέλο (α): Seasonal Naïve
Το Seasonal Naïve αποτελεί το απλούστερο δυνατό μοντέλο για εποχικά δεδομένα. Υποθέτει ότι η ιστορία επαναλαμβάνεται ακριβώς όπως ήταν την προηγούμενη χρονιά.
Μηχανισμός Πρόβλεψης
(Point Forecast): Αν παρατηρήσουμε τις προβλέψεις
για το 1979 και το 1980, το μοντέλο δίνει για το Q1 και των δύο ετών την
τιμή 11.88. Η τιμή αυτή είναι ακριβώς η πραγματική τιμή του
τελευταίου Q1 που είδε (1978 Q1). Αντίστοιχα, για το Q4 δίνει
8.91 (το πραγματικό EPS του 1978 Q4).
Στατιστικά Σφάλματα
(Training set error measures):
Επενδυτικό Συμπέρασμα: Το μοντέλο αυτό αγνοεί πλήρως την τάση ανάπτυξης. Επειδή η J&J αναπτύσσεται εκθετικά, το Seasonal Naïve είναι καταδικασμένο να υποτιμήσει συστηματικά τα μελλοντικά κέρδη στο Test set. Χρησιμεύει αποκλειστικά ως μέτρο σύγκρισης (baseline): αν ένα εξελιγμένο μοντέλο δεν μπορεί να το κερδίσει, τότε είναι άχρηστο.
2. Μοντέλο (β): Holt-Winters (Multiplicative)
Το μοντέλο Holt-Winters εφαρμόζει εκθετική εξομάλυνση (exponential smoothing) υπολογίζοντας ξεχωριστά το τρέχον επίπεδο, την τάση και την εποχικότητα. Επιλέχθηκε η πολλαπλασιαστική (multiplicative) μορφή λόγω της αυξανόμενης διακύμανσης.
alpha = 0.197: Δείχνει ότι το μοντέλο
δίνει ~20% βαρύτητα στα πολύ πρόσφατα κέρδη για να προσδιορίσει το
τρέχον επίπεδο (level) και 80% στο απώτερο παρελθόν.beta = 0.1082: Η παράμετρος της τάσης
(trend) είναι χαμηλή, που σημαίνει ότι ο ρυθμός ανάπτυξης
μεταβάλλεται πολύ ομαλά και σταθερά στο χρόνο.gamma = 0.0001 (1e-04): Η τιμή αυτή
είναι ουσιαστικά μηδενική. Αυτό σημαίνει ότι η πολλαπλασιαστική
εποχικότητα της J&J είναι εξαιρετικά σταθερή (“γρανιτένια”) και δεν
αλλάζει καθόλου με βάση τις πρόσφατες παρατηρήσεις· παραμένει ίδια με
τις αρχικές συνθήκες.Point Forecast) δείχνουν πλέον άνοδο:
από το 11.20 (1979 Q4) το μοντέλο προβλέπει EPS 12.58 για το 1980
Q4.3.Μοντέλο (γ): auto.arima()
Η συνάρτηση auto.arima() με την παράμετρο
lambda = 0 εφάρμοσε αυτόματα λογαριθμικό μετασχηματισμό και
επέλεξε το βέλτιστο υπόδειγμα βάσει του κριτηρίου AICc: \[\mathbf{ARIMA(2,0,0)(1,1,0)[4]\ with\
drift}\]
Αποκωδικοποίηση του Μοντέλου:
ARIMA(2,0,0) (Μη-εποχικό σκέλος):
Σημαίνει \(p=2, d=0, q=0\). Το μοντέλο
χρησιμοποιεί 2 όρους Αυτοπαλινδρόμησης (AR). Δηλαδή, σε επίπεδο
λογαρίθμων, τα κέρδη αυτού του τριμήνου εξαρτώνται άμεσα από τα κέρδη
των δύο αμέσως προηγούμενων τριμήνων (\(ar_1 =
0.3131\) και \(ar_2 =
0.2432\)).(1,1,0)[4] (Εποχικό σκέλος): Σημαίνει
\(P=1, D=1, Q=0\) με περίοδο 4. Το
μοντέλο πήρε μια εποχική διαφορά (\(D=1\)) για να αφαιρέσει την τριμηνιαία
κυκλικότητα και πρόσθεσε έναν εποχικό αυτοπαλινδρομούμενο όρο (\(sar_1 = -0.2970\)).with drift = 0.0386: Αυτή είναι η
«σταθερά ανάπτυξης». Σημαίνει ότι σε κάθε τριμηνιαίο βήμα, οι λογάριθμοι
των κερδών ωθούνται προς τα πάνω κατά \(0.0386\) (αντιστοιχεί σε ένα σταθερό,
μόνιμο ποσοστιαίο growth rate της τάξης του ~3.9% ανά τρίμηνο).Στατιστικά Σφάλματα & Υπεροχή:
Συνοπτικός Πίνακας Σύγκρισης (In-Sample)
| Μοντέλο | RMSE | MAPE (%) | AICc | Αξιολόγηση |
|---|---|---|---|---|
| Seasonal Naïve | 0.8214 | 14.78% | N/A | Απορρίπτεται (Αγνοεί το Trend) |
| Holt-Winters | 0.3596 | 9.29% | 177.34 | Ικανοποιητικό, αλλά στατιστικά βαρύ |
| ARIMA(2,0,0)(1,1,0)₄ w/ drift | 0.3597 | 6.77% | -132.65 | Βέλτιστο (Ελάχιστο σφάλμα & AICc) |
##
## 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
Το μοντέλο ARIMA(2,0,0)(1,1,0)₄ με drift ικανοποιεί στο απόλυτο και τα 4 κριτήρια στατιστικής εγκυρότητας:
Συμπέρασμα: Τα residuals συμπεριφέρονται ως καθαρός Λευκός Θόρυβος (White Noise). Το μοντέλο έχει εξαγάγει κάθε ίχνος πληροφορίας και οι προβλέψεις του είναι έγκυρες και ασφαλείς για τη λήψη επενδυτικών αποφάσεων από το fund.
fc_arima <- forecast(fit_arima, h = 8)
# Δημιουργία του γραφήματος με custom χρωματική παλέτα υψηλής αντίθεσης
autoplot(train) +
autolayer(test, series = "Πραγματικά (Test Set)", PI = FALSE, size = 1) +
autolayer(fc_arima$mean, series = "ARIMA", size = 1) +
autolayer(fit_hw$mean, series = "Holt-Winters", size = 0.8) +
autolayer(fit_snaive$mean, series = "Seasonal Naïve", size = 0.8) +
labs(title = "Σύγκριση Μοντέλων Πρόβλεψης στο Test Set",
y = "EPS (USD)", x = "Έτος", color = "Μοντέλο / Δεδομένα") +
scale_color_manual(values = c(
"Πραγματικά (Test Set)" = "#000000", # Καθαρό Μαύρο για να ξεχωρίζει η πραγματικότητα
"ARIMA" = "#E41A1C", # Έντονο Κόκκινο (τραβάει την προσοχή στην ακρίβειά του)
"Holt-Winters" = "#377EB8", # Εταιρικό Μπλε
"Seasonal Naïve" = "#FF7F00" # Πορτοκαλί για το baseline
)) +
theme_minimal() +
theme(legend.position = "right")## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the forecast package.
## Please report the issue at <https://github.com/robjhyndman/forecast/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning in ggplot2::geom_line(ggplot2::aes(x = .data[["timeVal"]], y =
## .data[["seriesVal"]], : Ignoring unknown parameters: `PI`
Με τη χρήση χρωματικής παλέτας υψηλής αντίθεσης, η σύγκριση των μοντέλων out-of-sample γίνεται άμεσα αντιληπτή:
ARIMA (Κόκκινη Γραμμή): Αποτελεί το μοναδικό
υπόδειγμα που καταφέρνει να ταυτιστεί σχεδόν απόλυτα με την πραγματική
πορεία της κερδοφορίας (Μαύρη Γραμμή). Ο συνδυασμός του
αυτόματου λογαριθμικού μετασχηματισμού και της παραμέτρου
drift επέτρεψε στο μοντέλο να αποτυπώσει με απόλυτη
ακρίβεια την εκθετική επιτάχυνση των κερδών.
Holt-Winters (Μπλε Γραμμή): Αν και αναπαράγει επιτυχώς το εποχικό μοτίβο, εμφανίζει συστηματικό σφάλμα υποτίμησης (underestimation bias). Η γραμμή των προβλέψεων αναπτύσσεται με ελαφρώς χαμηλότερο ρυθμό από τον πραγματικό, με αποτέλεσμα να κινείται σταθερά κάτω από το Test Set.
Seasonal Naïve (Πορτοκαλί Γραμμή): Αποτυγχάνει πλήρως να συλλάβει την εξέλιξη της J&J, επιβεβαιώνοντας τον ρόλο του ως ένα απλοϊκό baseline μοντέλο χαμηλής προγνωστικής αξίας.
Η οπτική ανάλυση αναδεικνύει το ARIMA(2,0,0)(1,1,0)₄ με drift ως τον αδιαμφισβήτητο κυρίαρχο για την πρόβλεψη των EPS.
# Εξαγωγή των δεικτών για το Test Set από κάθε μοντέλο
metrics_arima <- accuracy(fc_arima, test)["Test set", c("RMSE", "MAE", "MAPE")]
metrics_hw <- accuracy(fit_hw, test)["Test set", c("RMSE", "MAE", "MAPE")]
metrics_snaive <- accuracy(fit_snaive, test)["Test set", c("RMSE", "MAE", "MAPE")]
# Δημιουργία του συγκριτικού πίνακα
table_comparison <- rbind(
"Seasonal Naïve (Baseline)" = metrics_snaive,
"Holt-Winters (Multiplicative)" = metrics_hw,
"ARIMA(2,0,0)(1,1,0)₄ w/ drift" = metrics_arima
)
# Μετατροπή σε data.frame για όμορφη εμφάνιση
table_comparison <- as.data.frame(table_comparison)
colnames(table_comparison) <- c("RMSE", "MAE", "MAPE (%)")
# Εμφάνιση του πίνακα
knitr::kable(table_comparison, digits = 3, caption = "Δείκτες Σφάλματος Μοντέλων στο Test Set (Out-of-Sample)")| RMSE | MAE | MAPE (%) | |
|---|---|---|---|
| Seasonal Naïve (Baseline) | 2.777 | 2.542 | 17.899 |
| Holt-Winters (Multiplicative) | 1.087 | 1.043 | 7.764 |
| ARIMA(2,0,0)(1,1,0)₄ w/ drift | 0.814 | 0.723 | 5.419 |
Αναλύοντας τα ποσοτικά δεδομένα του πίνακα, το μοντέλο ARIMA(2,0,0)(1,1,0)₄ w/ drift είναι ο νικητής με σφάλμα περίπου 5.4%. Πιο συγκεκριμένα:
1. ARIMA (Ο Νικητής): Πετυχαίνει το χαμηλότερο MAPE (5.419%), το χαμηλότερο RMSE (0.814) και το χαμηλότερο MAE (0.723).
Το γεγονός ότι το MAPE του ARIMA στο Test set (5.42%) είναι ακόμα μικρότερο από ό,τι στο Training set (6.77%) αποτελεί σπάνια στατιστική ένδειξη ότι το μοντέλο είναι εξαιρετικά σταθερό, δεν πάσχει από υπερπροσαρμογή (overfitting) και έχει «κλειδώσει» άψογα τη δομή της κερδοφορίας.
2. Holt-Winters (Ο Επιλαχών):
Παρουσιάζει MAPE 7.764% και RMSE 1.087. Αν και η συμπεριφορά του είναι ικανοποιητική για εμπορικές εφαρμογές, επιβεβαιώνεται και αριθμητικά η οπτική μας παρατήρηση: λόγω του συστηματικού σφάλματος υποτίμησης της τάσης, χάνει σε ακρίβεια σε σχέση με το ARIMA.
3. Seasonal Naïve (Απορρίπτεται):
Καταγράφει ένα τεράστιο MAPE 17.899% και RMSE 2.777. Η πλήρης αποτυχία του υπογραμμίζει τη σημασία της χρήσης προηγμένων υποδειγμάτων (όπως το ARIMA) όταν έχουμε να διαχειριστούμε assets με έντονη αναπτυξιακή δυναμική.
Με βάση τόσο τα διαγνωστικά τεστ των καταλοίπων (White Noise) όσο και την ελαχιστοποίηση των σφαλμάτων out-of-sample (MAPE: 5.41%), προκρίνουμε το υπόδειγμα ARIMA(2,0,0)(1,1,0)₄ με drift ως το επίσημο μοντέλο του fund για την πρόβλεψη των κερδών της Johnson & Johnson. Το μοντέλο προσφέρει τη μέγιστη δυνατή ασφάλεια για τη μελλοντική αποτίμηση της μετοχής και τον ακριβή υπολογισμό του επενδυτικού ρίσκου.
final_fit <- Arima(jj, order = c(2,0,0), seasonal = c(1,1,0), include.drift = TRUE, lambda = 0)
# 2. Πρόβλεψη για 12 τρίμηνα μπροστά (3 χρόνια)
final_fc <- forecast(final_fit, h = 12)
# 3. Οπτικοποίηση με διακριτά διαστήματα εμπιστοσύνης (Prediction Intervals)
autoplot(final_fc) +
labs(title = "3-Year EPS Forecast for Johnson & Johnson (1981 - 1983)",
subtitle = "Μοντέλο: ARIMA(2,0,0)(1,1,0)₄ με Drift & Λογαριθμικό Μετασχηματισμό",
y = "Earnings Per Share (USD)",
x = "Έτος") +
theme_minimal() +
theme(legend.position = "bottom")Το τελικό υπόδειγμα ARIMA(2,0,0)(1,1,0)₄ με drift, αφού επανεκπαιδεύτηκε στο 100% των ιστορικών δεδομένων (jj), παράγει μια εξαιρετικά στιβαρή και ρεαλιστική πρόβλεψη για τα επόμενα 3 έτη (1981 - 1983). Η ανάγνωση του διαγράμματος οδηγεί σε τρία βασικά συμπεράσματα για τη διαχείριση του επενδυτικού ρίσκου:
1. Ισχυρή Αναπτυξιακή Δυναμική (Η Σκούρα Μπλε Γραμμή): Η κεντρική πρόβλεψη (Point Forecast) δείχνει ότι η Johnson & Johnson διατηρεί στο ακέραιο το εκθετικό της momentum. Τα κέρδη ανά μετοχή (EPS) αναμένεται να σπάσουν το φράγμα των $20.00 μέσα στο 1982 και να προσεγγίσουν την περιοχή των $25.00 έως το τέλος του 1983, επιβεβαιώνοντας ότι η μετοχή αποτελεί ένα κορυφαίο “Growth Asset”.
2. Απόλυτη Συγχρονικότητα της Εποχικότητας: Το μοντέλο αναπαράγει με μαθηματική ακρίβεια το δομικό τριμηνιαίο pattern της εταιρείας. Προβλέπει συστηματική άνοδο κατά τα τρία πρώτα τρίμηνα κάθε έτους (peaks) και μια απότομη, παραδοσιακή «βουτιά» στο 4ο τρίμηνο (Q4). Η πληροφορία αυτή είναι κρίσιμη για το tactical timing των αγοραπωλησιών του fund γύρω από τις ημερομηνίες ανακοίνωσης των εταιρικών αποτελεσμάτων.
3. Δομή των Ζωνών Ασφαλείας (The Fan Chart Effect): Οι μπλε σκιές αντιπροσωπεύουν τα διαστήματα εμπιστοσύνης (Prediction Intervals) και εμφανίζουν τη χαρακτηριστική μορφή βεντάλιας (ανοίγουν όσο προχωράμε στο μέλλον).
Σκούρα Μπλε Ζώνη (Διάστημα 80%): Ορίζει το πιο πιθανό εύρος διακύμανσης των κερδών υπό κανονικές συνθήκες αγοράς.
Ανοιχτή Μπλε Ζώνη (Διάστημα 95%): Αποτυπώνει τα ακραία σενάρια. Η επάνω πλευρά δείχνει το βέλτιστο σενάριο ( πλησίον των $35.00), ενώ η κάτω πλευρά ορίζει το Worst-Case Scenario (Απαισιόδοξο Σενάριο) στην περιοχή των $14.00. Το γεγονός ότι ακόμη και στο χειρότερο σενάριο η κερδοφορία παραμένει υψηλότερη από τους ιστορικούς μέσους όρους, υποδηλώνει ισχυρή αμυντική θωράκιση (downside protection).
Υπολογίζουμε τον μέσο ετήσιο ρυθμό ανάπτυξης (CAGR) των προβλέψεων (1980 έως 1983) και τον συγκρίνουμε με τον ιστορικό ρυθμό ανάπτυξης της Johnson & Johnson (1960 έως 1980), προκειμένου να αξιολογήσουμε αν το μοντέλο ARIMA παράγει ρεαλιστικά αποτελέσματα.
# 1. Ιστορικό Growth Rate (1960 vs 1980) - Χρησιμοποιούμε τις ετήσιες βάσεις (π.χ. Q4)
eps_1960_q4 <- jj[4] # Q4 του 1960
eps_1980_q4 <- jj[84] # Q4 του 1980
n_hist <- 20 # 20 έτη
cagr_hist <- ((eps_1980_q4 / eps_1960_q4) ^ (1 / n_hist) - 1) * 100
# 2. Προβλεπόμενο Growth Rate (1980 vs 1983)
# Το final_fc$mean περιέχει τις 12 μελλοντικές προβλέψεις (3 έτη)
eps_1983_q4 <- final_fc$mean[12] # Το τελευταίο τρίμηνο της πρόβλεψης (1983 Q4)
n_pred <- 3 # 3 έτη
cagr_pred <- ((eps_1983_q4 / eps_1980_q4) ^ (1 / n_pred) - 1) * 100
# Εμφάνιση των αποτελεσμάτων
cat("Ιστορικός Ρυθμός Ανάπτυξης (1960-1980):", round(cagr_hist, 2), "%\n")## Ιστορικός Ρυθμός Ανάπτυξης (1960-1980): 17.78 %
## Προβλεπόμενος Ρυθμός Ανάπτυξης (1980-1983): 16.31 %
Η σύγκριση του ιστορικού ρυθμού ανάπτυξης με τον προβλεπόμενο μας επιτρέπει να αξιολογήσουμε την οικονομική λογική του μοντέλου ARIMA:
Ιστορικό Momentum (17.78%): Κατά τη διάρκεια της εικοσαετίας 1960-1980, η Johnson & Johnson αναπτυσσόταν με το εντυπωσιακό 17.78% ετησίως (CAGR). Αυτό το νούμερο δικαιολογεί απόλυτα την έντονη, εκθετική καμπύλη που παρατηρήσαμε σε όλα τα προηγούμενα διαγράμματα.
Προβλεπόμενη Τροχιά (16.31%): Για την επόμενη τριετία (1981-1983), το μοντέλο ARIMA προβλέπει έναν μέσο ετήσιο ρυθμό ανάπτυξης 16.31%.
Οι προβλέψεις είναι απόλυτα ρεαλιστικές, συνεπείς και επιχειρηματικά ασφαλείς.
Αποφυγή Υπερ-αισιοδοξίας (No Over-optimism Bias): Το μοντέλο δεν «βγάζει από το μυαλό του» μια αυθαίρετη, υπερβολική ανάπτυξη. Αντίθετα, προβλέπει μια ελαφρώς πιο συντηρητική τροχιά (16.31% έναντι του ιστορικού 17.78%). Αυτή η μικρή επιβράδυνση είναι απόλυτα λογική για μια εταιρεία που μεγαλώνει σε μέγεθος , καθώς είναι οικονομικά δυσκολότερο να διατηρείς το ίδιο ακριβώς ποσοστό ανάπτυξης όσο αυξάνεται η κεφαλαιοποίησή σου.
Η Μαγεία του Drift: Η συμπεριφορά αυτή οφείλεται
στο γεγονός ότι η auto.arima() υπολόγισε τη σταθερά
ανάπτυξης (drift) με βάση τη μακροχρόνια τάση των ιστορικών
δεδομένων σε επίπεδο λογαρίθμων. Έτσι, το μοντέλο συνεχίζει να «τρέχει»
με τη δομική ταχύτητα που έχει χτίσει η J&J τα τελευταία 20 χρόνια,
ενσωματώνοντας σωστά τις πρόσφατες οικονομικές συνθήκες.
Το μοντέλο ARIMA περνάει με άριστα και το επιχειρηματικό test ρεαλιστικότητας. Εφόσον ο προβλεπόμενος ρυθμός ανάπτυξης (16.31%) ευθυγραμμίζεται πλήρως με την ιστορική πραγματικότητα της εταιρείας (17.78%), οι προβλέψεις δεν εμπεριέχουν στατιστικά τεχνουργήματα ή υπερβολικό ρίσκο. Το fund μπορεί να χρησιμοποιήσει άφοβα αυτές τις εκτιμήσεις κερδοφορίας για το Discounted Cash Flow (DCF) Valuation και τη λήψη της τελικής επενδυτικής απόφασης.
## 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
##
## --- Ακρίβεια Αυτόματου ETS ---
## RMSE MAE MAPE
## 1.167089 1.099160 8.185848
##
## --- Ακρίβεια Αρχικού Holt-Winters ---
## RMSE MAE MAPE
## 1.086553 1.042758 7.763851
1. Ποιο μοντέλο διάλεξε και τι σημαίνουν τα 3 γράμματα (M,A,A);
Ο αλγόριθμος επέλεξε το ETS(M,A,A). Τα γράμματα αντιστοιχούν στη δομή των τριών συστατικών (Error, Trend, Seasonal):
M (Multiplicative - Πολλαπλασιοκρατικό Σφάλμα): Η τυχαία διακύμανση (ο θόρυβος) μεγαλώνει αναλογικά με το επίπεδο των κερδών.
A (Additive - Προσθετική Τάση): Το μοντέλο αναγνωρίζει μια σταθερή, γραμμική ανοδική τάση ανά τρίμηνο στο Train set.
A (Additive - Προσθετική Εποχικότητα):Ο αυτόματος αλγόριθμος προτίμησε προσθετική εποχικότητα (δηλαδή σταθερό εύρος στα «δόντια» του γραφήματος), επειδή προσπαθεί να ισορροπήσει το in-sample fit με βάση τα κριτήρια πληροφορίας (AIC/BIC).
2. Νικάει το δικό μας hw() (Holt-Winters);
Όχι, το δικό μας χειροκίνητο Holt-Winters νικάει το αυτόματο ETS!
Σύμφωνα με τα σφάλματα στο Test Set:
Το δικό μας Holt-Winters (fit_hw) πέτυχε MAPE = 7.76% και RMSE = 1.086.
Το αυτόματο ETS (fc_ets) πέτυχε MAPE = 8.19% και RMSE = 1.167.
Αυτό συμβαίνει επειδή η ets() κοιτάζει μόνο το Training set για να επιλέξει μοντέλο. Στο Training set, η προσθετική εποχικότητα (A) της φάνηκε στατιστικά πιο «ασφαλής» (λιγότερο περίπλοκη). Όμως, όταν το μοντέλο βγήκε στον πραγματικό κόσμο (Test Set, 1979-1980), η κερδοφορία της J&J εκτινάχθηκε εκθετικά, δικαιώνοντας τη δική μας απόφαση να χρησιμοποιήσουμε Πολλαπλασιαστική Εποχικότητα (M), η οποία μπόρεσε να ανοίξει σωστά το πλάτος της πρόβλεψης!
1. Ποιο μοντέλο νίκησε στο test set; Με πόση διαφορά από το baseline (Seasonal Naïve);
Στα άγνωστα δεδομένα ελέγχου (Test Set), ο απόλυτος νικητής είναι το μοντέλο ARIMA(2,0,0)(1,1,0)₄ με drift (υπό λογαριθμικό μετασχηματισμό).
2. Τι μοντέλο διάλεξε η auto.arima(); Ερμηνεύστε τα \((p,d,q)(P,D,Q)_4\).
Η auto.arima() επέλεξε το υπόδειγμα
ARIMA(2,0,0)(1,1,0)₄ με drift (και lambda = 0). Η
ανάλυση των παραμέτρων του μοντέλου έχει ως εξής:
3. Συμπεριφέρονται ως white noise τα residuals; Τι σημαίνει αυτό;
Ναι, τα κατάλοιπα (residuals) του μοντέλου συμπεριφέρονται επίσημα ως White Noise (Λευκός Θόρυβος).
Στατιστική Τεκμηρίωση: Το Ljung-Box test επιστρέφει \(p\text{-value} = 0.5788\). Καθώς η τιμή αυτή είναι κατά πολύ μεγαλύτερη από το κρίσιμο στατιστικό όριο του \(0.05\), αποτυγχάνουμε να απορρίψουμε τη μηδενική υπόθεση (\(H_0\)) περί ανεξαρτησίας. Επιπλέον, στο διάγραμμα ACF, όλες οι υστερήσεις (lags) βρίσκονται 100% εντός των μπλε διακεκομμένων ορίων ασφαλείας.
Τι σημαίνει αυτό επιχειρηματικά: Σημαίνει ότι το μοντέλο ARIMA έκανε τέλεια δουλειά στην εξαγωγή πληροφορίας. Κατάφερε να «ρουφήξει» όλη τη διαθέσιμη πληροφορία, την τάση, την εκθετικότητα και την εποχικότητα από τα ιστορικά δεδομένα της J&J. Αυτό που απέμεινε (το σφάλμα) είναι καθαρός, αναπόφευκτος θόρυβος της αγοράς (τυχαία γεγονότα). Αυτό μας δίνει το δικαίωμα να εμπιστευτούμε τα διαστήματα πρόβλεψης ως απόλυτα έγκυρα.
4. Πόσο μεγαλώνει το 95% prediction interval για το 1ο τρίμηνο vs το 12ο; Τι σας λέει αυτό για την αβεβαιότητα;
Εξετάζοντας το τελικό διάγραμμα των προβλέψεων (1981-1983), παρατηρούμε μια έντονη διεύρυνση της ανοιχτής μπλε ζώνης (95% Prediction Interval) η οποία παίρνει τη χαρακτηριστική μορφή βεντάλιας (Fan Chart Effect).
Hi 95 και του κατώτατου Lo 95 ορίου)
είναι πολύ στενό για το 1ο τρίμηνο (1981 Q1) και γίνεται εξαιρετικά ευρύ
στο 12ο τρίμηνο (1983 Q4).lambda = 0):
Επειδή η J&J αναπτύσσεται εκθετικά, το μοντέλο αναγνωρίζει ότι το
ρίσκο σε απόλυτα δολάρια μεγαλώνει αναλογικά με το μέγεθος των
κερδών της εταιρείας. Το άνοιγμα της βεντάλιας δείχνει ότι το ARIMA
αντιλαμβάνεται την πραγματικότητα πολλαπλασιαστικά,
προσφέροντας στον Portfolio Manager μια απόλυτα ρεαλιστική αποτύπωση του
κινδύνου.5. Σύσταση προς τον portfolio manager: βάση των προβλέψεών σας, θα συστήνατε long ή short θέση στη μετοχή; Τεκμηριώστε.
ΕΠΙΣΗΜΗ ΣΥΣΤΑΣΗ: Ισχυρή Αγορά (Strong LONG Θέση)
Επενδυτική Τεκμηρίωση (Investment Thesis):
Lo 95 του
12ου τριμήνου), τα προβλεπόμενα κέρδη της εταιρείας παραμένουν σε
επίπεδα υψηλότερα από τους ιστορικούς μέσους όρους της δεκαετίας του
’70. Η J&J συνδυάζει τα χαρακτηριστικά ενός επιθετικού growth stock
με την ασφάλεια μιας blue-chip αμυντικής φαρμακευτικής.Επειδή το μοντέλο επιβεβαιώνει την ύπαρξη έντονης εποχικότητας με συστηματική, απότομη υποχώρηση των κερδών στο 4ο τρίμηνο (Q4) κάθε έτους, προτείνεται στον Portfolio Manager να εκμεταλλευτεί αυτές τις προσωρινές, τεχνητές «βουτιές» της μετοχής στο τέλος του χρόνου ως ιδανικά παράθυρα εισόδου (buying opportunities) για να χτίσει ή να μεγαλώσει τη Long θέση του fund με χαμηλότερο κόστος κτήσης.