Bird
Raised Fist0
ML Pythonml~5 mins

Autocorrelation analysis in ML Python

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
Introduction
Autocorrelation analysis helps us find patterns in data by checking if values repeat over time or space.
To see if daily temperatures follow a pattern over weeks.
To check if stock prices depend on their past values.
To find repeating signals in sensor data like heartbeats.
To detect seasonality in sales data over months.
To understand if errors in a model are related over time.
Syntax
ML Python
import numpy as np

def autocorrelation(x, lag=1):
    n = len(x)
    x_mean = np.mean(x)
    numerator = np.sum((x[:n-lag] - x_mean) * (x[lag:] - x_mean))
    denominator = np.sum((x - x_mean) ** 2)
    if denominator == 0:
        return float('nan')
    return numerator / denominator
The function calculates autocorrelation for a given lag (how far apart values are).
Lag 1 means comparing each value with the next one.
Examples
Calculates autocorrelation between each number and the next one.
ML Python
autocorrelation([1, 2, 3, 4, 5], lag=1)
Calculates autocorrelation between each number and the one two steps ahead.
ML Python
autocorrelation([1, 2, 3, 4, 5], lag=2)
Returns NaN because all values are the same, so no variation.
ML Python
autocorrelation([5, 5, 5, 5, 5], lag=1)
Sample Model
This program calculates how daily sales relate to the previous day (lag 1) and two days before (lag 2).
ML Python
import numpy as np

def autocorrelation(x, lag=1):
    n = len(x)
    x_mean = np.mean(x)
    numerator = np.sum((x[:n-lag] - x_mean) * (x[lag:] - x_mean))
    denominator = np.sum((x - x_mean) ** 2)
    if denominator == 0:
        return float('nan')
    return numerator / denominator

# Example data: daily sales over 7 days
sales = np.array([10, 12, 13, 12, 11, 13, 14])

# Calculate autocorrelation for lag 1 and lag 2
ac_lag1 = autocorrelation(sales, lag=1)
ac_lag2 = autocorrelation(sales, lag=2)

print(f"Autocorrelation at lag 1: {ac_lag1:.3f}")
print(f"Autocorrelation at lag 2: {ac_lag2:.3f}")
OutputSuccess
Important Notes
Autocorrelation values range from -1 to 1, where 1 means perfect positive correlation.
A value near 0 means no correlation at that lag.
High autocorrelation at certain lags can show repeating patterns or cycles.
Summary
Autocorrelation checks if data points relate to past points at different distances.
It helps find patterns like seasonality or trends in time series data.
You can calculate it easily with a simple formula comparing shifted data.

Practice

(1/5)
1. What does autocorrelation measure in a time series dataset?
easy
A. The difference between the highest and lowest values in the data
B. The total sum of all data points in the series
C. The average value of the dataset
D. The relationship between current data points and past data points at different time lags

Solution

  1. Step 1: Understand autocorrelation concept

    Autocorrelation checks how current values relate to past values at various time gaps (lags).
  2. Step 2: Compare options to definition

    Only The relationship between current data points and past data points at different time lags correctly describes this relationship; others describe unrelated statistics.
  3. Final Answer:

    The relationship between current data points and past data points at different time lags -> Option D
  4. Quick Check:

    Autocorrelation = relationship with past points [OK]
Hint: Autocorrelation links current data to past data points [OK]
Common Mistakes:
  • Confusing autocorrelation with average or sum
  • Thinking it measures difference between max and min
  • Assuming it only looks at immediate previous point
2. Which of the following Python code snippets correctly computes the autocorrelation at lag 1 for a list data?
easy
A. import numpy as np np.corrcoef(data[:-1], data[1:])[0,1]
B. np.corrcoef(data, data)[0,1]
C. np.mean(data) - np.mean(data[1:])
D. np.sum(data) / len(data)

Solution

  1. Step 1: Understand autocorrelation calculation

    Autocorrelation at lag 1 compares data points with the next point, so we correlate data[:-1] with data[1:].
  2. Step 2: Check code correctness

    import numpy as np np.corrcoef(data[:-1], data[1:])[0,1] uses np.corrcoef correctly on shifted slices; others do not compute correlation at lag 1.
  3. Final Answer:

    import numpy as np\nnp.corrcoef(data[:-1], data[1:])[0,1] -> Option A
  4. Quick Check:

    Shifted slices correlation = import numpy as np np.corrcoef(data[:-1], data[1:])[0,1] [OK]
Hint: Use shifted slices for lag correlation in numpy [OK]
Common Mistakes:
  • Using correlation of data with itself (option B)
  • Calculating mean difference instead of correlation
  • Using sum or mean instead of correlation
3. Given the time series data = [2, 4, 6, 8, 10], what is the autocorrelation at lag 1 using numpy's correlation coefficient?
medium
A. 0.9
B. 1.0
C. 0.8
D. 0.0

Solution

  1. Step 1: Prepare shifted data slices

    data[:-1] = [2,4,6,8], data[1:] = [4,6,8,10]
  2. Step 2: Calculate correlation coefficient

    These slices are perfectly linearly increasing, so correlation is 1.0.
  3. Final Answer:

    1.0 -> Option B
  4. Quick Check:

    Perfect linear increase = autocorrelation 1.0 [OK]
Hint: Perfect linear sequences have autocorrelation 1.0 [OK]
Common Mistakes:
  • Calculating correlation with full data instead of shifted slices
  • Confusing correlation with difference or ratio
  • Rounding errors leading to wrong decimals
4. The following code attempts to compute autocorrelation at lag 2 but gives an error. What is the error?
import numpy as np
data = [1, 3, 5, 7, 9]
result = np.corrcoef(data[:-2], data[2:])[0,2]
medium
A. IndexError because index 2 is out of bounds for the correlation matrix
B. TypeError because data is a list, not a numpy array
C. ValueError because data slices have different lengths
D. No error, code runs correctly

Solution

  1. Step 1: Analyze np.corrcoef output shape

    np.corrcoef returns a 2x2 matrix for two input arrays, so valid indices are 0 or 1.
  2. Step 2: Check indexing in code

    Accessing [0,2] is invalid and causes IndexError.
  3. Final Answer:

    IndexError because index 2 is out of bounds for the correlation matrix -> Option A
  4. Quick Check:

    Correlation matrix max index = 1, so index 2 causes error [OK]
Hint: Correlation matrix for two arrays is 2x2, max index 1 [OK]
Common Mistakes:
  • Assuming list input causes TypeError
  • Thinking slices have different lengths (they are equal)
  • Believing code runs without error
5. You have daily sales data showing a weekly pattern. How can autocorrelation analysis help you detect this seasonality?
hard
A. By plotting sales against time without any lag analysis
B. By calculating the average sales over the entire dataset
C. By computing autocorrelation at lag 7 to check if sales on a day relate to sales 7 days before
D. By computing autocorrelation only at lag 1

Solution

  1. Step 1: Understand weekly seasonality

    Weekly seasonality means patterns repeat every 7 days.
  2. Step 2: Use autocorrelation at lag 7

    Computing autocorrelation at lag 7 checks if sales today relate to sales 7 days ago, revealing weekly patterns.
  3. Final Answer:

    By computing autocorrelation at lag 7 to check if sales on a day relate to sales 7 days before -> Option C
  4. Quick Check:

    Weekly pattern detected by lag 7 autocorrelation [OK]
Hint: Match lag to season length to find repeating patterns [OK]
Common Mistakes:
  • Using lag 1 only misses weekly pattern
  • Ignoring lag and just averaging data
  • Plotting without lag analysis misses seasonality