Документация Post Analysis Toolkit

Установка

В ноутбуке или Python-скрипте

%pip install post-analysis-toolkit

Один раз на персональном Databricks-кластере

В настройках кластера откройте Libraries, добавьте библиотеку из PyPI с именем post-analysis-toolkit и установите её. После запуска кластера пакет будет доступен во всех его ноутбуках и Python-задачах.

Объекты результатов

PanelConfig

Вспомогательный dataclass с именами колонок.

outcome_col, time_col, unit_col, treated_col, post_col, cluster_col, weight_col

InterventionConfig

Вспомогательный dataclass для окна интервенции и treated-сущностей.

intervention_time, treated_unit, treated_units, donor_units, pre_period, post_period

MethodResult

method, summary, details, figures, metadata

DiagnosticResult

method, checks, details, figures, metadata

Как связаны функции и result-объекты

Тип функцииЧто делаетЧто возвращаетГлавные поля
check_*_assumptions(...)Проверяет предпосылки применения метода.DiagnosticResultchecks, details, figures, metadata
fit_*(...)Считает основной эффект метода.MethodResultsummary, details, figures, metadata
run_*_robustness(...)Проверяет устойчивость результата.MethodResultsummary, details, figures, metadata

Практическое правило:

  • Если функция начинается с check_, почти всегда сначала смотри diag.checks.
  • Если функция начинается с fit_, почти всегда сначала смотри result.summary.
  • Если функция начинается с run_ и заканчивается на _robustness, сначала смотри robust.summary, потом уже детальные таблицы и графики.

Типовой паттерн использования

diag = check_did_assumptions(...)
display(diag.checks)

result = fit_did_regression(...)
display(result.summary)
display(result.details["coefficients"])

robust = run_did_robustness(...)
display(robust.summary)

Общие соглашения по данным

  • time_col должен корректно парситься через pandas.to_datetime.
  • Бинарные флаги ожидаются в формате 0/1.
  • Outcome и covariates должны быть числовыми.
  • Для PSM и Doubly Robust категориальные covariates нужно заранее закодировать.
  • Графики, которые возвращает пакет, это matplotlib figures.

Расшифровка output-таблиц

После вызова fit_* основные результаты находятся в result.summary. Набор колонок зависит от метода, а MDE-поля имеют общий смысл.

КолонкиРасшифровка
mde_absolute, mde_relative, mde_cumulativeАбсолютный, относительный и cumulative MDE.
mde_type, mde_mode_resolved, mde_simulation_kindФактический тип и режим расчёта MDE.
mde_alpha, mde_power, mde_n_simulationsПараметры расчёта MDE; для аналитического режима симуляции не используются.
proxy_mde_*Ориентировочный proxy-MDE; заполнен только при mde_mode="proxy".

Ключевые поля по методам

МетодОсновные колонки summaryЧто означают
DiDtreated_pre/post, control_pre/post, estimate, relative_effect_vs_treated_pre, std_errorСредние до/после по группам, DiD-эффект, относительный эффект и стандартная ошибка.
Event Studyevent_bin, period_type, estimate, std_error, ci_low/highЭффект и интервал для каждого event-time бина.
DDDformula, estimate, std_error, p_value, ci_low/highТройная interaction-оценка, её неопределённость и доверительный интервал.
Synthetic Controlpre_rmse, pre_r2, pre_corr, avg_post_effectКачество pre-fit и средний post-period gap.
Causal Impactaverage_actual/predicted_post, average_abs/rel_effect, posterior_tail_area, validation_r2/rmse/wapeФактический и контрфактический post-period, эффект, posterior-значимость и качество validation.
ITSavg_actual/counterfactual_post, avg_abs/rel_effect, level_change_coef, slope_change_coef_per_dayPost-period effect, скачок уровня и изменение наклона.
RDDcutoff, bandwidth, estimate, std_error, p_valueСпецификация вокруг cutoff и discontinuity-эффект.
PSMestimate, treated_mean, matched_control_mean, propensity_auc, matched_pairs_nATT, средние после matching, качество propensity-модели и размер matching.
Doubly Robustestimate, std_error, propensity_auc, model_family, max_ipw_weightDR-оценка, неопределённость, качество propensity и диагностика весов.

MDE и чувствительность

Стандартные настройки

По умолчанию используются alpha=0.05, power=0.80 и двусторонний тест alternative="two-sided". Если метрика и дизайн допускают аналитическую оценку, базовый ориентир — t-test через корректную стандартную ошибку.

