📝

Draft article

This draft is visible to admins and superusers only. Sign in with an authorized account.

← Мақалаларға оралу
August 21, 2026
5 мин оқу

Synthetic Control Methods for Evaluating Trading Strategies

Synthetic Control Methods for Evaluating Trading Strategies
#causal-inference
#synthetic-control
#counterfactual
#evaluation
#econometrics

Бұл серия жалған артықшылыққа апаратын бір жолды — іріктеуді ұзақ зерттеді. Deflated Sharpe Ratio іздеу нәтижесіндегі жеңімпаздың бағасын есептейді. Backtest overfitting ықтималдығы іздеудің өзін бағалайды. Адал теріс нәтиже екеуін де шын мәнінде сауда жасағыңыз келген стратегияға қолданғанда не болатынын көрсетеді. Бұл аппарат бір сұраққа жақсы жауап береді: мұны тым көп рет қарағаным үшін таптым ба?

Бірақ мүлде бөлек екінші жолға — confounding-ке — тиіспейді. Сіз бір нәрсені өзгерттіңіз: жаңа execution algorithm енгіздіңіз, параметр ауыстырдыңыз немесе regime-ге реакция жасадыңыз, содан кейін нәтиже жақсарды. Іздеу болған жоқ. Multiple-testing мәселесі болған жоқ. Сонда да жақсарудың сізге қатысы болмауы мүмкін, өйткені енгізген аптада волатильдік екі есе артты. Deflation мұны ұстамайды: ол trial-дарды түзетеді, ал сіз бір-ақ рет іске қостыңыз.

Abadie және Gardeazabal (2003) ұсынған, Abadie, Diamond және Hainmueller (2010, 2015) жетілдірген Synthetic Control Method (SCM) confounding-ке тікелей шабуылдайды. Ол counterfactual — сіз тимеген құралдардың weighted комбинациясын құрады; ол intervention-ге дейін treated instrument-ті барынша жақсы қайталағандай таңдалады. Intervention-нен кейінгі екі траекторияның алшақтығы — effect estimate. Ең маңыздысы, SCM-де сенімді counterfactual құра алмайтын жағдайды көрсететін falsification criterion және асимптотикалық болжамдарды қажет етпейтін permutation-based p-value бар.

Неліктен айқын баламалар жұмыс істемейді

Counterfactual comparison paths

Before-after comparison intervention-ді сол күні өзгерген барлық басқа нәрсемен араластырады. Бір benchmark instrument-пен салыстыру да сәтсіз: бірде-бір актив сізді жалғыз өзі қайталамайды — бұл кері бағыттағы Single Instrument Trap: егер бір instrument-тің idiosyncratic құрылымы жалған edge жасай алса, бір instrument control-дың өзін де жалған ете алады. SCM donor pool-ы дәл осы қарсылыққа formal жауап береді: бір салыстырмалы актив таңдаудың орнына pre-period data weighted basket-ті өзі таңдайды.

Difference-in-differences бір сөйлемнен көпке лайық, өйткені ол жақын балама. DiD treated unit өзгерісін control group өзгерісімен салыстырады және effect-ті тек parallel trends жағдайында анықтайды: intervention болмағанда treated пен control бірге қозғалар еді. Қаржы нарықтарында бұл assumption-ды қорғау қиын — активтер beta, volatility regime, liquidity tier бойынша ерекшеленеді, салыстырмалы траекториялары да кезеді. SCM assumption орнына fitted object құрады: parallel қозғалады деп ұйғырмай, біреуін құрып, оның нақты қаншалық жақсы track еткенін көрсетеді. Нашар track етсе, тоқтау керек екенін айтады.

Әдіс

Synthetic control donor construction

Setup және белгілеулер

Бақыланған J+1J + 1 unit (asset, strategy немесе portfolio) TT кезең бойы қарастырылсын. 1-unit — treated unit, яғни intervention жасаған asset немесе strategy. 2,,J+12, \ldots, J+1 unit салыстырмалы untreated unit-терден тұратын donor pool болады.

