# ==================================================================== # Week 11: Time Series Analysis # Kmex Consult - R Data Science Course # Open in RStudio and run each block with Ctrl+Enter (Cmd+Enter on Mac). # ==================================================================== # Analyzing and forecasting sequential data # ==================================================================== # WEEK 11 OVERVIEW # ==================================================================== # Time series data has one critical difference: observations are DEPENDENT. # EXAMPLES: # - Stock prices (today related to yesterday) # - Weather (today's temp related to yesterday) # - Sales (seasonal patterns, trends) # - Traffic (rush hour patterns) # - Website traffic (daily/weekly seasonality) # CHALLENGES: # - Can't randomize or shuffle data # - Patterns change over time # - Need special models # - Requires stationarity for many methods # COMPONENTS: # - Trend: Long-term direction # - Seasonality: Repeating patterns # - Cycles: Long-term oscillations # - Noise: Random variation # THIS WEEK YOU'LL LEARN: # ✓ Time series decomposition # ✓ Stationarity testing # ✓ Exponential smoothing # ✓ ARIMA models # ✓ SARIMA (seasonal ARIMA) # ✓ Forecasting accuracy metrics # ✓ Cross-validation for time series # ==================================================================== # KEY CONCEPTS # ==================================================================== # STATIONARITY - CRITICAL REQUIREMENT: # Most forecasting models require stationary data (constant mean, variance, no trend) library(forecast) library(tseries) # Create time series ts_data <- ts(c(100, 105, 110, 108, 115, 120, 125), frequency=1) # Test for stationarity adf.test(ts_data) # p < 0.05 → stationary # If non-stationary, difference ts_diff <- diff(ts_data) adf.test(ts_diff) # p now < 0.05 → stationary # EXPONENTIAL SMOOTHING - SIMPLE FORECAST: # Simple exponential smoothing model_ses <- ses(ts_data, h=5) forecast(model_ses) # Holt's (with trend) model_holt <- holt(ts_data, h=5) forecast(model_holt) # Holt-Winters (with seasonality) model_hw <- hw(ts_data, seasonal="additive", h=5) forecast(model_hw) # ARIMA(p,d,q) MODELS: # Auto ARIMA (automatic parameter selection) library(forecast) model_arima <- auto.arima(ts_data) print(model_arima) # Forecast forecast(model_arima, h=5) # Check residuals (should be white noise) checkresiduals(model_arima) # ACCURACY METRICS: # Common metrics MAE <- mean(abs(actual - predicted)) # Mean Absolute Error RMSE <- sqrt(mean((actual - predicted)^2)) # Root MSE MAPE <- mean(abs((actual - predicted)/actual)) * 100 # % error # Better: scale-independent library(forecast) accuracy(predicted, actual)