Нормальное распределение (Normal Distribution) - Лена Капаца
Нормальное распределение (Normal Distribution) by Лена Капаца Jan. 9, 2021 Основы

Нормальное распределение (распределением Гаусса или Гаусса — Лапласа) – распространенная разновидность непрерывного распределения вероятностей для случайной величины.

Помните колоколообразную кривую? Вот эту:

Долгое время она служила главным критерием профессиональной оценки сотрудников американских учреждений, и равнодушных не оставляла, ведь от нее зависело, как себя позиционирует человек и его начальство.

Нормальное распределение – это ключевая концепция Статистики (Statistics) и основа Науки о данных (Data Science). При выполнении Разведочного анализа данных (EDA) мы сначала стремимся найти их распределение вероятностей, и наиболее распространенный ее вид – нормальное распределение.

Посмотрите на распределение вероятностей окупить инвестиции в фондовый индекс S&P 500:

Да-да, вероятность "выйти в ноль" выше остальных! Также справедливо утверждение, что вероятность потерять больше как бы тает вместе с отрицательным процентом возврата. Белой непрерывной линией обозначено предсказание кривой нормального распределения. Прочие наблюдения, такие как вес при рождении и показатель IQ, часто следуют нормальному распределению подобным образом.

Еще одна причина, по которой нормальное распределение становится важным для Дата-сайентистов (Data Scientist) – это Центральная предельная теорема (Central Limit Theorem). Эта теорема объясняет магию математики и является основой методов проверки гипотез.

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

Свойства нормального распределения

Кривая стандартного нормального распределения симметрична относительно Среднего арифметического (Mean), Медианы (Median) и Моды (Mode). Более того, также являются нормальным распределением произведение двух нормальных распределений и их сумма. Магия, не правда ли? Существуют и другие, более сложные закономерности, пока обойдемся самыми понятными.

Эмпирическое правило

Вы слышали об эмпирическом правиле? Оно часто используется в статистике и гласит: "68,27% наблюдений случайной Выборки (Sample) лежат в пределах одного Стандартного отклонения (Standard Deviation), 95,45% – в пределах двух, а 99,73 – в пределах трех стандартных отклонений от среднего":

Это правило позволяет нам идентифицировать Выбросы (Outlier) и очень полезно при Проверке на нормальность (Normality Test).

Стандартное нормальное распределение

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

$$z = \frac{x - μ}{σ}, где$$
$$z\space{–}\space{,}$$
$$x\space{–}\space{значение выборки,}$$
$$μ\space{–}\space{среднее,}$$
$$σ\space{–}\space{стандартное}\space{отклонение}$$

Пример. Есть два интерна: Левин и Ричардс. Левин набрал 65 баллов на экзамене по терапии, а Ричардс – 80 баллов на экзамене по кожной венерологии. Верно ли, что Ричардс учился лучше, чем Левин?

Нет, потому что манера поведения людей в терапии отличается от того, как люди проявляют себя в кожной венерологии. Таким образом, прямое сравнение простым сравнением оценок некорректно.

Теперь предположим, что отметки теста по терапии подчиняются нормальному распределению со средним значением 60 и стандартным отклонением 4. С другой стороны, отметки о кожвенерологии подчиняются нормальному распределению со средним значением 79 и стандартным отклонением 2.

Нам нужно будет вычислить Стандартизированную оценку (Z-score) путем стандартизации обоих этих распределений:

$$z_{Левин} = \frac{65 - 60}{4} = 1,25$$
$$z_{Ричардс} = \frac{80 - 79}{2} = 0,5$$

Таким образом, Левин набрал 1,25 стандартного отклонения выше среднего, в то время как Ричардс – только 0,5. Следовательно, Левин показал себя лучше:

Асимметричное распределение

Нормальное распределение – это симметрично, что означает, что его "хвосты" слева и справа – зеркальные отображения друг друга. Но это не относится к большинству реальных наборов данных. Как правило, мы будем иметь дело со скошенными асимметричными распределениями.

Визуальная оценка нормальности

Для таких целей принято использовать три вида графиков:

Слева направо: гистограмма, График KDE, Q-Q Plot

Для оценки нормальности распределения также используют Скошенность (Skewness) и Эксцесс (Kurtosis).

Нормальное распределение и Python

Посмотрим, как выглядит код, визуализирующий распределение и заодно рассчитывающий основные метрики Датасета (Dataset). Для начала импортируем необходимые библиотеки:

import numpy as np
import pandas as pd
import seaborn as sns

Загрузим данные:

df = pd.read_csv('https://www.dropbox.com/s/ezugw0xgfp8pzut/%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8.csv?dl=1')
df.head()

Определим функцию, которая пройдется по всем столбцам датасета, рассчитает основные статистические метрики (среднее, минимум, максимум и т.д.):

def UVA_numeric(data):
    var_group = data.columns # Список столбцов
    size = len(var_group) # Количество столбцов (3)
    plt.figure(figsize = (7 * size, 3), dpi = 400) # Параметры графика

    # Применяем расчеты к каждому столбцу
    for j,i in enumerate(var_group):
        
        # Рассчитываем основные статистические метрики
        mini = data[i].min()
        maxi = data[i].max()
        ran = data[i].max()-data[i].min() # Диапазон значений
        mean = data[i].mean()
        median = data[i].median()
        st_dev = data[i].std() # Стандартное отклонение
        skew = data[i].skew() # Скошенность 
        kurt = data[i].kurtosis() # Эксцесс

        # Расчет точек стандартного отклонения
        points = mean - st_dev, mean + st_dev

        # Построим график с каждым из трех наборов даннных
        #Plotting the variable with every information
        plt.subplot(1, size, j+1)
        sns.distplot(data[i], hist = True, kde=  True)
        
        sns.lineplot(points, [0,0], color = 'black', label = "std_dev")
        sns.scatterplot([mini,maxi], [0,0], color = 'orange', label = "min/max")
        sns.scatterplot([mean], [0], color = 'red', label = "mean")
        sns.scatterplot([median], [0], color = 'blue', label = "median")
        plt.xlabel('{}'.format(i), fontsize = 20)
        plt.ylabel('density')
        plt.title('Стандартное отклонение = {}; Эксцесс = {};\n Скошенность = {}; Разброс, шаг гистограммы = {}\n Среднее = {}; Медиана = {}'.format((round(points[0],2),round(points[1],2)),
                                                                                 round(kurt,2),                             							round(skew,2),
        (round(mini,2),round(maxi,2),round(ran,2)),
        round(mean,2),
        round(median,2)))

Построим тройной график:

UVA_numeric(df)

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.

Фото: @changlisheng

© Лена Капаца. Все права защищены.