Y1tIY_{1t}^Itt уақытындағы intervention-мен treated unit outcome-ы, Y1tNY_{1t}^N — intervention болмағандағы outcome. t>T0t > T_0 кезіндегі treatment effect:

τ1t=Y1tIY1tN\tau_{1t} = Y_{1t}^I - Y_{1t}^N

Y1tIY_{1t}^I тікелей бақыланады. Бүкіл мәселе Y1tNY_{1t}^N бағалауында.

Synthetic control құру

SCM Y1tNY_{1t}^N-ді donor outcome-тарының weighted average-ы ретінде бағалайды:

Y^1tN=j=2J+1wjYjt\hat{Y}_{1t}^N = \sum_{j=2}^{J+1} w_j \, Y_{jt}

мұнда weight vector w=(w2,,wJ+1)\mathbf{w} = (w_2, \ldots, w_{J+1})' wj0w_j \geq 0 барлық jj үшін және jwj=1\sum_j w_j = 1 шарттарын қанағаттандырады.

Бұл екі constraint нақты жұмыс істейді. Олар synthetic control-ды donor-лардың convex combination-ына айналдырып, data support-ынан тыс extrapolation-ды болдырмайды. Unconstrained regression бір coin-де 3.4x long және екіншісінде 2.4x short позициядан құралған counterfactual беруі мүмкін — pre-period fit сан жағынан керемет, бірақ ешкім ұстай алмайтын portfolio. Convexity constraint counterfactual-ды түсінікті әрі weights-ті sparse етеді: әдетте бірнеше donor ғана non-zero weight алады, оларды оқуға болады.

Optimal weight таңдау

Weights intervention-ге дейінгі кезеңде treated unit пен synthetic control арасындағы қашықтықты азайтатындай таңдалады:

minwX1X0wV=minw(X1X0w)V(X1X0w)\min_{\mathbf{w}} \| \mathbf{X}_1 - \mathbf{X}_0 \mathbf{w} \|_V = \min_{\mathbf{w}} (\mathbf{X}_1 - \mathbf{X}_0 \mathbf{w})' \mathbf{V} (\mathbf{X}_1 - \mathbf{X}_0 \mathbf{w})

мұнда X1\mathbf{X}_1 — treated unit-тің intervention алдындағы сипаттамаларының (k×1)(k \times 1) векторы, X0\mathbf{X}_0 — donor pool сипаттамаларының (k×J)(k \times J) матрицасы, ал V\mathbf{V} — әр predictor-ға importance беретін (k×k)(k \times k) positive semi-definite diagonal matrix.

V\mathbf{V} cross-validation арқылы таңдалады: intervention алдындағы outcome-тың mean squared prediction error (MSPE) мәнін азайтатындай V\mathbf{V} таңдаңыз, сонда нәтижелік w(V)\mathbf{w}^*(\mathbf{V}) сол мәнді азайтады. Бұл nested optimization: V\mathbf{V} бойынша outer loop, w\mathbf{w} үшін inner constrained solve.

Trading қолданбаларына арналған predictor variables

Abadie және басқалар GDP per capita мен industry composition қолданса, trading қолданбалары мыналарды қалайды:

  • Return characteristics: pre-period ішіндегі mean return, volatility, skewness, kurtosis
  • Liquidity measures: average spread, daily volume, Amihud illiquidity ratio
  • Microstructure features: order flow imbalance, trade arrival rate, quote-to-trade ratio
  • Factor exposures: market, momentum, value және volatility factor-ларына beta
  • Lagged outcomes: бірнеше pre-intervention күніндегі cumulative PnL мәндері

Lagged outcomes ең маңызды. Abadie және басқалар (2010) synthetic control ұзақ pre-intervention window бойында treated unit-ті lagged outcomes бойынша қайталаса, linear factor model жағдайында бақыланбаған confounder-лерді implicit түрде басқаратынын көрсетеді — әдістің күш салуға тұратынының себебі осы. PnL-ді тудырған confounder-ді атау міндет емес. Оған ұшыраған donor-ларды табу міндет.

