Модификаторы эффектов
Модификаторы эффектов используются для моделирования синтетических эффектов при анализе мощности и тестировании.
GroupModifier
Модификатор эффекта для групп
Добавляет синтетический эффект к данным определенной группы, изменяя значения целевой переменной на заданную величину. Используется для моделирования различий между группами при анализе мощности тестов.
Инициализация
def __init__(
self,
effects: Dict,
value_column="value",
group_column="group",
method=operator.add
)
Параметры
- effects (Dict): Словарь с эффектами для каждой группы. Ключ - название группы, значение - величина эффекта.
- value_column (str): Название колонки, содержащей значения для модификации. По умолчанию
"value". - group_column (str): Название колонки, содержащей идентификаторы групп. По умолчанию
"group". - method (callable): Метод применения эффекта (например,
operator.addдля сложения,operator.mulдля умножения). По умолчаниюoperator.add.
Методы
add_effect
Применяет модификацию эффекта к списку групп (каждая группа — отдельный pd.DataFrame).
Параметры:
- groups (List[pd.DataFrame]): Список датафреймов групп, к которым нужно добавить эффект.
Возвращает:
- List[pd.DataFrame]: Список модифицированных групп с добавленным эффектом.
Примеры использования
import pandas as pd
import numpy as np
from aboba.effect_modifiers import GroupModifier
# Создаем тестовые данные с двумя группами
np.random.seed(42)
data = pd.DataFrame({
'group': ['control'] * 100 + ['test'] * 100,
'target': np.random.normal(10, 2, 200)
})
# Разбиваем данные на контроль и тест как отдельные группы
control = data[data['group'] == 'control'].copy()
test = data[data['group'] == 'test'].copy()
groups = [control, test]
# Создаем модификатор с эффектом +1.5 для тестовой группы 'test'
modifier = GroupModifier(
effects={'test': 1.5},
value_column='target',
group_column='group',
)
# Применяем модификацию к списку групп
modified_groups = modifier.add_effect(groups)
modified_control, modified_test = modified_groups
# При необходимости объединяем группы обратно
modified_data = pd.concat(modified_groups, ignore_index=True)
print(f"Среднее в контроле: {modified_control['target'].mean():.2f}")
print(f"Среднее в тесте: {modified_test['target'].mean():.2f}")