Стратегия удаления выбросов в искаженных данных о цепочке поставокPython

Программы на Python
Ответить
Anonymous
 Стратегия удаления выбросов в искаженных данных о цепочке поставок

Сообщение Anonymous »

Я работаю над исследовательским проектом, включающим Сопоставление прогнозов цепочки поставок, и застрял в поиске наилучшей стратегии обработки выбросов. Мне бы хотелось получить совет с точки зрения разработки функций.
1. Цель: я создаю модель классификации (XGBoost), чтобы предсказать, соответствует ли «Новый прогноз» «Существующему порядку» на основе исторического поведения. Цель является двоичной (is_match 1 или 0).
2. Данные:
  • Объем: ~ 21 000 пар исторических обновлений.
  • Ключевые особенности: Я рассчитываю разницу между старыми и новыми заказами:

    delta_days: разница в дате доставки (например, +5 дней). задержка).
  • delta_qty_pct: Процентное изменение количества (например, +0,10 для увеличения на 10 %).
[*]Характер данных: Данные сильно искажены (с толстыми хвостами). Большинство обновлений невелики (0–5 дней), но законные деловые события могут вызвать значительные сдвиги (например, 60-дневные задержки), которые не являются ошибками данных.


3. Конфликт (проблема 50 %): мне нужно очистить «мусорные данные» (например, опечатки, вызывающие задержки в 5000 дней), не устраняя при этом действительную волатильность бизнеса.
  • Проблема: Когда я применил стандартный метод IQR (1,5 * IQR) глобально, он удалил ~50% моих данных. набор данных (уменьшился с 21 тыс. до 10 тыс. строк).
  • Почему: Поскольку межквартильный диапазон очень узок (большинство обновлений равны 0), границы IQR стали чрезвычайно узкими (например, от -14 до +10 дней). По сути, любая «значительная задержка» (например, 20 дней) рассматривается как выброс, хотя 20-дневная задержка является допустимым сценарием в моем домене.
4. Подходы, которые я рассматриваю:
  • Подход А: глобальная винсоризация (мои текущие предпочтения) Я применяю 1%–99% процентильное ограничение ко всему набору данных вместо удаления строк.

    Плюсы: Он решает проблему потери данных (потеря 0%) и сохраняет разницу между «Поздний» (60 дней) и «Безумный» (5000 дней, ограниченный до 60).
  • Минусы: используется единый порог для всех покупателей, одинаково обрабатывая «строгих» и «хаотичных» покупателей на этапе очистки.
[*]Подход Б: Удаление сгруппированных выбросов (предложено старшим). Я группирую данные по Покупателю + Продавцу + Продукту и удаляю выбросы для каждой группы.
  • Плюсы: Это учитывает тот факт, что «Нормальный» разный для каждого покупателя.
  • Минусы: Многие из моих групп разрежены (Малый N < 10). Меня беспокоит, что статистические методы для таких небольших групп будут рассчитывать почти нулевую дисперсию и агрессивно удалять достоверные данные, повторяя проблему «50% потерь» в локальном масштабе.

5. Мой вопрос: Учитывая, что позже я буду рассчитывать Z-показатели как функции для модели (которая отражает относительную «странность» ценности для каждого покупателя), безопаснее ли придерживаться глобальной винсоризации для сохранения объема данных или групповая очистка является стандартной практикой даже для редких групп?
Существует ли гибридный подход (например, глобальная очистка + локальная разработка функций), который предпочтителен в этом сценарии?
Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/798 ... chain-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»