Қайда қолданылады

Нарық режимдері арқылы causal bridges

Сценарий 1: Жаңа execution algorithm-ді бағалау

Бір instrument-ке жаңа TWAP schedule енгізіп, оның implementation shortfall-ға әсерін білгіңіз келеді. Metric пен algorithm family басқа жерде толық қарастырылған — cost decomposition үшін implementation shortfall және TCA, ал scheduler-лер үшін TWAP/VWAP/POV алгоритмдері. SCM-нің үлесі — үстіндегі evaluation layer: donor pool сол window ішінде ескі scheduler-мен жұмыс істеп тұрған instrument-терден тұрады, сондықтан venue-wide spread немесе volume өзгерістері treated пен donor-ға бірдей әсер етеді.

Pre-intervention period: ауысуға дейінгі 60 trading day. Post-intervention period: кейінгі 30 trading day. Effect estimate — gap:

τ^1t=Y1tactualY^1tsynthetic,t>T0\hat{\tau}_{1t} = Y_{1t}^{\text{actual}} - \hat{Y}_{1t}^{\text{synthetic}}, \quad t > T_0

Егер жаңа scheduler cost-ты шынымен азайтса, τ^1t<0\hat{\tau}_{1t} < 0 T0T_0-ден кейін тұрақты болады — одан да маңыздысы, treated gap donor gap-тарының cloud-ынан тыс жатады.

Сценарий 2: Нарық оқиғасының әсері

Fee schedule өзгерісі, tick-size pilot, transaction tax немесе circuit-breaker ережесі бір venue-ге әсер етеді. Treated unit — affected venue-дегі стратегияңыз. Donor pool — өзгеріс тимеген venue-лердегі сол pair. Execution-ге fee structure әсерлері maker-taker fees және rebates ішінде бөлек қарастырылады; SCM "өзгерістен кейін fills нашарлады" дегенді null attached estimate-ке айналдырады.

Сценарий 3: Regime-ге шартты strategy switching

Regime-detection signal жанғанда бір asset-те mean-reversion-нан momentum-ға ауысасыз. Ауысу сол жерде қалудан тиімді болды ма? Donor pool — signal жанған, бірақ ауысу жасалмаған ұқсас asset-тер. Тұзақ: regime signal бүкіл market-те жанса, donor-лар да treated болады және design құлайды. Төмендегі spillover ережесін қараңыз.

Placebo тесттері және inference

Placebo траекториялары және тексерілген жол

SCM inference-і permutation-based. Closed-form distribution-ға сенудің орнына resampling арқылы empirical null құрудың жалпы негізі backtest үшін Monte Carlo және bootstrap әдістері мақаласында берілген; төмендегі SCM-ге тән construction.

In-time placebo

Intervention date-ті pre-period ішіне, мысалы ортасына, жылжытып қайта іске қосыңыз. Ештеңе болмаған датада SCM "treatment effect" тапса, ол intervention-ді емес, бұрыннан бар divergence-ті ұстап тұр. Сенімді synthetic control жалған intervention даталарында effect көрсетпеуі керек.

In-space placebo (permutation test)

Бүкіл SCM процедурасын әр donor үшін қолданыңыз, әрқайсысын кезекпен treated unit деп санаңыз:

  1. Әр donor jj үшін қалған donor-лар мен бастапқы treated unit-тен synthetic control құрыңыз.
  2. Post-intervention gap gapjt=YjtY^jtsynth\text{gap}_{jt} = Y_{jt} - \hat{Y}_{jt}^{\text{synth}} есептеңіз.
  3. Treated unit gap-ін placebo gap-тарының distribution-ымен салыстырыңыз.

p-value — rank:

p=rank of treated unit’s post/pre MSPE ratioJ+1p = \frac{\text{rank of treated unit's post/pre MSPE ratio}}{J + 1}

мұнда

MSPE ratio=MSPEpostMSPEpre=1TT0t>T0(Y1tY^1tN)21T0tT0(Y1tY^1tN)2\text{MSPE ratio} = \frac{\text{MSPE}_{\text{post}}}{\text{MSPE}_{\text{pre}}} = \frac{\frac{1}{T - T_0} \sum_{t > T_0} (Y_{1t} - \hat{Y}_{1t}^N)^2}{\frac{1}{T_0} \sum_{t \leq T_0} (Y_{1t} - \hat{Y}_{1t}^N)^2}

Raw post-period gap емес, ratio дұрыс statistic: ешқашан жақсы fit болмаған donor intervention-ге қатысы жоқ себептермен үлкен post gap көрсетуі мүмкін, ал pre-period MSPE-ге бөлу дәл осыны жазалайды.

Бұл Deflated Sharpe Ratio жасайтын inference move-пен бірдей: candidate-ті нөлмен емес, empirical reference distribution ішінде rank ету. DSR winner-ді trials үстіндегі best-of-N null-мен салыстырады; SCM treated unit-ті units үстіндегі null-мен rank етеді. Estimator бөлек, discipline бірдей, ескерту де бірдей: J=15J = 15 donor болса, қолжетімді ең кіші p-value 1/160.061/16 \approx 0.06. Permutation test өз гранулярлығынан аса алмайды, демек donor pool шағын болса, effect қанша үлкен көрінсе де талап етуге болатын significance шектеледі.

Practical filtering

Abadie және басқалар pre-intervention fit нашар placebo unit-терді алып тастауды ұсынады — pre-MSPE treated unit-тікінен kk есе үлкен болсын, әдетте kk 2-ден 20-ға дейін. Poor-fit placebo-ларда denominator кішкентай болып, MSPE ratio өте үлкен шығады, reference distribution ластанып, treated unit айқын емес болып көрінеді. Ratio-ны бірнеше threshold-та есептеңіз; p-value тек бір нақты kk кезінде significant болса, effect емес, tuning parameter таптыңыз.

Implementatsiya

Counterfactual analysis pipeline

Төмендегі код тек numpy және scipy қолданады, сондықтан механика көрінеді. Production баламалары — SparseSC (Microsoft Research), pysyncon, SyntheticControlMethods — edge case-терді өңдеп, жақсырақ масштабталады.

Predictor matrix құру

import numpy as np
import pandas as pd
from scipy.optimize import minimize


def build_predictors(series: pd.Series, T0: int) -> np.ndarray:
    """
    Extract predictor vector from pre-intervention data.
    Features: mean return, volatility, skewness, kurtosis,
              plus lagged outcome values at regular intervals.
    """
    pre = series.iloc[:T0]
    daily_ret = pre.diff().dropna()

    stats = [
        daily_ret.mean(),
        daily_ret.std(),
        daily_ret.skew(),
        daily_ret.kurtosis(),
    ]

    lag_indices = np.linspace(0, T0 - 1, 5, dtype=int)
    lags = pre.iloc[lag_indices].values.tolist()

    return np.array(stats + lags)

Бұл жерде df cumulative returns panel-і: 0-бағанда treated unit, қалғанында donor-лар, әр жолда бір bar. Price level емес, cumulative return қолданыңыз.

X1 = build_predictors(df["Treated"], T0).reshape(-1, 1)   # (k x 1)
X0 = np.column_stack([                                    # (k x J)
    build_predictors(df[col], T0) for col in df.columns[1:]
])

Weight optimization

def solve_weights(
    X1: np.ndarray,
    X0: np.ndarray,
    Y1_pre: np.ndarray,
    Y0_pre: np.ndarray,
) -> np.ndarray:
    """
    Solve for optimal synthetic control weights.

    Nested optimization:
      Outer: optimize V (predictor importance)
      Inner: optimize w (donor weights) given V
    """
    k = X1.shape[0]
    J = X0.shape[1]

    def solve_w_given_V(V_diag: np.ndarray) -> np.ndarray:
        """Inner: find w minimizing weighted predictor distance."""
        V = np.diag(V_diag)

        def objective(w):
            gap = X1.flatten() - X0 @ w
            return gap @ V @ gap

        constraints = {"type": "eq", "fun": lambda w: np.sum(w) - 1.0}
        bounds = [(0, 1)] * J
        w0 = np.ones(J) / J

        result = minimize(objective, w0, method="SLSQP",
                         bounds=bounds, constraints=constraints,
                         options={"maxiter": 1000, "ftol": 1e-12})
        return result.x

    def outer_objective(V_diag: np.ndarray) -> float:
        """Outer: minimize pre-period MSPE given V."""
        w = solve_w_given_V(np.abs(V_diag))
        return np.mean((Y1_pre - Y0_pre @ w) ** 2)

    V0 = np.ones(k)
    result = minimize(outer_objective, V0, method="Nelder-Mead",
                     options={"maxiter": 5000, "xatol": 1e-8})

    return solve_w_given_V(np.abs(result.x))


Y1_pre = df["Treated"].iloc[:T0].values
Y0_pre = df.iloc[:T0, 1:].values
weights = solve_weights(X1, X0, Y1_pre, Y0_pre)

for col, w in zip(df.columns[1:], weights):
    if w > 0.01:
        print(f"  {col}: {w:.4f}")

Gap series кейін df["Treated"].values - df.iloc[:, 1:].values @ weights болады; оны intervention date-пен бірге және төмендегі placebo run-нан donor gap-тары қатарында салыңыз.

Placebo тесттері

def run_placebo_tests(df: pd.DataFrame, T0: int) -> pd.DataFrame:
    """In-space placebo: treat each unit in turn as if intervened upon."""
    results = []
    all_columns = df.columns.tolist()

    for placebo_col in all_columns:
        donor_cols = [c for c in all_columns if c != placebo_col]
        donor_df = df[donor_cols]

        X1_p = build_predictors(df[placebo_col], T0).reshape(-1, 1)
        X0_p = np.column_stack([
            build_predictors(donor_df[c], T0) for c in donor_cols
        ])

        w_p = solve_weights(
            X1_p, X0_p,
            df[placebo_col].iloc[:T0].values,
            donor_df.iloc[:T0].values,
        )
        gap_p = df[placebo_col].values - donor_df.values @ w_p

        mspe_pre = np.mean(gap_p[:T0] ** 2)
        mspe_post = np.mean(gap_p[T0:] ** 2)

        results.append({
            "unit": placebo_col,
            "mspe_pre": mspe_pre,
            "mspe_post": mspe_post,
            "mspe_ratio": mspe_post / mspe_pre if mspe_pre > 1e-10 else np.inf,
            "gap_series": gap_p,
            "is_treated": placebo_col == "Treated",
        })

    return pd.DataFrame(results)


placebo_results = run_placebo_tests(df, T0)

treated_pre = placebo_results.loc[placebo_results["is_treated"], "mspe_pre"].values[0]
filtered = placebo_results[placebo_results["mspe_pre"] <= 5 * treated_pre]

treated_ratio = filtered.loc[filtered["is_treated"], "mspe_ratio"].values[0]
p_value = (filtered["mspe_ratio"] >= treated_ratio).sum() / len(filtered)
print(f"MSPE ratio (treated): {treated_ratio:.2f}   p = {p_value:.3f}")

Estimator-ді калибрлеу

Іске қосуға тұратын және бас тартуға тұратын demonstration бар. Synthetic panel data құрып, +0.3%/day effect енгізіп, шамамен +0.3%/day қалпына келтіріп, оны evidence ретінде көрсету тек SLSQP converge болатынын дәлелдейді. Бұл circular, сондықтан блог оны жарияламайды.

Synthetic data-ның пайдалы жері — calibration; DSR мақаласы мен PBO сияқты, known null статистиканы сенімді етеді. Donor count пен сіздегі pre-period length қолданылатын linear factor model арқылы құрылған data-да екі тексеріс жүргізіңіз:

  1. Белгілі effect size кезіндегі power. Белгілі magnitude effect енгізіңіз. Estimated post-period gap оны қандай қателікпен қалпына келтіреді? Effect size-ты recovery істемей қалғанша азайтыңыз — сол floor panel geometry анықтай алатын ең кіші effect; одан төмен нақты нәтиже p-value қандай болса да noise.
  2. Шынайы null кезіндегі size. Ештеңе енгізбеңіз. Толық placebo pipeline-ді жүргізіңіз. p-value [0,1][0, 1] ішінде шамамен uniform болуы керек, сондықтан қайталанған draw-ларда 10%-ға жуық жағдайда 0.10-нан төмен түседі. Бұдан әлдеқайда жиі іске қосылса, predictor set немесе filter threshold significance жасап тұр және real data-ға тимей тұрып pipeline бұзылған.

Екінші тексеріс — адамдар өткізіп жіберетін, бірақ ең маңыздысы. Алдымен соны іске қосыңыз.

Практикалық ойлар

Теңгерілген causal evaluation system

Donor pool таңдау

Donor-лар treated unit-пен салыстыруға болатын және intervention-нен зардап шекпеген болуы керек. Execution үшін: ұқсас instrument-тердегі бір algorithm — бір sector, market-cap decile, liquidity tier. Multi-symbol validation ішіндегі tier taxonomy бұл жерде де тікелей қолданылады; instrument-ті fair robustness test ететін қасиеттер fair donor pool да жасайды. Venue event үшін: өзгеріс жетпеген venue-дегі сол instrument.

Spillover бар unit-терді алып тастаңыз. Бір instrument-тегі algorithm-ді өзгерту correlated instrument-тердегі quoting-ті өзгертсе, олар partially treated. Оларды қалдыру synthetic control-ды treated unit-тің post-period path-ына бұрып, estimate-ті нөлге қарай қысқартады — нашар control positive нәтиже жасағандай, бұл design flaw null result-ті де қолдан жасап шығарады.

Pre-intervention fit — бүкіл аргумент

SCM credibility толығымен pre-period fit-ке сүйенеді. Pre-intervention MSPE-ті есеп беріп, fit-ті көрсетіңіз. Poor pre-fit T0T_0-ден кейінгі бәрін жарамсыз етеді.

Abadie және басқалар (2015) ережені анық айтады: егер donor-лардың ешбір convex combination-ы treated unit-тің pre-intervention trajectory-сын қайталай алмаса, әдісті қолданбаңыз. Бұл — адал falsification criterion және сирек болуы тиіс болса да сирек: көптеген estimator берілген нәрсеге қарамай сан шығарады. SCM credible counterfactual жасай алмайтынын айтады; дұрыс жауап — donor pool-ды fit жақсарғанша кеңейту емес, failure-ді жариялау. Pre-fit қуалау үшін pool-ды кеңейту — осы сериядағы overfitting, тек control-construction қадамына көшірілген.

Қысқа панельдердегі overfitting

SCM үшін бақыланатын шама — donor саны JJ-дің pre-period observation саны T0T_0-ге қатынасы. JJ еркін weight T0T_0 нүктеде fit жасалса, JJ T0T_0-ге жақындағанда perfect pre-fit construction бойынша мүмкін болады — мұндай perfect pre-fit еш ақпарат бермейді. T0T_0-ді JJ-ден айтарлықтай үлкен ұстаңыз; өзгеріске дейін strategy 30 күн істеп, 20 candidate donor болса, бұл SCM мәселесі емес, interpolation. Mitigation:

  1. Regularization: SparseSC weight optimization-ға 1\ell_1 және 2\ell_2 penalty қосады.
  2. Donor pool-ды шектеу: аз, бірақ жақсы негізделген donor көп donor-дан жақсы — JJ minimum p-value-ді де белгілейтіндіктен permutation grid ірілеу болады. Бұл нақты tension және таза шешімі жоқ.
  3. Augmented SCM: Ben-Michael, Feller және Rothstein (2021) perfect pre-fit қолжетімсіз болса bias-correct жасау үшін outcome model қолданады.

Non-stationarity

SCM-ді price level-ге емес, cumulative return-ге іске қосыңыз — level spurious fit-ке шақырады. Post-period divergence-ке сенбестен бұрын pre-intervention gap mean-zero әрі stationary екенін растаңыз; fitted residual-ті observed series емес тестегенде қажет corrected critical value-терді қоса, ADF және Engle-Granger machinery statistical arbitrage және pairs trading мақаласында.

Бірнеше treated unit

Бір уақытта бірнеше asset-ке deployment single-treated-unit design-ды бұзады. Extensions: pooled SCM (treated unit-тердегі average effect) және әртүрлі уақытта treated болған unit-терге арналған staggered adoption design-дары (Ben-Michael және басқалар, 2022).

SCM-ді қашан қолданбау керек

Екіұшты causal structure

Жақсы сәйкеседі: белгілі датасы бар discrete, well-defined intervention; салыстырмалы untreated unit-терден тұратын reasonable donor pool; алдын ала күтпеген intervention, өйткені anticipation treated unit-ті T0T_0-ге дейін жылжытып, identification-ды бұзады.

Нашар сәйкеседі: бірнеше апта бойы жылжитын parameter сияқты continuous treatment; шын мәнінде untreated comparable жоқ орта; signal-to-noise ratio weight estimation-ды жеңетін high-frequency evaluation.

Қорытынды

Бірге шешілетін actual және synthetic траекториялар

Selection мен confounding — әртүрлі failure mode, сондықтан әртүрлі instrument керек. DSR мен PBO search-ті бағалайды. SCM counterfactual-ды бағалайды және дәл бір experiment іске қосып, нәтижеге бәрібір сене алмайтын жағдайды қарастыратын осы сериядағы жалғыз құрал.

Оны ad-hoc benchmark-тен артық көру себебі үлкен effect шығаратынында емес — көбіне кіші effect береді — бас тарта алатынында. Егер donor-лардың ешбір convex combination-ы intervention-ге дейін instrument-ті track етпесе, SCM мұны айтады және тоқтайсыз. Treated gap donor cloud ішінде болса, placebo p-value мұны көрсетіп, null есеп бересіз. Осы екі шығу жолы әдістің құндылығы; reported pre-period MSPE мен placebo p-value жоқ SCM write-up екі сызықтың ажыраған chart-ынан артық ететін жалғыз бөліктерді өткізіп алған.


Қосымша оқу

  • Abadie, A., Diamond, A., & Hainmueller, J. (2010). "Synthetic Control Methods for Comparative Case Studies." Journal of the American Statistical Association, 105(490), 493-505.
  • Abadie, A. (2021). "Using Synthetic Controls: Feasibility, Data Requirements, and Methodological Aspects." Journal of Economic Literature, 59(2), 391-425.
  • Ben-Michael, E., Feller, A., & Rothstein, J. (2021). "The Augmented Synthetic Control Method." Journal of the American Statistical Association, 116(536), 1789-1803.
  • Cunningham, S. (2021). Causal Inference: The Mixtape. Chapter 10: Synthetic Control. Available at mixtape.scunning.com.
  • Microsoft Research. SparseSC: Sparse Synthetic Controls. github.com/microsoft/SparseSC.
blog.disclaimer

Authors

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 сауда талдаулары, нарық аналитикасы және платформа жаңалықтары үшін біздің ақпараттық бюллетеньге жазылыңыз.

Біз сіздің жекелігіңізді құрметтейміз. Кез келген уақытта жазылымнан шығуға болады.