We have a Geometric Brownian Motion $X_t$ sampled at some time interval $\delta t$. Increments in the Brownian Motion are uncorrelated, i.e. we have $\text{corr}\left[(X_{t+\delta t} - X_t), (X_{s+\delta t} - X_s)\right] = 0$ for $s\neq t$. In the same way, if we would resample this Brownian motion and only consider each 15th point, then the increments of this resampled Brownian motion would also be uncorrelated.
Now imagine that we create a new time series $Y_t$ from $X_t$ in the following way: Divide $X_t$ into non-overlapping intervals of 15 points. Within each interval find the maximum and minimum value of $X_t$. The new time series $Y_t$ is then the average of these values. Subsequent increments in $Y_t$ are now correlated, according to the Python code I wrote (see below). I really cannot wrap my head around why the increments become correlated, especially since the intervals from which $Y_t$ was constructed are non-overlapping. Can someone please provide a mathematical expression for the correlation and also an intuitive explanation why this is so much different from just resampling every 15th point of the series?
This is the Python code simulating Brownian motion and the correlations for all of the three cases mentioned above:
import numpy as np
import pandas as pd
# Geometric Brownian motion
n = 10000; dt = 1e-4; np.random.seed(1)
X = pd.Series(np.exp(-.5*dt + np.random.normal(0, np.sqrt(dt), size=n).T).cumprod())
# Correlation of subsequent increments
print(np.corrcoef(X.diff().iloc[2:],X.shift(1).diff().iloc[2:])) # Correlation is ~0.002
# Correlation of increments 15 steps apart
X15 = X.iloc[::15]
print(np.corrcoef(X15.diff().iloc[2:],X15.shift(1).diff().iloc[2:])) # Correlation is ~-0.002
# Correlation of the average of minimum / maximum in 15 minutes window
Xmin = X.rolling(15).min()
Xmax = X.rolling(15).max()
Xavg15 = ((Xmin + Xmax) / 2).iloc[::15]
print(np.corrcoef(Xavg15.diff().iloc[3:],Xavg15.shift(1).diff().iloc[3:])) # Correlation is 0.273