Bird
Raised Fist0
ML Pythonml~5 mins

Moving averages in ML Python - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is a moving average in data analysis?
A moving average is a way to smooth out data by taking the average of a fixed number of recent points. It helps show trends by reducing noise.
Click to reveal answer
intermediate
Explain the difference between a simple moving average (SMA) and an exponential moving average (EMA).
SMA calculates the average of data points equally over a fixed window. EMA gives more weight to recent data points, making it respond faster to changes.
Click to reveal answer
beginner
Why are moving averages useful in machine learning?
They help smooth noisy data, making patterns clearer. This can improve model training by focusing on trends rather than random fluctuations.
Click to reveal answer
intermediate
How does the window size affect a moving average?
A larger window smooths data more but reacts slower to changes. A smaller window reacts faster but may keep more noise.
Click to reveal answer
beginner
Write the formula for a simple moving average (SMA) of window size N.
SMA at time t = (x_t + x_{t-1} + ... + x_{t-N+1}) / N, where x_i are data points.
Click to reveal answer
What does a moving average help to reduce in data?
AData size
BTrends
CNoise
DAccuracy
Which moving average type gives more weight to recent data?
AExponential Moving Average (EMA)
BCumulative Moving Average (CMA)
CWeighted Moving Average (WMA)
DSimple Moving Average (SMA)
If you want a moving average to react quickly to recent changes, you should use:
AA large window size
BNo moving average
COnly past data
DA small window size
Which of these is NOT a benefit of using moving averages?
AIncreasing data noise
BHighlighting trends
CSmoothing noisy data
DHelping model training
The formula SMA at time t = (x_t + x_{t-1} + ... + x_{t-N+1}) / N means:
ASum of all data points
BAverage of last N data points
CDifference between data points
DProduct of data points
Describe what a moving average is and why it is useful in analyzing data.
Think about how averaging recent values helps see the bigger picture.
You got /4 concepts.
    Explain the difference between simple moving average and exponential moving average and when you might use each.
    Consider how quickly you want the average to respond to new data.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using a moving average in data analysis?
      easy
      A. To smooth out short-term fluctuations and highlight longer-term trends
      B. To increase the number of data points in a dataset
      C. To remove all noise from the data completely
      D. To predict exact future values without error

      Solution

      1. Step 1: Understand the role of moving averages

        Moving averages smooth data by averaging nearby points, reducing short-term ups and downs.
      2. Step 2: Identify the main goal

        The goal is to reveal longer-term trends by reducing noise, not to remove noise completely or predict exact values.
      3. Final Answer:

        To smooth out short-term fluctuations and highlight longer-term trends -> Option A
      4. Quick Check:

        Moving average = smoothing trends [OK]
      Hint: Moving averages smooth data to show trends clearly [OK]
      Common Mistakes:
      • Thinking moving averages increase data points
      • Believing moving averages remove all noise
      • Assuming moving averages predict exact future values
      2. Which of the following Python code snippets correctly computes a simple moving average with window size 3 for a list data?
      easy
      A. [data[i] / 3 for i in range(len(data))]
      B. [sum(data[i:i+3]) for i in range(len(data)-3)]
      C. [sum(data[i:i+3]) / 3 for i in range(len(data)-3)]
      D. [(data[i] + data[i+1] + data[i+2]) / 3 for i in range(len(data)-2)]

      Solution

      1. Step 1: Understand moving average calculation

        A simple moving average with window 3 averages each group of 3 consecutive elements.
      2. Step 2: Check each option's correctness

        [(data[i] + data[i+1] + data[i+2]) / 3 for i in range(len(data)-2)] correctly sums three consecutive elements and divides by 3, iterating till len(data)-2.
        [sum(data[i:i+3]) for i in range(len(data)-3)] sums but does not divide by 3.
        [sum(data[i:i+3]) / 3 for i in range(len(data)-3)] divides but uses range(len(data)-3), which is too short.
        [data[i] / 3 for i in range(len(data))] divides single elements by 3, not averaging groups.
      3. Final Answer:

        [(data[i] + data[i+1] + data[i+2]) / 3 for i in range(len(data)-2)] -> Option D
      4. Quick Check:

        Sum 3 elements / 3, range correct = [(data[i] + data[i+1] + data[i+2]) / 3 for i in range(len(data)-2)] [OK]
      Hint: Sum 3 elements and divide by 3, loop till len-2 [OK]
      Common Mistakes:
      • Forgetting to divide by window size
      • Using wrong range length causing index errors
      • Averaging single elements instead of groups
      3. Given the code below, what is the output?
      data = [2, 4, 6, 8, 10]
      window = 2
      moving_avg = [sum(data[i:i+window]) / window for i in range(len(data) - window + 1)]
      print(moving_avg)
      medium
      A. [2.0, 4.0, 6.0, 8.0, 10.0]
      B. [3.0, 5.0, 7.0]
      C. [3.0, 5.0, 7.0, 9.0]
      D. [6.0, 8.0, 10.0]

      Solution

      1. Step 1: Calculate moving averages manually

        Window size is 2, so average pairs:
        (2+4)/2=3.0
        (4+6)/2=5.0
        (6+8)/2=7.0
        (8+10)/2=9.0
      2. Step 2: Confirm output list length and values

        Length is len(data)-window+1 = 5-2+1=4, matching 4 values above.
      3. Final Answer:

        [3.0, 5.0, 7.0, 9.0] -> Option C
      4. Quick Check:

        Pairs averaged = [3.0, 5.0, 7.0, 9.0] [OK]
      Hint: Average pairs sliding by one, length = len - window + 1 [OK]
      Common Mistakes:
      • Confusing window size with output length
      • Calculating sums but forgetting to divide
      • Off-by-one errors in range length
      4. The following code is intended to compute a moving average with window size 3, but it misses the last window. What is the problem?
      data = [1, 2, 3, 4, 5]
      window = 3
      moving_avg = [sum(data[i:i+window]) / window for i in range(len(data)-window)]
      print(moving_avg)
      medium
      A. The range should be len(data) - window + 1 to include the last window
      B. The window size is too large for the data list
      C. sum() cannot be used on list slices
      D. Division by window size should be outside the list comprehension

      Solution

      1. Step 1: Analyze the range length

        Range is len(data)-window = 5-3=2, but to cover all windows it should be len(data)-window+1 = 3.
      2. Step 2: Understand impact of incorrect range

        Using len(data)-window misses the last valid window slice, causing incomplete results.
      3. Final Answer:

        The range should be len(data) - window + 1 to include the last window -> Option A
      4. Quick Check:

        Range length = len - window + 1 [OK]
      Hint: Use range(len(data) - window + 1) for full coverage [OK]
      Common Mistakes:
      • Using len(data) - window instead of +1
      • Thinking sum() can't handle slices
      • Misplacing division outside comprehension
      5. You have daily sales data for 10 days: [10, 12, 11, 14, 13, 15, 16, 14, 13, 12]. You want to smooth this data using a moving average with window size 4 but only want to keep averages where the window's average is greater than 13. Which Python code correctly computes this filtered moving average?
      hard
      A. [sum(data[i:i+4])/4 for i in range(len(data)-4) if sum(data[i:i+4])/4 > 13]
      B. [avg for i in range(len(data)-3) if (avg := sum(data[i:i+4])/4) > 13]
      C. [sum(data[i:i+4])/4 for i in range(len(data)-3) if sum(data[i:i+4]) > 13]
      D. [sum(data[i:i+4])/4 for i in range(len(data)-3) if sum(data[i:i+4])/4 < 13]

      Solution

      1. Step 1: Understand window size and range

        Window size 4 means averaging groups of 4 elements, so range is len(data)-3 = 10-3=7.
      2. Step 2: Filter averages greater than 13

        [avg for i in range(len(data)-3) if (avg := sum(data[i:i+4])/4) > 13] uses assignment expression to compute average once and filter if > 13.
        [sum(data[i:i+4])/4 for i in range(len(data)-4) if sum(data[i:i+4])/4 > 13] uses wrong range (len(data)-4=6), missing last window.
        [sum(data[i:i+4])/4 for i in range(len(data)-3) if sum(data[i:i+4]) > 13] filters sum > 13, not average > 13.
        [sum(data[i:i+4])/4 for i in range(len(data)-3) if sum(data[i:i+4])/4 < 13] filters averages less than 13, opposite condition.
      3. Final Answer:

        [avg for i in range(len(data)-3) if (avg := sum(data[i:i+4])/4) > 13] -> Option B
      4. Quick Check:

        Use assignment expression to filter averages > 13 [OK]
      Hint: Use assignment expression (walrus) to filter averages [OK]
      Common Mistakes:
      • Using wrong range length missing last windows
      • Filtering sum instead of average
      • Using wrong comparison operator