چیت‌شیت

مفاهیم پایه‌ای سری‌های زمانی

Time Series Fundamentals

بررسی مانایی، ساخت ویژگی‌های تأخیری، اعتبارسنجی پیش‌رونده، شکست‌دادن خطوط مبنای ساده. گشت‌های تصادفی و زنجیره‌های مارکوف.

  • ۱۲ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. از سری زمانی تا پیش‌بینی معتبر
  2. اعتبارسنجی پیش‌رونده
  3. وظایف در قالب کد
  4. نسخه‌های کتابخانه
  5. تعاریف بنیادین
  6. انتخاب یک رویکرد
  7. پیش‌فرض‌ها و اعداد
  8. اشتباهات و راه‌حل‌ها
  9. فرایندهای تصادفی در قالب کد
  10. گشت‌های تصادفی و زنجیره‌های مارکوف
  11. ناهنجاری‌ها در زمان
  12. پرسش‌ها

از سری زمانی تا پیش‌بینی معتبر

معماری
دریفت‌هافولدهاباید شکست دهدسری خامابتدا آن را رسم کنیدبررسی ماناییمیانگین و انحراف معیار متحرکتفاضل‌گیریحداکثر دو مرحلهویژگی‌های تأخیریمقادیر در t-1 یا قبل‌ترwalk_forward_splitآموزش قبل از آزمونمدلRidge، SimpleAR، ARIMAخطوط مبناماندگاری (persistence)، ساده فصلیامتیازMAE، RMSE، MAPE

اعتبارسنجی پیش‌رونده

گام‌به‌گام
  1. آموزشبرازش روی داده‌ها تا زمان t.
  2. پیش‌بینیپیش‌بینی t+1، یا t+1 تا t+k برای حالت چندگامی.
  3. لغزشپنجره را رو به جلو حرکت دهید.
  4. تکرارهر فولد آزمون بعد از تمام داده‌های آموزشی خودش قرار می‌گیرد.
  5. پنجره‌ی افزایشیمجموعه‌ی آموزش رشد می‌کند. وقتی داده‌های قدیمی معتبر می‌مانند استفاده کنید.
  6. پنجره‌ی لغزاناندازه‌ی ثابت. وقتی دنیا تغییر می‌کند و داده‌های قدیمی آسیب می‌زنند استفاده کنید.

وظایف در قالب کد

کار و کد
وظیفهکد
حذف یک روندdifference(series, order=1)
آماره‌های متحرک و یک حکم ارزیابیcheck_stationarity(series, window=50)
ACF تا یک تأخیر مشخصautocorrelation(series, max_lag=20)
تبدیل سری به X و ymake_lag_features(series, n_lags)
فولدهای دارای ترتیب زمانیwalk_forward_split(n_samples, n_splits=5, min_train=50)
مدل AR روی ویژگی‌های تأخیریSimpleAR(n_lags=5).fit_series(series)
چندگامی بازگشتیforecast(last_values, n_steps)
درصد خطا، با رد کردن صفرهاmape(y_true, y_pred)

نسخه‌های کتابخانه

کد
python
X, y = make_lag_features(series, n_lags=10)
for train_idx, test_idx in walk_forward_split(len(X)):
    model = Ridge(alpha=1.0)
    model.fit(X[train_idx], y[train_idx])
    predictions = model.predict(X[test_idx])
model = ARIMA(train_series, order=(5, 1, 2))      # p, d, q
fitted = model.fit()
forecast = fitted.forecast(steps=30)  # 30 گام جلوتر
tscv = TimeSeriesSplit(n_splits=5)    # اعتبارسنجی پیش‌رونده با sklearn
scores = cross_val_score(model, X, y, cv=TimeSeriesSplit(n_splits=5))

تعاریف بنیادین