MDE относится к конкретному estimand. В результате нужно отдельно показывать абсолютный, относительный и cumulative MDE.

ФормаСмыслКак читать
absoluteРазница в единицах outcomeНапример, +12 заказов в день
relativeMDE_abs / baselineМинимальный процентный lift относительно явно указанного baseline
cumulativeЭффект за весь post-periodСумма или другая заранее определенная агрегация

Где смотреть MDE

MDE находится в result.summary соответствующей fit_*-функции.

ОбъектОсновные поляСтатус текущей версии
Все fit_*mde_absolute, mde_relative, mde_cumulative, mde_type, mde_simulation_kind, mde_mode_resolvedОсновной MDE; по умолчанию auto
Все fit_*details["mde_power_curve"]Мощность по сетке абсолютных эффектов
Все fit_*metadata["mde_mode"], metadata["mde_random_state"]Настройки расчета
Все fit_*proxy_mde_*Заполнены только при mde_mode="proxy"

Поля с префиксом proxy_mde — это быстрый screening, а не строгий MDE конкретного сложного дизайна.

Режимы MDE

РежимЧто делаетКогда использовать
autoЕсли есть корректная стандартная ошибка, выбирает analytic; иначе — parametric.Режим по умолчанию.
analyticСчитает MDE по стандартной ошибке без генерации данных и повторных запусков модели.Быстрый расчёт для метода с аналитической SE.
parametricГенерирует случайные оценки вокруг кандидатных эффектов с шумом, соответствующим SE, и строит power curve.Рабочий приближённый расчёт.
resamplingСоздаёт псевдоданные, ресэмплирует остатки, переоценивает модель и строит power curve.Финальный расчёт сложных методов; медленнее.
proxyОценивает MDE по уровню шума без полноценной симуляции мощности.Быстрый screening, не основной вывод.

Как именно выполняются текущие симуляции

Для каждой точки сетки абсолютных эффектов delta пакет генерирует n_simulations оценок по схеме:

simulated_estimate = delta + Normal(0, uncertainty_scale)

uncertainty_scale равен SE для DiD, Event Study, DDD, RDD, PSM и Doubly Robust. Для Event Study это стандартная ошибка конкретного коэффициента конкретного временного бина, поэтому MDE строится отдельно для каждого бина. Для Synthetic Control, Causal Impact и ITS он строится из ошибки префита: pre-fit RMSE / sqrt(n_post) или validation RMSE / sqrt(n_post).

Для каждого delta считается доля симуляций, где нулевая гипотеза отвергнута. Это estimated power. В таблице есть и effect_relative — эффект относительно baseline. Например, effect_absolute=2000, effect_relative=0.02, estimated_power=0.81 означает мощность около 81% при эффекте 2% от baseline. Таблица power curve доступна в result.details["mde_power_curve"], а минимальный delta, достигший целевой мощности, записывается в result.summary["mde_absolute"].

Ошибка прогноза: RMSE остаётся основной метрикой ошибки и noise scale для MDE. Для интерпретации используется относительный RMSE: RMSE, делённый на средний уровень метрики в предпериоде.

Параметрический режим не создает новые строки исходного датафрейма и не переобучает полный pipeline на каждом повторе. Поэтому не выполняются повторный подбор доноров, matching, оптимизация весов Synthetic Control, state-space fit Causal Impact или полный пересчет ITS. Это быстрый MDE на основе параметрической симуляции.

Режим mde_mode="resampling" создает псевдоданные вокруг fitted/counterfactual значений без эффекта, ресэмплирует центрированные остатки, добавляет кандидатный эффект и заново запускает оцениватель. Для нестандартного pipeline можно передать mde_simulator с сигнатурой (effect, rng, n_simulations) -> array[estimate].

Для воспроизводимости используется random_state; для собственной сетки эффектов — mde_effect_grid.

Для параметрического и resampling-режимов число повторов задается параметром n_simulations: 500 для отладки, 2000 для рабочего расчета и 5000+ для финального отчета. В результатах нужно сохранять alpha, power, alternative, n_simulations, random_state, power curve и три формы MDE.

