Tính dừng và độ ổn định

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Tính dừng

  • Chuỗi thời gian dừng không thay đổi các đặc trưng thống kê theo thời gian
  • Ví dụ: trung bình, độ lệch chuẩn, xu hướng
  • Hầu hết chuỗi thời gian đều ít nhiều không dừng
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Độ ổn định của mô hình

  • Dữ liệu không dừng làm tăng biến động trong mô hình
  • Các đặc trưng thống kê mô hình học được có thể thay đổi theo dữ liệu
  • Ngoài ra, bạn sẽ kém chắc chắn hơn về giá trị đúng của tham số mô hình
  • Làm sao định lượng điều này?
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cross-validation để định lượng độ ổn định tham số

  • Một cách tiếp cận: dùng cross-validation
  • Tính các tham số mô hình ở mỗi vòng lặp
  • Đánh giá độ ổn định tham số qua các lần chia CV
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Bootstrap trung bình

  • Bootstrapping là cách phổ biến để đánh giá độ biến thiên
  • Quy trình bootstrap:
    1. Lấy mẫu ngẫu nhiên từ dữ liệu có hoàn lại
    2. Tính trung bình của mẫu
    3. Lặp lại nhiều lần (hàng nghìn)
    4. Tính các phân vị của kết quả (thường 2.5, 97.5)

Kết quả là khoảng tin cậy 95% cho trung bình của mỗi hệ số.

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Bootstrap trung bình

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 cho Dữ liệu Chuỗi thời gian bằng Python

Vẽ các hệ số 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 cho Dữ liệu Chuỗi thời gian bằng Python

Đánh giá độ ổn định hiệu năng mô hình

  • Nếu dùng TimeSeriesSplit, có thể vẽ điểm số mô hình theo thời gian
  • Hữu ích để tìm các khoảng thời gian làm giảm điểm số
  • Cũng hữu ích để phát hiện tín hiệu không dừng
Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Hiệu năng mô hình theo thời gian

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 cho Dữ liệu Chuỗi thời gian bằng Python

Trực quan hóa điểm số theo chuỗi thời gian

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 cho Dữ liệu Chuỗi thời gian bằng Python

Trực quan hóa điểm số mô hình

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cửa sổ cố định với cross-validation cho chuỗi thời gian

# 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 cho Dữ liệu Chuỗi thời gian bằng Python

Tín hiệu không dừng

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Cùng luyện tập nào!

Machine Learning cho Dữ liệu Chuỗi thời gian bằng Python

Preparing Video For Download...