AIC (Akaike Information Criterion) — это один из самых важных и широко используемых критериев для выбора моделей в статистике и машинном обучении.
Что такое AIC?
AIC (Информационный критерий Акаике) — это критерий, который позволяет сравнивать разные модели, учитывая как качество их подгонки, так и сложность. Он реализует принцип бритвы Оккама: при прочих равных условиях более простая модель предпочтительнее.
Основная идея:
AIC находит баланс между точностью модели и ее сложностью.
Формула AIC
AIC = 2k - 2ln(L)
Где:
- k — количество параметров в модели
- L — максимальное значение функции правдоподобия модели
- ln — натуральный логарифм
Для линейной регрессии формула упрощается до:
AIC = n × ln(SS_res/n) + 2k + C
Где:
- n — количество наблюдений
- SS_res — сумма квадратов остатков
- C — константа, которая часто опускается при сравнении моделей
Как работает AIC?
Логика AIC:
- Первая часть (2k): Штрафует за сложность модели (количество параметров)
- Вторая часть (-2ln(L)): Оценивает качество подгонки (чем лучше модель, тем выше L, тем меньше эта часть)
Чем МЕНЬШЕ AIC, тем лучше модель.
Пример: Сравнение моделей с помощью AIC
Допустим, мы строим модель прогноза цен на дома и рассматриваем 3 модели:
| Модель | Параметры (k) | ln(L) | AIC |
|---|---|---|---|
| Модель 1: Только площадь | 2 | -150.0 | 2×2 - 2×(-150) = 304 |
| Модель 2: Площадь + комнаты | 3 | -140.0 | 2×3 - 2×(-140) = 286 |
| Модель 3: Площадь + комнаты + цвет стен | 4 | -139.5 | 2×4 - 2×(-139.5) = 287 |
Вывод:
- Модель 2 имеет наименьший AIC → лучшая модель
- Модель 3 хуже, чем Модель 2, несмотря на лучшее правдоподобие — штраф за сложность не оправдан
Преимущества AIC
- Универсальность: Работает для любых моделей, оцененных методом максимального правдоподобия
- Баланс сложности и точности: Автоматически находит оптимальную сложность модели
- Теоретическое обоснование: Основан на теории информации (расстояние Кульбака-Лейблера)
- Широкое признание: Стандарт в статистике, эконометрике, машинном обучении
Интерпретация значений AIC
Абсолютные значения AIC:
- Не имеют самостоятельного смысла
- Важны только разницы между моделями
Правила интерпретации разниц ΔAIC = AIC_model - AIC_min:
| ΔAIC | Интерпретация |
|---|---|
| 0-2 | Существенной разницы нет |
| 4-7 | Есть существенные различия |
| >10 | Модель значительно хуже |
Пример:
- Модель A: AIC = 100 (лучшая)
- Модель B: AIC = 101 (ΔAIC = 1 → практически одинаковы)
- Модель C: AIC = 108 (ΔAIC = 8 → значительно хуже)
Сравнение с другими критериями
AIC vs BIC (Bayesian Information Criterion):
BIC = -2ln(L) + k × ln(n)
| Критерий | Штраф за сложность | Предназначение |
|---|---|---|
| AIC | 2k | Выбор модели для прогнозирования |
| BIC | k × ln(n) | Выбор истинной модели |
Ключевые различия:
- BIC сильнее штрафует за сложность (особенно при больших n)
- AIC лучше для прогнозирования, BIC лучше для выявления истинных закономерностей
- При n ≥ 8: ln(n) > 2 → BIC строже
AIC vs Adjusted R²:
- Оба штрафуют за сложность
- AIC более универсален (работает для нелинейных моделей)
- Adjusted R² проще для интерпретации
Ограничения AIC
- Требует корректного определения k: Нужно точно считать число параметров
- Чувствителен к выбросам: Так как основан на правдоподобии
- Не абсолютная мера: Показывает только относительное качество моделей
- Предполагает, что истинная модель в рассмотрении: Может не работать, если все модели плохие
Практическое применение
Когда использовать AIC:
- Выбор между разными типами моделей (линейная vs полиномиальная)
- Выбор оптимального набора признаков
- Сравнение невложенных моделей (которые нельзя сравнить F-тестом)
- Автоматический отбор переменных
Процесс работы с AIC:
- Построить несколько моделей-кандидатов
- Рассчитать AIC для каждой
- Выбрать модель с наименьшим AIC
- Проанализировать разницы ΔAIC
Пример в Python
import statsmodels.api as sm
from sklearn.linear_model import LinearRegression
import numpy as np
# Данные
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]])
y = np.array([1, 2, 3, 4, 5])
# Модель 1: Только первый признак
X1 = X[:, 0].reshape(-1, 1)
model1 = sm.OLS(y, sm.add_constant(X1)).fit()
print(f"Модель 1 AIC: {model1.aic}")
# Модель 2: Оба признака
model2 = sm.OLS(y, sm.add_constant(X)).fit()
print(f"Модель 2 AIC: {model2.aic}")
# Сравнение
if model1.aic < model2.aic:
print("Модель 1 лучше")
else:
print("Модель 2 лучше")Модификации AIC
AICc (скорректированный AIC):
AICc = AIC + (2k(k+1))/(n-k-1)
- Используется при малом n (обычно когда n/k < 40)
- Дает менее смещенные оценки при маленьких выборках
QAIC (для передисперсионных данных):
- Для данных с биномиальным или пуассоновским распределением
- Учитывает передисперсию (overdispersion)
Резюме
AIC — это мощный инструмент для выбора моделей, который:
- Балансирует точность и сложность
- Широко применим для разных типов моделей
- Основан на строгой теории информации
- Прост в использовании — просто выбираем модель с минимальным AIC
Золотое правило: Всегда используйте AIC вместе с другими методами (кросс-валидация, предметные знания) для принятия обоснованных решений о выборе модели.