Δεδομένα

Μια υπηρεσία θέλει να προβλέψει τη μέση ημερήσια θερμοκρασία των επόμενων εβδομάδων με βάση το ιστορικό. Τα δεδομένα είναι διατεταγμένα χρονικά και εμφανίζουν επαναλαμβανόμενα εποχικά μοτίβα — η σειρά των παρατηρήσεων έχει σημασία.

Εγκατάσταση & Φόρτωση Πακέτων

#install.packages(c("Rtools","forecast", "tseries", "ggplot2", "gridExtra"))
# Φόρτωση πακέτων
library(forecast)    # το κεντρικό πακέτο για time series 
## Warning: package 'forecast' was built under R version 4.5.3
library(tseries)     # ADF test 
## Warning: package 'tseries' was built under R version 4.5.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(ggplot2)     # για plots 
## Warning: package 'ggplot2' was built under R version 4.5.3
library(gridExtra)  
## Warning: package 'gridExtra' was built under R version 4.5.3
library(ggfortify)# για πολλαπλά plots  
## Warning: package 'ggfortify' was built under R version 4.5.3
## Registered S3 methods overwritten by 'ggfortify':
##   method                 from    
##   autoplot.Arima         forecast
##   autoplot.acf           forecast
##   autoplot.ar            forecast
##   autoplot.bats          forecast
##   autoplot.decomposed.ts forecast
##   autoplot.ets           forecast
##   autoplot.forecast      forecast
##   autoplot.stl           forecast
##   autoplot.ts            forecast
##   fitted.ar              forecast
##   fortify.ts             forecast
##   residuals.ar           forecast
set.seed(93)

Επιλογή Μεθόδου

Για την ανάλυση του dataset “Daily Climate time series data” θα χρησιμοποιηθεί η μέθοδος Time Series Forecasting καθώς παρατηρείται πως οι μεταβλητές είναι εξαρτημένες χρονικά και παρουσιάζουν εποχικότητα.

Φόρτωση Δεδομένων

train <- read.csv("DailyDelhiClimateTrain.csv") 

ds <- ts(train, start=c(2013, 1), end=c(2019, 12), frequency=12)
class(ds) 
## [1] "mts"    "ts"     "matrix" "array"
# Βασικές πληροφορίες 
start(ds)       
## [1] 2013    1
end(ds)         
## [1] 2019   12
frequency(ds)   
## [1] 12
length(ds) 
## [1] 420
# Πρώτες τιμές 
head(ds, 24)
##          date  meantemp humidity wind_speed meanpressure
## Jan 2013    1 10.000000 84.50000  0.0000000     1015.667
## Feb 2013    2  7.400000 92.00000  2.9800000     1017.800
## Mar 2013    3  7.166667 87.00000  4.6333333     1018.667
## Apr 2013    4  8.666667 71.33333  1.2333333     1017.167
## May 2013    5  6.000000 86.83333  3.7000000     1016.500
## Jun 2013    6  7.000000 82.80000  1.4800000     1018.000
## Jul 2013    7  7.000000 78.60000  6.3000000     1020.000
## Aug 2013    8  8.857143 63.71429  7.1428571     1018.714
## Sep 2013    9 14.000000 51.25000 12.5000000     1017.000
## Oct 2013   10 11.000000 62.00000  7.4000000     1015.667
## Nov 2013   11 15.714286 51.28571 10.5714286     1016.143
## Dec 2013   12 14.000000 74.00000 13.2285714     1015.571
## Jan 2014   13 15.833333 75.16667  4.6333333     1013.333
## Feb 2014   14 12.833333 88.16667  0.6166667     1015.167
## Mar 2014   15 14.714286 71.85714  0.5285714     1015.857
## Apr 2014   16 13.833333 86.66667  0.0000000     1016.667
## May 2014   17 16.500000 80.83333  5.2500000     1015.833
## Jun 2014   18 13.833333 92.16667  8.9500000     1014.500
## Jul 2014   19 12.500000 76.66667  5.8833333     1021.667
## Aug 2014   20 11.285714 75.28571  8.4714286     1020.286
## Sep 2014   21 11.200000 77.00000  2.2200000     1021.000
## Oct 2014   22  9.500000 79.66667  3.0833333     1021.800
## Nov 2014   23 14.000000 60.16667  4.0166667     1020.500
## Dec 2014   24 13.833333 60.66667  6.1666667     1020.500
plot(ds)

autoplot(ds)+
  ggtitle("Ημερήσια δεδομένα Δελχί 2013–2018") +
  xlab("Ημερομηνία") +
  ylab("Δείκτης") +
  theme_minimal()

#ggseasonplot(ds, year.labels = TRUE) +
 # ggtitle("Seasonal plot — AirPassengers")

Διερευνητικές ερωτήσεις

  1. Υπάρχει εμφανής τάση και εποχικότητα στη μέση θερμοκρασία· πώς τα αναδεικνύετε (decomposition);

    #dec_mult <- decompose(ds, type = "multiplicative")
    ##ggtitle("Multiplicative Decomposition — AirPassengers")

    Ναι υπάρχει υψηλή τάση και εποχικότητα καθώς παρατηρούμε τα ίδια μοτίβα ανά περιόδους.

  2. Είναι η σειρά στάσιμη (stationary); Πώς το ελέγχετε και τι μετασχηματισμοί χρειάζονται;

    #adf.test(ds)

    Ο έλεγχος γίνεται με την παραπάνω συνάρτηση. Για να γίνει στάσιμη:

    # Βήμα 1: log() για σταθερή διακύμανση
    # Βήμα 2: diff() για αφαίρεση τάσης
    # Βήμα 3: diff(lag=12) για αφαίρεση εποχικότητας
    #ds_diff <- diff(diff(log(ds)), lag = 12)
    
    #autoplot(ds_diff) +
      #ggtitle("Μετά από log + 1η διαφόριση + εποχιακή διαφόριση")
    
    # Έλεγχος ξανά
    #adf.test(ds_diff)
  3. Τι δείχνουν τα ACF/PACF για την εξάρτηση από προηγούμενες τιμές;

  4. Προβλέψτε τη θερμοκρασία των επόμενων 30 ημερών και αξιολογήστε την (π.χ. RMSE/MAE σε hold-out).

  5. Πόσο βελτιώνει την πρόβλεψη η ρητή μοντελοποίηση της εποχικότητας;