Staționaritate și stabilitate

Machine Learning pentru Date de Tip Șir de Timp în Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Staționaritate

  • Seriile de timp staționare nu își modifică proprietățile statistice în timp
  • Ex.: medie, deviație standard, tendințe
  • Majoritatea seriilor de timp sunt parțial non-staționare
Machine Learning pentru Date de Tip Șir de Timp în Python

Machine Learning pentru Date de Tip Șir de Timp în Python

Stabilitatea modelului

  • Datele non-staționare introduc variabilitate în model
  • Proprietățile statistice identificate de model se pot modifica odată cu datele
  • Valorile corecte ale parametrilor modelului devin mai incerte
  • Cum putem cuantifica aceasta?
Machine Learning pentru Date de Tip Șir de Timp în Python

Validare încrucișată pentru stabilitatea parametrilor

  • O abordare: utilizarea validării încrucișate
  • Calcularea parametrilor modelului la fiecare iterație
  • Evaluarea stabilității parametrilor pe toate diviziunile CV
Machine Learning pentru Date de Tip Șir de Timp în Python

Bootstrap pentru medie

  • Bootstrapping-ul este o metodă comună pentru evaluarea variabilității
  • Procesul bootstrap:
    1. Extragerea unui eșantion aleatoriu cu înlocuire
    2. Calcularea mediei eșantionului
    3. Repetarea procesului de mai multe ori (1000+)
    4. Calcularea percentilelor rezultatului (de obicei 2,5 și 97,5)

Rezultatul este un interval de încredere de 95% al mediei fiecărui coeficient.

Machine Learning pentru Date de Tip Șir de Timp în Python

Bootstrap pentru medie

from sklearn.utils import resample

# cv_coefficients has shape (n_cv_folds, n_coefficients)
n_boots = 100
bootstrap_means = np.zeros(n_boots, n_coefficients)
for ii in range(n_boots):
    # Generate random indices for our data with replacement, 
    # then take the sample mean
    random_sample = resample(cv_coefficients)
    bootstrap_means[ii] = random_sample.mean(axis=0)

# Compute the percentiles of choice for the bootstrapped means
percentiles = np.percentile(bootstrap_means, (2.5, 97.5), axis=0)
Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea coeficienților bootstrap

fig, ax = plt.subplots()
ax.scatter(many_shifts.columns, percentiles[0], marker='_', s=200)
ax.scatter(many_shifts.columns, percentiles[1], marker='_', s=200)

Machine Learning pentru Date de Tip Șir de Timp în Python

Evaluarea stabilității performanței modelului

  • Cu TimeSeriesSplit, se poate reprezenta grafic scorul modelului în timp.
  • Util pentru identificarea perioadelor care afectează scorul
  • Util și pentru detectarea semnalelor non-staționare
Machine Learning pentru Date de Tip Șir de Timp în Python

Performanța modelului în timp

def my_corrcoef(est, X, y):
    """Return the correlation coefficient 
    between model predictions and a validation set."""
    return np.corrcoef(y, est.predict(X))[1, 0]

# Grab the date of the first index of each validation set
first_indices = [data.index[tt[0]] for tr, tt in cv.split(X, y)]

# Calculate the CV scores and convert to a Pandas Series
cv_scores = cross_val_score(model, X, y, cv=cv, scoring=my_corrcoef)
cv_scores = pd.Series(cv_scores, index=first_indices)
Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea scorurilor ca serie de timp

fig, axs = plt.subplots(2, 1, figsize=(10, 5), sharex=True)

# Calculate a rolling mean of scores over time
cv_scores_mean = cv_scores.rolling(10, min_periods=1).mean()
cv_scores.plot(ax=axs[0])
axs[0].set(title='Validation scores (correlation)', ylim=[0, 1])

# Plot the raw data
data.plot(ax=axs[1])
axs[1].set(title='Validation data')
Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea scorurilor modelului

Machine Learning pentru Date de Tip Șir de Timp în Python

Ferestre fixe cu validare încrucișată temporală

# Only keep the last 100 datapoints in the training data
window = 100

# Initialize the CV with this window size
cv = TimeSeriesSplit(n_splits=10, max_train_size=window)
Machine Learning pentru Date de Tip Șir de Timp în Python

Semnale non-staționare

Machine Learning pentru Date de Tip Șir de Timp în Python

Să exersăm!

Machine Learning pentru Date de Tip Șir de Timp în Python

Preparing Video For Download...