← Makalelere geri dön
August 20, 2026
5 dakikalık okuma

Olasılık Tahminlerinin Puanlanması: CRPS, PIT Kalibrasyonu ve DeepAR

Olasılık Tahminlerinin Puanlanması: CRPS, PIT Kalibrasyonu ve DeepAR
#forecasting
#probabilistic
#quantile-regression
#DeepAR
#uncertainty

Bu blog, noktalar yerine dağılımları tahmin etme konusunu zaten ele almış ve aralığı elde ettiğinizde bu aralıkla ne yapacağınızı zaten çözmüştür: riske duyarlı konum boyutlandırması için uyumlu tahmin dağıtımdan bağımsız aralıkları ve bunları tüketen boyutlandırma kuralını türetir ve Geçici Füzyon Transformatörü makalesi, çoklu niceliksel çıktı katmanı. Her ikisinin de kapsamadığı kısım, bunlardan herhangi birine güvenmeye değer olup olmadığına karar veren kısımdır: tahminsel bir dağılımı nasıl puanladığınız ve belirtilen belirsizliğin dürüst olup olmadığını nasıl kontrol ettiğiniz.

Bu makalenin konusu budur. Özellikle üç şey:

  1. CRPS — olasılıksal tahminler için uygun puanlama kuralı ve bunun, TFT makalesinde zaten rapor edilen tilt kaybıyla kesin ilişkisi.
  2. PIT histogramı — bir modelin yalnızca yanlış kalibre edilip edilmediğini değil nasıl kalibre edildiğini de okuyan bir kalibrasyon teşhisi.
  3. DeepAR — bu blogda yalnızca bir kıyaslama dipnotu olarak görünen ve hiçbir zaman açıklanmayan otoregresif örnekleme modeli ailesi.

Önce tek parça çerçeveleme, çünkü hangi makineye ihtiyacınız olduğunu belirler. Bir nokta tahmini rejime göre farklı şekilde başarısızlığa uğrar: düşük volatilite eğiliminde koşullu dağılım dar ve neredeyse simetriktir ve nokta tahmini iyi bir özettir; planlanmış bir olaydan önce iki modludur ve koşullu ortalama, tam olarak fiyatın en az düşme ihtimalinin olduğu yerde bulunur; krizde sol kuyruk hakim olur ve ortalama, olumsuzluğu fena halde eksik gösterir. Üç yol tam dağıtımı kurtarır - parametrik (varsayılan bir ailenin parametrelerini tahmin eder: hızlı, yanlış spesifikasyon riski), kantil tabanlı (sabit bir ızgarayı tahmin eder: varsayımsız, ayrık) ve örnek tabanlı (otoregresif örneklemeden, bırakmadan veya topluluklardan Monte Carlo yolları: esnek, pahalı). Son ikisi finansta hakimdir çünkü dağıtım değişiklikleri bu rejimler arasında şekillenmektedir.

Kantil Tahminler, Kısaca

Quantile tahmin hayranı

Tilt kaybı ve somut bir yüzdelik ızgara, TFT niceliksel çıktı katmanında zaten verilmiştir, bu nedenle formülü yeniden ifade etmeyeceğim. İçselleştirmeye değer tek şey asimetrisidir: τ=0.5\tau = 0.5 Aşırı ve düşük tahminin maliyeti aynıdır ve kayıp MAE'ye düşer, ancak τ=0.95\tau = 0.95 tahminin altında kalanlar cezalandırılır 19×19\times aşırı tahminden daha fazlası. Bu oran τ/(1τ)\tau/(1-\tau) mekanizmadır — uygun değeri, gözlemlerin yalnızca %5'inin aşması gereken bir düzeye kadar çeken şeydir.

Yayınlanan makalenin bahsetmediği pratik kırışıklık kantil geçiştir: yüzdelik kayıptaki hiçbir şey bunu engellemez q^0.25>q^0.75\hat{q}_{0.25} > \hat{q}_{0.75}. Yeterli veri ve paylaşılan bir omurga ile bu nadirdir, ancak ince örneklerde aşırı yüzdelik dilimlerde meydana gelir ve herhangi bir aşağı akış CRPS'sini veya kapsama hesaplamasını sessizce bozar. Ucuz düzeltme, tahmin edilen nicelik vektörünün post-hoc bir türüdür; prensipli olanı monotonik bir çıktı parametreleştirmesidir (tahmin qminq_{\min} artı negatif olmayan artışlar).

