post-analysis-toolkit 1.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- post_analysis_toolkit/MDE_METHODOLOGY.md +272 -0
- post_analysis_toolkit/README.md +1130 -0
- post_analysis_toolkit/REFERENCE.html +1173 -0
- post_analysis_toolkit/REFERENCE.md +1614 -0
- post_analysis_toolkit/__init__.py +98 -0
- post_analysis_toolkit/causal_impact.py +580 -0
- post_analysis_toolkit/compat.py +70 -0
- post_analysis_toolkit/contracts.py +45 -0
- post_analysis_toolkit/demo.py +231 -0
- post_analysis_toolkit/did.py +920 -0
- post_analysis_toolkit/its.py +577 -0
- post_analysis_toolkit/mde.py +330 -0
- post_analysis_toolkit/mde_resampling.py +82 -0
- post_analysis_toolkit/observational.py +774 -0
- post_analysis_toolkit/rdd.py +403 -0
- post_analysis_toolkit/synthetic_control.py +477 -0
- post_analysis_toolkit/triple_difference.py +481 -0
- post_analysis_toolkit/utils.py +268 -0
- post_analysis_toolkit/visualization.py +207 -0
- post_analysis_toolkit-1.0.1.dist-info/METADATA +1150 -0
- post_analysis_toolkit-1.0.1.dist-info/RECORD +23 -0
- post_analysis_toolkit-1.0.1.dist-info/WHEEL +5 -0
- post_analysis_toolkit-1.0.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
# Методология расчета MDE в пост-анализах
|
|
2
|
+
|
|
3
|
+
Этот документ фиксирует рабочий стандарт для Minimum Detectable Effect (MDE),
|
|
4
|
+
или минимального обнаруживаемого эффекта, в пост-анализах.
|
|
5
|
+
|
|
6
|
+
## 1. Что именно измеряет MDE
|
|
7
|
+
|
|
8
|
+
MDE отвечает на вопрос:
|
|
9
|
+
|
|
10
|
+
> Какой минимальный истинный эффект при текущем дизайне, размере данных,
|
|
11
|
+
> уровне шума и выбранном методе мы обнаружим с заданной вероятностью?
|
|
12
|
+
|
|
13
|
+
MDE не является универсальным числом для датасета. Он зависит одновременно от:
|
|
14
|
+
|
|
15
|
+
- estimand: средней дневной разницы, эффекта в день интервенции, изменения
|
|
16
|
+
наклона, cumulative effect, ATT/ATE и т.д.;
|
|
17
|
+
- метрики и ее масштаба;
|
|
18
|
+
- предпериода и постпериода;
|
|
19
|
+
- единицы анализа и единицы кластеризации;
|
|
20
|
+
- дисперсии, автокорреляции и пропусков;
|
|
21
|
+
- контрольной группы или donor pool;
|
|
22
|
+
- спецификации модели и преобразования outcome;
|
|
23
|
+
- `alpha`, `power` и типа теста.
|
|
24
|
+
|
|
25
|
+
Поэтому MDE нужно считать для конкретной спецификации, а не один раз для
|
|
26
|
+
всего пост-анализа.
|
|
27
|
+
|
|
28
|
+
## 2. Зафиксированные значения по умолчанию
|
|
29
|
+
|
|
30
|
+
Если пользователь не задал другие значения, используем:
|
|
31
|
+
|
|
32
|
+
| Параметр | Значение по умолчанию | Смысл |
|
|
33
|
+
|---|---:|---|
|
|
34
|
+
| `alpha` | `0.05` | Допустимая вероятность ошибки первого рода |
|
|
35
|
+
| `power` | `0.80` | Вероятность обнаружить эффект размера MDE |
|
|
36
|
+
| `alternative` | `"two-sided"` | Двусторонняя проверка эффекта |
|
|
37
|
+
| базовый тест | `t-test` | Используется, если метрика и дизайн допускают такую аппроксимацию |
|
|
38
|
+
|
|
39
|
+
`alpha=0.05` означает 5%-ный уровень значимости, а `power=0.80` означает,
|
|
40
|
+
что эффект размера MDE должен быть обнаружен примерно в 80% повторений при
|
|
41
|
+
истинном наличии такого эффекта.
|
|
42
|
+
|
|
43
|
+
## 3. Какие формы MDE нужно возвращать
|
|
44
|
+
|
|
45
|
+
Для основного estimand возвращаем минимум три представления:
|
|
46
|
+
|
|
47
|
+
1. `MDE absolute` — эффект в единицах исходной метрики. Например, `+12
|
|
48
|
+
заказов в день` или `+0.004` для доли заказов.
|
|
49
|
+
2. `MDE relative` — абсолютный MDE, деленный на явно указанный baseline. В
|
|
50
|
+
процентах: `MDE_abs / baseline * 100%`.
|
|
51
|
+
3. `MDE cumulative` — минимальный эффект за весь постпериод. Для additive
|
|
52
|
+
метрик это сумма дневных эффектов; для rate/ratio метрик нужно явно
|
|
53
|
+
указать, является ли cumulative estimand суммой числителей, средней
|
|
54
|
+
разницей или другой агрегированной величиной.
|
|
55
|
+
|
|
56
|
+
Нельзя молча называть средний дневной MDE cumulative MDE. В результате должны
|
|
57
|
+
быть явно указаны `estimand`, baseline и длина постпериода.
|
|
58
|
+
|
|
59
|
+
## 4. Аналитический MDE
|
|
60
|
+
|
|
61
|
+
Если оценка эффекта имеет корректную стандартную ошибку `SE`, базовая формула
|
|
62
|
+
для двустороннего теста имеет вид:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
MDE_abs = (z_(1 - alpha/2) + z_power) * SE(effect)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
При `alpha=0.05` и `power=0.80` множитель примерно равен `1.96 + 0.84 =
|
|
69
|
+
2.80`.
|
|
70
|
+
|
|
71
|
+
Для независимых средних непрерывной метрики:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
SE = SD * sqrt(1 / n_control + 1 / n_treated)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Но в пост-анализе нельзя автоматически использовать обычную формулу для
|
|
78
|
+
независимых наблюдений. Если есть повторные измерения по пиццериям, городам,
|
|
79
|
+
клиентам или дням, в `SE` должны быть учтены соответствующие зависимости:
|
|
80
|
+
|
|
81
|
+
- cluster-robust SE для кластеризации;
|
|
82
|
+
- HAC/Newey-West SE для временной автокорреляции;
|
|
83
|
+
- design-specific variance для RDD, взвешивания и matching;
|
|
84
|
+
- bootstrap или permutation distribution, если аналитическая дисперсия
|
|
85
|
+
ненадежна.
|
|
86
|
+
|
|
87
|
+
Для DiD и DDD аналитический MDE считается для коэффициента interaction. Для
|
|
88
|
+
ITS — отдельно для выбранного estimand уровня/наклона или линейной комбинации
|
|
89
|
+
постпериодных эффектов. Для RDD — для скачка в cutoff при выбранных bandwidth,
|
|
90
|
+
kernel и порядке полинома.
|
|
91
|
+
|
|
92
|
+
## 5. Когда нужен proxy MDE
|
|
93
|
+
|
|
94
|
+
`Proxy MDE` — это быстрая приблизительная оценка чувствительности, а не
|
|
95
|
+
полноценный MDE конкретного дизайна. Она появляется, когда у выбранного
|
|
96
|
+
estimand нет надежной стандартной ошибки, которую можно напрямую подставить в
|
|
97
|
+
формулу.
|
|
98
|
+
|
|
99
|
+
Типичные причины:
|
|
100
|
+
|
|
101
|
+
- estimand построен как средний gap между фактом и сложным counterfactual;
|
|
102
|
+
- counterfactual получен через Synthetic Control или Causal Impact;
|
|
103
|
+
- модель использует временную зависимость, state-space компоненты или
|
|
104
|
+
matching;
|
|
105
|
+
- итоговая оценка является нелинейной функцией нескольких шагов;
|
|
106
|
+
- библиотека не предоставляет дисперсию именно для нужного агрегированного
|
|
107
|
+
estimand;
|
|
108
|
+
- нужна быстрая диагностика до запуска дорогих симуляций.
|
|
109
|
+
|
|
110
|
+
В текущей версии пакета proxy оценивается через масштаб ошибки прогноза:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
proxy_MDE ~= (z_alpha + z_power) * noise_scale / sqrt(n_post)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
где `noise_scale` обычно равен pre-fit RMSE или validation RMSE. Такое число
|
|
117
|
+
полезно как screening-сигнал, но его нельзя интерпретировать как строгий
|
|
118
|
+
power calculation для Synthetic Control, Causal Impact, ITS, PSM или Doubly
|
|
119
|
+
Robust.
|
|
120
|
+
|
|
121
|
+
## 6. Симуляционный MDE как основной стандарт
|
|
122
|
+
|
|
123
|
+
Основной режим MDE в пакете — расчет через симуляции. Это относится и к методам, где
|
|
124
|
+
аналитическая формула потенциально существует: симуляция лучше отражает весь
|
|
125
|
+
фактический pipeline и делает результаты сопоставимыми между методами.
|
|
126
|
+
Аналитический MDE остается отдельной опцией для быстрых проверок и моделей, где
|
|
127
|
+
его предпосылки явно выполнены. Общая схема такого расчета:
|
|
128
|
+
|
|
129
|
+
### 6.1. Как работает текущая реализация
|
|
130
|
+
|
|
131
|
+
В текущем `mde_mode="parametric"` используется параметрическая симуляция
|
|
132
|
+
распределения оценки эффекта. Для каждой точки сетки эффектов `delta` пакет
|
|
133
|
+
много раз получает случайную оценку: к этому эффекту добавляется случайная
|
|
134
|
+
ошибка с заданным масштабом:
|
|
135
|
+
|
|
136
|
+
```text
|
|
137
|
+
simulated_estimate = delta + Normal(0, uncertainty_scale)
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Где `uncertainty_scale` определяется так:
|
|
141
|
+
|
|
142
|
+
| Группа методов | Масштаб неопределенности |
|
|
143
|
+
|---|---|
|
|
144
|
+
| DiD, DDD, RDD, PSM, Doubly Robust | Стандартная ошибка оценки эффекта (`SE`) |
|
|
145
|
+
| Event Study | Стандартная ошибка коэффициента соответствующего временного бина (`SE`); MDE считается отдельно по каждому бину |
|
|
146
|
+
| Synthetic Control | `pre-fit RMSE / sqrt(n_post)` |
|
|
147
|
+
| Causal Impact | `validation RMSE / sqrt(n_post)` |
|
|
148
|
+
| ITS | `validation RMSE / sqrt(n_post)` |
|
|
149
|
+
|
|
150
|
+
Для каждой точки `delta` выполняется `n_simulations` повторов. Затем считается
|
|
151
|
+
доля повторов, для которых нулевая гипотеза отвергнута при заданном `alpha`.
|
|
152
|
+
Эта доля является оценкой мощности для данного `delta`. Power curve сохраняется
|
|
153
|
+
в `result.details["mde_power_curve"]`, а первым значением `delta`, для которого
|
|
154
|
+
мощность достигает `power`, считается MDE.
|
|
155
|
+
|
|
156
|
+
Параметрическая реализация действительно выполняет симуляции, но не создает
|
|
157
|
+
новые строки исходного датасета и не переобучает модель на каждом draw. В
|
|
158
|
+
частности, она не повторяет заново подбор доноров, matching, оптимизацию весов,
|
|
159
|
+
state-space fit или инженеринг ITS-фичей. Для сложных методов это быстрый
|
|
160
|
+
MDE на основе параметрической симуляции.
|
|
161
|
+
|
|
162
|
+
В режиме `mde_mode="resampling"` пакет генерирует псевдоданные из
|
|
163
|
+
counterfactual/fitted values без эффекта, добавляет центрированные остатки,
|
|
164
|
+
вставляет кандидатный эффект и заново запускает оцениватель. Поэтому этот режим
|
|
165
|
+
может заново подбирать matching, веса Synthetic Control, state-space модель
|
|
166
|
+
Causal Impact и регрессию ITS. Для методов с нестандартным пользовательским
|
|
167
|
+
pipeline можно передать `mde_simulator` с сигнатурой
|
|
168
|
+
`(effect, rng, n_simulations) -> array[estimate]`.
|
|
169
|
+
|
|
170
|
+
Точный режим можно воспроизводить через `random_state`. Для более точной сетки
|
|
171
|
+
эффектов используется параметр `mde_effect_grid`.
|
|
172
|
+
|
|
173
|
+
1. Зафиксировать реальный pre-period, post-period, donor pool/контрольную
|
|
174
|
+
группу и все параметры метода.
|
|
175
|
+
2. Оценить нулевую модель или counterfactual на предпериоде.
|
|
176
|
+
3. Задать сетку потенциальных истинных эффектов, например `0%`, `5%`, `10%`,
|
|
177
|
+
`15%`, `20%`.
|
|
178
|
+
4. Для каждого размера эффекта сгенерировать много псевдопостпериодов,
|
|
179
|
+
добавив эффект к counterfactual по заранее выбранной форме:
|
|
180
|
+
- постоянный level shift;
|
|
181
|
+
- изменение slope;
|
|
182
|
+
- эффект только на часть post-period;
|
|
183
|
+
- additive или multiplicative effect.
|
|
184
|
+
5. Повторить оценку эффекта и выбранный тест. Если передан method-specific
|
|
185
|
+
callback, он должен полностью повторять pipeline, включая подбор/фиксацию
|
|
186
|
+
контроля. В текущем базовом API используется параметрическая симуляция
|
|
187
|
+
распределения оценки эффекта с SE или ошибкой проверки прогноза как масштабом
|
|
188
|
+
неопределенности.
|
|
189
|
+
6. Считать долю симуляций, где нулевая гипотеза отвергнута при заданном
|
|
190
|
+
`alpha`.
|
|
191
|
+
7. MDE — минимальный размер эффекта, для которого эта доля достигает `power`.
|
|
192
|
+
8. Повторить расчет для absolute, relative и cumulative estimands.
|
|
193
|
+
|
|
194
|
+
Ключевой принцип: симуляция должна повторять весь реальный pipeline. Если в
|
|
195
|
+
боевом анализе donor pool подбирается заново, этот шаг нельзя молча заменить
|
|
196
|
+
фиксированным контролем только ради меньшего времени выполнения.
|
|
197
|
+
|
|
198
|
+
## 7. Число симуляций
|
|
199
|
+
|
|
200
|
+
Число симуляций должно быть параметром функции. Рекомендуемый контракт:
|
|
201
|
+
|
|
202
|
+
| Параметр | Значение по умолчанию | Допустимые режимы |
|
|
203
|
+
|---|---:|---|
|
|
204
|
+
| `mde_mode` | `"auto"` | `"auto"`, `"analytic"`, `"parametric"`, `"resampling"`, `"proxy"`; `"simulation"` — алиас `"parametric"` |
|
|
205
|
+
| `n_simulations` | `2000` | положительное целое; используется в simulation-режиме |
|
|
206
|
+
| `random_state` | `None` | `int` или `None`; seed сохраняется в metadata |
|
|
207
|
+
|
|
208
|
+
Рекомендуемый стандарт:
|
|
209
|
+
|
|
210
|
+
| Режим | `n_simulations` | Использование |
|
|
211
|
+
|---|---:|---|
|
|
212
|
+
| быстрый просмотр | `500` | локальная разработка и отладка |
|
|
213
|
+
| рабочий расчет | `2000` | значение по умолчанию для интерактивного анализа |
|
|
214
|
+
| финальный отчет | `5000` или больше | публикация результата и устойчивые оценки мощности |
|
|
215
|
+
|
|
216
|
+
Если placebo/permutation-пулы маленькие, лучше использовать все допустимые
|
|
217
|
+
перестановки, а не случайно генерировать больше повторов, чем позволяет
|
|
218
|
+
дизайн. Для симуляций обязательно поддерживать `random_state`/`seed` и
|
|
219
|
+
сохранять его в metadata.
|
|
220
|
+
|
|
221
|
+
## 8. Интервалы неопределенности MDE
|
|
222
|
+
|
|
223
|
+
Для симуляционного MDE нужно показывать не только точку, но и неопределенность
|
|
224
|
+
из-за конечного числа симуляций. Доля обнаружений является биномиальной
|
|
225
|
+
величиной; для нее следует сохранять число успешных обнаружений, число всех
|
|
226
|
+
симуляций и интервал для estimated power. Границу MDE можно получать:
|
|
227
|
+
|
|
228
|
+
- интерполяцией по сетке эффектов;
|
|
229
|
+
- бинарным поиском по размеру эффекта при монотонной power curve;
|
|
230
|
+
- с обязательной маркировкой, если power curve немонотонна или сетка слишком
|
|
231
|
+
редкая.
|
|
232
|
+
|
|
233
|
+
## 9. Что должно быть в результате API
|
|
234
|
+
|
|
235
|
+
MDE-блок результата должен содержать:
|
|
236
|
+
|
|
237
|
+
- `estimand` и его описание;
|
|
238
|
+
- `mde_absolute`, `mde_relative`, `mde_cumulative`;
|
|
239
|
+
- `alpha`, `power`, `alternative`;
|
|
240
|
+
- `method` и полную спецификацию модели;
|
|
241
|
+
- `mde_type`: `analytic`, `simulation`, `proxy`;
|
|
242
|
+
- `mde_simulation_kind`: `parametric_effect_draws` или `residual_bootstrap_pipeline`;
|
|
243
|
+
- `n_simulations`, `random_state` для симуляционного режима;
|
|
244
|
+
- baseline и denominator для relative MDE;
|
|
245
|
+
- длину post-period и правило агрегации cumulative MDE;
|
|
246
|
+
- таблицу power curve;
|
|
247
|
+
- график power curve;
|
|
248
|
+
- ограничения и предупреждения.
|
|
249
|
+
|
|
250
|
+
## 10. Правила интерпретации
|
|
251
|
+
|
|
252
|
+
- Если эффект меньше MDE, отсутствие статистической значимости не доказывает
|
|
253
|
+
отсутствие эффекта.
|
|
254
|
+
- Если MDE больше практически важного эффекта, дизайн недостаточно чувствителен
|
|
255
|
+
для данного вопроса.
|
|
256
|
+
- Если эффект статистически значим, но меньше заранее важного порога, нужно
|
|
257
|
+
отдельно обсуждать практическую значимость.
|
|
258
|
+
- Relative MDE нельзя считать без явного baseline.
|
|
259
|
+
- Для ratio/долевых метрик denominator и уровень агрегации должны быть частью
|
|
260
|
+
estimand, иначе relative/cumulative MDE может быть misleading.
|
|
261
|
+
- Proxy MDE нельзя смешивать с analytic или simulation MDE в одной колонке без
|
|
262
|
+
поля `mde_type`.
|
|
263
|
+
|
|
264
|
+
## 11. Статус реализации в пакете
|
|
265
|
+
|
|
266
|
+
`fit_*`-функции пакета поддерживают `mde_mode="auto"` по умолчанию:
|
|
267
|
+
аналитический расчет выбирается при наличии корректной SE, а для методов без
|
|
268
|
+
аналитической формы используется параметрическая симуляция. Режим
|
|
269
|
+
`mde_mode="parametric"` можно включить явно, а `mde_mode="resampling"` запускает
|
|
270
|
+
повторную генерацию данных и переоценку поддержанного pipeline. Значение
|
|
271
|
+
`mde_mode="simulation"` сохранено для обратной совместимости как алиас
|
|
272
|
+
параметрического режима.
|