Вопрос или проблема
У меня есть набор данных с 71 различной переменной за длительный временной ряд, проводимый ежемесячно с 1960 до 2023 года, и я хочу предсказать значение всех этих переменных, когда одна из них, обозначенная как coa, которая не показана ниже, будет иметь заранее определенное будущее значение. Вот фрагмент данных:
Дата | ure | potc | alu | iro | cop | lea | tin | nic | zin | gol | pla | sil |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Янв 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 715.40 | 206.10 | 2180.40 | 1631.00 | 260.80 | 35.27 | 83.50 | 0.91 |
Фев 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 728.19 | 203.70 | 2180.40 | 1631.00 | 244.90 | 35.27 | 83.50 | 0.91 |
Мар 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 684.94 | 210.30 | 2173.80 | 1631.00 | 248.70 | 35.27 | 83.50 | 0.91 |
Апр 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 723.11 | 213.60 | 2178.20 | 1631.00 | 254.60 | 35.27 | 83.50 | 0.91 |
Май 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 684.75 | 213.40 | 2162.70 | 1631.00 | 253.80 | 35.27 | 83.50 | 0.91 |
Июн 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 691.59 | 202.40 | 2184.80 | 1631.00 | 249.80 | 35.27 | 83.50 | 0.91 |
Июл 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 702.39 | 196.20 | 2248.70 | 1631.00 | 248.70 | 35.27 | 83.50 | 0.91 |
Авг 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 675.94 | 195.30 | 2204.60 | 1631.00 | 241.00 | 35.27 | 83.50 | 0.91 |
Сен 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 647.06 | 192.70 | 2226.70 | 1631.00 | 240.10 | 35.27 | 83.50 | 0.91 |
Окт 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 612.66 | 185.20 | 2226.70 | 1631.00 | 242.30 | 35.27 | 83.50 | 0.91 |
Ноя 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 642.13 | 188.10 | 2204.60 | 1631.00 | 241.40 | 35.27 | 83.50 | 0.91 |
Дек 1960 | 42.25 | 28.50 | 511.47 | 11.42 | 636.91 | 179.20 | 2189.20 | 1631.00 | 228.20 | 35.27 | 83.50 | 0.91 |
Янв 1961 | 42.25 | 30.00 | 511.47 | 11.02 | 606.71 | 175.90 | 2162.70 | 1711.00 | 218.00 | 35.25 | 83.50 | 0.91 |
Я проверял это с помощью множественной линейной регрессии, но уровень доверия и согласованность этих прогнозов недостаточны для моего моделирования, и я хочу использовать векторную авторегрессию, VAR, или другие связанные модели, такие как VARMA и VARMAX, чтобы провести тот же тест. Как лучше всего интегрировать заранее определенное будущее значение coa в модель VAR и провести прогнозирование значений всех других переменных на основе этого нового заранее определенного значения?
Ответ или решение
Для проведения многомерного предсказания временных рядов с использованием векторной авторегрессии (VAR) или её модификаций (VARMA, VARMAX) с заданным известным значением переменной coa
, необходимо следовать нескольким шагам. Ниже представлен детализированный план действий.
Шаг 1: Подготовка данных
-
Проверка качества данных: Убедитесь, что данные не содержат пропущенных значений и выбросов, которые могут негативно повлиять на модели. Необходимо провести предварительный анализ и очистку данных.
-
Преобразование формата даты: Убедитесь, что временные метки представлены в подходящем формате (например, тип
datetime
в Python). -
Нормализация или стандартизация: Если разные переменные находятся на значительно различных масштабах, стоит провести нормализацию или стандартизацию данных для улучшения качества предсказаний.
Шаг 2: Определение и внедрение coa
-
Формирование переменной
coa
: Создайте новый временной ряд с заранее определенным значениемcoa
, которое вам нужно для предсказания. Это может быть отдельный DataFrame или просто столбец в исходном наборе данных. -
Интеграция
coa
в датасет: Добавьте переменнуюcoa
к вашему набору данных, убедившись, что значения обеспечивают временную согласованность. Это значит, что значенияcoa
должны соответствовать тем же временным меткам, что и остальные переменные.
Шаг 3: Построение модели VAR
-
Выбор порядка VAR: Используйте тесты, такие как тесты Акаике (AIC) или Шварца (BIC), для определения оптимального порядка (параметров лагов) модели VAR. Вы можете использовать функцию
VAR.select_order()
из библиотекиstatsmodels
в Python. -
Обучение модели: Создайте и обучите модель VAR, используя все переменные, включая
coa
. Одна из библиотек на Python для этой задачи —statsmodels
.from statsmodels.tsa.api import VAR model = VAR(data) results = model.fit(maxlags=p) # p — выбранное количество лагов
Шаг 4: Прогнозирование
-
Формирование прогноза: Используйте
results.forecast()
для получения прогноза на основе данных и заданного значенияcoa
.forecast = results.forecast(data.values[-results.k_ar:], steps=n_steps)
Здесь
n_steps
— количество шагов вперёд, на которое вы хотите провести прогноз. -
Запись прогноза в новую таблицу: Результаты прогноза можно записать в новую таблицу для дальнейшего анализа.
Шаг 5: Анализ результатов
-
Оценка качества модели: Проведите оценку качества прогнозов, используя такие метрики, как MSE (среднеквадратичная ошибка) или MAE (средняя абсолютная ошибка).
-
Визуализация результатов: Рекомендуется визуализировать результаты прогнозов, чтобы понять их корректность и провести последовательный анализ.
Шаг 6: Альтернативные модели
-
Использование VARMA/VARMAX моделей: Если данные указывают на наличие сезонности и/или авторегрессии с скользящими средними, имеет смысл рассмотреть использование VARMA или VARMAX моделей аналогичным образом, добавляя внешние регрессоры (в данном случае переменную
coa
).from statsmodels.tsa.statespace.varmax import VARMAX model = VARMAX(data, order=(p, q)) results = model.fit() forecast = results.forecast(steps=n_steps)
Следуя этим шагам, вы сможете эффективно интегрировать переменную coa
в ваши модели VAR и проводить надежные прогнозы по всем остальным переменным во временном ряде.