Вопрос или проблема
У меня есть набор данных, который сводится к трем столбцам: 1. Название поставщика 2. Количество транзакций с поставщиком 3. Общая стоимость этих транзакций.
Я пытаюсь найти лучший способ ранжирования всех поставщиков на основе этих двух характеристик, которые в данном случае имеют равное значение. Замечание: большее количество транзакций не означает большую стоимость.
Что я сделал, так это нормализовал каждую характеристику, приведя все значения к диапазону от 0 до 1. Затем я суммировал два нормализованных значения. Затем я использовал эти новые значения для ранжирования всех поставщиков. Смотря на результаты и то, как я ожидал, что должно быть хорошее ранжирование, я доволен результатом.
Тем не менее, я чувствую, что наличие выбросов могло сделать ранжирование… не таким точным, как могло бы быть. Я прав или не прав? Как бы вы предложили это исправить? Есть ли совершенно лучший способ это сделать?
Заключительное замечание: я попробовал стандартизировать и получил точь-в-точь такое же ранжирование. Я не уверен, должно ли это было происходить или это был специальный случай.
Вы спросили, как нормализация min/max повлияет на ваше ранжирование в присутствии выбросов. Ваша метрика ранжирования – это простая сумма нормализованных значений. Выброс изменит масштаб ваших нормализованных значений и, следовательно, его важность в вашей метрике ранжирования. Некоторые альтернативы вашей предложенной метрике распространены в литературе для многокритериальной оптимизации. Вот статья, которая рассматривает несколько методов выбора “лучшего” пункта из фронта Парето. На случай, если ссылка перестанет работать, статья называется “Добавление и анализ методов выбора оптимального решения из оптимальной фронта Парето, полученного многокритериальной оптимизацией”, авторами которой являются Чжиюань Ван и Гаде Панду Рангаиях.
Ниже приведен пример на R, используя вашу предложенную метрику ранжирования.
# количество поставок, которые рассматриваются
n = 10
set.seed(123)
# создаём дата-фрейм, содержащий ID поставщика, случайным образом выбираем количество
# транзакций из пуассона и инициализируем общие продажи нулем
df <- data.frame(supplierID = 1:n,
transactions = rpois(n, 20),
total = rep(0,n))
# добавляем данные о общих продажах, случайным образом выбираем каждую продажу из гамма-распределения
for(i in 1:n){
df$total[i] <- sum(rgamma(n=df$transactions[i], shape = 3, scale = 100))
}
# функция для нормализации min/max
min_max_norm <- function(x){
min_x <- min(x)
max_x <- max(x)
return( (x-min_x)/(max_x - min_x) )
}
# генерируем нормализованные данные и метрику ранжирования
df$norm_transactions <- min_max_norm(df$transactions)
df$norm_total <- min_max_norm(df$total)
df$rank_metric <- df$norm_transactions + df$norm_total
df$rank <- rank(df$rank_metric)
# дублируем эти данные и добавляем выбросы в данные о транзакциях
df$transactions_OL <- df$transactions
# Устанавливаем количество транзакций поставщика с наименьшим количеством транзакций на 2
df$transactions_OL[which.max(df$transactions)] <-2
# Устанавливаем количество транзакций поставщика с наибольшим количеством транзакций на 600
df$transactions_OL[which.max(df$transactions)] <- 600
# нормализуем данные о транзакциях с выбросами, обновляем метрику ранжирования и ранг
df$norm_transactions_OL <- min_max_norm(df$transactions_OL)
df$rank_metric_OL <- df$norm_transactions_OL + df$norm_total
df$rank_OL <- rank(df$rank_metric_OL)
# выводим дата-фрейм в консоль
df
Итак, что произошло, когда мы добавили выброс? Диапазон транзакций (а значит, и масштаб) изменился, что снизило важность транзакции относительно общей стоимости продаж. Хорошей иллюстрацией этого является то, как поставщик 2 опустился с 3-го на 5-е место, а поставщик 10 поднялся с 5-го на 3-е место.
Ответ или решение
Анализ влияния выбросов на нормализацию данных и методы избегания их негативных последствий
Ваша задача заключается в оценке поставщиков на основе двух ключевых показателей: количество транзакций и общая сумма этих транзакций. Вы отметили, что применяемая вами нормализация на основе метода min-max может быть искажена выбросами, и это действительно может повлиять на точность ранжирования поставщиков.
Влияние выбросов на нормализацию
При нормализации данных методами, такими как min-max нормализация, результаты зависят от минимума и максимума значений в вашем наборе данных. Выбросы, представляющие собой экстремально низкие или высокие значения, могут значительно изменить диапазон данных, что, в свою очередь, повлияет на нормализованные значения.
Пример:
Если, например, у вас есть 10 поставщиков, и один из них имеет крайне высокое количество транзакций (например, 600), это значительное значение изменит минимальные и максимальные границы нормализации. В результате другие поставщики, которые имели бы относительно высокие значения транзакций, будут нормализованы к значениям близким к нулю, что исказит их реальное положение в рейтинге. Это хорошо иллюстрируется изменением позиций поставщиков в случае добавления выбросов, когда один из поставщиков резко повышение в ранге за счет значительного нормализированного значения, в то время как другие могут потерять свою позицию.
Как избежать влияния выбросов?
Для минимизации негативного влияния выбросов на нормализацию данных и последующее ранжирование можно использовать несколько подходов:
-
Удаление выбросов:
- Перед нормализацией можно применять метод выявления выбросов, например, через Z-оценки или метод IQR (интерквартильный диапазон), и исключать их из анализа.
-
Использование устойчивых методов нормализации:
- Вместо min-max нормализации можно использовать нормализацию с использованием медианы и межквартильного диапазона (IQR). Такой подход позволит существенно уменьшить влияние выбросов, сохраняя значения в более устойчивом диапазоне.
-
Применение логарифмической трансформации:
- Для данных, которые могут иметь большие разбросы, полезно применять логарифмическую трансформацию, что сгладит гистограмму значений и уменьшит влияние выбросов.
-
Масштабирование по нормам:
- Рассмотрите возможность использования стандартизации (субтракция среднего и деление на стандартное отклонение). Хотя вы упомянули, что результаты не изменились, в некоторых случаях это может масштабировать данные более равномерно, особенно при наличии значительных выбросов.
-
Каскадное ранжирование:
- Вместо простого суммирования нормализованных значений рассмотрите использование взвешенного ранжирования, при котором каждое значение будет умножаться на свой вес, учитывающий важность показателя. Это поможет снизить влияние тех показателей, на которые выбросы влияют в большей степени.
Альтернативные методы ранжирования
Кроме того, можно рассмотреть другие методики для многокритериальной оценки, такие как метод анализа иерархий (AHP), техники Парето или использование алгоритмов машинного обучения для выявления комплексного ранжирования с учетом множественных факторов. Эти методы могут обеспечить более точное распределение по категориям и учесть данные более глубоко.
Заключение
Ваша задача по оценке поставщиков на основе количества транзакций и их общей суммы имеет значительное значение в бизнесе, но влияние выбросов на нормализацию данных — это проблема, которую необходимо тщательно учитывать. Применяя вышеперечисленные методы и подходы, вы сможете снизить влияние выбросов и получить более точные и надежные результаты для принятия управленческих решений.