مفهوم‌ها
مؤلفه‌ها
روند، فصلی‌بودن و پسماند. پسماند نوفه سفید نشان‌دهنده تجزیه موفق است.
مانا
میانگین، واریانس و خودهمبستگی در طول زمان تغییر نمی‌کنند.
تفاضل‌گیری
$\text{diff}[t] = \text{value}[t] - \text{value}[t-1]$
ACF
همبستگی سری با نسخه‌ی دارای تأخیر خود. از تأخیرها تا جایی که مقدارشان ناچیز شود استفاده کنید.
PACF
خودهمبستگی در تأخیر k بعد از حذف اثر تأخیرهای کوتاه‌تر.
ARIMA(p, d, q)
p مقدار گذشته، d مرحله تفاضل‌گیری، q خطای گذشته.
MAE / RMSE / MAPE
میانگین قدر مطلق خطا، جذر میانگین مربعات خطا، درصد خطا.
هم‌ترازی هدف
مقدار هدف در زمان t. تمام ویژگی‌ها از t-1 یا قبل‌تر استفاده می‌کنند.

انتخاب یک رویکرد

دستورها
دستورکارکرد
Lag features + MLچندین ویژگی خارجی. قوی‌ترین نقطه شروع با الگوریتم‌های تقویت‌کننده (boosting)
ARIMAیک سری تک‌متغیره، کوتاه‌مدت. SARIMA برای فصول
Exponential smoothingروند ساده + فصلی‌بودن با Holt-Winters
Neural networksتوالی‌های طولانی، سری‌های چندگانه
Recursive forecastبازخورد دادن پیش‌بینی‌ها به ورودی. مناسب برای 1 تا 5 گام
Direct forecastیک مدل به‌ازای هر افق زمانی. مناسب برای افق‌های طولانی
Multi-outputیک مدل که تمام افق‌ها را خروجی می‌دهد

پیش‌فرض‌ها و اعداد

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
`check_stationarity` window50اندازه‌ی پنجره‌ی لغزان
Mean shift limit0.5برحسب انحراف معیار سری، مقایسه دو نیمه با هم
Variance ratio limit2.0بالاتر از آن، نشانه‌گذاری به‌عنوان نامانا
ADF p-value0.05پایین‌تر از آن، رد نامانایی
max_lag20پیش‌فرض خودهمبستگی
`n_splits`, `min_train`5حداقل 50 ردیف آموزشی (min_train=50) قبل از اولین آزمون
Rolling windows7 and 14میانگین، انحراف معیار، حداقل، حداکثر برحسب روز
Weekly seasonalitylag 7احتمالاً 14 نیز

اشتباهات و راه‌حل‌ها

عیب‌یابی
  • MSE کمتر در تفکیک تصادفی

    علت
    نشت داده از آینده
    راه‌حل
    اعتبارسنجی پیش‌رونده یا تفکیک زمانی
  • بک‌تست تقریباً بی‌نقص

    علت
    لحاظ شدن ویژگی زمان t
    راه‌حل
    بازبینی دقیق هم‌ترازی تمام ویژگی‌ها
  • از دست رفتن الگوی فصلی

    علت
    کوتاه‌تر بودن مجموعه آزمون از یک چرخه کامل
    راه‌حل
    نگه‌داشتن یک چرخه‌ی فصلی کامل برای ارزیابی
  • دو برابر شدن درآمد، عقب ماندن مدل

    علت
    تغییر مقیاس مطلق
    راه‌حل
    مدل‌سازی درصد تغییرات
  • بیش‌برازش با تأخیرهای زیاد

    علت
    تصور «تاریخچه بیشتر، بهتر است»
    راه‌حل
    انتخاب تأخیرها بر اساس ACF
  • دریفت مدل خطی

    علت
    حذف نشدن روند
    راه‌حل
    ابتدا تفاضل‌گیری، سپس مدل‌سازی
  • شکست در برابر روش ساده فصلی

    علت
    نشت داده، ارزیابی اشتباه، یا سری کاملاً تصادفی
    راه‌حل
    رفع باگ قبل از شروع تنظیم هایپرپارامترها
  • افزایش خطاها در محیط عملیاتی

    علت
    تغییر شرایط دنیای واقعی
    راه‌حل
    آموزش مجدد روی داده‌های اخیر