Bir tahmin çerçevesi benimsemeden niceliksel çıktılar istediğinizde kullanışlı, sıfırdan minimal bir uygulama:

import torch
import torch.nn as nn

class QuantileRegressionNet(nn.Module):
    """Multi-quantile forecasting network for financial returns."""

    def __init__(self, input_dim: int, hidden_dim: int = 128,
                 quantiles: list[float] = [0.01, 0.05, 0.1, 0.25, 0.5, 0.75, 0.9, 0.95, 0.99]):
        super().__init__()
        self.quantiles = quantiles
        self.backbone = nn.Sequential(
            nn.Linear(input_dim, hidden_dim), nn.ReLU(), nn.Dropout(0.2),
            nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Dropout(0.2),
        )
        self.heads = nn.ModuleList([nn.Linear(hidden_dim, 1) for _ in quantiles])

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        h = self.backbone(x)
        out = torch.cat([head(h) for head in self.heads], dim=-1)
        return torch.sort(out, dim=-1).values


def pinball_loss(predictions: torch.Tensor, targets: torch.Tensor,
                 quantiles: list[float]) -> torch.Tensor:
    """predictions: (batch, n_quantiles); targets: (batch, 1)."""
    errors = targets - predictions
    tau = torch.tensor(quantiles, device=predictions.device).unsqueeze(0)
    return torch.max(tau * errors, (tau - 1) * errors).mean()

Aralık genişliği, konum boyutuyla eşleşir ve bu haritalamayı, kenar oranı ticareti yapılmayan filtre dahil olmak üzere, riske duyarlı konum boyutlandırma için uyumlu tahmin; the 1/σ1/\sigma Volatilite hedeflemenin eşdeğerliği, GARCH tahminleriyle volatilite hedefleme bölümünden elde edilir.

DeepAR: Otoregresif Olasılık Tahmini

Otoregresif olasılık akışı

DeepAR (Salinas ve diğerleri, 2020) örnek tabanlı rotayı izliyor. Yüzdelik değerleri doğrudan tahmin etmek yerine, her adımdaki bir olasılığı parametreleştirmek için otoregresif bir RNN kullanır ve ardından bu olasılığı ileri doğru yuvarlayarak tam tahmine dayalı dağılımlar çizer.

Mimarlık. Her adımda tt ağ önceki gözlemi tüketir zt1z_{t-1} (seri başına bir faktörle ölçeklendirilmiş), ortak değişkenler xt\mathbf{x}_tve isteğe bağlı statik özellikler. Bir LSTM şu durumu taşır:

ht=LSTM(ht1,[zt1,xt])\mathbf{h}_t = \text{LSTM}(\mathbf{h}_{t-1}, [z_{t-1}, \mathbf{x}_t])

Yoğun bir kafa haritası ht\mathbf{h}_t olasılık parametrelerine θt=MLP(ht)\theta_t = \text{MLP}(\mathbf{h}_t)(μt,σt)(\mu_t, \sigma_t) Gaussian için, (μt,σt,νt)(\mu_t, \sigma_t, \nu_t) Öğrenci-t için. Eğitim maksimuma çıkar itlogp(zi,tθi,t)\sum_i \sum_t \log p(z_{i,t} \mid \theta_{i,t}) tüm serilerde. Çıkarımda örnek alırsınız p(θt)p(\cdot \mid \theta_t), örneği bir sonraki giriş olarak geri besleyin ve tekrarlayın SS alınacak zamanlar SS Yörüngeler.

Ticaret için iki sonuç önemlidir. Olasılık bir modelleme seçimidir, dolayısıyla kalın kuyruklar umduğunuz bir şey değil, seçtiğiniz bir şeydir — Ağır kuyruklar için Öğrenci-t veya Gauss karışımı kwkN(zt;μk(ht),σk2(ht))\sum_k w_k \mathcal{N}(z_t; \mu_k(\mathbf{h}_t), \sigma_k^2(\mathbf{h}_t)) iki modlu olay davranışı için. Çok adımlı tahminler tutarlıdır: Her örnek yol, seri korelasyonu koruyan makul bir yörüngedir; bu, bir adımdan daha uzun herhangi bir ufuk için ihtiyacınız olan şeydir. (Üçüncü alışılagelmiş satış noktası: birçok serideki küresel tek model, NN varlık başına modeller — TFT makalesinde ileri sürülen veri verimliliği argümanının aynısıdır; seri başına ölçeklendirme ve statik ortak değişkenler burada statik kodlayıcıların rolünü oynar.)

