Статистическое моделирование с помощью Python: практические советы и лучшие библиотеки

Оглавление

Вступление: Почему Python для науки о данных

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

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

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

  • Природа открытого исходного кода и активное сообщество
  • Более короткая кривая обучения и интуитивно понятный синтаксис
  • Большая коллекция мощных и стандартизированных библиотек
  • Мощная интеграция с быстрыми компилируемыми языками (например, C/C++) для примитивов численных вычислений (как в NumPy и pandas)
  • Легкость интеграции основного процесса моделирования с доступом к базе данных, постобработкой, такой как визуализация и веб-сервисы
  • Наличие и продолжение разработки питоновских интерфейсов к фреймворкам для работы с большими данными, таким как Apache Spark или MongoDB
  • Поддержка и развитие библиотек Python крупными и влиятельными организациями, такими как Google или Facebook (например, TensorFlow и PyTorch)

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

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

Почему эти рамки необходимы

Хотя Python наиболее популярен для работы с данными, визуализации, общего машинного обучения, глубокого обучения и связанной с ним линейной алгебры (тензорные и матричные операции), а также веб-интеграции, его способности к статистическому моделированию гораздо менее разрекламированы. Большой процент специалистов по работе с данными по-прежнему используют для моделирования и анализа другие специальные статистические языки, такие как R, MATLAB или SAS, а не Python.

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

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

При использовании различных статистических языков для решения различных задач вы можете столкнуться с некоторыми проблемами. Например:

  • Проведение любого веб-скрейпинга и доступа к базе данных с помощью команд SQL и библиотек Python, таких как BeautifulSoup и SQLalchemy
  • Очистка и подготовка таблиц данных с помощью Pandas, но затем переход на R или SPSS для выполнения статистических тестов и вычисления доверительных интервалов
  • Использование ggplot2 для создания визуализации, а затем использование отдельного редактора LaTeX для подготовки окончательного аналитического отчета

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

Что, если бы вы могли проводить статистическое моделирование, анализ и визуализацию в рамках основной платформы Python?

Давайте посмотрим, какие рамки и методы существуют для выполнения таких задач.

Начните с NumPy

NumPy - это стандарт де-факто для численных вычислений в Python, используемый в качестве базы для создания более продвинутых библиотек для data science и машинного обучения, таких как TensorFlow или Scikit-learn. Для численной обработки NumPy намного быстрее, чем родной код Python, благодаря векторной реализации его методов и тому факту, что многие из его основных процедур написаны на C (на основе фреймворка CPython).

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

Например, давайте создадим массив NumPy из простого списка Python и вычислим основные описательные статистики, такие как среднее значение, медиана, стандартное отклонение, квантили и т.д.

Код для этой статьи можно найти на репозитории на Github.

import numpy as np

# Define a python list
a_list = [2, 4, -1, 5.5, 3.5, -2, 5, 4, 6.5, 7.5]

# Convert the list into numpy array
an_array = np.array(a_list)

# Compute and print various statistics
print('Mean:', an_array.mean())
print('Median:', np.median(an_array))
print('Range (Max - min):', np.ptp(an_array))
print('Standard deviation:', an_array.std())
print('80th percentile:', np.percentile(an_array, 80))
print('0.2-quantile:', np.quantile(an_array, 0.2))

Результаты следующие:

Mean: 3.5
Median: 4.0
Range (Max - min): 9.5
Standard deviation: 2.9068883707497264
80th percentile: 5.699999999999999
0.2-quantile: 1.4000000000000001

Вы также можете использовать NumPy для генерации различных случайных величин на основе статистических распределений, таких как биномиальное, нормальное, хи-квадрат и др. Мы обсудим их в контексте пакета SciPy, который по сути является надмножеством NumPy.

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

Matplotlib и Seaborn для визуализации

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

Matplotlib - это наиболее широко используемая базовая библиотека в Python для общей визуализации. Существует обширная документация по использованию этой библиотеки, и для того, чтобы понять ее основные механизмы, нужно немного подучиться. Давайте проиллюстрируем ее полезность на простом примере (мы повторно используем объект an_array NumPy из предыдущего примера, показывающего, что Matplotlib работает нативно с массивами NumPy).

import matplotlib.pyplot as plt
plt.plot(an_array)
plt.show()

В результате этих 3 строк кода получается график:

Рис. 1: Простой график всего с 3 строками кода с использованием Matplotlib.

Выглядит довольно бесплодно, не так ли? Давайте добавим несколько "колокольчиков" к графику, например: размер фигуры, заголовок, метки и галочки по осям x и y (и управление их шрифтом), тип линии, цвет, ширину, цвет и размер маркера и т.д.

plt.figure(figsize=(9, 5))
plt.title('A basic plot', fontsize=18)
plt.plot(an_array, color='blue', linestyle='--',
         linewidth=4, marker='o', markersize=20)
plt.xlabel('X-axis points', fontsize=14)
plt.ylabel('Y-axis points', fontsize=14)
plt.xticks(fontsize=14)
plt.yticks(fontsize=14)
plt.grid(True)
plt.show()

