Многоуровневый протокол обработки выбросов в данных
Промпт задаёт воспроизводимую систему обнаружения и обработки выбросов с объединением статистических методов и предметных правил. Результат должен включать модульный код, decision engine, отчётность и проверки для реального пайплайна.
Соблюдай все обязательные требования ниже. Верни только итоговый результат в требуемом формате. Не добавляй вступления, комментарии о процессе, предупреждения, альтернативные версии или просьбы что-либо уточнить. Если часть входных данных отсутствует и исходный промпт допускает рабочие предположения, явно фиксируй их только там, где это прямо требуется. Сохраняй placeholders, JSON, YAML, SQL, код, формулы, названия метрик, пороги, порядок разделов и другие обязательные технические элементы без искажений.
Ниже приведён исходный замысел и обязательные ограничения. Сохрани смысл, полноту и прикладную ценность, но сделай ответ максимально однозначным, компактным и готовым к использованию с первой попытки.
Вы — статистический аналитик. Вам передаётся набор входных параметров, которые обязательно должны быть подставлены пользователем перед запуском:
- {dataset_input} — путь к файлу или объект DataFrame (указать формат: CSV/Parquet/DB connection/пандас DataFrame).
- {dataset_description} — краткое текстовое описание данных (предметная область, какие объекты представлены).
- {schema} — словарь/таблица со столбцами: имя столбца, тип данных (одно из: numeric_continuous, numeric_discrete, categorical, datetime, boolean, text), краткое описание значения и примеры допустимых значений.
- {business_context} — цель и ограничения бизнеса (например: повышение качества прогноза спроса, соответствие нормативам, сохранение наблюдений для аудита и т.д.).
- {target_analysis} — тип аналитики/задачи, ради которой подготавливается набор (одно из: forecasting, regression, classification, clustering, anomaly_detection, descriptive_statistics).
- {domain_rules} — список предметно-специфических правил/ограничений в виде структурированных записей (каждое правило: применимые столбцы/шаблон имён, условие/логика, приоритет, рекомендуемое действие).
- {programming_language} — язык реализации (одно из: python, r). Укажите зависимости/версии, если нужно.
Задача
Разработайте и реализуйте многоуровневый, воспроизводимый подход к обнаружению и обработке выбросов, который:
1. Комбинирует статистические методы:
- Z-оценка (Z-score) для нормально распределённых числовых признаков,
- IQR (межквартильный размах) для устойчивого обнаружения в распределениях со сдвигом/асимметрией,
- Isolation Forest (или эквивалент) для мультивариантного/контекстного обнаружения.
2. Интегрирует предметно-специфические правила из {domain_rules} с возможностью переопределять/усилить статистические срабатывания по приоритету.
3. Для каждого столбца из {schema} выбирает одну из стратегий: remove (удалять), cap (ограничивать/capping), transform (преобразовать — например лог/Box-Cox/binning), investigate (дальнейшее исследование/ручная проверка), или keep_untouched; и даёт однозначные критерии принятия решения с указанием порогов/параметров.
4. Предоставляет воспроизводимый код на {programming_language} с готовыми к использованию функциями/модулями, конфигурируемыми гиперпараметрами и примерами применения к {dataset_input}.
Требования к реализации (чётко и строго):
- Общая архитектура:
- Модуль/функция для загрузки данных и валидации по {schema}.
- Модуль/функция для унификации типов столбцов (приведение типов, обработка пропусков по правилам).
- Модуль/функция для однопеременных детекторов: zscore_detector(column, z_thresh), iqr_detector(column, k).
- Модуль/функция для многомерных детекторов: isolation_forest_detector(df, contamination, features).
- Модуль для комбинирования результатов детекторов: ensemble_scoring(методы, веса) — выдаёт для каждого наблюдения и столбца финальный score и флаги.
- Модуль применения предметных правил ({domain_rules}) с учётом приоритета.
- Decision engine: принимает на вход score/флаги/правила/тип столбца/{target_analysis} и возвращает action (remove/cap/transform/investigate/keep_untouched) + параметры (напр., cap_lower, cap_upper, transform_type) и обоснование (rationale).
- Функции для применения выбранного действия к данным и сохранения результирующего датасета.
- Функция генерации отчёта (формат: DataFrame/CSV/JSON) со столбцами: column_name, type, n_outliers_detected, methods_triggered, ensemble_score_summary, chosen_action, action_parameters, rationale, sample_affected_rows (index/sample), recommendations for further steps.
- Логи и конфигурация параметров (возможность задать/подставить пороги без правки кода).
- Конкретность критериев:
- Для z-score: укажите используемый метод расчёта (включая обработку пропусков), порог по умолчанию (предложите разумный дефолт и диапазон), и как поступать при малом размере выборки.
- Для IQR: укажите k (обычно 1.5) и предложите альтернативы для жёсткой/мягкой фильтрации.
- Для Isolation Forest: укажите процедуру настройки contamination, seed, выбор признаков, стандартизацию, и как интерпретировать аномальный скор.
- Для комбинирования: опишите, как конвертировать разные индикаторы в общий score (например нормализация, логика OR/AND, взвешенное среднее) и приведите рекомендуемые веса для типичных сценариев.
- Для предметных правил: строгое правило должно иметь преимущество перед статистикой; правило с низким приоритет — только пометка/investigate.
- Решения по типам столбцов ({schema}):
- Для каждого типа (numeric_continuous, numeric_discrete, categorical, datetime, boolean, text) опишите:
- какие детекторы применять и почему,
- какие решения (remove/cap/transform/investigate/keep_untouched) предпочтительны в зависимости от {target_analysis} и {business_context},
- конкретные примеры порогов/трансформаций (напр., для numeric_continuous в regression: cap на 1st/99th percentiles; в forecasting — осторожное capping с лог-трансформацией и отдельная метка для экстремумов),
- как обрабатывать мультиколлинеарные или контекстно-зависимые значения.
- Выходы:
- Код должен при выполнении на {dataset_input}:
- вернуть отчёт (DataFrame/CSV/JSON) с решением по каждому столбцу,
- сохранить преобразованный датасет (по пути или вернуть объект),
- сохранить журнал (log) с параметрами и версиями библиотек,
- визуальные примеры (по крайней мере histogram/boxplot/score distribution) для 3-5 ключевых столбцов (если {programming_language} поддерживает визуализацию).
- В отчёте укажите чёткую инструкцию по тому, какие обработанные наблюдения были удалены/изменены и почему (индексы или фильтр).
- Тестирование и воспроизводимость:
- Добавьте пример вызова/скрипт с примерной конфигурацией параметров (включая значения порогов).
- Укажите минимальные юнит-тесты/проверки (напр., сохранение формы данных, отсутствие новых NaN, сохранение типов).
- Перечислите зависимости (пакеты и версии) и требования к среде выполнения.
Ограничения и правила:
- Не меняйте бизнес-цель {business_context} и target_analysis {target_analysis}.
- Не удаляйте автоматически данные, защищённые предметными правилами с высоким приоритет — в таких случаях предложите annotate + investigate.
- Решения должны быть объяснимы (no black-box-only decisions): каждая автоматическая операция должна сопровождаться rationale.
- Если для какого-либо столбца решение зависит от отсутствующих данных/метаданных, пометьте столбец как investigate с указанием, каких дополнительных данных/валидностей не хватает.
Формат вывода запроса:
- Верните только:
1) Полный, готовый к использованию код на {programming_language}, структурированный по модулям/функциям как указано выше, с комментариями и примером запуска на {dataset_input}.
2) Отчёт в виде DataFrame/CSV/JSON (пример структуры и пример строки).
3) Краткий (не более 10 строк) шаг за шагом guide по использованию (какие файлы/параметры менять).
- Не добавляйте пояснений сверх указанных выходов.
ChatGPT, Claude, GigaChat, Алиса ИИ, По нейросетям, Типы промптов, Яндекс GPT