Представляем второе издание кулинарной книги Python for Finance

Что побудило меня написать второе издание и что вы можете ожидать от его прочтения

Почти через 3 года после публикации моей первой книги — Python for Finance Cookbook — вышло второе издание. Честно говоря, после выхода первого издания я уже и не надеялся когда-либо написать еще одну книгу. Но в итоге я передумал и вот.

В этой короткой статье я кратко объясню, почему я передумал, и немного расскажу о том, чего можно ожидать от прочтения второго издания.

Мотивация для второго издания

Как я уже говорил, у меня не было особого оптимизма по поводу написания еще одной книги. Причина тому была на самом деле довольно проста — на написание книги уходит много времени и сил. Что вкупе с постоянной работой и довольно большим количеством разных сайд проектов (статьи, небольшие фриланс работы и т.п.) не оставляет много свободного времени. Однако сочетание различных факторов заставило меня передумать.

Первым и самым важным было количество отзывов, которые я получил от читателей первого издания. Со мной связывались в разных местах (LinkedIn, Twitter, GitHub, под сообщениями на Medium и т. д.), иногда с короткими вопросами, но в большинстве случаев просто с добрыми словами об опыте читателей с моей книгой. Я должен сказать, что невероятно приятно читать такие сообщения и знать, что ваша книга помогла кому-то улучшить свои навыки/знания и что им было интересно читать.

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

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

Приняв во внимание все три фактора, я решил попробовать и снова начать работу над книжным проектом.

Что изменилось на этот раз?

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

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

Используя все эти данные, я попытался создать улучшенное оглавление, которое не только добавило новые темы, которые показались мне интересными, но и сосредоточилось на областях, с которыми читатели столкнулись больше всего. Я могу поделиться тем, что ответы, которые появились больше всего, касались сбора данных хорошего качества, их предварительной обработки, анализа и реализации алгоритмических торговых стратегий.

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

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

  • Большинство рецептов из первого издания попало во второе, но все они были значительно расширены или изменены. В некотором смысле, ни один рецепт не остался без изменений.
  • Для всех рецептов я постарался предоставить обширные списки ссылок, которые позволят читателям глубже погрузиться в освещенные темы, которые им интересны.
  • При написании второго издания я пытался сосредоточиться на использовании существующих библиотек Python вместо того, чтобы пытаться сделать что-то самостоятельно, используя библиотеки «более низкого уровня». Хорошим примером этого является глава о глубоком обучении. В первом выпуске я показал, как кодировать несколько архитектур нейронных сетей, используемых для прогнозирования временных рядов (RNN, LSTM, GRU) в PyTorch. В итоге получились довольно длинные рецепты, объясняющие основы работы с PyTorch. Во втором издании я использовал специализированные библиотеки Python, которые уже содержат эти и многие другие уже реализованные продвинутые архитектуры NN (либо в PyTorch, либо в TensorFlow) и готовы к использованию в нескольких строках кода. Таким образом, я мог бы больше сосредоточиться на объяснении того, как использовать эти модели, чтобы получить некоторое представление, вместо того, чтобы углубляться в мельчайшие детали самостоятельного кодирования этих алгоритмов.
  • Некоторые рецепты не выдержали испытания временем. Например, в первом издании я показал, как использовать ipywidgets для создания интерактивных информационных панелей в Jupyter Notebook. В настоящее время подходящим решением для такой задачи было бы приложение Streamlit, которое я представил во втором издании.
  • В связи с предыдущими двумя пунктами, хотя некоторые рецепты были заменены, это точно не означает, что они бесполезны и больше не актуальны. Все зависит от вашего образования, опыта и того, чему вы хотели бы научиться для решения задач, с которыми вы можете столкнуться. Следовательно, второе издание не является полной заменой первого, а скорее расширением и дополнительным чтением.

В целом, второе издание значительно расширено по сравнению с первым. Хотя само по себе количество страниц определенно не является показателем качества, второе издание почти в два раза длиннее первого (740 против 432 страниц).

Обзор содержимого

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

Глава 1, Получение финансовых данных, охватывает несколько наиболее популярных источников высококачественных финансовых данных, включая Yahoo Finance, Nasdaq Data Link (ранее Quandl), Intrinio и Alpha Vantage. Основное внимание уделяется использованию специализированных библиотек Python и обработке загруженных данных (часто доступных в различных формах и форматах файлов) для дальнейшего анализа.

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

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

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

Глава 5, Технический анализ и создание интерактивных информационных панелей, объясняет основы технического анализа в Python, показывая, как рассчитать некоторые из наиболее популярных индикаторов и автоматически распознавать закономерности в данных свечей. Он также демонстрирует, как создать и развернуть веб-приложение на основе Streamlit, используемое для визуализации и проверки предопределенных индикаторов ТА в интерактивном режиме.

