Введение в Statsmodels
Statsmodels — это мощная библиотека Python, предназначенная для выполнения статистического анализа данных. Она обеспечивает инструменты для построения регрессионных моделей, оценки параметров, проверки статистических гипотез и анализа временных рядов. Statsmodels широко применяется в эконометрике, биостатистике и социальных науках, обеспечивая глубокую статистическую интерпретацию результатов.
Возможности библиотеки
-
Линейная и нелинейная регрессия (OLS, GLM)
-
Логистическая регрессия
-
Модели дисперсионного анализа (ANOVA)
-
Проверка статистических гипотез (t-тест, F-тест, тесты нормальности)
-
Модели временных рядов (AR, ARIMA, SARIMA)
-
Диагностика моделей и анализ остатков
-
Поддержка формул в стиле R (с помощью patsy)
-
Встроенная визуализация результатов
Установка и подключение Statsmodels
Установка библиотеки выполняется стандартной командой:
Импорт необходимых компонентов:
Работа с данными и подготовка
Statsmodels может работать с pandas.DataFrame
, что делает его удобным для анализа табличных данных:
Важно убедиться, что переменные не содержат пропусков и имеют корректные типы.
Описание основных API-интерфейсов
-
statsmodels.api
— классический интерфейс. -
statsmodels.formula.api
— интерфейс на основе формул, аналогичный R. -
statsmodels.tsa
— модуль для анализа временных рядов.
Линейная регрессия (OLS)
Или с формулой:
Вывод summary()
содержит все ключевые метрики: коэффициенты, t-статистику, доверительные интервалы, значение R² и F-статистику.
Логистическая регрессия
Модель используется для предсказания бинарных исходов на основе непрерывных или категориальных признаков.
Многофакторный дисперсионный анализ (ANOVA)
ANOVA применяется для определения статистической значимости различий между группами.
Проверка статистических гипотез
Примеры:
-
Одновыборочный t-тест:
-
Тест Шапиро-Уилка на нормальность:
-
Тест Бартлетта на равенство дисперсий:
Автокорреляция и временные ряды
Statsmodels содержит мощный модуль tsa
:
Также доступны модели SARIMA, ETS и проверка стационарности с помощью теста Дики-Фуллера (adfuller
).
Диагностика модели и остатки
После построения модели важно провести анализ остатков:
Можно использовать тест Бреуша-Пагана (het_breuschpagan
) для оценки гетероскедастичности.
Визуализация результатов анализа
Statsmodels предлагает встроенные методы:
-
Q-Q график для оценки нормальности остатков
-
График остатков против предсказанных значений
-
График автокорреляции остатков
Примеры практического применения
-
Оценка влияния маркетинговых кампаний на продажи.
-
Построение моделей потребительского поведения.
-
Анализ сезонности и трендов в финансовых данных.
-
Проверка научных гипотез в социологических исследованиях.
-
Построение прогнозов на основе экономических индикаторов.
Часто задаваемые вопросы
В чем отличие Statsmodels от Scikit-learn?
Statsmodels предоставляет подробную статистику, ориентирован на объяснение модели, в то время как Scikit-learn — на предсказание.
Поддерживает ли Statsmodels категориальные признаки?
Да, через синтаксис C(variable)
в формуле или преобразование в pd.Categorical
.
Как выбрать между OLS и логистической регрессией?
OLS применяется при непрерывной зависимой переменной, логистическая регрессия — при бинарной.
Можно ли визуализировать доверительные интервалы?
Да, метод model.conf_int()
позволяет получить их численно, а графики строятся вручную.
Подходит ли Statsmodels для анализа временных рядов?
Да, модуль tsa
предоставляет широкий набор моделей и инструментов.
Полный справочник по ключевым функциям и методам библиотеки statsmodels
для Python
Установка
Основные интерфейсы
Модуль | Назначение |
---|---|
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
)
Обобщённые линейные модели (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 и др. |
Работа с произвольными распределениями. |
Пример: линейная регрессия
Пример: модель ARIMA
Statsmodels
идеально подходит, когда требуется:
-
понять значимость признаков,
-
интерпретировать модель статистически,
-
построить отчёт с доверительными интервалами и p-значениями,
-
провести анализ временных рядов с классическими методами.
Заключение: когда и зачем использовать Statsmodels
Statsmodels — это мощный и точный инструмент для проведения статистического анализа. Его использование оправдано в ситуациях, когда важны интерпретируемость, проверка статистических гипотез, построение регрессионных моделей и анализ временных рядов. Благодаря совместимости с Pandas и NumPy, библиотека органично вписывается в экосистему Python и предоставляет удобный способ выполнения сложных статистических задач.