Модель Монте-Карло в Python. Часть 2 |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-11-03 12:00 В сегодняшней статье мы рассмотрим экспорт данных в электронную таблицу и создание вероятностных распределений для моделирования Монте-Карло. Экспорт данных Прежде чем перейти к моделированию Монте-Карло, необходимо упомянуть о возможностях экспорта, доступных в пакете Pandas: объект DataFrame библиотеки Pandas вы можете записать в файл Excel, используя метод to_excel. Однако существует аналогичная функциональность для экспорта в более, чем дюжину других форматов. Создание вероятностных распределений для моделирования Монте-Карло Решим следующую задачу: заменим некоторые из точных значений вероятностными распределениями. Предыдущие шаги ( «Модель Монте-Карло. Часть 1») могли показаться несколько громоздкими по сравнению с построением той же модели в Excel, однако следующий этап несомненно продемонстрирует мощный функционал Python. 1 шаг — определяем количество итераций, например, 1000. Это обеспечит баланс между достаточным объемом данных и разумным сроком для завершения моделирования. 2 шаг — генерируем фактические распределения. Для упрощения создаем три нормальных распределения, однако библиотека NumPy поддерживает большее количество (есть и другие опции, включая стандартную библиотеку Python). После принятия решения о том, какое распределение использовать, нам нужно указать параметры, необходимые для описания их формы, такие как среднее и стандартное отклонение, а также количество желаемых результатов. Очевидно, что EBITDA имеет корреляцию с показателем продаж. Более того, она зависит от динамики структуры затрат (переменные, полупеременные и постоянные затраты) и ключевых факторов затрат (некоторые из которых могут иметь свои собственные распределения вероятностей, такие как, например, цены на сырьевые товары), но для упрощения оставим это за пределами нашего сценария. Чем меньше данных для выбора распределения и параметров, тем больше придется полагаться на результаты различных рабочих потоков, чтобы сформировать консенсусный диапазон сценариев. В примере с прогнозами денежных потоков будет присутствовать большая субъективная составляющая, что означает, что визуализация вероятностных распределений становится важна. Получаем базовую визуализацию, показывающую распределение роста продаж, только с двумя короткими строками кода. Теперь у нас есть все составляющие, необходимые для запуска моделирования, но они все еще в неподходящем формате. Вот тот же код, с которым мы работали до сих пор, но собран в одну ячейку и перестроен в функцию для удобства: Теперь мы можем запустить весь процесс и построить распределение результата, которое будет представлять собой дисконтированную величину денежного потока этой компании в каждой из 1000 итераций, со следующим кодом. Команда %time - это быстрая команда для измерения времени выполнения (вместо этого можно использовать функцию Python из стандартной библиотеки. Доработка прототипа Рефакторинг - процесс переписывания существующего кода для улучшения его структуры без изменения его функциональности, и это может быть одним из самых интересных и полезных элементов кодирования. Как правило, используется для следующих функций:
2. Переименование переменных и функций, чтобы сделать их назначение и работу более понятными. 3. Подготовка к будущим функциям (обеспечение возможности добавления нового функционала в существующее ПО) 4. Увеличение скорости выполнения, объема памяти или другого ресурса. Прототип, который мы только что создали, собрав все начальные переменные в одном месте, изначально разрозненные в базовом сценарии прототипа, наглядно очищен, а также оптимизирована скорость его выполнения с помощью процесса, называемого векторизацией. Теперь он выглядит прозрачнее для понимания: Основное различие между текущей и предыдущей версией - это отсутствие цикла for i in range(iterations). Использование NumPy требует 18 миллисекунд, что примерно в 75 раз быстрее по сравнению с 1,35 секундами базового прототипа. Возможна и дальнейшая оптимизация алгоритма. Дальнейшие шаги Этот пример показал некоторые из функций Python, и если вы загляните дальше, то увидите, что возможности почти бесконечны. При дальнейшей разработке можно:
Научиться мастерски владеть Python ? clck.ru/JkPnj Источник: m.vk.com Комментарии: |
|