GluonTS ile DeepAR

import pandas as pd
from gluonts.dataset.pandas import PandasDataset
from gluonts.torch.model.deepar import DeepAREstimator
from gluonts.torch.distributions import StudentTOutput
from gluonts.evaluation import make_evaluation_predictions, Evaluator


def prepare_crypto_dataset(returns_df: pd.DataFrame, freq: str = "h"):
    """Wide return frame (index=datetime, columns=assets) -> GluonTS dataset.

    from_long_dataframe wants LONG format: one row per (timestamp, item_id)
    with the target in a column. Passing a DataFrame of dicts does not work.
    """
    long_df = (
        returns_df.stack()
        .rename("target")
        .rename_axis(index=["timestamp", "item_id"])
        .reset_index()
        .dropna(subset=["target"])
    )
    return PandasDataset.from_long_dataframe(
        long_df, target="target", item_id="item_id",
        timestamp="timestamp", freq=freq,
    )


estimator = DeepAREstimator(
    prediction_length=24,    # 24 hours ahead
    context_length=168,      # one week of hourly data
    freq="h",
    num_layers=2,
    hidden_size=64,
    dropout_rate=0.1,
    lr=1e-3,
    batch_size=64,
    trainer_kwargs={"max_epochs": 50},
    distr_output=StudentTOutput(),
)

predictor = estimator.train(training_data=train_dataset)

forecast_it, ts_it = make_evaluation_predictions(
    dataset=test_dataset, predictor=predictor, num_samples=500,
)
forecasts, actuals = list(forecast_it), list(ts_it)

evaluator = Evaluator(quantiles=[0.05, 0.25, 0.5, 0.75, 0.95])
agg_metrics, item_metrics = evaluator(actuals, forecasts)
print(f"mean_wQuantileLoss: {agg_metrics['mean_wQuantileLoss']:.4f}")

num_samples Monte Carlo yol sayısını kontrol eder. Canlı kullanım için genellikle 100-200 yeterlidir; Çevrimdışı değerlendirme için 500-1000 kullanın, çünkü çok az örnekten tahmin edilen CRPS düşük taraflıdır.

Tahmine Dayalı Dağıtıma Giden Diğer Yollar

Üç alternatif bilmeye değer ancak kendi bölümlerine ihtiyaç duymuyorlar. MC Bırakma (Gal ve Ghahramani, 2016) çıkarımda bırakmayı aktif tutar ve ortalamayı ve varyansı alır SS ileri paslar; bu, gizlenmiş yaklaşık varyasyonel çıkarımdır ve belirsizliği önceden eğittiğiniz bir modele bağlamanın en hızlı yoludur. Derin topluluklar (Lakshminarayanan ve diğerleri, 2017) treni MM farklı tohumlardan kopyalar ve tahmine dayalı dağılımı bir karışım olarak ele alır - kıyaslamalarda sürekli olarak güçlü, M×M\times gecikmeye duyarlı ufuklar için hariç tutulan ancak 4 saat veya günlük için geçerli olmayan maliyet. Akışları normalleştirme (Rasul ve diğerleri, 2021), parametrik bir aile seçmeden çok modluluğu ve asimetriyi yakalayan, basit bir temel yoğunluktan keyfi bir hedefe kadar ters çevrilebilir bir harita öğrenir. Üçü de örnek üretiyor, dolayısıyla bir sonraki bölümdeki her şey değişmeden onlar için geçerli.

CRPS: Tahmine Dayalı Bir Dağılım için Doğru Metrik

Dağıtımsal puanlama geometrisi

MSE ve MAE puan tahminleri. Size bir dağıtımın iyi olup olmadığını söyleyemezler çünkü onun yalnızca bir özetine bakarlar. Standart değişim Sürekli Sıralanmış Olasılık Puanı'dır ve bu makaledeki en yararlı tek şeydir.

