В этой статье я хотел бы кратко обсудить Гауссовский процесс с несколькими ответами (MGP), который учитывает корреляции между ответами при прогнозировании.

Цель этой статьи не в том, чтобы глубоко погрузиться в математические основы регрессии гауссовского процесса с несколькими выходами, а в том, чтобы дать аудитории представление о ее реализации в прогнозировании цен опционов.

Следующее объяснение взято из [1]. Если вы хотите узнать математические основы и подробности регрессии гауссовского процесса с несколькими ответами, см. [1–2].

В этой статье мы будем использовать мощную библиотеку GPyTorch, библиотеку процессов Гаусса, реализованную PyTorch. Если вы не установили PyTorch или GPyToch на Anaconda, вы можете посетить официальный сайт PyTorch и найти соответствующую информацию.

Импортируйте необходимые модули из различных пакетов.

Подготовка данных

  1. Безрисковая ставка = 0,0001

2. Спотовая цена базового актива = 215,5

3. Цена исполнения колл = 330,0

4. Цена исполнения пут = 127,0

5. Время до погашения = 3,0

6. Подразумеваемая волатильность = 0,4

Параметры те же, что и в предыдущей статье,Машинное обучение|Регрессия гауссовского процесса|Цена опциона — 1. Кроме того,500 выборок цен опционов Блэка-Шоулза с 400 выборками обучающих данных и 100 выборками тестовых данных.

Настройка модели регрессии гауссовского процесса с несколькими ответами

Согласно официальному веб-сайту GPyTorch, стандартная процедура настройки модели регрессии гауссовского процесса заключается в создании объекта GPyTorch.

  1. Определите класс с именем MultitaskGPModel и наследуйте параметры, а также модули от класса gpytorch.models.ExactGP.
  2. Создайте класс, модуль 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)

  1. Прежде всего, мы инициализируем вероятность и модель. Во-вторых, используйте model.train(), likelihood.train() для оптимизации гиперпараметров.
  2. Здесь мы выбрали адам оптимизатор, чтобы найти оптимальные гиперпараметры.
  3. Гиперпараметры и элементы ковариационной матрицы находятся путем минимизацииотрицательного логарифмического предельного правдоподобия.

Прогноз

  1. model.eval(), likelihood.eval(): вычисление прогнозов с помощью апостериорных моделей (апостериорное среднее, апостериорная ковариация).
  2. с классом torch.no_grad(): отключить вычисление градиента, так как мы не будем вызывать Tensor.backward().
  3. с классом gpytorch.settings.fast_pred_var(): используется при расчете дисперсий быстрого прогнозирования.
  4. Вычислите доверительный интервал предсказания, 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)