فرایندهای تصادفی در قالب کد

کد
python
positions = random_walk_1d(n_steps, seed=None)  # رشد انحراف معیار به‌صورت sqrt(n)
mc = MarkovChain(P, state_names=names)          # مجموع ردیف‌های P برابر 1 است
pi = mc.stationary_distribution()               # بردار ویژه چپ، مقدار ویژه 1
states = mc.simulate(start_state=0, n_steps=100000, seed=42)
traj = langevin_dynamics(grad_U, x0, dt, temperature, n_steps)
samples, acc_rate = metropolis_hastings(
    target_log_prob=bimodal_log_prob,
    proposal_std=2.0, x0=np.array([0.0]), n_samples=100000, seed=42)
samples_flat = samples[10000:, 0]               # داده‌های اولیه (burn-in) دور ریخته شدند

گشت‌های تصادفی و زنجیره‌های مارکوف

مفهوم‌ها
گشت تصادفی
میانگین 0، انحراف معیار $\sqrt{n}$. 10000 گام مقداری حدود 100 می‌دهد.
خاصیت مارکوف
حالت بعدی تنها به حالت فعلی وابسته است.
توزیع ایستا
$\pi P = \pi$. زنجیره آب‌وهوا خروجی [0.55, 0.18, 0.27] می‌دهد.
همگرایی
نیازمند یک زنجیره تحویل‌ناپذیر و نامتناوب است.
شکاف طیفی
1 منهای دومین مقدار ویژه. شکاف 0.2 در حدود 5 گام به تعادل می‌رسد.
گام براونی
$B(t + dt) = B(t) + \sqrt{dt} \, z$
لانژون
$x_{t+1} = x_t - dt \, \nabla U(x_t) + \sqrt{2 T \, dt} \, z_t$
متروپولیس-هستینگز
پذیرش با $\min(1, a)$. نرخ پذیرش هدف حدود 23٪.

ناهنجاری‌ها در زمان

نکته‌ها
  • دمای 90 درجه در تابستان طبیعی و در زمستان ناهنجار است. ناهنجاری‌های زمینه‌ای به ویژگی‌های زمانی نیاز دارند.
  • ناهنجاری‌های جمعی به روش‌های آگاه از توالی نیاز دارند. پنجاه ورود ناموفق پشت سر هم نشان‌دهنده حمله است.
  • افزودن آماره‌های متحرک، نسبت‌ها و ویژگی‌های زمان‌سپری‌شده‌از‌آخرین‌رویداد.
  • آماره‌های متحرک 30 روزه در زمان امتیازدهی نیازمند 30 روز تاریخچه در حافظه موقت هستند.
  • ردیابی توزیع امتیاز ناهنجاری؛ یک آستانه ثابت با گذشت زمان دچار دریفت می‌شود.

پرسش‌ها

پرسش و پاسخ
چرا k-fold استفاده نشود؟
نمونه‌ها مستقل نیستند. فولدهای تصادفی آینده را به داده‌های آموزشی نشت می‌دهند.
چند مرحله تفاضل‌گیری؟
اکثر سری‌های واقعی حداکثر به دو مرحله نیاز دارند.
چند تأخیر؟
از ACF استفاده کنید. قله‌ها در تأخیر 12 در داده‌های ماهانه نشان‌دهنده فصلی‌بودن سالانه است.
آیا مدل‌های درختی نیاز به تفاضل‌گیری دارند؟
مدل‌های درختی روندها را مدیریت می‌کنند. مدل‌های خطی به مانایی نیاز دارند.
درآمد چوله؟
پیش‌بینی در فضای لگاریتمی و سپس تبدیل معکوس با تابع نمایی.
اول کدام خط مبنا؟
آخرین مقدار، سپس ساده فصلی، و بعد میانگین متحرک.