Bird
Raised Fist0
ML Pythonml~20 mins

Time series components (trend, seasonality) in ML Python - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Time Series Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Identifying trend in a time series
Which of the following best describes the trend component in a time series?
ASudden spikes or drops caused by unexpected events
BRandom fluctuations that do not follow any pattern
CA repeating pattern that occurs at regular intervals, like daily or yearly cycles
DA long-term increase or decrease in the data values over time
Attempts:
2 left
💡 Hint
Think about whether the data is generally going up or down over a long period.
Predict Output
intermediate
2:00remaining
Output of seasonal decomposition
Given a time series with yearly seasonality and an upward trend, what will the seasonal component look like after decomposition?
ML Python
import numpy as np
import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose

time = pd.date_range(start='2020-01-01', periods=24, freq='M')
data = 10 + 0.5 * np.arange(24) + 3 * np.sin(2 * np.pi * np.arange(24) / 12)
series = pd.Series(data, index=time)
result = seasonal_decompose(series, model='additive', period=12)
seasonal = result.seasonal.round(2).tolist()
A[0.0, 1.5, 3.0, 1.5, 0.0, -1.5, -3.0, -1.5, 0.0, 1.5, 3.0, 1.5, 0.0, 1.5, 3.0, 1.5, 0.0, -1.5, -3.0, -1.5, 0.0, 1.5, 3.0, 1.5]
B[10.0, 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0, 16.5, 17.0, 17.5, 18.0, 18.5, 19.0, 19.5, 20.0, 20.5, 21.0, 21.5]
C[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
D[5.0, 5.5, 6.0, 6.5, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5, 10.0, 10.5, 11.0, 11.5, 12.0, 12.5, 13.0, 13.5, 14.0, 14.5, 15.0, 15.5, 16.0, 16.5]
Attempts:
2 left
💡 Hint
Seasonal component repeats every 12 months and oscillates around zero.
Model Choice
advanced
1:30remaining
Choosing a model for trend and seasonality
You have monthly sales data with a clear upward trend and yearly seasonal peaks. Which model is best to capture both components?
AARIMA model without seasonal terms
BSARIMA model with seasonal order set to 12 months
CSimple Linear Regression on time index only
DK-Means clustering on sales values
Attempts:
2 left
💡 Hint
Consider models that explicitly handle seasonality.
Hyperparameter
advanced
1:00remaining
Selecting period parameter in seasonal decomposition
When using seasonal_decompose on daily data with weekly seasonality, what should the period parameter be set to?
A365
B30
C7
D12
Attempts:
2 left
💡 Hint
Think about how many days make a week.
Metrics
expert
2:00remaining
Evaluating model fit on decomposed components
After decomposing a time series into trend, seasonal, and residual components, which metric best measures how well the trend component fits the original data's long-term movement?
AMean Absolute Error (MAE) between original series and trend component
BRoot Mean Squared Error (RMSE) between seasonal component and original series
CR-squared value between residual component and original series
DAccuracy score comparing predicted and actual seasonal peaks
Attempts:
2 left
💡 Hint
Focus on measuring difference between trend and original data ignoring seasonality and noise.

Practice

(1/5)
1. Which component of a time series shows the long-term upward or downward movement over time?
easy
A. Trend
B. Seasonality
C. Noise
D. Residual

Solution

  1. Step 1: Understand the meaning of trend

    The trend component represents the overall direction or pattern in the data over a long period, such as increasing sales over years.
  2. Step 2: Differentiate from seasonality and noise

    Seasonality repeats in fixed cycles (like monthly), and noise is random variation. Trend is the smooth long-term movement.
  3. Final Answer:

    Trend -> Option A
  4. Quick Check:

    Long-term direction = Trend [OK]
Hint: Trend = overall direction over time, not repeating cycles [OK]
Common Mistakes:
  • Confusing seasonality with trend
  • Thinking noise is trend
  • Mixing residual with trend
2. Which of the following is the correct Python code to plot seasonality in a time series using pandas?
easy
A. df['value'].plot()
B. df['value'].rolling(window=12).mean().plot()
C. df['value'].groupby(df.index.month).mean().plot()
D. df['value'].diff().plot()

Solution

  1. Step 1: Identify how to extract seasonality

    Seasonality repeats in fixed intervals like months, so grouping by month and averaging shows seasonal pattern.
  2. Step 2: Check code options

    df['value'].groupby(df.index.month).mean().plot() groups by month and plots mean, revealing seasonality. Others plot raw data, trend (rolling mean), or differences.
  3. Final Answer:

    df['value'].groupby(df.index.month).mean().plot() -> Option C
  4. Quick Check:

    Group by time period for seasonality plot [OK]
Hint: Group data by time unit (month) to see seasonality [OK]
Common Mistakes:
  • Plotting raw data only
  • Using rolling mean for seasonality
  • Plotting differences instead of seasonal groups
3. Given this Python code snippet, what will be the output type of seasonal?
import pandas as pd
import numpy as np
index = pd.date_range('2023-01-01', periods=12, freq='M')
data = np.sin(np.linspace(0, 2 * np.pi, 12))
df = pd.Series(data, index=index)
seasonal = df.groupby(df.index.month).transform('mean')
medium
A. A numpy array of length 12
B. A pandas Series with same length as df
C. A pandas DataFrame with 12 rows and 1 column
D. A single float value representing mean

Solution

  1. Step 1: Understand groupby with transform

    Using groupby with transform('mean') returns a Series aligned with original index, same length as df.
  2. Step 2: Check output type

    Since df is a Series, seasonal is also a Series with same length, each value replaced by group mean.
  3. Final Answer:

    A pandas Series with same length as df -> Option B
  4. Quick Check:

    groupby + transform returns Series matching original length [OK]
Hint: groupby + transform keeps original length Series [OK]
Common Mistakes:
  • Thinking transform returns single value
  • Confusing transform with aggregate
  • Expecting DataFrame instead of Series
4. You have this code to extract trend using rolling mean:
trend = df['value'].rolling(window=3).mean()
But the output has many NaN values at the start. How can you fix this?
medium
A. Use diff() instead of rolling mean
B. Change window to 1
C. Drop NaN values after rolling mean
D. Use min_periods=1 in rolling to reduce NaNs

Solution

  1. Step 1: Understand rolling mean NaNs

    Rolling mean with window=3 needs 3 values to compute, so first 2 are NaN by default.
  2. Step 2: Use min_periods to allow fewer values

    Setting min_periods=1 lets rolling mean compute with fewer points, reducing NaNs at start.
  3. Final Answer:

    Use min_periods=1 in rolling to reduce NaNs -> Option D
  4. Quick Check:

    min_periods controls minimum data points for rolling [OK]
Hint: Set min_periods=1 in rolling to avoid initial NaNs [OK]
Common Mistakes:
  • Changing window to 1 loses smoothing
  • Dropping NaNs loses early data
  • Using diff() does not fix NaNs
5. You have monthly sales data with a strong yearly seasonality and an upward trend. Which method best separates trend and seasonality components?
hard
A. Use moving average with window=12 for trend, then subtract to get seasonality
B. Use differencing with lag=1 to remove seasonality
C. Apply Fourier transform to remove trend
D. Use rolling mean with window=3 to capture seasonality

Solution

  1. Step 1: Understand yearly seasonality and trend

    Yearly seasonality repeats every 12 months; trend is slow upward movement.
  2. Step 2: Choose method to separate components

    Moving average with window=12 smooths out seasonality, capturing trend. Subtracting trend leaves seasonality.
  3. Step 3: Evaluate other options

    Differencing with lag=1 removes short-term changes, not yearly seasonality. Fourier transform is complex. Rolling mean with window=3 is too short for yearly seasonality.
  4. Final Answer:

    Use moving average with window=12 for trend, then subtract to get seasonality -> Option A
  5. Quick Check:

    Window matches season length to isolate trend [OK]
Hint: Match moving average window to season length to isolate trend [OK]
Common Mistakes:
  • Using too short window for moving average
  • Confusing differencing lag with season length
  • Ignoring trend when extracting seasonality