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 – аналитика данных