Геометрическое броуновское движение в Python с Matplotlib
Нашу интуицию легко исказить с помощью простого мысленного эксперимента. Если кто-то предложит вам миллион долларов сразу или даст вам пенни, которые удваиваются каждый день в течение месяца, что бы вы выбрали? Выбор за вами, но я бы посоветовал выбрать копейки.
Что важно в предыдущей головоломке, так это то, что удвоение пенни подчиняется закону геометрической прогрессии. Это закон мультипликативного выражения изменений в терминах предыдущих состояний. Вот почему это легко разрушает нашу интуицию относительно того, насколько быстро некоторая измеримая величина может увеличиваться в положительном или отрицательном направлении.
Эта стремительно развивающаяся тенденция в зависимости от предыдущих состояний важна для моделирования некоторых случайных процессов. В предыдущих сообщениях блога мы представили Случайное блуждание и на его основе построили Стандартное броуновское движение и броуновское движение с дрейфом и волатильностью. Однако эти процессы демонстрируют аддитивное поведение без явного включения скорости изменения по сравнению с предыдущими временными шагами.
В этом блоге мы копаем больше и представляем геометрическое броуновское движение. Он обрабатывает продукты независимых приращений, а не сумму независимых приращений. Эта мультипликативная природа увеличивает скорость относительных изменений в короткие промежутки времени, что, в свою очередь, делает процесс хорошо подходящим для множества приложений. Например, одним из наиболее распространенных приложений является моделирование цен акций или даже целых фондовых индексов.
Как и раньше, мы используем числовые пакеты Python для реализации геометрического броуновского движения. Кроме того, мы анализируем и моделируем некоторые удивительные свойства этого процесса с помощью API анимации Matplotlib. Следите за обновлениями!
Естественный язык роста
Случайные блуждания подчиняются аддитивному закону, что означает, что каждое последующее значение является суммой предыдущего и случайного приращения (положительного или отрицательного), т.е.
Количество, которое мы добавляем к предыдущему значению, определяет скорость изменения процесса. В этом случае ставка не связана напрямую с предыдущим значением, что создает серьезное ограничение.
Более интуитивно понятный способ - выразить скорость изменения относительно предыдущих значений. Например, подумайте о процентной ставке, четко определенной величине в банковском секторе. Он всегда выражается в процентах от основной суммы, т. Е. От начального значения.
В целях демонстрации, давайте возьмем два очень простых процесса в дискретном пространстве, один мультипликативный и другой аддитивный, как определено ниже:
Скорость изменения определяется как скорость, с которой одна переменная изменяется за короткий промежуток времени. В нашем примере для двух процессов с дискретным временем скорость изменения проиллюстрирована ниже:
С одной стороны, скорость изменения мультипликативного процесса напрямую зависит от предыдущего значения. С другой стороны, скорость изменения аддитивного процесса постоянна и не зависит от самого процесса. Это довольно сложно, потому что у нас нет привязки, на которую можно было бы ссылаться.
Чтобы преобразовать процесс с дополнительными приращениями, например Случайное блуждание, в процесс с мультипликативными приращениями, мы используем простой трюк. Степень с суммой в показателе степени становится произведением степеней, как показано ниже:
Чаще всего в математике мы используем число e как основание силы, поскольку оно представляет естественный язык роста. Это упрощает операции и устраняет все препятствия в процессе создания и интеграции. Это приводит нас к определению геометрического броуновского движения.
Определение геометрического броуновского движения
Геометрическое броуновское движение - это простая трансформация дрейфующего броуновского движения, но очень важная. Мы преобразуем процесс, который может обрабатывать сумму независимых нормальных приращений, в процесс, который может обрабатывать продукт независимых приращений, как определено ниже:
Этот процесс следует логарифмически-нормальному распределению, что означает, что сгенерированные значения никогда не опускаются ниже нуля. Это очень удобно для моделирования цен акций и фондовых индексов, потому что они имеют одинаковые характеристики и никогда не бывают отрицательными.
Наша реализация Python основана на нашей предыдущей работе над Стандартным броуновским движением. При повторном использовании этого модуля геометрическое броуновское движение реализуется следующим образом:
Этот процесс имеет несколько очень интересных свойств для анализа, связанных с его средним значением и дисперсией. Мы рассмотрим это в следующем разделе.
Нулевое среднее, бесконечная дисперсия
Случайные процессы имеют среднее значение и дисперсию как функцию времени, что делает их интересными для анализа. Не вдаваясь в подробности их происхождения, ниже приведены среднее значение и дисперсия геометрического броуновского движения:
Основное ограничение этих показателей - их детерминизм. Более реалистичным сценарием было бы также их стохастическое моделирование. Реализация Python довольно проста, как показано во фрагменте кода ниже:
Как мы видим, коэффициенты дрейфа и волатильности определяют природу среднего значения и дисперсии, что означает, что они играют важную роль. Взаимодействие между ними может формировать среднее значение и дисперсию во многих различных и интересных сценариях. Одно особое и интересное свойство состоит в том, что мы можем иметь нулевое среднее значение и бесконечную дисперсию. Хотя это кажется странным, мы наблюдаем это явление, как только выполняется следующее условие:
Мы делаем анимированную визуализацию с помощью API анимации Matplotlib, чтобы получить больше смысла и перейти от Я думаю, что понимаю к Я полностью понимаю. Это облегчает процесс схватывания и заманчивого понимания концепций, как показано ниже:
Теперь мы приходим к выводу, что то, что мы наблюдали, согласуется с кратким математическим анализом, который мы сделали. Среднее значение действительно уменьшается до нуля, а дисперсия взрывается до бесконечности.
Полный исходный код, относящийся ко всему, что мы обсуждали в этом блоге, можно найти на GitHub. Для получения дополнительной информации, подписывайтесь на меня в Twitter.
Ключевые выводы
В этом блоге мы узнали о геометрическом броуновском движении, которое хорошо подходит для выражения скорости изменения в мультипликативных терминах. Он обрабатывает продукты со случайными приращениями, следуя нормальному логарифмическому распределению. Следовательно, сгенерированные значения легче выразить в относительном выражении по сравнению с предыдущими, и они никогда не бывают отрицательными. Это делает процесс подходящим для моделирования курсов акций и фондовых индексов.
Помимо всего прочего, этот процесс лежит в основе стохастических дифференциальных уравнений и стохастической интеграции, о которых мы начнем в следующих нескольких блогах.
Приложение
В нашей визуализации выше мы видели только одну реализацию геометрического броуновского движения. Однако этот процесс может дать любое количество гипотетических путей, в зависимости от начальных условий. Чтобы визуализировать эту чистую неопределенность процесса, мы генерируем 10 процессов с точно такими же параметрами, только с разными начальными затравками. Результат визуализирован на анимации ниже:
использованная литература
[1] Питер Олофссон, Микаэль Андерссон, « Вероятность, статистика и случайные процессы »
Истории, которые можно проверить
Ознакомьтесь со следующими интересными историями, чтобы узнать больше о случайных блужданиях:
Первоначально опубликовано на https://ilievskiv.github.io 17 мая 2020 г. Для получения дополнительной информации, подпишитесь на меня в Twitter.