В этой статье я хотел бы кратко обсудить Гауссовский процесс с несколькими ответами (MGP), который учитывает корреляции между ответами при прогнозировании.
Цель этой статьи не в том, чтобы глубоко погрузиться в математические основы регрессии гауссовского процесса с несколькими выходами, а в том, чтобы дать аудитории представление о ее реализации в прогнозировании цен опционов.
Следующее объяснение взято из [1]. Если вы хотите узнать математические основы и подробности регрессии гауссовского процесса с несколькими ответами, см. [1–2].
В этой статье мы будем использовать мощную библиотеку GPyTorch, библиотеку процессов Гаусса, реализованную PyTorch. Если вы не установили PyTorch или GPyToch на Anaconda, вы можете посетить официальный сайт PyTorch и найти соответствующую информацию.
Импортируйте необходимые модули из различных пакетов.
Подготовка данных
- Безрисковая ставка = 0,0001
2. Спотовая цена базового актива = 215,5
3. Цена исполнения колл = 330,0
4. Цена исполнения пут = 127,0
5. Время до погашения = 3,0
6. Подразумеваемая волатильность = 0,4
Параметры те же, что и в предыдущей статье,Машинное обучение|Регрессия гауссовского процесса|Цена опциона — 1. Кроме того,500 выборок цен опционов Блэка-Шоулза с 400 выборками обучающих данных и 100 выборками тестовых данных.
Настройка модели регрессии гауссовского процесса с несколькими ответами
Согласно официальному веб-сайту GPyTorch, стандартная процедура настройки модели регрессии гауссовского процесса заключается в создании объекта GPyTorch.
- Определите класс с именем MultitaskGPModel и наследуйте параметры, а также модули от класса gpytorch.models.ExactGP.
- Создайте класс, модуль MultitaskGPModel, например априорное среднее и априорную ковариационную матрицу, которые представляют параметры многомерного Гауссово распределение векторизации набора функций [f(X1, f(X2),……,f(Xn)].
2–1. Вставьте gpytorch.means.ConstantMean() в функцию gpytorch.means.MultitaskMean(). Поскольку здесь мы имеем дело с ценой колл-опциона и ценой пут-опциона, мы устанавливаем параметр num_tasks равным 2.
2–2. Вставьте gpytorch.kernels.ScaleKernel(gpytorch.kernels.MaternKernel()) в функцию gpytorch.kernels.MultitaskKernel(). Здесь мы используем Matern kernel другой вид радиальных базисных функций (RBF), который зависит только от расстояния между входными данными и прогнозируемыми значениями.
3. Наконец, используйте gpytorch.distributions.MultitaskMultivariateNormal(), чтобы представить заданное многомерное нормальное распределение.
Подходит для модели
(следующие коды можно найти на официальном сайте GPTorch: https://docs.gpytorch.ai/en/v1.2.0/examples/01_Exact_GPs/Simple_GP_Regression.html)
- Прежде всего, мы инициализируем вероятность и модель. Во-вторых, используйте model.train(), likelihood.train() для оптимизации гиперпараметров.
- Здесь мы выбрали адам оптимизатор, чтобы найти оптимальные гиперпараметры.
- Гиперпараметры и элементы ковариационной матрицы находятся путем минимизацииотрицательного логарифмического предельного правдоподобия.
Прогноз
- model.eval(), likelihood.eval(): вычисление прогнозов с помощью апостериорных моделей (апостериорное среднее, апостериорная ковариация).
- с классом torch.no_grad(): отключить вычисление градиента, так как мы не будем вызывать
Tensor.backward()
. - с классом gpytorch.settings.fast_pred_var(): используется при расчете дисперсий быстрого прогнозирования.
- Вычислите доверительный интервал предсказания, y_hat.
Подходящие параметры
1-1. Введите model.covar_module.task_covar_module.covar_factor, чтобы получить квадратный корень из ковариационной матрицы задачи.
1-2. Используйте model.covar_module.task_covar_module.var, чтобы получить зависящий от задачи аддитивный гауссовский шум.
2. Восстановите омегу (ковариационную матрицу).
3. Извлеките параметр масштаба длины, используемый в ядре Matern.
4. Отобразить аддитивный гауссовский шум в задаче.
5–1. .clone() : создает тензор, который разделяет хранилище с тензором, не требующим градиента.
5–2. .detach() :создает копию тензора, которая имитирует поле require_grad исходного тензора.
5–3. .clone().detach() :создать только копию тензора, без require_grad и общего доступа к хранилищу.
6. Получите параметр nu в ядре Matern.
Результаты
Первые два графика ниже показывают, что прогнозы цены колл/пут, сделанные оценщиком регрессии Гаусса, почти неотличимы от цен опционов Блэка-Шоулза.
-Вызов вариант
-Пут Опцион
Аналогично Машинное обучение|Регрессия гауссовского процесса|Цена опциона — 1. Здесь я представляю графики нескольких портфелей.
Стоимость портфеля
два длинных пута и два длинных колла (стратегия торговли стрэдлом).
Длинный один колл и короткие два пута
(при прочих равных)
Два коротких колла и два длинных пута
(при прочих равных)
Примечание. Метод и код, используемые в этой статье, в основном взяты из [3].
Никогда не прекращайте учиться!
Ссылка:
[1] Ян Де Шпигелер, Дилип Б. Мадан, Софи Рейнерс, Вим Схоутенс, Машинное обучение для количественных финансов: быстрое производное ценообразование, хеджирование и подгонка (2018)
[2]Стефан Крепе, Мэтью Диксон, Регрессия гауссовского процесса для моделирования производного портфеля и применения к вычислениям CVA (2019)
[3] Диксон М., Гальперин И., Билокон П. Машинное обучение в финансах: от теории к практике. 2020, стр.81-стр.109
[4] Бо Ван, Тао Чен, Регрессия гауссовского процесса с множественными переменными отклика (2015)