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
✗ Incorrect
Moving averages smooth data by reducing noise, making trends easier to see.
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)
✗ Incorrect
EMA assigns more weight to recent points, reacting faster to changes.
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
✗ Incorrect
A smaller window size makes the moving average more sensitive to recent changes.
Which of these is NOT a benefit of using moving averages?
AIncreasing data noise
BHighlighting trends
CSmoothing noisy data
DHelping model training
✗ Incorrect
Moving averages reduce noise, not increase it.
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
✗ Incorrect
SMA is the average of the last N 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
Step 1: Understand the role of moving averages
Moving averages smooth data by averaging nearby points, reducing short-term ups and downs.
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.
Final Answer:
To smooth out short-term fluctuations and highlight longer-term trends -> Option A
Quick Check:
Moving average = smoothing trends [OK]
Hint: Moving averages smooth data to show trends clearly [OK]
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
Step 1: Understand moving average calculation
A simple moving average with window 3 averages each group of 3 consecutive elements.
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.
Final Answer:
[(data[i] + data[i+1] + data[i+2]) / 3 for i in range(len(data)-2)] -> Option D
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
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
Step 2: Confirm output list length and values
Length is len(data)-window+1 = 5-2+1=4, matching 4 values above.
Final Answer:
[3.0, 5.0, 7.0, 9.0] -> Option C
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
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.
Step 2: Understand impact of incorrect range
Using len(data)-window misses the last valid window slice, causing incomplete results.
Final Answer:
The range should be len(data) - window + 1 to include the last window -> Option A
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
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.
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.
Final Answer:
[avg for i in range(len(data)-3) if (avg := sum(data[i:i+4])/4) > 13] -> Option B
Quick Check:
Use assignment expression to filter averages > 13 [OK]
Hint: Use assignment expression (walrus) to filter averages [OK]