Statsmodels – статистический анализ

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение в Statsmodels

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


Возможности библиотеки

  • Линейная и нелинейная регрессия (OLS, GLM)

  • Логистическая регрессия

  • Модели дисперсионного анализа (ANOVA)

  • Проверка статистических гипотез (t-тест, F-тест, тесты нормальности)

  • Модели временных рядов (AR, ARIMA, SARIMA)

  • Диагностика моделей и анализ остатков

  • Поддержка формул в стиле R (с помощью patsy)

  • Встроенная визуализация результатов


Установка и подключение Statsmodels

Установка библиотеки выполняется стандартной командой:

bash
pip install statsmodels

Импорт необходимых компонентов:

python
import statsmodels.api as sm import statsmodels.formula.api as smf

Работа с данными и подготовка

Statsmodels может работать с pandas.DataFrame, что делает его удобным для анализа табличных данных:

python
import pandas as pd data = pd.read_csv("dataset.csv")

Важно убедиться, что переменные не содержат пропусков и имеют корректные типы.


Описание основных API-интерфейсов

  • statsmodels.api — классический интерфейс.

  • statsmodels.formula.api — интерфейс на основе формул, аналогичный R.

  • statsmodels.tsa — модуль для анализа временных рядов.


Линейная регрессия (OLS)

python
import statsmodels.api as sm X = data[["x1", "x2"]] X = sm.add_constant(X) # добавление константы y = data["y"] model = sm.OLS(y, X).fit() print(model.summary())

Или с формулой:

python
import statsmodels.formula.api as smf model = smf.ols("y ~ x1 + x2", data=data).fit()

Вывод summary() содержит все ключевые метрики: коэффициенты, t-статистику, доверительные интервалы, значение R² и F-статистику.


Логистическая регрессия

python
model = smf.logit("y ~ x1 + x2", data=data).fit() print(model.summary())

Модель используется для предсказания бинарных исходов на основе непрерывных или категориальных признаков.


Многофакторный дисперсионный анализ (ANOVA)

python
model = smf.ols("score ~ C(group)", data=data).fit() anova_table = sm.stats.anova_lm(model, typ=2) print(anova_table)

ANOVA применяется для определения статистической значимости различий между группами.


Проверка статистических гипотез

Примеры:

  • Одновыборочный t-тест:

python
from scipy import stats stats.ttest_1samp(data["x"], popmean=0)
  • Тест Шапиро-Уилка на нормальность:

python
from scipy.stats import shapiro shapiro(data["x"])
  • Тест Бартлетта на равенство дисперсий:

python
from scipy.stats import bartlett bartlett(data["group1"], data["group2"])

Автокорреляция и временные ряды

Statsmodels содержит мощный модуль tsa:

python
from statsmodels.tsa.arima.model import ARIMA model = ARIMA(data["series"], order=(1, 1, 1)) results = model.fit() print(results.summary())

Также доступны модели SARIMA, ETS и проверка стационарности с помощью теста Дики-Фуллера (adfuller).


Диагностика модели и остатки

После построения модели важно провести анализ остатков:

python
residuals = model.resid sm.qqplot(residuals, line="s")

Можно использовать тест Бреуша-Пагана (het_breuschpagan) для оценки гетероскедастичности.


Визуализация результатов анализа

Statsmodels предлагает встроенные методы:

  • Q-Q график для оценки нормальности остатков

  • График остатков против предсказанных значений

  • График автокорреляции остатков

python
import matplotlib.pyplot as plt sm.graphics.plot_regress_exog(model, "x1") plt.show()

Примеры практического применения

  • Оценка влияния маркетинговых кампаний на продажи.

  • Построение моделей потребительского поведения.

  • Анализ сезонности и трендов в финансовых данных.

  • Проверка научных гипотез в социологических исследованиях.

  • Построение прогнозов на основе экономических индикаторов.


Часто задаваемые вопросы

В чем отличие Statsmodels от Scikit-learn?

Statsmodels предоставляет подробную статистику, ориентирован на объяснение модели, в то время как Scikit-learn — на предсказание.

Поддерживает ли Statsmodels категориальные признаки?

Да, через синтаксис C(variable) в формуле или преобразование в pd.Categorical.

Как выбрать между OLS и логистической регрессией?

OLS применяется при непрерывной зависимой переменной, логистическая регрессия — при бинарной.

Можно ли визуализировать доверительные интервалы?

Да, метод model.conf_int() позволяет получить их численно, а графики строятся вручную.

Подходит ли Statsmodels для анализа временных рядов?