CRPS, tahmin edilen CDF ile dejenere CDF arasındaki tüm kütleyi gerçekte olana veren entegre kare mesafedir:

CRPS(F,y)=(F(z)1[yz])2dz\text{CRPS}(F, y) = \int_{-\infty}^{\infty} \left(F(z) - \mathbb{1}[y \leq z]\right)^2 dz

Üç özelliği ona yerini kazandırıyor:

  • Bu uygun bir puanlama kuralıdır (Gneiting ve Raftery, 2007): yalnızca tahmin edilen dağılım gerçek olana eşit olduğunda beklenti içinde en aza indirilir. Ne kasıtlı aşırı güven ne de yapay olarak geniş bir dağılımla riskten korunma puanınızı artırmaz. Medyan üzerindeki MSE'nin böyle bir özelliği yoktur, bu nedenle CRPS isteğe bağlı değildir.
  • MAE'yi genelleştirir. Dejenere bir nokta tahmini için mutlak hataya dönüşür, dolayısıyla CRPS hedefin birimlerinde yaşar - saatlik günlük getirilerini tahmin ederek, 0,004'lük bir CRPS, akıl sağlığını kontrol edemeyeceğiniz birimsiz bir sayı yerine, 40 bps ortalama mutlak hatayla doğrudan karşılaştırılabilir.
  • Kalibrasyona bağlı olarak keskinliği ödüllendirir. Eşit derecede kalibre edilmiş iki tahmin arasında daha dar puanlar daha iyi olur. CRPS'nin tek başına yetersiz olmasının nedeni de budur: Kötü bir puan, iki koşuldan hangisinin başarısız olduğunu ve bir sonraki bölümün bunun için olduğunu söylemez.

Nicelik Kaybına Giden Köprü

Bu, blogun geri kalanında eksik olan bağlantıdır. Bir nicelik ızgarası verildiğinde T\mathcal{T} Tam bir CDF yerine CRPS, tilt kaybıyla yaklaşık olarak hesaplanır:

CRPS2TτTLτ(y,q^τ)\text{CRPS} \approx \frac{2}{|\mathcal{T}|} \sum_{\tau \in \mathcal{T}} \mathcal{L}_\tau(y, \hat{q}_\tau)

Bunu tam anlamıyla okuyun: TFT makalesinde bildirilen "nicelik kayıp" ve burada tartışılan CRPS, 2 faktörüne kadar aynı miktardır ve ızgara yoğunlaştıkça yaklaşım daralır. Bunlar birbiriyle rekabet eden metrikler değildir ve her ikisini de raporlamanın bir anlamı yoktur.

Bir birim uyarı, çünkü ısırır. GluonTS'ler mean_wQuantileLoss Mutlak hedef değerlerin toplamı ile normalize edilen aynı ortalama tilt kaybıdır, bu da onu boyutsuz ve farklı ölçekteki varlıklar arasında karşılaştırılabilir kılar. Uygun CRPS normalleştirilmez ve dönüş birimlerinde kalır. Yazdırma mean_wQuantileLoss "CRPS" yazan bir etiketin altında - bu makalenin taslak versiyonu tam olarak bunu yaptı ve aynı ölçekte olmayan iki sayıyı karşılaştırmanın kolay bir yoludur.

Örneklerden CRPS

Monte Carlo örnekleriyle {y(s)}s=1S\{y^{(s)}\}_{s=1}^{S} (DeepAR, topluluklar, akışlar), enerji formunu kullanın:

CRPS(F,y)=1Ss=1Sy(s)y12S2s=1Ss=1Sy(s)y(s)\text{CRPS}(F, y) = \frac{1}{S} \sum_{s=1}^{S} |y^{(s)} - y| - \frac{1}{2S^2} \sum_{s=1}^{S} \sum_{s'=1}^{S} |y^{(s)} - y^{(s')}|

İlk terim doğruluğu ödüllendirir, ikincisi ise aşırı yayılımı cezalandırır. Safça yazılan ikinci terim O(S2)O(S^2) ve binlerce tahmin yaptığınızda darboğaz haline gelir. Sıralama ilk önce onu daraltır: artan sıradaki istatistikler için y(1)y(S)y_{(1)} \le \dots \le y_{(S)}, çift toplam eşittir 2k(2kS1)y(k)2\sum_k (2k - S - 1)\, y_{(k)}yani her şey şu şekilde O(SlogS)O(S \log S) türün hakimiyetinde.

import numpy as np

def crps_empirical(samples: np.ndarray, observation: float) -> float:
    """CRPS from Monte Carlo samples, O(n log n) via order statistics."""
    n = len(samples)
    mae = np.mean(np.abs(samples - observation))
    x = np.sort(samples)
    k = np.arange(1, n + 1)
    dispersion = np.sum((2 * k - n - 1) * x) / n**2
    return mae - dispersion


def crps_quantile(quantile_predictions: np.ndarray,
                  quantile_levels: np.ndarray,
                  observation: float) -> float:
    """CRPS approximation from a quantile grid (2x mean pinball loss)."""
    errors = observation - quantile_predictions
    pinball = np.where(errors >= 0,
                       quantile_levels * errors,
                       (quantile_levels - 1) * errors)
    return 2.0 * np.mean(pinball)

Her iki form da aynı tahmine dayalı dağılım konusunda yakından anlaşmalıdır; eğer yapmazlarsa, niceliksel geçişten veya çok az örnekten şüphelenin. Üretimde, properscoring.crps_ensemble(observation, samples) iyi test edilmiş bir giriştir.

Kalibrasyon: Belirtilen Belirsizlik Dürüst mü?

Tahmin kalibrasyon hatları

İyi bir CRPS, aralıkların iddia ettikleri anlama geldiğini garanti etmez. Nominal %90 aralığı, sonuçların %70'ini yakalayan bir model kendine aşırı güvenir ve aralık genişliğini okuyan bir boyutlandırma kuralında, sizi tam olarak olmaması gerektiği zaman yükseltir. TFT makalesi uyarıyı belirtiyor ve düzeltme olarak uyumlu tahmini öngörüyor; Aşağıda, arızayı gerçekte nasıl tespit edip teşhis ettiğiniz anlatılmaktadır.

PIT Histogramı

Her gözlem için yty_t, bu adımın tahmin edilen CDF'sine göre niceliğini hesaplayın:

ut=F^t(yt)u_t = \hat{F}_t(y_t)

Model kalibre edilmişse, {ut}\{u_t\} tekdüze [0,1][0,1]. Teşhis gücü, sapmanın şeklinin arıza modunu adlandırmasıdır:

  • U şeklinde: aşırı özgüvenli — çok fazla kütle kuyruklara iniyor, dağılım çok dar.
  • Kambur şeklinde: kendine yeterince güvenmiyor — gözlemler merkeze yakın kümeleniyor, dağılım çok geniş.
  • Sola çarpık: model sistematik olarak aşırı tahminlerde bulunuyor.
  • Sağa çarpık: model sistematik olarak eksik tahmin yapıyor.

Olasılık integral dönüşümünü de kullanan ortak risk için bağ modelleri ile karışıklığı önlemek için bir not: burada bir marjinal dönüşüm var, GARCH-EVT marjinallerini sözde tekdüze gözlemlere dönüştüren ve böylece onlara bir kopula takılabilen bir ön işleme adımı var. Burada dönüşüm, örneklem dışı tahminlere uygulanır ve tekdüzelik, üretilen bir girdi değil, test edilen sonuçtur. Aynı matematik, çıkarımın zıt yönü.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kstest

def pit_calibration_check(forecasts, actuals, n_bins=20):
    """PIT histogram + KS test against uniform.

    forecasts: list of SampleForecast objects (GluonTS)
    """
    pit_values = []
    for forecast, actual in zip(forecasts, actuals):
        samples = forecast.samples          # (n_samples, prediction_length)
        h = forecast.prediction_length
        for t in range(h):
            obs = actual.values[-h + t]
            pit_values.append(np.mean(samples[:, t] <= obs))

    pit_values = np.array(pit_values)
    ks_stat, p_value = kstest(pit_values, "uniform")

    fig, ax = plt.subplots(figsize=(8, 4))
    ax.hist(pit_values, bins=n_bins, density=True, alpha=0.7, edgecolor="black")
    ax.axhline(y=1.0, color="red", linestyle="--", label="Perfect calibration")
    ax.set_xlabel("PIT value")
    ax.set_ylabel("Density")
    ax.set_title(f"PIT Histogram (KS={ks_stat:.3f}, p={p_value:.3f})")
    ax.legend()
    plt.tight_layout()
    return pit_values, ks_stat, p_value

KS testinde iki uyarı. Bağımsız PIT değerlerini ve örtüşen çok ufuklu tahminlerin güçlü bir şekilde otokorelasyona sahip olduğunu varsayar; dolayısıyla p değerini kaba bir işaret olarak ve histogram şeklini gerçek kanıt olarak ele alın. Ve yeterli gözlemlerle test, önemli olamayacak kadar küçük yanlış kalibrasyonlar için tekdüzeliği reddeder; etki büyüklüğü bir karara yön vermesi gereken şeydir.

Kapsam Kontrolü

Daha kaba ancak daha doğrudan uygulanabilir bir teşhis: α\alpha% aralıklar şunları içerir α\alphasonuçların yüzdesi?

import numpy as np
import pandas as pd

def coverage_table(forecasts, actuals, levels=(0.50, 0.80, 0.90, 0.95)):
    """Empirical coverage at multiple nominal levels."""
    results = {}
    for level in levels:
        lower_q = (1 - level) / 2
        upper_q = 1 - lower_q
        covered = total = 0
        for forecast, actual in zip(forecasts, actuals):
            samples = forecast.samples
            h = forecast.prediction_length
            for t in range(h):
                obs = actual.values[-h + t]
                lo = np.quantile(samples[:, t], lower_q)
                hi = np.quantile(samples[:, t], upper_q)
                covered += int(lo <= obs <= hi)
                total += 1
        empirical = covered / total
        results[f"{int(level*100)}% interval"] = {
            "nominal": level, "empirical": empirical,
            "gap": empirical - level,
        }
    return pd.DataFrame(results).T

Temel kural: yüzde 2 puanın altındaki boşluklar, tipik numune boyutlarında gürültüdür ve 3-5 puanın üzerindeki boşluklar, konum boyutlandırmada ortaya çıkacak gerçek bir kalibrasyon sorunudur. Bunu havuza değil, ufuk başına çalıştırın; ufuk uzadıkça kapsama alanı neredeyse her zaman azalır ve havuzlama onu gizler.

Kalibrasyon Başarısız Olduğunda

Artan garanti sırasına göre üç standart onarım. Sıcaklık ölçeklendirme tahmin edilen ölçek parametresini öğrenilen değere böler TT uzatılmış veriler üzerine kurulu - önemsiz derecede ucuz bir parametre, tekdüze aşırı/yetersiz güveni düzeltir, ancak şekle bağlı değildir. İzotonik yeniden kalibrasyon tahmin edilen nicelik düzeylerini monoton olarak gözlemlenen frekanslarla eşler; bu, şekil bozulmasını ele alır ancak oldukça büyük bir kalibrasyon seti gerektirir. Uyumlu tahmin her modeli kapsar ve sonlu örnek kapsamı garantileri sunar; tam bölünmüş-konformal algoritma, tam sıra-istatistik sıralaması ve tek satırlık bir özetin davet ettiği enterpolasyon ve sıkıştırma tuzaklarının tümü ticaret için uyumlu tahmin içindedir.

Pratik Hususlar

Olasılıksal tahmin hattı

Durağan olmama. Volatilite rejimleri değiştikçe kalibrasyon da kayar, dolayısıyla sabit bir kalibrasyon seti bozulur. Tam olarak bunun için tasarlanan mekanizma, çevrimiçi bir yanlış keşif seviyesini güncelleyen ve rakip diziler altında bile uzun vadeli bir kapsama garantisi taşıyan Uyarlanabilir Uyumlu Çıkarım'dır - ticaret için uyumlu tahmin konusunun ACI bölümüne bakın.

Hesaplama maliyeti. 500 örnek yoldaki DeepAR'ın maliyeti kabaca 500×500\times tek bir ileri pas. Gün içi çalışmalar için niceliksel regresyonu (tüm nicelikler tek geçişte) veya parametrik bir başlığı (tahmin) tercih edin. μ,σ\mu, \sigma bir kere); 4 saatlik ve günlük ufuklar için otoregresif örneklemeyi ayırın.

Rejim değişiklikleri. Tahminciyi bir rejim dedektörüyle eşleştirin ve rejim başına kalibrasyon parametrelerini koruyun — HMM ile rejim tespiti üzerinde çalışılan uygulamaya ve arka teste sahiptir.

Çok değişkenli tahminler. Varlık başına marjinal dağılımlar portföy riski için yeterli değildir; Önemli olan ortak kuyruktur ve ortak risk için kopula modelleri, bağımsızlık varsayımlarının bunu ne kadar eksik gösterdiğini ölçüyor.

Aşağı yönlü tüketiciler. VaR ve beklenen açık, doğrudan niceliksel ve koşullu bir kuyruk ortalaması olarak örneğe dayalı bir tahminden çıkar. Tanımlar ve Monte Carlo tarifi ortak risk için copula modelleri bölümünde yer almaktadır. Kelly boyutlandırma, bedava gelmeyen tek şeydir: Bir tahmin aralığından bir Kelly kesri elde etmek, o aralık içindeki dağılım hakkında ekstra bir varsayım gerektirir ve uyumlu makale, bir aralık oranının bu aralıkta sabitlenmesine açıkça karşı çıkar. ff^*. Kesirin gerçekte ne gerektirdiğini öğrenmek için stratejiler için Kelly kriterine bakın.

Sonuç

Kalibre edilmiş tahmine dayalı dağıtım

Olasılığa dayalı bir tahmin için değerlendirme yığını kısadır ve tartışılamaz: Puan için CRPS, çünkü uygundur ve hedefinizin birimlerinde yer alır; Tanı için PIT histogramı çünkü yalnızca birini işaretlemek yerine arıza modunu adlandırır; Karar için ufuk başına kapsam, çünkü bu, konum boyutuyla eşleşen sayıdır. "Nitelik kayıp" olarak bildirilen herhangi bir şey, 2 faktörüne kadar CRPS'dir, dolayısıyla burada iki değil, tek bir ölçüm vardır.

İşin rahatsız edici kısmı, tüm bunların bir modelin umduğunuzdan daha kötü olduğunu ortaya çıkarmaya yönelik bir mekanizma olmasıdır. Önemli olan bu. Bilmediğinde aralıklarını dürüstçe genişleten bir model, kendinden emin bir şekilde dar kalan modelden kesinlikle daha faydalıdır ve bunları birbirinden ayırmanın tek yolu, onları doğru şekilde puanlamaktır.


Referanslar

  • Salinas, D., Flunkert, V., Gasthaus, J. ve Januschowski, T. (2020). "DeepAR: Otoregresif yinelenen ağlarla olasılıksal tahmin." Uluslararası Tahmin Dergisi, 36(3), 1181-1191.
  • Koenker, R. ve Bassett, G. (1978). "Regresyon Nicelikleri." Econometrica, 46(1), 33-50.
  • Gneiting, T. & Raftery, A.E. (2007). "Kesinlikle Uygun Puanlama Kuralları, Tahmin ve Tahmin." Amerikan İstatistik Birliği Dergisi, 102(477), 359-378.
  • Gneiting, T., Balabdaoui, F. ve Raftery, A.E. (2007). "Olasılıksal tahminler, kalibrasyon ve keskinlik." Kraliyet İstatistik Topluluğu Dergisi: Seri B, 69(2), 243-268.
  • Gal, Y. ve Ghahramani, Z. (2016). "Bayes Yaklaşımı Olarak Bırakma: Derin Öğrenmede Model Belirsizliğini Temsil Etmek." ICML.
  • Lakshminarayanan, B., Pritzel, A. ve Blundell, C. (2017). "Derin Topluluklar Kullanılarak Basit ve Ölçeklenebilir Tahmine Dayalı Belirsizlik Tahmini." NeurIPS.
  • Rasul, K., Sheikh, A.-S., Schuster, I., Bergmann, U. ve Vollgraf, R. (2021). "Koşullandırılmış Normalleştirme Akışları Yoluyla Çok Değişkenli Olasılıklı Zaman Serisi Tahmini." ICLR.
  • GluonTS: Python'da Olasılıksal Zaman Serisi Modellemesi. https://ts.gluon.ai
Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

Yazarlar

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.