Результат выглядит следующим образом:

Рисунок 2: График с теми же данными, что и Фигура 1, но с добавлением некоторых украшений.

Это были примеры линейных графиков. Если вам нравятся другие типы графиков/площадок, Matplotlib может помочь вам и в этом.

Рисунок 3: Matplotlib используется для построения квадратной диаграммы, гистограммы, гистограммы и круговой диаграммы. За исключением гистограммы, используются те же данные из объекта NumPy.an_array

Использование Seaborn и Matplotlib

Seaborn - это еще одна мощная библиотека Python, которая построена на базе Matplotlib, предоставляя прямые API для специализированной статистической визуализации, и поэтому является фаворитом среди специалистов по работе с данными. Некоторые из продвинутых графиков статистического моделирования, которые может создавать Seaborn, следующие:

  • Тепловые карты
  • Violinplots
  • Графики рассеяния с линейной регрессией, подгонкой и доверительными интервалами
  • Парные графики и графики корреляции, показывающие взаимную зависимость между всеми переменными в таблице данных (с несколькими строками и столбцами)
  • Графики с гранями (т.е. визуализация взаимосвязи между двумя переменными, которые зависят от более чем одной другой переменной)

Читателям рекомендуется обратиться к официальному учебнику Seaborn для получения более подробной информации.

Рис. 4: Пример визуализации Seaborn.

SciPy для инференциальной статистики

Согласно веб-сайту SciPy (произносится как "Вздох Пирога") - это "экосистема программного обеспечения с открытым исходным кодом для математики, науки и инженерии, основанная на языке Python". Фактически, NumPy и Matplotlib являются компонентами этой экосистемы.

Рис. 5: Основные компоненты экосистемы SciPy.

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

Рис. 6: Снимок различных методов и процедур, доступных в Scipy.stats.

Вкратце, вы можете сделать следующее с помощью SciPy:

  • Генерировать случайные величины из широкого выбора дискретных и непрерывных статистических распределений - биномиального, нормального, бета, гамма, t студента и т.д.
  • Вычислять частотные и суммарные статистики многомерных наборов данных
  • Выполнять популярные статистические тесты, такие как t-тест, хи-квадрат, Колмогорова-Смирнова, ранговый тест Манна-Уитни, ранговая сумма Вилкоксона и т.д.
  • Выполнять корреляционные вычисления, такие как коэффициент Пирсона, ANOVA, оценка Тейла-Сена и т.д.
  • Вычислить статистические меры расстояния, такие как расстояние Вассерштейна и энергетическое расстояние.

Статмодели для продвинутого моделирования

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

Statsmodels позволяет использовать синтаксис формул в стиле R для многих API моделирования, а также создавать подробные таблицы с важными значениями для статистического моделирования, такими как p-значения, скорректированный R-квадрат и т.д. Вот простой пример регрессии с использованием случайных чисел, сгенерированных NumPy, и нормально распределенных ошибок.

Примечание: Перед использованием statsmodels.api

обязательно установите SciPy.

pip install scipy

import numpy as np
import statsmodels.api as sm

# Input variables
nobs = 100
X = np.random.random((nobs, 2))
X = sm.add_constant(X)

# Regression coefficients
beta = [1, .1, .5]

# Random errors
e = np.random.random(nobs)

# Output y
y = np.dot(X, beta) + e

# Fit the regression model
reg_model = sm.OLS(y, X).fit()

# Print the summary
print(reg_model.summary())

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

Scikit-learn для статистического обучения

Наконец, мы подошли к Scikit-learn, которая является наиболее широко используемой библиотекой Python для классического машинного обучения.

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

Scikit-learn включает различные алгоритмы классификации, регрессии и кластеризации, включая машины опорных векторов (SVM), случайные леса, градиентное усиление, k-means и DBSCAN. Он разработан для взаимодействия с числовыми и научными библиотеками Python NumPy и SciPy, предоставляя ряд алгоритмов контролируемого и неконтролируемого обучения через согласованный интерфейс.

Библиотека Scikit-learn также достаточно надежна для использования в системах производственного класса благодаря сообществу поддержки.

С помощью Scikit-learn вы можете выполнять продвинутые задачи статистического обучения, такие как:

  • Выстраивайте свои статистические модели в цепочку
  • Генерируйте рандомизированные данные регрессии и классификации для тестирования алгоритмов
  • Выполняйте различные типы кодирования/преобразования входных данных
  • Поиск гиперпараметров для сложных алгоритмов, таких как SVM

Заключение

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

На стороне данных эти библиотеки легко работают с другими платформами для анализа данных и инженерии данных, такими как Pandas и Spark (через PySpark).

Для продвинутых задач машинного обучения (например, глубокого обучения) знания NumPy можно напрямую переносить и применять в таких популярных пакетах, как TensorFlow и PyTorch.

С визуальной стороны такие библиотеки, как Matplotlib, прекрасно интегрируются с такими продвинутыми библиотеками для создания информационных панелей, как Bokeh и Plotly.

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

Вернуться на верх