Да, модуль tsa предоставляет широкий набор моделей и инструментов.

Полный справочник по ключевым функциям и методам библиотеки statsmodels для Python

Установка

bash
pip install statsmodels

Основные интерфейсы

Модуль Назначение
statsmodels.api (sm) Высокоуровневый доступ ко всем моделям и инструментам.
statsmodels.formula.api (smf) Удобный интерфейс через формулы (R-подобный стиль).
statsmodels.tsa Модели временных рядов.
statsmodels.stats Статистические тесты и проверка гипотез.
statsmodels.graphics Визуализация остатков, автокорреляции и др.

Регрессии (линейные и обобщённые)

Линейная регрессия (OLS)

Метод Описание
sm.OLS(y, X) Линейная регрессия (X должен содержать const).
sm.add_constant(X) Добавляет столбец единиц к признакам.
model.fit() Обучение модели.
model.summary() Полный статистический отчёт.
model.params Коэффициенты модели.
model.pvalues p-значения признаков.
model.rsquared R² — доля объяснённой дисперсии.
model.predict(X) Предсказания по модели.

Формульный интерфейс (smf.ols)

python
import statsmodels.formula.api as smf model = smf.ols("y ~ x1 + x2", data=df).fit() print(model.summary())

Обобщённые линейные модели (GLM)

Класс Описание
sm.GLM(y, X, family=...) Обобщённая линейная модель.
families.Gaussian() Нормальное распределение.
families.Binomial() Бинарная логистическая регрессия.
families.Poisson() Модель счётных событий.

Временные ряды (statsmodels.tsa)

Модель Описание
ARIMA(order=(p,d,q)) Классическая модель ARIMA.
SARIMAX() Расширение ARIMA (сезонность, экзогенные переменные).
ExponentialSmoothing() Экспоненциальное сглаживание (модель Холта-Уинтерса).
VAR() Векторная авторегрессия для многомерных рядов.
Метод Описание
model.fit() Обучение модели.
model.forecast() Прогнозирование на несколько шагов вперёд.
model.plot_diagnostics() Диагностические графики остатков.
sm.tsa.stattools.adfuller() Тест Дики-Фуллера на стационарность.
sm.tsa.acf() / pacf() Автокорреляция и частичная автокорреляция.

Статистические тесты (statsmodels.stats)

Функция Описание
ttest_ind(a, b) t-тест на равенство средних двух выборок.
ttest_1samp(a, popmean) t-тест одной выборки.
levene() Тест на равенство дисперсий.
chi2_contingency() Хи-квадрат тест на независимость.
shapiro(x) Тест Шапиро-Уилка на нормальность.
normaltest(x) Тест Д’Агостино на нормальность.
corrcoef() Корреляция Пирсона.
binom_test() Биномиальный тест.

Диагностика и визуализация

Функция / Метод Описание
sm.graphics.plot_partregress() Парциальная регрессия.
sm.graphics.plot_regress_exog() Диагностические графики для признака.
sm.graphics.qqplot(residuals) Квантиль-квантиль график остатков.
sm.graphics.tsa.plot_acf() / plot_pacf() ACF и PACF графики.
model.get_influence().summary_frame() Влияние каждой точки (Cook's Distance, leverage и др.).

Распределения (statsmodels.distributions)

Модуль Описание
sm.distributions.empirical_distribution.ECDF() Эмпирическая функция распределения.
sm.distributions.genpareto и др. Работа с произвольными распределениями.

Пример: линейная регрессия

python
import statsmodels.api as sm X = sm.add_constant(df[['x1', 'x2']]) y = df['y'] model = sm.OLS(y, X).fit() print(model.summary())

Пример: модель ARIMA

python
from statsmodels.tsa.arima.model import ARIMA model = ARIMA(ts_data, order=(1, 1, 1)) results = model.fit() print(results.summary()) results.plot_diagnostics()

Statsmodels идеально подходит, когда требуется:

  • понять значимость признаков,

  • интерпретировать модель статистически,

  • построить отчёт с доверительными интервалами и p-значениями,

  • провести анализ временных рядов с классическими методами.


Заключение: когда и зачем использовать Statsmodels

Statsmodels — это мощный и точный инструмент для проведения статистического анализа. Его использование оправдано в ситуациях, когда важны интерпретируемость, проверка статистических гипотез, построение регрессионных моделей и анализ временных рядов. Благодаря совместимости с Pandas и NumPy, библиотека органично вписывается в экосистему Python и предоставляет удобный способ выполнения сложных статистических задач.