Вопрос или проблема
Короче говоря, я получаю предсказательный интервал меньше, чем доверительный интервал, хотя они должны быть шире. Любая помощь в понимании, почему это происходит, будет очень полезной 🙂
Позвольте начать с изложения проблемы. Я использую ГЛМ, чтобы предсказать некоторую переменную (скажем, сумму продаж). Если я суммирую предсказанное среднее для каждой строки данных, я получаю прогноз общей суммы продаж. Через год я получаю истинное значение. Цель состоит в том, чтобы иметь диапазон вокруг прогноза, такой, что если истинное значение за пределами этого диапазона, это может быть признаком того, что модель нуждается в повторном обучении.
С точки зрения статистики, это кажется хорошим примером для использования предсказательных интервалов. Поэтому я пытался реализовать их в Python. Вот мой код на примере игрушечных данных, после него я укажу на свои проблемы.
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
import scipy.stats as stats
# Генерация данных
np.random.seed(0)
n = 100
x1 = np.random.normal(size=n)
x2 = np.random.normal(size=n)
y = np.random.poisson(lam=np.exp(0.5 + 0.3 * x1 - 0.2 * x2), size=n)
# DataFrame
data = pd.DataFrame({'x1': x1, 'x2': x2, 'y': y})
# ГЛМ
model = smf.glm(formula="y ~ x1 + x2", data=data, family=sm.families.Poisson()).fit()
# Получение предсказаний
predictions=model.get_prediction(data)
pred_mean=predictions.summary_frame()['mean']
pred_lower_ci=predictions.summary_frame()['mean_ci_lower']
pred_upper_ci=predictions.summary_frame()['mean_ci_upper']
# Определяем доверительные интервалы
lower_bound_CI=np.sum(pred_lower_ci)
upper_bound_CI=np.sum(pred_upper_ci)
# Определяем предсказательные интервалы
alpha=0.05
total_mean=np.sum(pred_mean)
lower_bound_PI=stats.poisson.ppf(alpha/2,total_mean)
upper_bound_PI=stats.poisson.ppf(1-alpha/2,total_mean)
Я получаю в результате предсказанное значение 169. Доверительный интервал составляет [131.65,217.96], а предсказательный интервал — [144,195].
В чем мои проблемы?
-
Как упоминалось в начале, мой CI шире, чем мой PI, хотя статистически должно быть наоборот. Я думал, что это может быть из-за того, что я суммирую ‘mean_ci_lower’ и ‘mean_ci_upper’, но та же проблема возникает при n=1 (то есть без какой-либо суммирования). Я знаю, что суммирование предполагает независимость данных.
Кто-нибудь видит в этом что-то неправильное? -
Когда я пересматриваю свой способ вычисления PI, я думаю, что использовал бы ту же формулу, если бы хотел сам вычислить CI. Поэтому я задаюсь двумя вопросами. Правильный ли мой способ вычисления PI? Может быть, для распределения Пуассона, используя истинные квантили, оба интервала одинаковы? И если нет, и в действительности я вычисляю CI, почему это не тот же результат, что и у пакета statsmodels? Используют ли они нормальное приближение? Я пытался прочитать код в пакете, но в какой-то момент запутался. Как приемлемо использовать нормальное приближение? Также если семья ГЛМ — это гамма-семья (я ожидаю, что в основном буду сталкиваться с Гауссовской, Пуассоновской и Гамма-семьей)?
Если вы все еще читаете это, уже спасибо вам.
И если вы можете/имеете время помочь, я был бы очень признателен.
Ответ или решение
Теория
Когда речь идет о статистическом моделировании и, в частности, о генерализованных линейных моделях (GLM), важной задачей является интерпретация результатов модели и их использования для прогнозирования будущих данных. В данной ситуации рассматриваются два основных типа интервалов: доверительный интервал (confidence interval) и предсказательный интервал (prediction interval). Оба эти интервала имеют свои особенности применения и интерпретации.
Доверительный интервал (ДИ):
Доверительный интервал предназначен для описания неопределенности оценок параметров модели. В контексте предсказания с помощью GLM доверительный интервал предоставляет диапазон значений вокруг предсказаемой средней величины, в котором с заданной уверенностью (например, 95%) находится истинное среднее значение. Доверительный интервал обычно уже предсказательного, поскольку учитывает только неопределенность оценки среднего значения.
Предсказательный интервал (ПИ):
Предсказательный интервал предназначен для описания диапазона, в котором с заданной уверенностью ожидается нахождение фактического наблюдения. Он шире ДИ, так как учитывает не только неопределенность оценки среднего, но и вариабельность самих данных (остаточную дисперсию). Это особенно важно при работе с реальными данными, где нужно предсказать индивидуальные значения, а не только их математическое ожидание.
Пример
В вашем коде используется генерализованная линейная модель с распределением Пуассона для предсказания величины y (например, объем продаж) на основе двух независимых переменных x1 и x2. Вы применили статистический пакет statsmodels
в Python для фитинга модели и построения доверительных и предсказательных интервалов.
Применение
Вы упомянули, что предсказательная ошибка проявляется в том, что вы наблюдаете более узкий предсказательный интервал по сравнению с доверительным интервалом. Это противоречит теории, так как предсказательные интервалы должны быть шире из-за учета дополнительной неопределенности. Давайте разберемся с возможными причинами этой несоответственности и правильными подходами к построению этих интервалов.
-
Неправильное определение интервалов:
- При расчете доверительного и предсказательного интервалов важно учитывать разницу в подходах. Вы используете
poisson.ppf
для расчета ПИ, учитывая распределение Пуассона. Это может быть корректной методикой для ПИ, но стоит учитывать, что применимые предположения должны соответствовать использованной модели данных.
- При расчете доверительного и предсказательного интервалов важно учитывать разницу в подходах. Вы используете
-
Ошибки при суммировании отдельных интервалов:
- Возможно, проблема заключается в ошибочном суммировании индивидуальных доверительных интервалов. Для получения ДИ для суммы предсказываемых значений следует учитывать корреляции и независимость отдельный прогнозов – простое суммирование нижних и верхних границ доверительных интервалов может не учитывать эти аспекты.
-
Отличия в методах расчёта для ДИ и ПИ:
statsmodels
может применять асимптотические нормальные распределения для более простых вычислений доверительных интервалов в линейных моделях, даже если логлинейное распределение Пуассона лежит в основе предсказания. Это предположение может приводить к более узким доверительным интервалам по сравнению с реалистичным пониманием данных через доверительную область с использованием квантилей Пуассона.
Корректировка решений
-
Ревизия расчета предсказательных интервалов:
- Интеграция метода бутстрепинга или симуляции Монте-Карло для проверки распределения и соответствию эмпирических данных.
-
Учет изменчивости данных:
- Убедитесь, что предсказательная изменчивость корректно учтена при расчете ПИ путем добавления дисперсии остатков к вычисленному предсказанию.
-
Документация:
- Рассмотрите возможность углубленного изучения открытых исходных кодов
statsmodels
для ясного понимания применяемой математической теории.
- Рассмотрите возможность углубленного изучения открытых исходных кодов
В итоге, улучшение качества построения интервалов требует глубокого анализа подходов к вычислению доверительных и предсказательных интервалов, а также экспериментальных проверок используемых методов для их корректного применения в бизнес-задачах.