Модель Монте-Карло в Python. Часть 2

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


В сегодняшней статье мы рассмотрим экспорт данных в электронную таблицу и создание вероятностных распределений для моделирования Монте-Карло.

Экспорт данных

Прежде чем перейти к моделированию Монте-Карло, необходимо упомянуть о возможностях экспорта, доступных в пакете Pandas: объект DataFrame библиотеки Pandas вы можете записать в файл Excel, используя метод to_excel. Однако существует аналогичная функциональность для экспорта в более, чем дюжину других форматов.

Создание вероятностных распределений для моделирования Монте-Карло

Решим следующую задачу: заменим некоторые из точных значений вероятностными распределениями. Предыдущие шаги ( «Модель Монте-Карло. Часть 1») могли показаться несколько громоздкими по сравнению с построением той же модели в Excel, однако следующий этап несомненно продемонстрирует мощный функционал Python.

1 шаг — определяем количество итераций, например, 1000.

Это обеспечит баланс между достаточным объемом данных и разумным сроком для завершения моделирования.

2 шаг — генерируем фактические распределения.

Для упрощения создаем три нормальных распределения, однако библиотека NumPy поддерживает большее количество (есть и другие опции, включая стандартную библиотеку Python). После принятия решения о том, какое распределение использовать, нам нужно указать параметры, необходимые для описания их формы, такие как среднее и стандартное отклонение, а также количество желаемых результатов.

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

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

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

Теперь мы можем запустить весь процесс и построить распределение результата, которое будет представлять собой дисконтированную величину денежного потока этой компании в каждой из 1000 итераций, со следующим кодом. Команда %time - это быстрая команда для измерения времени выполнения (вместо этого можно использовать функцию Python из стандартной библиотеки.

Доработка прототипа

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

  1. Обработка различных частей более контекстным подходящим способом.

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

3. Подготовка к будущим функциям (обеспечение возможности добавления нового функционала в существующее ПО)

4. Увеличение скорости выполнения, объема памяти или другого ресурса.

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

Теперь он выглядит прозрачнее для понимания:

Основное различие между текущей и предыдущей версией - это отсутствие цикла for i in range(iterations). Использование NumPy требует 18 миллисекунд, что примерно в 75 раз быстрее по сравнению с 1,35 секундами базового прототипа.

Возможна и дальнейшая оптимизация алгоритма.

Дальнейшие шаги

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

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

Научиться мастерски владеть Python ? clck.ru/JkPnj


Источник: m.vk.com

Комментарии: