← กลับไปยังบทความ
July 31, 2026
อ่าน 5 นาที

เอพิสเทมิกกับอาเลโทอิก: วัดสิ่งที่โมเดลผลตอบแทนไม่รู้

เอพิสเทมิกกับอาเลโทอิก: วัดสิ่งที่โมเดลผลตอบแทนไม่รู้
#bayesian
#uncertainty
#neural-network
#risk
#position-sizing

ทุกกฎการกำหนดขนาดตำแหน่งในบล็อกนี้ย่อความไม่แน่นอนให้เป็นสเกลาร์เดียว Kelly หารด้วย variance Conformal prediction หารด้วยความกว้างของช่วง Volatility targeting หารด้วยค่าพยากรณ์ GARCH ทั้งสามวิธีถูกต้อง และทั้งสามทิ้งความแตกต่างที่สำคัญต่อการเทรด: ความแตกต่างระหว่างตลาดที่มีสัญญาณรบกวนกับโมเดลที่ไม่รู้

ความเสี่ยงเหล่านั้นไม่เหมือนกัน สัญญาณรบกวนของตลาดถูกกำหนดราคา — มันคือสิ่งที่คุณได้รับค่าตอบแทนในการแบกรอ ความไม่รู้ของโมเดลไม่ถูกกำหนดราคา ไม่ได้รับค่าตอบแทน และเป็นสถานะที่การประเมิน edge ของคุณน่าเชื่อถือน้อยที่สุด กฎการจัดขนาดที่ลงโทษทั้งสองอย่างเท่ากัน กำลังทิ้งผลประโยชน์ไว้บนโต๊ะ

โพสต์นี้เกี่ยวกับการทำให้การแยกส่วนนี้วัดได้ อย่างเฉพาะเจาะจง:

σeff2=σalea2+λσepi2,λ>1\sigma^2_{\text{eff}} = \sigma^2_{\text{alea}} + \lambda \cdot \sigma^2_{\text{epi}}, \qquad \lambda > 1

ใส่สิ่งนี้ในตัวส่วน Kelly แทน total variance ส่วนที่เหลือของบทความคือวิธีประมาณสองส่วนประกอบ (MC Dropout, deep ensembles) และการแยกส่วนมีหน้าตาอย่างไรบนข้อมูลจริง

ทฤษฎี: ความไม่แน่นอนสองอย่างต้องการการตอบสนองสองอย่าง

เอพิสเทมิก อาเลโทอิก
แหล่งที่มา ข้อมูลจำกัด / โมเดล สัญญาณรบกวนโดยกำเนิดในข้อมูล
ลดลงได้หรือไม่? ใช่ (ข้อมูลมากขึ้นช่วย) ไม่
การดำเนินการเทรด ลดขนาดตำแหน่งหรืองดระวัง ขยาย stop, ลด leverage
สัญญาณ "ฉันไม่เคยเห็นระบอบนี้" "ตลาดนี้มีสัญญาณรบกวนมากตอนนี้"

ความไม่สมดุลในแถว "การดำเนินการเทรด" คืออาร์กิวเมนต์ทั้งหมด ความแปรปรวนอาเลโทอิกสูงคือที่รู้แต่ไม่แน่ใจ: คุณสามารถจัดขนาดตำแหน่งสำหรับมัน ใช้ hedging และคาดหวัง premium ความเสี่ยงสำหรับการถือมัน ความแปรปรวนเอพิสเทมิกสูงคือที่ไม่รู้และไม่แน่ใจ: โมเดลกำลัง extrapolate การประเมินค่าเฉลี่ย μ\mu ของมันน่าสงสัยเท่ากับการประเมิน variance และไม่มี premium แนบอยู่กับการผิดพลาดเกี่ยวกับพารามิเตอร์ของตัวเอง

โมเดลที่สับสนสองอย่างนี้จะเทรดมากเกินไปในระบอบที่ไม่คุ้นเคย (ละเว้นความไม่แน่นอนเอพิสเทมิก) หรือเทรดน้อยเกินไปในระบอบที่คุ้นเคยแต่มีสัญญาณรบกวน (ลงโทษความไม่แน่นอนอาเลโทอิกมากเกินไป) Kelly มาตรฐานที่ใช้กับ σtotal2\sigma^2_{\text{total}} ทำทั้งสองอย่างขึ้นอยู่กับว่าส่วนประกอบใดเป็นผู้เด่น

การแยกส่วน

ความไม่แน่นอนเอพิสเทมิกมาจากความไม่แน่นอนเกี่ยวกับพารามิเตอร์โมเดล θ\theta แทนที่จะเป็น θ\theta^* เดียว (เหมือนใน maximum likelihood) เราดูแล distribution p(θD)p(\theta \mid \mathcal{D}) และ integrate:

p(yx,D)=p(yx,θ)p(θD)dθp(y \mid x, \mathcal{D}) = \int p(y \mid x, \theta)\, p(\theta \mid \mathcal{D})\, d\theta

การกระจายที่เกิดจากการ integrate ผ่าน θ\theta คือเอพิสเทมิก มันจะลดลงเมื่อ D\mathcal{D} เติบโตเพื่อครอบคลุม input region

ความไม่แน่นอนอาเลโทอิกคือสัญญาณรบกวนเงื่อนไขของกระบวนการสร้างข้อมูล ใน neural network มันถูกจำลองโดย output head ที่สองที่ emit variance ที่ขึ้นกับ input:

p(yx,θ)=N(y;μθ(x),σθ2(x))p(y \mid x, \theta) = \mathcal{N}\bigl(y;\, \mu_\theta(x),\, \sigma^2_\theta(x)\bigr)

heteroscedastic head นี้กำลังประมาณสิ่งเดียวกับที่ GARCH ประมาณแบบดั้งเดิม — conditional variance ที่ขึ้นกับสถานะซึ่งสูงในตอนกลางคืนและต่ำในชั่วโมง peak หากคุณต้องการ empirics ของสิ่งนี้บน crypto GARCH(1,1) สำหรับความผันผวนของ crypto ครอบคลุมอย่างเหมาะสม รวมถึงเหตุผลว่าทำไม conditional forecast แบบ live (ไม่ใช่ unconditional sample variance) ควรอยู่ในตัวส่วน Kelly NN head เป็นเพียง estimator อีกตัวของปริมาณเดียวกัน ที่ fit ร่วมกับ mean

สิ่งที่ GARCH ไม่สามารถให้คุณคือ term อื่น นั่นคือสิ่งที่ส่วนที่เหลือของโพสต์นี้มีไว้เพื่อ

ตำแหน่งสัมพัทธ์กับสิ่งที่เผยแพร่แล้ว

โพสต์ก่อนหน้าสองโพสต์ครอบคลุมพื้นที่ใกล้เคียงและควรอ่านก่อน เพราะโพสต์นี้ไม่ได้ซ้ำพวกมันอย่างจงใจ:

การแลกเปลี่ยนชัดเจน Conformal ให้คุณการรับรองแต่ตัวเลขเดียว — ความกว้างของ interval ไม่สามารถแยกส่วนได้ ดังนั้นมันไม่สามารถบอก ทำไม มันถึงกว้าง เมธอด Bayesian ให้คุณการแยกส่วนแต่ไม่มีการรับรอง — intervals ของ MC Dropout ดีเท่ากับ approximate posterior บทความนี้เกี่ยวกับการซื้อการแยกส่วน คุณน่าจะเก็บ conformal ไว้ด้านบนเพื่อ coverage

วิธีที่ 1: Variational Inference (Bayes by Backprop)

Posterior น้ำหนัก Bayesian หนาแน่นถูกบีบอัดเป็น variational approximation ที่จัดการได้ก่อนที่จะสร้าง distribution การพยากรณ์ผลตอบแทน

Bayesian neural network วาง prior p(θ)p(\theta) เหนือน้ำหนักและค้นหา posterior p(θD)p(Dθ)p(θ)p(\theta \mid \mathcal{D}) \propto p(\mathcal{D} \mid \theta) p(\theta) normalizer ต้องการ integrate ผ่านทุกการกำหนดค่าน้ำหนักซึ่งเป็นสิ่งที่ทำได้ยากสำหรับสิ่งใดๆ ที่มีพารามิเตอร์มากกว่าไม่กี่ตัว

Variational inference แทนที่ posterior ที่ทำได้ยากด้วย family ที่จัดการได้ qϕ(θ)q_\phi(\theta) — โดยทั่วไปคือ factorized Gaussian qϕ(θ)=jN(θj;μj,σj2)q_\phi(\theta) = \prod_j \mathcal{N}(\theta_j; \mu_j, \sigma_j^2) — และ minimize

KL(qϕ(θ)p(θD))\text{KL}\bigl(q_\phi(\theta) \,\|\, p(\theta \mid \mathcal{D})\bigr)

เนื่องจากนี่เกี่ยวข้องกับ posterior ที่ไม่รู้ เราจึง maximize Evidence Lower Bound แทน:

L(ϕ)=Eqϕ(θ)[logp(Dθ)]KL(qϕ(θ)p(θ))\mathcal{L}(\phi) = \mathbb{E}_{q_\phi(\theta)}\bigl[\log p(\mathcal{D} \mid \theta)\bigr] - \text{KL}\bigl(q_\phi(\theta) \,\|\, p(\theta)\bigr)

term แรกผลัก qϕq_\phi ไปยังการอธิบายข้อมูล term ที่สองเก็บมันไว้ใกล้ prior Bayes by Backprop (Blundell et al., 2015) ทำให้สิ่งนี้ differentiable ด้วย reparameterization trick: sample ϵN(0,I)\epsilon \sim \mathcal{N}(0, I), set θ=μ+σϵ\theta = \mu + \sigma \odot \epsilon

ในทางปฏิบัติ VI เพิ่มจำนวนพารามิเตอร์เป็นสองเท่า เพิ่ม gradient variance (แต่ละ forward pass ใช้น้ำหนักที่ต่างกัน) และสมมติฐาน mean-field ละเลยความสัมพันธ์ของน้ำหนักซึ่งมัก underestimate ความไม่แน่นอนเอพิสเทมิก สำหรับ trading stack ที่คุณมี deterministic model ที่ผ่านการเรียนรู้แล้ว เมธอดราคาถูกสองวิธีด้านล่างมักเป็นจุดเริ่มต้นที่ดีกว่า

วิธีที่ 2: MC Dropout

การ forward passes หลายครั้งที่เปิดใช้ dropout แยกออกเป็นการพยากรณ์ที่แตกต่างกันซึ่งความไม่เห็นด้วยกันก่อให้เกิดความไม่แน่นอนเอพิสเทมิก

Gal และ Ghahramani (2016) แสดงว่า network ที่ train ด้วย dropout และ evaluate ด้วย dropout ยังคงเปิดอยู่ใน test time เป็นขั้นตอน variational inference โดยประมาณใน deep Gaussian process Dropout สร้าง distribution ผ่าน subnetworks แล้ว เปิดมันไว้ระหว่าง inference และการเรียกใช้ TT forward passes sample จาก implicit posterior นั้น

ไม่มีที่ไหนอื่นในบล็อกนี้ โค้ดที่เผยแพร่ที่นี่ใช้ dropout เฉพาะเป็น training-time regularizer (สร้างโมเดล spread, TFT ที่ dropout=0.1–0.3) การเปิดมันไว้ระหว่าง inference เป็นการเปลี่ยนหนึ่งบรรทัดที่มีความหมายแตกต่างอย่างสิ้นเชิง

สถิติการพยากรณ์

กำหนด TT stochastic forward passes ผลิต {y^t}t=1T\{\hat{y}_t\}_{t=1}^{T} และ per-pass variances σ^t2(x)\hat{\sigma}_t^2(x):

Predictive mean:

yˉ=1Tt=1Ty^t\bar{y} = \frac{1}{T} \sum_{t=1}^T \hat{y}_t

เอพิสเทมิก (ความไม่เห็นด้วยกันระหว่าง passes):

σepi2=1Tt=1T(y^tyˉ)2\sigma^2_{\text{epi}} = \frac{1}{T} \sum_{t=1}^T (\hat{y}_t - \bar{y})^2

อาเลโทอิก (เฉลี่ยของสัญญาณรบกวนที่พยากรณ์):

σalea2=1Tt=1Tσ^t2\sigma^2_{\text{alea}} = \frac{1}{T} \sum_{t=1}^T \hat{\sigma}_t^2

การแยกส่วนคือกฎของ total variance อย่างแน่นอน: variance ของ conditional mean บวก mean ของ conditional variance Total predictive variance คือผลรวมของพวกมัน

การใช้งาน PyTorch

import torch
import torch.nn as nn
import numpy as np

class MCDropoutNet(nn.Module):
    """
    Network การพยากรณ์ผลตอบแทนด้วย MC Dropout สำหรับการประมาณค่าความไม่แน่นอน
    Outputs ทั้ง predicted mean และ log-variance (aleatoric)
    """
    def __init__(self, input_dim: int, hidden_dim: int = 128, dropout_p: float = 0.1):
        super().__init__()
        self.net = nn.Sequential(
            nn.Linear(input_dim, hidden_dim),
            nn.ReLU(),
            nn.Dropout(p=dropout_p),
            nn.Linear(hidden_dim, hidden_dim),
            nn.ReLU(),
            nn.Dropout(p=dropout_p),
        )
        self.head_mu = nn.Linear(hidden_dim, 1)        # ผลตอบแทนที่พยากรณ์
        self.head_logvar = nn.Linear(hidden_dim, 1)    # log(aleatoric variance)

    def forward(self, x: torch.Tensor):
        h = self.net(x)
        return self.head_mu(h), self.head_logvar(h)


def heteroscedastic_loss(mu, log_var, target):
    """Negative log-likelihood สำหรับ Gaussian ที่มี variance ที่ขึ้นกับ input"""
    precision = torch.exp(-log_var)
    return torch.mean(0.5 * precision * (target - mu) ** 2 + 0.5 * log_var)


@torch.no_grad()
def mc_predict(model: MCDropoutNet, x: torch.Tensor, n_samples: int = 100):
    """
    MC Dropout inference: เปิด dropout ON สำหรับ T forward passes
    แยก predictive variance เป็นส่วนเอพิสเทมิกและอาเลโทอิก
    """
    model.train()  # ไม่ใช่ eval() -- นี่คือสิ่งที่เก็บ dropout เปิดอยู่
    mus, log_vars = [], []
    for _ in range(n_samples):
        mu, log_var = model(x)
        mus.append(mu)
        log_vars.append(log_var)

    mus = torch.stack(mus)            # (T, batch, 1)
    log_vars = torch.stack(log_vars)  # (T, batch, 1)

    pred_mean = mus.mean(dim=0)
    epistemic_var = mus.var(dim=0)              # Var ผ่าน passes
    aleatoric_var = log_vars.exp().mean(dim=0)  # E ผ่าน passes

    return {
        "mean": pred_mean.squeeze(-1),
        "epistemic_std": epistemic_var.sqrt().squeeze(-1),
        "aleatoric_std": aleatoric_var.sqrt().squeeze(-1),
        "total_std": (epistemic_var + aleatoric_var).sqrt().squeeze(-1),
    }

การเรียนรู้ใช้ heteroscedastic loss ซึ่งเป็นสิ่งที่ทำให้ variance head มีความหมาย สังเกตโครงสร้าง self-regulating: term 0.5 * precision * (target - mu)**2 ต้องการ variance น้อย term 0.5 * log_var ลงโทษมัน และจุดสมดุลคือระดับสัญญาณรบกวนเงื่อนไข

model = MCDropoutNet(input_dim=50, hidden_dim=128, dropout_p=0.1)
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-4)

for epoch in range(200):
    model.train()
    for x_batch, y_batch in train_loader:
        mu, log_var = model(x_batch)
        loss = heteroscedastic_loss(mu, log_var, y_batch)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

Gotcha ที่ฆ่าวิธีการอย่างเงียบ: การเรียก model.eval() ภายใน mc_predict มันปิด dropout ทุก pass ส่งคืนค่าเหมือนเดิม epistemic_var ยุบลงเป็นศูนย์อย่างแน่นอน และกฎ sizing ของคุณ revert ไปยัง plain Kelly บน aleatoric variance อย่างเงียบ มัน fails โดยไม่ error Assert ว่า epistemic_var > 0 ในเส้นทาง inference ของคุณ

การเลือกจำนวน Forward Passes

  • T=30T = 30: ขอบล่างที่สมเหตุสมผลสำหรับ mean ที่มั่นคง
  • T=100T = 100: ค่าเริ่มต้นที่ใช้ได้สำหรับ mean และ variance
  • T=500+T = 500{+}: ผลตอบแทนที่ลดลง เว้นแต่คุณต้องการ tail quantiles

วิธีที่ 3: Deep Ensembles

ห้า่า neural networks ที่เรียนรู้อิสระรวมการพยากรณ์ของพวกมันในขณะที่ความไม่เห็นด้วยกันสร้างเอพิสเทมิก halo

Lakshminarayanan et al. (2017) train MM network อิสระจากการเริ่มต้นแบบสุ่มที่แตกต่างและ aggregate แม้ว่าจะไม่ใช่ Bayesian อย่างเป็นทางการ deep ensembles consistently beat เมธอดที่เป็น principle มากกว่าบน uncertainty calibration benchmarks

p(yx)1Mm=1Mp(yx,θm)p(y \mid x) \approx \frac{1}{M} \sum_{m=1}^M p(y \mid x, \theta_m^*)

ความไม่เห็นด้วยกันระหว่างสมาชิกคือการประมาณเอพิสเทมิก Ensembles ปรากฏที่อื่นในบล็อกนี้เป็นอุปกรณ์ aggregation — การตรวจจับความผิดปกติ, การตรวจจับระบอบ HMM, EnbPI block bootstrap ของ conformal — แต่ไม่เคยเป็น uncertainty estimator ผ่าน inter-member spread นี่คือการใช้ที่นี่

การใช้งาน Ensemble

ความหลากหลายมาจาก การเรียนรู้อิสระ ไม่ใช่จากการสร้าง MM objects ensemble ของสมาชิกที่ไม่ได้เรียนรู้หรือเรียนรู้เหมือนกันส่งคืนค่า noise หรือ epistemic variance ศูนย์:

class DeepEnsemble:
    def __init__(self, input_dim: int, n_models: int = 5, hidden_dim: int = 128):
        self.models = []
        for seed in range(n_models):
            torch.manual_seed(seed)          # init ที่แตกต่างสำหรับแต่ละสมาชิก
            self.models.append(
                MCDropoutNet(input_dim, hidden_dim, dropout_p=0.0)
            )

    def fit(self, train_loader, epochs: int = 200, lr: float = 1e-3):
        """แต่ละสมาชิกถูกเรียนรู้อย่างอิสระ นี่คือที่ที่ความหลากหลายมาจาก
        -- init ที่แตกต่าง, ลำดับ shuffle ที่แตกต่าง การข้ามสิ่งนี้
        ให้ epistemic_var == 0 (สมาชิกเหมือนกัน) หรือ noise บริสุทธิ์ (ไม่ได้เรียนรู้)"""
        for seed, model in enumerate(self.models):
            torch.manual_seed(1000 + seed)   # stream shuffle/dropout ที่แตกต่าง
            opt = torch.optim.AdamW(model.parameters(), lr=lr, weight_decay=1e-4)
            model.train()
            for _ in range(epochs):
                for x_batch, y_batch in train_loader:
                    mu, log_var = model(x_batch)
                    loss = heteroscedastic_loss(mu, log_var, y_batch)
                    opt.zero_grad()
                    loss.backward()
                    opt.step()
        return self

    @torch.no_grad()
    def predict(self, x: torch.Tensor):
        mus, variances = [], []
        for model in self.models:
            model.eval()                     # ถูกต้องที่นี่: ไม่มี dropout sampling
            mu, log_var = model(x)
            mus.append(mu.squeeze(-1))
            variances.append(log_var.exp().squeeze(-1))

        all_mus = torch.stack(mus)
        all_vars = torch.stack(variances)

        epistemic_var = all_mus.var(dim=0)   # spread ข้ามสมาชิก
        aleatoric_var = all_vars.mean(dim=0)

        return {
            "mean": all_mus.mean(dim=0),
            "epistemic_std": epistemic_var.sqrt(),
            "aleatoric_std": aleatoric_var.sqrt(),
            "total_std": (epistemic_var + aleatoric_var).sqrt(),
        }

สังเกตว่า model.eval() ถูกต้องใน DeepEnsemble.predict และผิดใน mc_predict แหล่งที่มาของ stochasticity ต่างกัน: ensembles ได้รับจากการเรียนรู้อิสระ MC Dropout ได้รับจาก dropout masks แบบ live

การแลกเปลี่ยน: MC Dropout vs Deep Ensembles

MC Dropout Deep Ensembles
ต้นทุนการเรียนรู้ 1x (โมเดลเดียว) MMx (MM โมเดล)
ต้นทุน inference TT forward passes MM forward passes
หน่วยความจำ 1x parameters MMx parameters
คุณภาพความไม่แน่นอน Tends to underestimate epistemic ปรับสภาพดีกว่าโดยรวม
ความง่ายในการใช้งาน ตรง (flip flag) ตรง (เรียนรู้ MM โมเดล)
การขนาน Sequential passes (โมเดลเดียว) embarrassingly parallel

ไฮบริดแบบปฏิบัติ: train ensemble เล็ก (M=35M = 3{-}5) โดยที่แต่ละสมาชิกยังใช้ MC Dropout จับทั้ง inter-model disagreement และ intra-model stochasticity

ผลตอบแทน: Sizing แบบไม่สมมาตร

สัญญาณรบกวนอาเลโทอิกขยาย envelope ความเสี่ยงในขณะที่ความไม่แน่นอนเอพิสเทมิกย่อขนาด aperture การจัดขนาดและสร้างโซนการงดระวัง

นี่คือส่วนเติมเต็มจริง Gaussian Kelly คือ f=μ/σ2f^* = \mu / \sigma^2; derivation, parabola การเจริญเติบโต, ตารางความน่าจะเป็น drawdown และสี่เหตุผลในการใช้ fractional แทน full Kelly อยู่ใน The Kelly Criterion for Strategies และไม่ซ้ำที่นี่ เอา f=μ/σ2f^* = \mu / \sigma^2 ที่ quarter-Kelly fraction เป็นที่กำหนด

การดัดแปลงคือตัวส่วน แทน total predictive variance:

σeff2=σalea2+λσepi2,λ>1\sigma^2_{\text{eff}} = \sigma^2_{\text{alea}} + \lambda \cdot \sigma^2_{\text{epi}}, \qquad \lambda > 1

อาร์กิวเมนต์สำหรับ λ>1\lambda > 1: aleatoric variance คือสัญญาณรบกวนของตลาด มันถูกกำหนดราคา และการแบกรอมันคือวิธีที่กลยุทธ์สร้างรายได้ epistemic variance คือ ความไม่รู้ ของคุณ — มันไม่มี premium และแย่กว่านั้น มัน correlated กับการที่การประเมิน μ\mu ของคุณผิด เมื่อ σepi\sigma_{\text{epi}} ใหญ่ numerator ของ Kelly ไม่น่าเชื่อถือในเวลาเดียวกับตัวส่วน ดังนั้นข้อผิดพลาดในการ sizing จะต่อเนื่อง การลงโทษมันแบบ superlinear เทียบกับสัญญาณรบกวนตลาดคือการแสดงออกโดยตรงของสิ่งนี้

def uncertainty_adjusted_position_size(
    pred_mean: float,
    epistemic_std: float,
    aleatoric_std: float,
    max_position: float = 1.0,
    lam: float = 2.0,                   # epistemic penalty; tune บน validation
    max_epi_ratio: float = 0.5,         # งดเหนือ epi/alea ratio นี้
    base_kelly_fraction: float = 0.25,
) -> float:
    """Kelly sizing ที่ epistemic variance ถูกลงโทษหนักกว่า aleatoric"""
    effective_var = aleatoric_std ** 2 + lam * epistemic_std ** 2
    if effective_var < 1e-10:
        return 0.0

    position = (pred_mean / effective_var) * base_kelly_fraction

    epi_ratio = epistemic_std / (aleatoric_std + 1e-8)
    if epi_ratio > max_epi_ratio:
        position *= max(0.0, 1.0 - epi_ratio)

    return float(np.clip(position, -max_position, max_position))

gate สมควรได้รับหมายเหตุ การศูนย์ตำแหน่งด้านล่าง confidence threshold ไม่ใช่เรื่องใหม่ที่นี่ — บทความ conformal ระบุและเขียนโค้ดตัวกรอง no-trade ทั่วไปเป็น et=μ^/wte_t = |\hat{\mu}| / w_t ด้วย min_edge threshold รวมถึงวิธีเลือก threshold และการอ่านเรขาคณิตของ interval ที่ straddle zero ดู conformal prediction สำหรับเครื่องจักรนั้น ที่ ใหม่ คือตัวส่วน: gate บน σepi/σalea\sigma_{\text{epi}} / \sigma_{\text{alea}} ยิงเฉพาะเมื่อโมเดลสับสนมากกว่าตลาดที่มีสัญญาณรบกวน — สถานะที่ gate ด้วย total-uncertainty ไม่สามารถตรวจจับได้ เพราะระบอบที่สงบแต่ไม่คุ้นเคยสามารถมี variance ต่ำและ epistemic ratio ที่แย่

การปรับสภาพ: มอบหมายสิ่งนี้

การประมาณค่าความไม่แน่นอนมีประโยชน์ก็ต่อเมื่อ calibrated: interval 95% เชิงนามควรมีความจริง ~95% ของเวลา อย่า roll การตรวจสอบความน่าเชื่อถือของ Gaussian-quantile เอง — parametric interval บน residuals ของผลตอบแทนที่หางหนักเป็นโหมดความล้มเหลวที่ conformal prediction มีอยู่เพื่อหลีกเลี่ยง และมัน ships evaluate() ที่ทำงานซึ่งรายงาน target vs empirical coverage พร้อมคำรับรอง finite-sample โพสต์ TFT ทำจุดเดียวกันสำหรับ quantile heads

Post-hoc rescaling (σ~=ασ+β\tilde{\sigma} = \alpha \sigma + \beta fit บน validation set) คือการแก้ไขราคาถูก และเป็นลูกพี่ลูกน้องที่อ่อนแอของ Adaptive Conformal Inference ซึ่งรักษา miscoverage level ออนไลน์ αt\alpha_t พร้อม bound coverage ระยะยาวแทน rescale แบบสแตติก ACI คือตัวเลือกที่แข็งแกร่งกว่า; เหตุผลเดียวที่ต้องการ linear rescaling คือมันรักษา epistemic/aleatoric ratio ซึ่งความกว้างเดียวของ ACI ไม่ทำ

สิ่งที่ต้องวัดก่อนเผยแพร่

เมธอดข้างต้นเป็นที่ก่อตั้งแล้ว ข้ออ้างว่า การแยกส่วน ซื้อสิ่งใดในการเทรดไม่ใช่ และบล็อกนี้ไม่ได้เผยแพร่กฎ sizing จากอาร์กิวเมนต์เดียว ระดับ:

1. Dataset และ target ตั้งชื่อ instrument, ขนาด bar, ช่วงวันที่ที่ชัดเจน ชุดฟีเจอร์ และเป้าหมายการพยากรณ์

2. การแยกส่วนเอง เศษส่วนของ total predictive variance คือเอพิสเทมิก vs อาเลโทอิก และ ratio นั้นเคลื่อนไประหว่างหน้าต่างสงบที่ตั้งชื่อและหน้าต่าง volatile ที่ตั้งชื่ออย่างไร นี่คือ money chart และยังไม่มีอยู่ สมมติฐานที่值得 falsify: ratio พุ้ง ก่อน ที่ realized volatility จะทำ เพราะความไม่คุ้นเคยมาก่อนความวุ่นวาย

3. Coverage vs conformal coverage out-of-sample ที่วัดของ intervals MC Dropout กับเชิงนาม เปรียบกับ split-conformal intervals จากบทความที่เผยแพร่บนข้อมูลเดียวกัน head-to-head นั้นเองเป็นผลลัพธ์ใหม่และสะพานธรรมชาติทางธรรมชาติระหว่างสองโพสต์

4. λ\lambda ซื้ออะไรไหม? Sweep epistemic penalty บน validation และรายงาน PnL และ max drawdown กับ baseline λ=1\lambda = 1 หากมันไม่ซื้ออะไรบอกเช่นนั้น — The Honest Negative คือเทมเพลตสำหรับผลลัพธ์นั้นและเป็นผลลัพธ์ที่เผยแพร่ได้

5. ต้นทุน inference วัดบนฮาร์ดแวร์เป้าหมาย ที่แต่ละ TT

การประเมินใดๆ ที่นี่ทำงานภายใต้วินัย walk-forward optimizationλ\lambda คือ hyperparameter และ λ\lambda ที่ tune บน full sample ไม่ใช่ผลลัพธ์

เคล็ดลับเชิงปฏิบัติสำหรับการผลิต

1. Warm-up prior ด้วย variational inference initialize variational mean จาก deterministic network ที่ผ่านการเรียนรู้ล่วงหน้าแทนที่จะสุ่ม โดยทั่วไป halve convergence time

2. ดู variance collapse variances ที่เรียนรู้ σj\sigma_j สามารถ drift ไปยังเกือบศูนย์ revert BNN ไปยัง deterministic network อย่างเงียบ Monitor mean σj\sigma_j ระหว่างการเรียนรู้ เพิ่ม KL annealing หากจำเป็น

**3. Recalibrate บน rolling basis ไม่ใช่ validation set คงที่ ตลาดเป็น non-stationary และ calibration ที่ fit ครั้งเดียว decay อย่าง retrain บน rolling window ภายใต้วินัย walk-forward หรือปล่อย ACI ดูดซับ model staleness ออนไลน์ — โพสต์ conformal ครอบคลุม trade-off ความถี่ retraining โดยตรง

4. ความหลากหลายของ ensemble สำคัญ seeds ที่แตกต่าง shuffles ที่แตกต่าง อาจจะ hyperparameters ที่แตกต่างสำหรับแต่ละสมาชิก ความหลากหลายของการเริ่มต้นคือ primary driver ของคุณภาพ ensemble ซึ่งเป็นเหตุผลว่าทำไม loop fit() ด้านบนไม่ใช่ optional

5. Log การแยกส่วนไม่ใช่เพียง total เก็บทั้งสองส่วนประกอบควบคู่กับผลลัพธ์ที่ realized โดยไม่มีสิ่งนี้คุณไม่สามารถตอบคำถามเดียวที่สำคัญในการทบทวน: เมื่อ sizer cut exposure เป็นเพราะตลาดมีสัญญาณรบกวนหรือเพราะโมเดลหลุด — และมันถูกหรือไม่

6. Uncertainty เป็นฟีเจอร์ การสถิติ epistemic แบบ rolling อาจเองเป็น predictive ของ drawdowns พลาเบิล ไม่ได้วัด และสมคัณคุมโพสต์แยก

ข้อจำกัดและความรับผิดชอบที่ซื่อตรง

  • Approximate posteriors ยังเป็น approximate MC Dropout และ VI ให้มุมมองที่จำกัดของ posterior จริง ดีกว่าไม่มีอะไร ไม่ใช่ ground truth และไม่มีคำรับรอง coverage แนบอยู่กับใดๆ
  • Calibration degrade อย่างแน่นอนเมื่อคุณต้องการ ในระบอบใหม่ที่แท้จริงโมเดลอาจยังเป็น miscalibrated — มันเพียง tends to be น้อยกว่า miscalibrated กว่า deterministic ค่าประมาณความไม่แน่นอนจาก input out-of-distribution เป็น outputs out-of-distribution ด้วยตัวเอง
  • Aleatoric variance สามารถดูดซับ epistemic signal หาก heteroscedastic head ยืดหยุ่นพอ มันเรียนรู้ที่จะอธิบายความไม่แน่นอนของโมเดลเป็นสัญญาณรบกวนข้อมูล collapse σepi\sigma_{\text{epi}} ไปยังศูนย์และเอาชนะการแยกส่วนทั้งหมดอย่างเงียบ นี่คือโหมดความล้มเหลวที่สำคัญที่สุดในโพสต์นี้และมันไม่ประกาศตัวเอง Monitor ratio ข้ามระบอบ ratio ที่ไม่เคยเคลื่อนไหวคือการแยกส่วนที่เสียหายไม่ใช่ตลาดที่มั่นคง
  • λ\lambda เป็นพารามิเตอร์อิสระ การแนะนำตัวปรับแต่งที่ tune ได้เข้าไปในกฎ sizing คือวิธีสร้าง overfit sizing rules มันต้องการ walk-forward justification หรือต้องได้รับการแก้ไขที่ 1

บทสรุป

Conformal prediction ให้ความกว้าง interval แล้วพร้อมคำรับรอง coverage และ Kelly ให้กฎ sizing แล้ว สิ่งที่ไม่ได้ให้คือคำตอบ ทำไม interval กว้าง การแยก predictive variance เป็นส่วนเอพิสเทมิกและอาเลโทอิกตอบคำถามนั้น และคำตอบสามารถดำเนินการได้ในลักษณะที่ total ไม่ใช่: สัญญาณรบกวนตลาดคือความเสี่ยงที่ได้รับค่าตอบแทนความไม่รู้ของโมเดลไม่ใช่ และตัวส่วน sizing ควรพูดสิ่งนั้น

MC Dropout ทำให้การแยกส่วนเกือบฟรี — หนึ่งบรรทัด (model.train() ที่ inference) เปลี่ยน dropout network ใดๆ เป็น Bayesian โดยประมาณ deep ensembles มีราคา MMx และ calibrated ดีกว่า ทั้งสอง feed ตัวส่วน asymmetric เดียวกัน σalea2+λσepi2\sigma^2_{\text{alea}} + \lambda \sigma^2_{\text{epi}}

ไม่ว่า λ>1\lambda > 1 จะจ่ายจริงหรือไม่เป็นคำถามเชิงประจักษ์ที่ฉบับร่างนี้ยังไม่ตอบ การวัดที่ระบุด้านบนคือราคาของการเผยแพร่


References:

  • Blundell, C., Cornebise, J., Kavukcuoglu, K., & Wierstra, D. (2015). Weight Uncertainty in Neural Networks. ICML.
  • Gal, Y. & Ghahramani, Z. (2016). Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. ICML.
  • Lakshminarayanan, B., Pritzel, A., & Blundell, C. (2017). Simple and Scalable Predictive Uncertainty Estimation using Deep Ensembles. NeurIPS.
  • Kendall, A. & Gal, Y. (2017). What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision? NeurIPS.
  • Gibbs, I. & Candes, E. (2021). Adaptive Conformal Inference Under Distribution Shift. NeurIPS.
  • Kelly, J. L. (1956). A New Interpretation of Information Rate. Bell System Technical Journal.
ข้อจำกัดความรับผิดชอบ: ข้อมูลที่ให้ไว้ในบทความนี้มีไว้เพื่อการศึกษาและให้ข้อมูลเท่านั้น และไม่ถือเป็นคำแนะนำทางการเงิน การลงทุน หรือการเทรด การเทรดสกุลเงินดิจิทัลมีความเสี่ยงสูงที่จะขาดทุน

ผู้เขียน

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

ก้าวนำหน้าตลาด

สมัครรับจดหมายข่าวของเราเพื่อรับข้อมูลเชิงลึกการเทรดด้วย AI เฉพาะ การวิเคราะห์ตลาด และการอัปเดตแพลตฟอร์ม

เราเคารพความเป็นส่วนตัวของคุณ ยกเลิกการสมัครได้ทุกเมื่อ