20 эффективных статистических методов в анализе данных

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

Статистический анализ – это одна из самых мощных техник, используемых для поиска скрытых паттернов в данных. Он широко используется для предсказания погоды, возможного оттока клиентов,  тонального анализа и многого другого. Вследствие технологических достижений обозначился повышенный спрос на математиков-статистиков. Статистика позволяет извлекать неочевидные сведения и решать комплексные задачи бизнеса, стала важным инструментом в таких областях как машинное обучение (ML), искусственный интеллект.

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

.Статья покрывает более 80% техник описательной статистики.

Статистика – фундамент Data Science

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

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

Ответы, на вопросы о том, как много клиентов уйдёт от одного бренда к другому, какова скорость оттока клиентов,  какова вероятность оттока в ближайшие пять месяцев,  (анализ с цепями Маркова), легко получить с помощью статистического анализа.

5 причин изучить статистику для Data Science и ML

Следующие 5 аргументов обосновывают критическую важность статистики в Data Science и ML.

1. Статистика помогает компаниям организовать данные для развития продуктов и сервисов.

2. Включает в себя значительное количество методов визуализации данных, методов разведочного  анализа данных.

3. Облегчает поиск трендов и скрытых паттернов в больших объёмах данных.

4. Является фундаментом для алгоритмов машинного обучения, предсказывающих будущие тенденции.

5. Позволяет предсказать результаты на основании вероятностных техник, а не предположений или гипотез.

Самые важные статистические методы для анализа данных

В этом обзоре мы изучим некоторые довольно мощные методы. Чтобы получить непосредственный опыт, мы воспользуемся широко известным датасетом Titanic, доступным на Kaggle. Он доступен по ссылке https://www.kaggle.com/datasets/brendan45774/test-file?resource=download.

Импортируем библиотеки

Нам потребуется импортировать необходимые библиотеки в jupyter notebook.

Загрузка датасета

Данные могут быть формата CSV или Excel. Чтобы его загрузить, мы просто используем функцию

pd.read_csv(‘путь к вашему датасету’).

My_df = pd.read_csv(‘Titanic_dataset.csv’)
My_df.head()

1. Среднее арифметическое

Среднее значение – это сумма всех значений по параметру, разделённая на число экземпляров. На примере мы видим средние значения всех числовых колонок нашего датасета. Средний возраст пассажира – 30, стоимость билета – $35.

My_df.mean()

2. Среднее геометрическое

Среднее геометрическое – это среднее значение по произведению значений параметра по экземплярам.

from scipy.stats import gmean
gmean(My_df[‘Pclass’])

3. Среднее гармоническое

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

statistics.harmonic_mean(My_df[‘Pclass’])

4. Мода

Мода – самый часто встречающий элемент датасета. Если значение встречается наибольшее число раз, то оно является модой.

My_df[‘Age’].mode()

5. Медиана

Медина – это центральная точка или 50-й перцентиль данных.

statistics.median(My_df[‘Pclass’])

6. Дисперсия

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

statistics.variance(My_df[‘Pclass’])

7. Среднеквадратическое отклонение

Среднеквадратическое отклонение определят долю дисперсии данных.  Оно соответствует доле данных, не совпадающих со средним значением. В датасете Titanic отклонение от среднего в колонке “Passenger class” составляет 0.84.

statistics.stdev(My_df[‘Pclass’])

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

В симметричном случае, данные нормально распределены по обеим сторонам. Среднее значение и медиана находятся близко друг к другу. Получаемая на симметричном графике кривая называется нормальной кривой. Воспользуемся датасетом body perfomance, чтобы изучить другие важные статистические методы: https://www.kaggle.com/datasets/kukuroo3/body-performance-data.

9. Коэффициент асимметрии

Коэффициент асимметрии определяет асимметричность распределения данных. Данные асимметричной формы и отклоняются в сторону одной точки. Асимметричность делится на два случая.

10. Положительный коэффициент асимметрии

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

# Положительное отклонение данных

11. Отрицательный коэффициент асимметрии

В случае отрицательного коэффициента асимметрии данные сосредоточены по левую сторону распределения. Левая сторона длиннее, среднее значение и медиана меньше моды.

# Отрицательное отклонение данных

# Нормальное распределение данных

# График плотностей всех параметров датасета.

