Геометрическое броуновское движение в Python с Matplotlib

Нашу интуицию легко исказить с помощью простого мысленного эксперимента. Если кто-то предложит вам миллион долларов сразу или даст вам пенни, которые удваиваются каждый день в течение месяца, что бы вы выбрали? Выбор за вами, но я бы посоветовал выбрать копейки.

Что важно в предыдущей головоломке, так это то, что удвоение пенни подчиняется закону геометрической прогрессии. Это закон мультипликативного выражения изменений в терминах предыдущих состояний. Вот почему это легко разрушает нашу интуицию относительно того, насколько быстро некоторая измеримая величина может увеличиваться в положительном или отрицательном направлении.

Эта стремительно развивающаяся тенденция в зависимости от предыдущих состояний важна для моделирования некоторых случайных процессов. В предыдущих сообщениях блога мы представили Случайное блуждание и на его основе построили Стандартное броуновское движение и броуновское движение с дрейфом и волатильностью. Однако эти процессы демонстрируют аддитивное поведение без явного включения скорости изменения по сравнению с предыдущими временными шагами.

В этом блоге мы копаем больше и представляем геометрическое броуновское движение. Он обрабатывает продукты независимых приращений, а не сумму независимых приращений. Эта мультипликативная природа увеличивает скорость относительных изменений в короткие промежутки времени, что, в свою очередь, делает процесс хорошо подходящим для множества приложений. Например, одним из наиболее распространенных приложений является моделирование цен акций или даже целых фондовых индексов.

Как и раньше, мы используем числовые пакеты Python для реализации геометрического броуновского движения. Кроме того, мы анализируем и моделируем некоторые удивительные свойства этого процесса с помощью API анимации Matplotlib. Следите за обновлениями!

Естественный язык роста

Случайные блуждания подчиняются аддитивному закону, что означает, что каждое последующее значение является суммой предыдущего и случайного приращения (положительного или отрицательного), т.е.

Количество, которое мы добавляем к предыдущему значению, определяет скорость изменения процесса. В этом случае ставка не связана напрямую с предыдущим значением, что создает серьезное ограничение.

Более интуитивно понятный способ - выразить скорость изменения относительно предыдущих значений. Например, подумайте о процентной ставке, четко определенной величине в банковском секторе. Он всегда выражается в процентах от основной суммы, т. Е. От начального значения.

В целях демонстрации, давайте возьмем два очень простых процесса в дискретном пространстве, один мультипликативный и другой аддитивный, как определено ниже:

Скорость изменения определяется как скорость, с которой одна переменная изменяется за короткий промежуток времени. В нашем примере для двух процессов с дискретным временем скорость изменения проиллюстрирована ниже:

С одной стороны, скорость изменения мультипликативного процесса напрямую зависит от предыдущего значения. С другой стороны, скорость изменения аддитивного процесса постоянна и не зависит от самого процесса. Это довольно сложно, потому что у нас нет привязки, на которую можно было бы ссылаться.

Чтобы преобразовать процесс с дополнительными приращениями, например Случайное блуждание, в процесс с мультипликативными приращениями, мы используем простой трюк. Степень с суммой в показателе степени становится произведением степеней, как показано ниже:

Чаще всего в математике мы используем число e как основание силы, поскольку оно представляет естественный язык роста. Это упрощает операции и устраняет все препятствия в процессе создания и интеграции. Это приводит нас к определению геометрического броуновского движения.

Определение геометрического броуновского движения

Геометрическое броуновское движение - это простая трансформация дрейфующего броуновского движения, но очень важная. Мы преобразуем процесс, который может обрабатывать сумму независимых нормальных приращений, в процесс, который может обрабатывать продукт независимых приращений, как определено ниже:

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

Наша реализация Python основана на нашей предыдущей работе над Стандартным броуновским движением. При повторном использовании этого модуля геометрическое броуновское движение реализуется следующим образом:

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

Нулевое среднее, бесконечная дисперсия

Случайные процессы имеют среднее значение и дисперсию как функцию времени, что делает их интересными для анализа. Не вдаваясь в подробности их происхождения, ниже приведены среднее значение и дисперсия геометрического броуновского движения:

Основное ограничение этих показателей - их детерминизм. Более реалистичным сценарием было бы также их стохастическое моделирование. Реализация Python довольно проста, как показано во фрагменте кода ниже:

Как мы видим, коэффициенты дрейфа и волатильности определяют природу среднего значения и дисперсии, что означает, что они играют важную роль. Взаимодействие между ними может формировать среднее значение и дисперсию во многих различных и интересных сценариях. Одно особое и интересное свойство состоит в том, что мы можем иметь нулевое среднее значение и бесконечную дисперсию. Хотя это кажется странным, мы наблюдаем это явление, как только выполняется следующее условие:

Мы делаем анимированную визуализацию с помощью API анимации Matplotlib, чтобы получить больше смысла и перейти от Я думаю, что понимаю к Я полностью понимаю. Это облегчает процесс схватывания и заманчивого понимания концепций, как показано ниже:

Теперь мы приходим к выводу, что то, что мы наблюдали, согласуется с кратким математическим анализом, который мы сделали. Среднее значение действительно уменьшается до нуля, а дисперсия взрывается до бесконечности.

Полный исходный код, относящийся ко всему, что мы обсуждали в этом блоге, можно найти на GitHub. Для получения дополнительной информации, подписывайтесь на меня в Twitter.

Ключевые выводы

В этом блоге мы узнали о геометрическом броуновском движении, которое хорошо подходит для выражения скорости изменения в мультипликативных терминах. Он обрабатывает продукты со случайными приращениями, следуя нормальному логарифмическому распределению. Следовательно, сгенерированные значения легче выразить в относительном выражении по сравнению с предыдущими, и они никогда не бывают отрицательными. Это делает процесс подходящим для моделирования курсов акций и фондовых индексов.

Помимо всего прочего, этот процесс лежит в основе стохастических дифференциальных уравнений и стохастической интеграции, о которых мы начнем в следующих нескольких блогах.

Приложение

В нашей визуализации выше мы видели только одну реализацию геометрического броуновского движения. Однако этот процесс может дать любое количество гипотетических путей, в зависимости от начальных условий. Чтобы визуализировать эту чистую неопределенность процесса, мы генерируем 10 процессов с точно такими же параметрами, только с разными начальными затравками. Результат визуализирован на анимации ниже:

использованная литература

[1] Питер Олофссон, Микаэль Андерссон, « Вероятность, статистика и случайные процессы »

Истории, которые можно проверить

Ознакомьтесь со следующими интересными историями, чтобы узнать больше о случайных блужданиях:







Первоначально опубликовано на https://ilievskiv.github.io 17 мая 2020 г. Для получения дополнительной информации, подпишитесь на меня в Twitter.