Моделирование методом Монте-Карло - это то, что недавно было поручено изучить моему мастер-классу в качестве введения в анализ данных. Должен признаться, мое понимание вначале было грубым, мягко говоря… НО… Я думаю, что уже успел осознать механику запуска пары тысяч симуляций с использованием нашего любимого языка рептилий… Нет, не парселтанга 🐍… Python! #Gryffindorforever

Сценарий инвестора:

Во-первых, моделирование Монте-Карло необходимо применить к сценарию, который содержит зависимую переменную и несколько переменных параметров. Простым случаем, использованным в нашем классе, была инвестиция в размере 100000 долларов США, которой оставалось расти в течение 30-летнего периода, с дополнительными выплатами в размере 10000 долларов США каждый год и с переменной процентной ставкой, которой мы присвоили случайные вероятности на основе нормального распределения. . Также были представлены стандартное отклонение и средняя процентная ставка.

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

Проще говоря: если мы запустим 10 000 симуляций, это будет более точно, чем, скажем, 10 симуляций для прогнозирования среднего будущего значения.

Навыки программирования - это здорово, но только если вы знаете, что с ними делать!

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

Это все равно, что накапливать в своем домашнем сарае различные инструменты и материалы (ножовки, сверла, болты, гвозди, дерево, листовой металл, отбойные молотки и т. Д. #Zerodiyknowledge) только для того, чтобы понять, что вы не знаете, зачем они вам нужны и как их использовать. так что вы в конечном итоге идете в IKEA и покупаете журнальный столик с функцией plug-and-play, что сродни простому обращению к программному обеспечению с открытым кодом, которое может дать вам заранее определенный процесс для достижения результата ... Конечно, есть в этом нет ничего плохого, но если вы пытаетесь научиться думать, тогда вам нужно на самом деле… думать… Звучит странно, я знаю.

Я отвлекся.

Я включил простую диаграмму, показывающую, как я думал о базовых вычислениях и как структурировать код, чтобы получить конечные значения по истечении 30 лет:

Мой мыслительный процесс, конечно, не является ни правильным, ни неправильным, это просто личное. Таким образом, ваш подход к этой проблеме может быть совершенно другим или похожим! Не ограничивайте себя - сначала поймите «почему», а затем планируйте свой курс со своими личными предпочтениями!

Актуальный код программы:

Сначала я начал с переменных и импортировал numpy, который сделает всю тяжелую работу.

Как показано выше, был создан массив rand_return из 30 возможных процентных ставок с учетом среднего значения и стандартного отклонения. Это первая структура, которая будет создана, как показано на моей схеме мыслительного процесса («Процесс мышления, часть 2»).

Вторая структура - это список конечных значений, которые будут содержать конечное значение первого года в return_y [0]. Все последующие значения должны добавляться на итерацию из оставшихся 29 возвратов в массиве rand_return (на диаграмме я назвал список EV_list, но в коде это return_y - извинения за несоответствие).

В порядке! Итак, теперь мы добавляем оставшиеся 29 конечных значений для оставшихся 29 лет инвестиций в return_y. Оператор if был создан для учета ежегодного_инв в размере 10000 долларов, который добавляется только заранее, поэтому в окончательное конечное значение в return_y [29] оно не добавляется.

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

В приведенном выше цикле for для 1000 симуляций я встроил предыдущий цикл for для 30-летнего периода возврата. Внешний цикл for будет запускаться 1000 раз и заполнять новый список моделирования, называемый «output», с конечным значением каждого полного запуска в 30-й год, которое является значением в return_y [29] # line11.

Последний шаг в # line12 - вычислить среднее / среднее значение всех 1000 имитаций окончательной доходности в конце 30-го года. Это даст нам более точное предсказание возможного значения будущей стоимости. учитывая изменчивость доходности, и эта точность увеличивается по мере увеличения количества симуляций.

Последние мысли…

До сих пор в моем путешествии по изучению того, как стать более техническим и думать о данных / программировании, я понял, что я учусь только тогда, когда сталкиваюсь с проблемами, которые не сопровождаются набором инструкций. Это может расстраивать, когда вы не знаете, какой путь наверху, но как только вы научитесь структурировать свое мышление и разбивать проблему на более простые задачи, становится легче, и вы никогда ее не забудете. Я призываю вас делать ошибки, терпеть неудачу и чувствовать себя глупо 😊… Я делаю это все время! Удачного кодирования!