Перейти к содержанию

Модификаторы эффектов

Модификаторы эффектов используются для моделирования синтетических эффектов при анализе мощности и тестировании.

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

def add_effect(self, groups: List[pd.DataFrame]) -> List[pd.DataFrame]

Применяет модификацию эффекта к списку групп (каждая группа — отдельный 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}")