Keberstasioneran dan stabilitas

Machine Learning untuk Data Deret Waktu di Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Keberstasioneran

  • Deret waktu stasioner tidak mengubah sifat statistiknya dari waktu ke waktu
  • Mis.: mean, simpangan baku, tren
  • Kebanyakan deret waktu agak tidak stasioner
Machine Learning untuk Data Deret Waktu di Python

Machine Learning untuk Data Deret Waktu di Python

Stabilitas model

  • Data tidak stasioner membuat model berubah-ubah
  • Sifat statistik yang ditemukan model dapat berubah mengikuti data
  • Selain itu, kita kurang yakin tentang nilai parameter model yang benar
  • Bagaimana cara mengukurnya?
Machine Learning untuk Data Deret Waktu di Python

Cross-validation untuk mengukur stabilitas parameter

  • Satu pendekatan: gunakan cross-validation
  • Hitung parameter model pada setiap iterasi
  • Nilai stabilitas parameter di semua split CV
Machine Learning untuk Data Deret Waktu di Python

Bootstrap untuk mean

  • Bootstrapping umum dipakai untuk menilai variasi
  • Bootstrap:
    1. Ambil sampel acak data dengan pengembalian
    2. Hitung mean sampel
    3. Ulangi sering (ribuan kali)
    4. Hitung persentil hasilnya (biasanya 2,5; 97,5)

Hasilnya adalah interval kepercayaan 95% untuk mean setiap koefisien.

Machine Learning untuk Data Deret Waktu di Python

Bootstrap untuk mean

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 untuk Data Deret Waktu di Python

Memplot koefisien hasil 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 untuk Data Deret Waktu di Python

Menilai stabilitas kinerja model

  • Jika memakai TimeSeriesSplit, Anda bisa memplot skor model dari waktu ke waktu.
  • Ini membantu menemukan periode waktu yang menurunkan skor
  • Juga berguna untuk menemukan sinyal tidak stasioner
Machine Learning untuk Data Deret Waktu di Python

Kinerja model seiring waktu

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 untuk Data Deret Waktu di Python

Memvisualisasikan skor model sebagai deret waktu

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 untuk Data Deret Waktu di Python

Memvisualisasikan skor model

Machine Learning untuk Data Deret Waktu di Python

Jendela tetap pada cross-validation deret waktu

# 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 untuk Data Deret Waktu di Python

Sinyal tidak stasioner

Machine Learning untuk Data Deret Waktu di Python

Ayo berlatih!

Machine Learning untuk Data Deret Waktu di Python

Preparing Video For Download...