Глава 6, Анализ и прогнозирование временных рядов, знакомит с основами моделирования временных рядов. Он начинается с изучения строительных блоков временных рядов и того, как их разделить с помощью различных методов декомпозиции (классическая декомпозиция, STL и т. д.). Затем он охватывает концепцию стационарности, как ее проверить и как ее достичь в случае, когда исходный ряд не является стационарным. Наконец, показано, как использовать два наиболее широко используемых статистических подхода к моделированию временных рядов — методы экспоненциального сглаживания (ETS) и модели класса ARIMA. В главе объясняется не только то, как вручную выбирать гиперпараметры этих моделей, но и то, как использовать автоматизированные подходы, которые находят эти значения для нас.

Глава 7, Подходы к временным рядам, основанные на машинном обучении, начинается с рассмотрения очень важной темы — проверки моделей временных рядов. Затем в нем представлен обзор подходов к проектированию функций. Он также представляет инструмент для автоматического извлечения функций, который генерирует сотни или тысячи функций с помощью нескольких строк кода. Кроме того, в главе объясняется концепция сокращенной регрессии и способы использования популярного алгоритма Prophet в Meta. Он завершается введением в одну из популярных сред AutoML для прогнозирования временных рядов.

Глава 8, Многофакторные модели, описывает оценку различных факторных моделей, начиная с простейшей однофакторной модели (САРМ) и расширяя ее до более сложных трех-, четырех- и пятифакторных моделей. модели. В нем также показано, как проверить устойчивость таких моделей, оценивая их скользящим способом.

Глава 9, Моделирование волатильности с помощью моделей классов GARCH, посвящена волатильности и концепции условной гетероскедастичности. В нем показано, как использовать одномерные и многомерные модели GARCH, которые являются одним из самых популярных способов моделирования и прогнозирования волатильности. Поскольку в Python нет хорошо зарекомендовавших себя библиотек для оценки многомерных моделей GARCH, мы покажем, как использовать известные пакеты R для этой задачи, соединив сеансы Python и R.

Глава 10, Моделирование методом Монте-Карло в финансах, объясняет, как использовать методы Монте-Карло для различных задач, таких как моделирование цен на акции, ценообразование деривативов без решения в закрытой форме (американские/экзотические опционы) или оценка неопределенность портфеля путем расчета его стоимости под риском и ожидаемого дефицита.

Глава 11, Распределение активов, начинается с объяснения самой простой стратегии распределения активов (портфеля 1/n) и на ее основе показывает, как оценивать эффективность портфелей. Затем показаны три различных подхода к получению эффективной границы. Наконец, мы исследуем иерархический паритет рисков, который представляет собой новый подход к распределению активов, основанный на сочетании теории графов и машинного обучения.

В главе 12, Бэктестирование торговых стратегий, рассказывается, как проводить ретроспективное тестирование различных торговых стратегий с использованием двух подходов (векторизованного и событийно-ориентированного) с помощью популярных библиотек Python. Для этого мы используем несколько примеров стратегий, построенных на основе популярных технических индикаторов или использующих оптимизацию портфеля по средней дисперсии.

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

Глава 14, Расширенные концепции проектов машинного обучения, продолжает рабочий процесс, представленный в предыдущей главе, и демонстрирует возможные расширения стадии MVP проектов машинного обучения. Он начинается с представления более продвинутых классификаторов. Затем он охватывает альтернативные подходы к кодированию категориальных признаков и описывает несколько методов работы с несбалансированными данными. Кроме того, он показывает, как создавать составные ансамбли моделей машинного обучения и использовать байесовскую настройку гиперпараметров для улучшения исчерпывающего поиска по сетке. Также исследуются различные подходы к вычислению важности признаков и их использованию для выбора наиболее информативных предикторов. Наконец, речь идет о быстро развивающейся области объяснимого ИИ (XAI).

Глава 15, Глубокое обучение в финансах, описывает, как применить некоторые из недавно разработанных архитектур нейронных сетей к двум возможным вариантам использования в финансовой сфере. Для задачи классификации (прогнозирование дефолта по кредитной карте) мы использовали Tabular Learning от fastai и TabNet от Google. Затем мы применили DeepAR от Amazon (вместе с его расширением DeepVAR) и NeuralProphet для задачи прогнозирования временных рядов.

Подведение итогов

Сказав все это, я должен сказать, что я счастлив, что я начал проект написания второго издания. Как и прежде, я многому научился в процессе, и это помогло мне расти как профессионалу, так и как человеку.

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

Если вам интересно прочитать книгу, вы можете найти ее на Amazon (отказ от ответственности: реферальная ссылка) или на веб-сайте Packt. Как всегда, буду очень признателен за любые отзывы и предложения. Вы можете связаться со мной в Twitter, LinkedIn, используя репозиторий GitHub книги или здесь, в комментариях.