ПараметрТип / значенияОписание
mde_modestr: auto, analytic, parametric, resampling, proxyРежим расчета MDE; default — auto.
alphafloat от 0 до 1Уровень ошибки первого рода; default — 0.05.
powerfloat от 0 до 1Целевая мощность; default — 0.80.
alternativestr: two-sided, greater, lessНаправление теста; default — two-sided.
n_simulationsint > 0Число повторов в параметрическом или resampling-режиме; default — 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneПользовательская сетка абсолютных эффектов.
mde_simulatorcallable или NoneПользовательская функция resampling-режима; принимает effect, генератор rng и число повторов, возвращает массив оценок.

Difference-in-Differences (DiD)

Формат данных для функции

sale_dateunitmetrictreated_flagpost_flag
2026-02-10Batumi0.08410
2026-02-10Tbilisi0.12100
2026-02-25Batumi0.11611

compute_classic_did(...)

compute_classic_did(
    df, outcome_col, treated_col, post_col,
    weight_col=None, label="classic_did",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаДатафрейм с наблюдениями treated/control и pre/post.
outcome_colstrдаИмя числовой колонки с целевой метрикой.
treated_colstrдаИмя бинарной колонки `0/1`, где `1` означает treated-группу.
post_colstrдаИмя бинарной колонки `0/1`, где `1` означает post-период.
weight_colstr или NoneнетНеобязательная колонка весов для расчета взвешенных средних.
labelstrнетТехническая подпись метода в выходном объекте.

Возвращает summary с 2x2 cell means и эффектом, а также details["cell_means"].

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

fit_did_regression(...)

fit_did_regression(
    df, outcome_col, time_col, treated_col, post_col,
    covariates=None, cluster_col=None, unit_col=None,
    twfe=False, log_transform=False, relative=False,
    weight_col=None, label="did_regression",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанельный датафрейм с treated/control наблюдениями.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаИмя временной колонки.
treated_colstrдаИмя бинарного treated-флага.
post_colstrдаИмя бинарного post-флага.
covariateslist[str] или NoneнетСписок дополнительных регрессоров.
cluster_colstr или NoneнетКолонка уровня кластеризации ошибок.
unit_colstr или NoneнетИдентификатор unit. Обязателен для `twfe=True` и обычно нужен для `relative=True`.
twfeboolнетЕсли `True`, модель добавляет unit fixed effects и time fixed effects.
log_transformboolнетЕсли `True`, outcome преобразуется через `log` или `log1p`.
relativeboolнетЕсли `True`, outcome индексируется на среднее предпериода внутри unit.
weight_colstr или NoneнетКолонка весов для `WLS`.
labelstrнетТехническая подпись метода в выходном объекте.

Возвращает summary по эффекту, коэффициенты и analysis frame.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_did_assumptions(...)

fpr_placebo_count задаёт число placebo-прогонов для эмпирической FPR; по умолчанию 20.

check_did_assumptions(
    df, outcome_col, time_col, treated_col, post_col,
    intervention_time, unit_col=None, cluster_col=None,
    event_bin_size=7, label="did_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанельный датафрейм.
outcome_colstrдаКолонка outcome.
time_colstrдаВременная колонка.
treated_colstrдаБинарный флаг treated-группы.
post_colstrдаБинарный флаг post-периода.
intervention_timeдата / str / pd.TimestampдаДата старта интервенции.
unit_colstr или NoneнетИдентификатор unit; полезен для event study на unit-level panel.
cluster_colstr или NoneнетУровень кластеризации SE в pre-trend regression и event study.
event_bin_sizeintнетРазмер временного бина для event study в днях.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: визуальную форму предпериода, разницу наклонов и корреляцию на предпериоде, joint-test лидов через event study, стабильность состава и явные параллельные изменения.

Возвращает локализованные проверки, event-study таблицы и диагностические графики.

run_did_robustness(...)

run_did_robustness(
    df, outcome_col, time_col, treated_col, post_col,
    intervention_time=None, unit_col=None, cluster_col=None,
    twfe_options=(False, True), log_options=(False, True),
    relative_options=(False, True), placebo_offsets_days=(28, 21, 14),
    pre_period_days_options=(None, 28, 56, 84),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанельный датафрейм.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаИмя временной колонки.
treated_colstrдаИмя treated-флага.
post_colstrдаИмя post-флага.
intervention_timeдата / str / pd.Timestamp / NoneнетДата интервенции для placebo-прогонов на предпериоде.
unit_colstr или NoneнетИдентификатор unit; нужен для части спецификаций.
cluster_colstr или NoneнетУровень кластеризации ошибок.
twfe_optionstuple[bool, ...] или list[bool]нетНабор значений `twfe` для перебора.
log_optionstuple[bool, ...] или list[bool]нетНабор значений `log_transform` для перебора.
relative_optionstuple[bool, ...] или list[bool]нетНабор значений `relative` для перебора.
placebo_offsets_daystuple[int, ...] или list[int]нетСдвиги назад в днях для A/A placebo-прогонов.
pre_period_days_optionsiterable[int или None]нетОкна предпериода для sensitivity-проверки.

Как проверяет устойчивость: перебирает спецификации twfe / log / relative, сравнивает эффект между ними и делает placebo-прогоны на предпериоде с псевдо-датами интервенции.

Event Study

Формат данных для функции

Event Study — самостоятельная регрессионная оценка динамики эффекта. Она возвращает отдельную оценку для каждого временного бина относительно пропущенного эталонного бина, а не один суммарный коэффициент за весь постпериод.

sale_dateunitoutcometreated_flag
2026-02-10Batumi1201
2026-02-10Tbilisi2400
2026-02-25Batumi1551

fit_event_study(...)

fit_event_study(
    df, outcome_col, time_col, treated_col, intervention_time,
    unit_col=None, cluster_col=None, event_bin_size=7, reference_bin=-1,
    covariates=None, label="event_study", mde_mode="auto",
    alpha=0.05, power=0.80, alternative="two-sided",
    n_simulations=2000, random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель с outcome, временем и treated-флагом.
outcome_colstrдаЧисловая целевая метрика.
time_colstrдаВременная колонка.
treated_colstrдаБинарный флаг treated-группы.
intervention_timeдата / str / pd.TimestampдаМомент начала вмешательства.
unit_colstr или NoneнетИдентификатор юнита; добавляет фиксированные эффекты юнитов.
cluster_colstr или NoneнетКолонка для кластеризации стандартных ошибок.
event_bin_sizeintнетРазмер бина в днях; по умолчанию 7.
reference_binintнетЭталонный пропущенный бин; по умолчанию -1.
covariateslist[str] или NoneнетДополнительные числовые регрессоры.
labelstrнетТехническая подпись результата.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим MDE для каждого event-бина; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

В summary одна строка соответствует одному event-бину и содержит эффект, доверительный интервал, p-value и MDE. В details["event_study_summary"] лежит общий joint-тест лидов, а в figures["event_study"] — график коэффициентов.

check_event_study_assumptions(...) и run_event_study_robustness(...)

check_event_study_assumptions проверяет reference-бин, число pre/post-бинов, joint-тест pre-period коэффициентов и максимальный абсолютный pre-period коэффициент. run_event_study_robustness повторяет оценку для разных размеров event-бина, reference-бинов и окон предпериода. Результаты sensitivity лежат в robust.summary и robust.details["sensitivity"].

Triple Difference (DDD)

Формат данных для функции

sale_dateunittreated_flagpost_flagsubgroup_flagoutcome
2026-02-10Batumi1000.071
2026-02-10Batumi1010.083
2026-02-10Tbilisi0000.069

fit_triple_difference(...)

fit_triple_difference(
    df, outcome_col, time_col, treated_col, post_col, subgroup_col,
    covariates=None, cluster_col=None, unit_col=None,
    twfe=False, log_transform=False, relative=False,
    label="triple_difference",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель `unit x time x subgroup`.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
treated_colstrдаФлаг treated-группы.
post_colstrдаФлаг post-периода.
subgroup_colstrдаБинарная колонка подгруппы, где `1` означает affected subgroup.
covariateslist[str] или NoneнетДополнительные регрессоры.
cluster_colstr или NoneнетУровень кластеризации ошибок.
unit_colstr или NoneнетИдентификатор unit. Обязателен для `twfe=True` и обычно нужен для `relative=True`.
twfeboolнетДобавлять unit FE и time FE.
log_transformboolнетЛогарифмировать outcome.
relativeboolнетИндексировать outcome по baseline внутри `unit x subgroup`.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_triple_difference_assumptions(...)

check_triple_difference_assumptions(
    df, outcome_col, time_col, treated_col, post_col, subgroup_col,
    intervention_time, unit_col, cluster_col=None,
    event_bin_size=7, label="triple_difference_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель `unit x time x subgroup`.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
treated_colstrдаФлаг treated-группы.
post_colstrдаФлаг post-периода.
subgroup_colstrдаФлаг подгруппы.
intervention_timeдата / str / pd.TimestampдаДата старта интервенции.
unit_colstrдаИдентификатор unit; нужен для построения subgroup-gap panel.
cluster_colstr или NoneнетУровень кластеризации ошибок.
event_bin_sizeintнетРазмер event-study бина в днях.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: полноту ячеек subgroup внутри unit x time, тренды subgroup gap на предпериоде, event-study лиды для этого gap, стабильность состава и параллельные изменения.

run_triple_difference_robustness(...)

run_triple_difference_robustness(
    df, outcome_col, time_col, treated_col, post_col, subgroup_col,
    intervention_time=None, unit_col=None, cluster_col=None,
    twfe_options=(False, True), log_options=(False, True),
    relative_options=(False, True), placebo_offsets_days=(28, 21, 14),
    pre_period_days_options=(None, 28, 56, 84),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель `unit x time x subgroup`.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
treated_colstrдаФлаг treated-группы.
post_colstrдаФлаг post-периода.
subgroup_colstrдаФлаг подгруппы.
intervention_timeдата / str / pd.Timestamp или NoneнетДата интервенции для placebo-прогонов.
unit_colstr или NoneнетИдентификатор unit; нужен для части спецификаций.
cluster_colstr или NoneнетУровень кластеризации ошибок.
twfe_optionstuple[bool, ...] или list[bool]нетНабор значений `twfe` для перебора.
log_optionstuple[bool, ...] или list[bool]нетНабор значений `log_transform` для перебора.
relative_optionstuple[bool, ...] или list[bool]нетНабор значений `relative` для перебора.
placebo_offsets_daystuple[int, ...] или list[int]нетСдвиги назад в днях для placebo-прогонов.
pre_period_days_optionsiterable[int или None]нетОкна предпериода для sensitivity-проверки.

Как проверяет устойчивость: перебирает DDD-спецификации twfe / log / relative, сравнивает стабильность тройного коэффициента и делает placebo-прогоны на предпериоде.

Synthetic Control

Формат данных для функции

sale_dateunitmetric
2026-02-10Batumi0.084
2026-02-10Tbilisi0.121
2026-02-10Kutaisi0.097

fit_synthetic_control(...)

fit_synthetic_control(
    df, outcome_col, unit_col, time_col, treated_unit, intervention_time,
    donor_units=None, max_controls=10, nonnegative_weights=True,
    label="synthetic_control",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаLong-panel формата `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаКолонка идентификатора unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата старта интервенции.
donor_unitslist[str] или NoneнетНеобязательный whitelist доноров.
max_controlsintнетМаксимум доноров после ранжирования.
nonnegative_weightsboolнетЕсли `True`, веса ограничиваются неотрицательностью.
labelstrнетТехническая подпись метода в output.

Возвращает summary, веса, выровненные ряды и два графика: actual/counterfactual и gap.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_synthetic_control_assumptions(...)

check_synthetic_control_assumptions(
    df, outcome_col, unit_col, time_col, treated_unit,
    intervention_time, donor_units=None, max_controls=10,
    pre_period_days_options=(None, 28, 56, 84),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаИдентификатор unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
donor_unitslist[str] или NoneнетНеобязательный whitelist доноров.
max_controlsintнетМаксимум доноров после ранжирования.
pre_period_days_optionsiterable[int или None]нетОкна предпериода для sensitivity-проверки.

Что проверяет: размер и чистоту donor pool, качество pre-fit synthetic ряда и риск загрязнения donor pool treated-изменениями.

run_synthetic_control_robustness(...)

run_synthetic_control_robustness(
    df, outcome_col, unit_col, time_col, treated_unit,
    intervention_time, donor_units=None, max_controls=10,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаПанель `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаИдентификатор unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
donor_unitslist[str] или NoneнетСписок допустимых доноров.
max_controlsintнетМаксимум доноров после ранжирования.

Как проверяет устойчивость: строит in-space placebo на донорах, считает leave-one-out варианты и проверяет, не держится ли вывод на одном доноре.

Causal Impact

Формат данных для функции

fit_causal_impact(...)

fit_causal_impact(
    df, outcome_col, unit_col, time_col, treated_unit, intervention_time,
    donor_units=None, max_controls=10, pre_period=None, post_period=None,
    label="causal_impact",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаLong-panel формата `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаИдентификатор unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата старта интервенции.
donor_unitslist[str] или NoneнетWhitelist доноров, если не хотим использовать всех.
max_controlsintнетМаксимум доноров после ранжирования.
pre_periodtuple[start, end] или NoneнетЯвное окно предпериода.
post_periodtuple[start, end] или NoneнетЯвное окно постпериода.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_causal_impact_assumptions(...)

fpr_placebo_count задаёт число placebo-прогонов Causal Impact для эмпирической FPR; по умолчанию 20.

check_causal_impact_assumptions(
    df, outcome_col, unit_col, time_col, treated_unit, intervention_time,
    donor_units=None, max_controls=10, pre_period=None, post_period=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаLong-panel формата `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаИдентификатор unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
donor_unitslist[str] или NoneнетДопустимые доноры для donor-pool.
max_controlsintнетМаксимум доноров после ранжирования.
pre_periodtuple[start, end] или NoneнетЯвное окно предпериода для donor/pre-fit diagnostics.
post_periodtuple[start, end] или NoneнетЯвное окно постпериода, если нужно фиксировать анализ вручную.

Что проверяет: полноту aligned panel, число и качество выбранных доноров, качество pre-fit на train/validation и чувствительность дизайна через proxy MDE.

run_causal_impact_robustness(...)

run_causal_impact_robustness(
    df, outcome_col, unit_col, time_col, treated_unit, intervention_time,
    donor_units=None, max_controls=10, placebo_offsets_days=(28, 21, 14),
    pre_period_days_options=(None, 28, 56, 84),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаLong-panel формата `unit x time`.
outcome_colstrдаИмя outcome-колонки.
unit_colstrдаИдентификатор unit.
time_colstrдаВременная колонка.
treated_unitstrдаНазвание treated unit.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
donor_unitslist[str] или NoneнетСписок допустимых доноров.
max_controlsintнетМаксимум доноров после ранжирования.
placebo_offsets_daystuple[int, ...] или list[int]нетСдвиги назад в днях для placebo A/A прогонов.
pre_period_days_optionsiterable[int или None]нетОкна предпериода для sensitivity-проверки.

Как проверяет устойчивость: запускает placebo с более ранними датами интервенции, делает leave-one-out по донорам и смотрит, не исчезает ли эффект после исключения одного донора.

Interrupted Time Series (ITS)

Формат данных для функции

sale_datemetricweather_tempholiday_flag
2026-01-01125.08.31
2026-02-25149.010.40

build_standard_its_features(...)

build_standard_its_features(
    df, time_col, intervention_time,
    include_day_of_week=True, include_month_start=True, include_month_end=True,
    holiday_dates=None, extra_feature_cols=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаДатафрейм с временным рядом.
time_colstrдаВременная колонка.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
include_day_of_weekboolнетДобавлять ли day-of-week dummy-признаки.
include_month_startboolнетДобавлять ли флаг начала месяца.
include_month_endboolнетДобавлять ли флаг конца месяца.
holiday_datesdict[date, str] или NoneнетСловарь вида `{дата: имя_фичи}` для праздничных флагов.
extra_feature_colslist[str] или NoneнетУже существующие внешние признаки, которые нужно включить в итоговый список фичей.

fit_its(...)

fit_its(
    df, outcome_col, time_col, intervention_time,
    feature_cols=None, extra_feature_cols=None,
    standardize_features=True, validation_days=14,
    hac_lags=7, label="its",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаВременной ряд.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
feature_colslist[str] или NoneнетЯвный список признаков, если фичи подготовлены вручную.
extra_feature_colslist[str] или NoneнетДополнительные признаки, если используется стандартная ветка feature engineering.
standardize_featuresboolнетЕсли `True`, пакет сам строит стандартные ITS-фичи.
validation_daysintнетРазмер holdout-валидации на предпериоде.
hac_lagsintнетЧисло лагов для `HAC/Newey-West` ковариации.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_its_assumptions(...)

fpr_placebo_count задаёт число placebo-прогонов для эмпирической FPR; по умолчанию 20.

check_its_assumptions(
    df, outcome_col, time_col, intervention_time,
    feature_cols=None, standardize_features=True,
    validation_days=14, hac_lags=7,
    recommended_min_pre_days=42, label="its_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаВременной ряд.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
feature_colslist[str] или NoneнетЯвный список признаков, если стандартные ITS-фичи не подходят.
standardize_featuresboolнетЕсли `True`, пакет строит стандартный набор ITS-фичей автоматически.
validation_daysintнетДлина holdout-валидации на предпериоде.
hac_lagsintнетЧисло лагов для `HAC/Newey-West` ковариации.
recommended_min_pre_daysintнетЭвристический ориентир минимальной длины предпериода.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: длину и полноту предпериода, holdout-качество прогноза, автокорреляцию и выбросы в остатках, а также явные внешние изменения, которые ломают single-series дизайн.

run_its_robustness(...)

run_its_robustness(
    df, outcome_col, time_col, intervention_time,
    pre_window_days_options=(56, 84, 112),
    placebo_offsets_days=(28, 21, 14),
    feature_sets=None, hac_lags=7,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаВременной ряд.
outcome_colstrдаИмя outcome-колонки.
time_colstrдаВременная колонка.
intervention_timeдата / str / pd.TimestampдаДата интервенции.
pre_window_days_optionstuple[int, ...] или list[int]нетНабор длин предпериода для sensitivity-check.
placebo_offsets_daystuple[int, ...] или list[int]нетНабор placebo-сдвигов на предпериоде.
feature_setsdict[str, list[str]] или NoneнетСловарь наборов признаков для перебора.
hac_lagsintнетЧисло лагов для `HAC/Newey-West`.

Как проверяет устойчивость: меняет длину предпериода, запускает placebo на более ранних датах и сравнивает эффект на разных наборах признаков.

Regression Discontinuity Design (RDD)

Формат данных для функции

runningoutcomex1
-0.422.830.17
-0.033.12-0.48
0.074.110.32

fit_rdd(...)

fit_rdd(
    df, outcome_col, running_col, cutoff,
    covariates=None, bandwidth=None,
    polynomial_order=1, kernel="triangular",
    label="rdd",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаСрез данных с running variable.
outcome_colstrдаИмя outcome-колонки.
running_colstrдаКолонка running variable.
cutofffloat или intдаПорог assignment rule.
covariateslist[str] или NoneнетДополнительные ковариаты для локальной регрессии.
bandwidthfloat или NoneнетЛокальное окно вокруг cutoff; `None` означает использовать весь диапазон.
polynomial_orderintнетПорядок полинома для функции running variable.
kernelstrнетТип весов, например `triangular`.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

check_rdd_assumptions(...)

check_rdd_assumptions(
    df, outcome_col, running_col, cutoff,
    covariates=None, bandwidth=None,
    density_bins=20, label="rdd_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаСрез данных с running variable.
outcome_colstrдаИмя outcome-колонки.
running_colstrдаКолонка running variable.
cutofffloat или intдаПорог assignment rule.
covariateslist[str] или NoneнетКовариаты для continuity-check около cutoff.
bandwidthfloat или NoneнетОкно вокруг cutoff.
density_binsintнетЧисло бинов для density diagnostic.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: число наблюдений по обе стороны cutoff, скачок плотности около порога и непрерывность ковариат рядом с cutoff.

run_rdd_robustness(...)

run_rdd_robustness(
    df, outcome_col, running_col, cutoff,
    covariates=None,
    bandwidth_options=(None, 0.5, 1.0),
    polynomial_orders=(1, 2),
    placebo_cutoffs=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаСрез данных с running variable.
outcome_colstrдаИмя outcome-колонки.
running_colstrдаКолонка running variable.
cutofffloat или intдаОсновной cutoff.
covariateslist[str] или NoneнетДополнительные ковариаты.
bandwidth_optionstuple[float | None, ...] или list[float | None]нетНабор bandwidth для sensitivity-check.
polynomial_orderstuple[int, ...] или list[int]нетНабор порядков полинома для перебора.
placebo_cutoffslist[float] или NoneнетСписок ложных cutoff. Если `None`, пакет подбирает их автоматически.

Как проверяет устойчивость: меняет bandwidth, меняет порядок полинома и проверяет, не возникает ли похожий эффект на placebo-cutoff.

Propensity Score Matching (PSM)

Формат данных для функции

treatment_flagoutcomex1x2x3
14.210.73-0.411
02.87-0.340.580
13.950.62-0.151

check_psm_assumptions(...)

check_psm_assumptions(
    df, outcome_col, treatment_col, covariate_cols,
    propensity_model=None, caliper=None, n_neighbors=1,
    label="psm_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг `0/1`.
covariate_colslist[str]даСписок ковариат для propensity-модели.
propensity_modelsklearn-estimator или NoneнетПользовательская модель propensity score.
caliperfloat или NoneнетОграничение расстояния по propensity score при matching.
n_neighborsintнетЧисло соседей на одно treated-наблюдение.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: overlap и common support, слишком сильное разделение групп propensity-моделью, баланс ковариат до и после matching и долю treated без мэтча.

fit_psm(...)

fit_psm(
    df, outcome_col, treatment_col, covariate_cols,
    propensity_model=None, caliper=None, n_neighbors=1,
    label="psm_att",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг `0/1`.
covariate_colslist[str]даСписок ковариат для propensity-модели.
propensity_modelsklearn-estimator или NoneнетПользовательская propensity-модель.
caliperfloat или NoneнетОграничение расстояния при мэтчинге.
n_neighborsintнетЧисло контрольных соседей на одно treated-наблюдение.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

run_psm_robustness(...)

run_psm_robustness(
    df, outcome_col, treatment_col, covariate_cols,
    caliper_options=(None, 0.05, 0.1),
    neighbor_options=(1, 3),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг.
covariate_colslist[str]даСписок ковариат.
caliper_optionstuple[float | None, ...] или list[float | None]нетНабор значений `caliper` для sensitivity-check.
neighbor_optionstuple[int, ...] или list[int]нетНабор значений `n_neighbors` для перебора.

Как проверяет устойчивость: меняет жесткость matching через caliper, меняет число соседей и сравнивает стабильность ATT.

Doubly Robust

Формат данных для функции

check_doubly_robust_assumptions(...)

check_doubly_robust_assumptions(
    df, outcome_col, treatment_col, covariate_cols,
    propensity_model=None, outcome_model=None,
    clip=0.01, label="doubly_robust_assumptions",
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг `0/1`.
covariate_colslist[str]даСписок ковариат.
propensity_modelsklearn-estimator или NoneнетПользовательская propensity-модель.
outcome_modelsklearn-estimator или NoneнетПользовательская outcome-модель.
clipfloatнетПорог clipping propensity score снизу и сверху.
labelstrнетТехническая подпись диагностического прогона.

Что проверяет: overlap propensity score, баланс ковариат до и после взвешивания и наличие экстремальных весов, которые могут дестабилизировать AIPW.

fit_doubly_robust(...)

fit_doubly_robust(
    df, outcome_col, treatment_col, covariate_cols,
    propensity_model=None, outcome_model=None,
    clip=0.01, model_family="linear",
    label="doubly_robust_ate",
    mde_mode="auto", alpha=0.05, power=0.80,
    alternative="two-sided", n_simulations=2000,
    random_state=None, mde_effect_grid=None,
    mde_simulator=None,
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг `0/1`.
covariate_colslist[str]даСписок ковариат.
propensity_modelsklearn-estimator или NoneнетПользовательская propensity-модель.
outcome_modelsklearn-estimator или NoneнетПользовательская outcome-модель.
clipfloatнетПорог clipping propensity score.
model_familystrнетСемейство дефолтных моделей, если свои estimators не переданы.
labelstrнетТехническая подпись метода в output.

Параметры MDE

ПараметрТип / значенияОписание
mde_modeauto, analytic, parametric, resampling, proxyРежим расчета MDE; по умолчанию auto.
alphafloat от 0 до 1Уровень ошибки первого рода; по умолчанию 0.05.
powerfloat от 0 до 1Целевая мощность; по умолчанию 0.80.
alternativetwo-sided, greater, lessНаправление теста; по умолчанию two-sided.
n_simulationsint > 0Число повторов; по умолчанию 2000.
random_stateint или NoneSeed генератора случайных чисел.
mde_effect_griditerable чисел или NoneЯвная сетка абсолютных эффектов.
mde_simulatorcallable или NoneСвой симулятор для resampling-режима.

run_doubly_robust_robustness(...)

run_doubly_robust_robustness(
    df, outcome_col, treatment_col, covariate_cols,
    clip_options=(0.01, 0.025, 0.05),
    model_families=("linear", "forest"),
)
ПараметрТип / значенияОбязателенОписание
dfpd.DataFrameдаObservational dataset.
outcome_colstrдаИмя outcome-колонки.
treatment_colstrдаБинарный treatment-флаг `0/1`.
covariate_colslist[str]даСписок ковариат.
clip_optionstuple[float, ...] или list[float]нетНабор clipping-порогов для перебора.
model_familiestuple[str, ...] или list[str]нетНабор семейств моделей для sensitivity-check.

Как проверяет устойчивость: меняет clipping propensity score, меняет семейство nuisance-моделей и сравнивает стабильность итогового ATE.

Совместимость окружения

ensure_runtime_compat()

from post_analysis_toolkit.compat import ensure_runtime_compat