Хелпикс

Главная

Контакты

Случайная статья





Медиана. Проблема выбросов



Медиана

Следующая мера центральной тенденции, о которой пойдёт речь, — медиана. Медиана, как и среднее значение, нужна для определения типичного значения в наборе данных, но при этом не требует вычислений.

Чтобы найти медиану, данные нужно расположить в порядке возрастания. Медианой будет значение, которое совпадает с серединой набора данных. Если количество значений чётное, то берётся среднее двух значений, которые «окружают» середину.

 

Стандартной библиотекой Python не предусмотрен поиск медианы, но мы можем написать свою реализацию, следуя описанному алгоритму. Попробуем найти медиану цен на вина:

# Извлекаем ценыprices = [float(w[5]) for w in wines if w[5] != ""] # Находим их количествоnum_wines = len(prices) # Сортируем в порядке возрастанияsorted_prices = sorted(prices) # Ищем индекс среднего элементаmiddle = (num_wines / 2) + 0.5 # Находим медиануprint(sorted_prices[middle]) # 24

С версии Python 3.4 есть встроенный способ поиска медианного значения.

Медианная цена бутылки вина составляет 24$. Это предполагает, что как минимум у половины вин в датасете цена равна или ниже 24$. Неплохо! А что насчёт среднего значения? Учитывая, что и медиана, и среднее значение отражают типичное значение, можно предположить, что они должны быть примерно одинаковы:

print(sum(prices)/len(prices)) # 33.13

Средняя цена в 33,13$ на порядок выше медианной. Как это произошло? Разница между медианой и средним значением существует из-за робастности (выбросоустойчивости).

Проблема выбросов

Как вы помните, среднее значение можно найти, сложив все значения и разделив сумму на их количество, в то время как медиана ищется простой перестановкой значений. Если в данных есть выбросы — значения, которые гораздо выше или ниже остальных, — это может негативно повлиять на среднее значение. Таким образом, среднее значение не робастно, а медиана — напротив, выбросоустойчива.

Давайте взглянем на максимальную и минимальную цену в наших данных:

min_price = min(prices)max_price = max(prices)print(min_price, max_price) # 4.0, 2300.0

Теперь мы знаем, что в данных есть выбросы. Выбросы могут отражать интересные события или ошибки в нашем наборе данных, поэтому важно уметь определять их наличие. Сравнение медианы и моды — один из способов определить наличие выбросов, хотя визуализация обычно позволяет сделать это быстрее.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.