Skip to content

Commit 86a82ff

Browse files
authored
Merge pull request #20 from Yurashku/codex/add-sn-dr-and-switch-dr-estimators
Clarify advanced off-policy estimators
2 parents a8f08f5 + bd5fa02 commit 86a82ff

2 files changed

Lines changed: 214 additions & 266 deletions

File tree

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
- **Replay** — учитывает только те логи, где B совпадает с A.
1515
- **IPS** — взвешивает отклики по отношению вероятностей выбора в B и A.
1616
- **SNIPS** — нормализует веса IPS для меньшей дисперсии.
17-
- **Doubly Robust** — комбинирует модель отклика и IPS; достаточно корректности хотя бы одной из них.
17+
- **Direct Method** — строит модель отклика и прогнозирует исходы под политикой B.
18+
- **Doubly Robust** — комбинирует Direct Method и IPS; достаточно корректности хотя бы одной из них.
1819
- **SN-DR** — нормализует поправку Doubly Robust, что снижает дисперсию.
1920
- **Switch-DR** — применяет IPS-поправку только при малых весах, иначе полагается на модель.
2021

@@ -23,6 +24,7 @@
2324
- **Replay** — новая политика должна часто совпадать со старой, иначе большинство логов отбрасывается.
2425
- **IPS** — требует точного знания вероятностей действий в обеих политиках; большие веса увеличивают дисперсию.
2526
- **SNIPS** — нормализует веса IPS и снижает дисперсию, но остаётся чувствительным к ошибкам вероятностей и малым объёмам данных.
27+
- **Direct Method** — зависит от точности модели отклика и может смещаться вне обучающей области.
2628
- **Doubly Robust** — корректность достигается, если верна хотя бы модель отклика или пропенсити, но метод чувствителен к ошибкам обеих моделей и выбору клиппинга.
2729
- **SN-DR** — уменьшает дисперсию DR за счёт нормализации весов, но наследует его предположения.
2830
- **Switch-DR** — отбрасывает экстремальные веса, сочетая DM и DR, но выбор порога влияет на смещение.
@@ -91,6 +93,7 @@ from policyscope.estimators import (
9193
replay_value,
9294
ips_value,
9395
snips_value,
96+
dm_value,
9497
dr_value,
9598
sndr_value,
9699
switch_dr_value,
@@ -107,10 +110,11 @@ mu_hat = train_mu_hat(df, target="accept")
107110
V_replay = replay_value(df, policyB, target="accept")
108111
V_ips, ess_ips, clip_ips = ips_value(df, piB_taken, pA_taken, target="accept")
109112
V_snips, ess_snips, clip_snips = snips_value(df, piB_taken, pA_taken, target="accept")
113+
V_dm = dm_value(df, policyB, mu_hat, target="accept")
110114
V_dr, ess_dr, clip_dr = dr_value(df, policyB, mu_hat, pA_taken, target="accept")
111115
V_sndr, ess_sndr, clip_sndr = sndr_value(df, policyB, mu_hat, pA_taken, target="accept")
112116
V_switch, ess_switch, share_switch = switch_dr_value(df, policyB, mu_hat, pA_taken, tau=20, target="accept")
113-
print(V_replay, V_ips, V_snips, V_dr, V_sndr, V_switch)
117+
print(V_replay, V_ips, V_snips, V_dm, V_dr, V_sndr, V_switch)
114118
```
115119

116120
## Валидация оценок

0 commit comments

Comments
 (0)