df_bodyperf.skew()

#Positive skewness of data
df_bodyperf[‘age’].plot(kind = ‘density’)

#Negative skewness of data
df_bodyperf[‘sit-ups counts’].plot(kind = ‘density’)

#Normal Distribution of data
sns.distplot(df_bodyperf[‘weight_kg’],hist=True,kde=True)

#Density plots of all features in the dataset
df_bodyperf.plot.density(figsize = (11, 6),linewidth = 3)

12. Коэффициент эксцесса

Коэффициент эксцесса определяет некоторые свойства распределения данных. Распределение обычно соответствует одному из трёх случаев:

1. Эксцесс менее нормы

В этом случае распределение имеет плоские концы, что означает малые отклонения в распределении.

2. Нормальный эксцесс

Данные такого вида распределены нормально и стремятся к нормальному распределению.

3. Эксцесс более нормы

В таком случае данные сосредоточены, а высота пика превышает ширину.

df_bodyperf.kurt()

13. Межквартильный размах (IQR)

Межквартильный размах соответствует размаху средней половины распределения. Рассчитаем межквартильный размах как IQR = Q3 – Q1

# Межквартильный размах каждого параметра в датасете


numeric_data = df_bodyperf.select_dtypes(exclude=’object’)
categorical_data = df_bodyperf.select_dtypes(include=’object’)

for column in numeric_data.columns:
Q1 = df_bodyperf[column].quantile(.25)
Q3 = df_bodyperf[column].quantile(.75)
IQR = Q3 — Q1
print(‘IQR value of %s : %d’ %(column,IQR))

14. Разность между максимальным и минимальным значениями.

Разность между максимальным и минимальным значениями.

for colum in numeric_data.columns:
range_val = df_bodyperf[colum].max()-df_bodyperf[colum].min()
print(‘The range %s : %d’%(colum,range_val))

15. Абсолютное отклонение

Абсолютное отклонение – это среднее расстояние между каждой точкой и средним значением параметра. Оно показывает уровень вариативности в датасете.

df_bodyperf.mad()

16. Матрица корреляций

Для того, чтобы обнаружить зависимость между двумя параметрами в сете, мы используем corr(). Это даёт нам увидеть, насколько сильны связи между параметрами. Для наглядной демонстрации построим тепловую карту с помощью seaborn (библиотеки для визуализаций). Здесь мы используем метод корреляций Пирсона.

plt.figure(figsize=(10,6))
sns.heatmap(df_bodyperf.corr(), annot=True, cmap=’icefire’).set_title(‘seaborn’)
plt.show()

17. Забор образцов

В случае огромного датасета можно отдельно рассмотреть небольшое количество образцов, что позволяет увеличить производительность модели, улучшить визуализацию. Здесь я взял 25% от данных за образец.

df_bodyperf.sample(frac = 0.25)

18. Обнаружение отклонений с помощью диаграммы размаха

Диаграммы размаха широко используются в разведочном анализе данных. В нашем случае мы можем получить от 5 значений, включая Q1, Q3, IQR (среднее значение), минимум и максимум.

# Обнаружение отклонений с помощью диаграммы размаха

#Outliers detection using Boxplot
plt.figure(figsize = (10, 7))
sns.boxplot(data = df_bodyperf)

19. Ковариантность

Ковариантность сообщает нам том, как связаны две параметра: пропорциональны (в случае положительных значений) или обратно пропорциональны (отрицательные).

df_bodyperf.cov()

20. Удаление отклонений

Используя этот метод, мы с лёгкостью можем нормализовать неординарные значения (отклонения) в сете. Здесь мы удаляем отклонения из колонки Systolic.

for i in df_bodyperf[‘systolic’]:
quartile1 = df_bodyperf[‘systolic’].quantile(0.25)
quartile3 = df_bodyperf[‘systolic’].quantile(0.75)
IQR = quartile3-quartile1
low_tail = quartile1–1.5*IQR
up_tail = quartile3 + 1.5*IQR


if i>up_tail or i<low_tail:
df_bodyperf[‘systolic’] = df_bodyperf[‘systolic’].replace(i,0)


sns.boxplot(df_bodyperf[‘systolic’])
plt.title(‘Removal of outliers’)
plt.show()

https://t.me/data_analysis_ml – аналитика данных

Ответить