Международный банковский институт имени Анатолия Собчака lkbjss|p|r psjp {njsksvkt Учебник для магистратуры под общей редакцией С.Ю. Богатырева Рекомендован УМО в качестве учебника для вузов Москва 2024 УДК 004.8-338.27 ББК 32.813-65.261 М38 cËĆËÓÏËÓ© Зададаев Сергей Алексеевич, кандидат физико-математических наук, профессор, руководитель Департамента математики Финансового университета при Правительстве Российской Федерации, Почетный работник высшего профессионального образования Российской Федерации; Мунерман Илья Викторович, кандидат экономических наук, директор Исследовательского подразделения «Интерфакс-ЛАБ», Группа «Интерфакс». lÈĈÒÓӺ˺­ćËÓÒËmÁÒÓÈӰȲ Учебник для магиМ38 стратуры / С.Ю.Богатырев, А.А. Помулев, А.В. Затевахина [и др.] ; под ред. С.Ю. Богатырева — М.: Прометей, 2024. — 224 с. ISBN 978-5-00172-572-5 Учебник предназначен для проведения занятий по дисциплине «Машинное обучение в финансах». В учебнике описано, как работать с основными инструментами машинного обучения: Python, Pandas. Приведены примеры кода для загрузки, обработки и анализа информации с финансовых рынков. Описаны современные направления использования машинного обучения в финансовой сфере. Очерчены перспективные направления разработки средств машинного обучения на финансовых рынках. Материал учебника предоставляет читателям практические знания в области методов работы с данными и основ машинного обучения, а также того, как они используются в инвестиционном процессе. На примере виртуальных кейсов читатели получают практический опыт программирования, основанный на реалистичных сценариях, применяют концепции машинного обучения к реальным инвестиционным проблемам и учатся ясно объяснять их неспециалистам и клиентам. Учебник предназначен для магистрантов, обучающихся по направлениям подготовки «Экономика», «Финансы и кредит», слушателей сокращенных программ, программ профессиональной переподготовки финансистов. Материалы учебника могут использоваться для подготовки к экзамену на получение сертификата CFA Data Science for Investment Professionals Certificate. ISBN 978-5-00172-572-5 © Коллектив авторов, 2024 © Издательство «Прометей», 2024 Авторский колллектив rºĄÈ©¯Ëm vËäËÓ ¯ĉËmÒć — Введение, Главы 1 и 3; параграфы 2.1, 2.3, Глава 4, Заключение (в соавторстве); ºäãËmkãË}°ÈÓą¯kãË}°ÈÓą¯ºmÒć — параграф 2.2; ~ÈËmȲÒÓÈ kÓÓÈ {È°ÒãĉËmÓÈ — Вопросы задания к главе 1, параграф 4.2 (в соавторстве); z¯ĄãºmÈ jÓÓÈ kãË}°ÈÓą¯ºmÓÈ — Вопросы задания к главе 1, параграф 4.1 (в соавторстве); rȯȭÈÓºmÈ lȯÒÓÈ jmÈÓºmÓÈ — Вопросы задания к главе 1, параграф 4.3 (в соавторстве); ËĄÒÓ kãË}°Ë® {ãÈąãËÓºmÒć — параграф 2.3 (в соавторстве); vºãºąºmÓÒ}ºm lÈ}°Òä kãË}°ËËmÒć — параграф 2.1 (в соавторстве); bÈĈÒÓÈ j¯ÒÓÈ kãË}°ÈÓą¯ºmÓÈ — параграф 2.1 (в соавторстве); lȯº°ºmv˯ĄË®{Ò}º¯ºmÒć— параграф 2.3, Заключение (в соавторстве) Содержание {mËąËÓÒË. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Г л а в а 1. jsvclpshlkbjss|||r psjÐ 8 1.1. Установка среды программирования . . . . . . . . . . . . . . 8 1.2. Язык программирования Питон. Основы Питона . . . 11 1.3. Работа с библиотеками в Пандас. Pandas . . . . . . . . . . 36 Вопросы и задания к главе 1 . . . . . . . . . . . . . . . . . . . . . . 104 Г л а в а 2. jsvclpshlkbjss|||r psjÐ cjlpspsjp{njsksvkt . . . . . . . . . . 105 2.1. Питон для обработки финансовой информации . . . . 105 2.2. Работа с финансовой информацией в Питоне: продвинутый уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 2.3. Приложения NLP в управлении активами . . . . . . . . 148 Вопросы и задания к главе 2 . . . . . . . . . . . . . . . . . . . . . . 161 Г л а в а 3. lkbjss|p|r psjpjcjlpspsjp '$7$6&,(1&({js{pvj¡jÐt. . . . . . . 162 3.1. Машинное обучение в работе современного финансиста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 3.2. Показатели, инструменты и технологии машинного обучения в финансово-инвестиционной деятельности . . 167 3.3. Практические приложения машинного обучения в инвестициях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Вопросы и задания к главе 3 . . . . . . . . . . . . . . . . . . . . . . 199 Г л а в а 4. wj pvzjpck{jkcjlpspsjÐ jvzvv{pss||jsppzk cjck{psjjjs{pvj¡jÐlj . . . . 200 4.1. Общие понятия этики финансиста при применении искусственного интеллекта . . . . . . . . . 200 4 4.2. Критерии добросовестного применения технологий машинного обучения и искусственного интеллекта в практике финансово-инвестиционного консультирования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 4.3. Регуляторная база применения технологий искусственного интеллекта в финансово-экономической сфере . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Вопросы и задания к главе 4 . . . . . . . . . . . . . . . . . . . . . . 213 ~È}ãĊćËÓÒË . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 v¹Ò°º}ãÒ˯ȯ©. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Введение В настоящий момент при обилии книг по машинному обучению и его средствам: языкам программирования Питон и другим, на книжном рынке нет специализированных российских учебников, написанных российскими авторамифинансистами на базе отечественных научно-методических разработок по применению машинного обучения в финансовой сфере. Таким образом, это первый учебник в сфере применения машинного обучения в финансовой отрасли. Он написан российскими профессорами, доцентами, преподавателями и исследователями, применяющими языки программирования, библиотеки данных для машинного обучения в финансах, преподающими собственные разработанные методики обучения российским студентам в российских столичных и региональных вузах. Материал учебника формирует у читателей, студентов способности к применению технологий обработки больших данных и машинного обучения к решению прикладных задач в финансовой сфере и инвестировании на финансовых рынках. Дисциплина «Машинное обучение в финансах» входит вмодуль вариативных дисциплин магистерской программы вариативной части блока содержательных модулей и дисциплин Образовательного стандарта по направлению подготовки 38.04.01 «Экономика» (программа подготовки магистров) и относится к классу дисциплин, ориентированных на формирование профессиональных компетенций выпускников в области обработки больших данных и машинного обучения. В процессе изучения дисциплины происходит знакомство с основными понятиями, методологиями, моделями, методами, методиками и технологиями обработки больших данных и машинного обучения, знания о которых будут по6 ложены в основу формирования профессиональных компетенций будущего финансиста. При этом студенты приобретают опыт использования изучаемых технологий в практических задачах, связанных с финансами. Дисциплина «Машинное обучение в финансах» обеспечивает инструментарий формирования следующих компетенций: Компетенция ДКМП-4. Способность применять методы интеллектуального анализа данных и машинного обучения к решению прикладных задач, связанных с оказанием финансовых услуг. Знать основные методы интеллектуального анализа данных и машинного обучения. Уметь строить модели классификации, регрессии, кластеризации и поиска аномалий. Владеть профессиональной терминологией в области больших данных и машинного обучения. Компетенция ИК-2. Владение навыками использования программных средств и баз данных, умение работать в глобальной компьютерной сети. Знать основные принципы поиска, сбора, очистки, хранения, обработки, анализа и визуализации данных. Уметь находить, собирать, очищать, хранить, трансформировать и визуализировать большие объемы данных. Владеть современными пакетами прикладных программ, реализующими методы обработки больших данных и машинного обучения. Компетенция ПКП-1. Способность осуществлять анализ и обработку финансовой информации, необходимой для разработки обоснованных стоимостноориентированных финансовых прогнозов и планов стратегического, текущего и оперативного развития коммерческих и некоммерческих организаций, анализировать и контролировать ход их выполнения. Знать основные классы практических задач в области экономики, управления и финансов, решаемых методами машинного обучения. Уметь применять модели машинного обучения для решения практических задач в области предоставления финансовых услуг. Владеть навыками анализа и обработки финансовой информации. Гл а в а 1. ИНСТРУМЕНТЫ МАШИННОГО ОБУЧЕНИЯ Code first, think after! Сначала программируй, потом думай! 1.1. Установка среды программирования Точка запуска инструментов искусственного интеллекта (ИИ) для финансовых исследований. Среда для работы — Jupiter notebook. Первый используемый инструмент — collab. Это облачный Jupiter, бесплатно предоставляемый Google. Для запуска этого инструмента ИИ в строке браузера надо набрать: https://colab.research.google.com/?utm_ source=scs-index Результат работы команды — на рисунке 1: Рисунок 1. Начальное меню работы с Colab Для удобства работы лучше сразу добавить его в закладки браузера. 8 В пункте меню «Недавние» система показывает недавно использовавшиеся ноутбуки. Чтобы создать новый, надо нажать кнопку «Создать блокнот». После этого запускается окно для создания кода Питона — рисунок 2. Рисунок 2. Окно создания нового ноутбука Colab входит в линейку продуктов Google — гугл документы. Это значит, что так же, как и всеми другими продуктами, создаваемыми в гугл: текстовыми файлами, электронными таблицами, ноутбуком можно поделиться с другими пользователями, коллегами — рисунок 3. Рисунок 3. Расшаривание нового ноутбука На этом этапе передачи содержащейся в ноутбуке информации, необходимо проверить, содержит ли она персональные данные, которые нельзя передавать в другую организацию, на другие серверы. Эта проблема решается локальной установкой Jupiter к себе на компьютер. Для целей научных исследований и в учебной работе при обработке массивов информации с финансовых рынков с публичным доступом это не требуется, и использование Colab представляется наиболее эффективным с точки зрения инфраструктуры. Colab лучше запускать на английском языке. Это связано с неточностями перевода, интегрированностью процесса программирования в Colab в устойчивую терминологию используемых терминов и команд. Чтобы сменить язык с русского на английский при первом запуске Colab надо зайти в пункт меню Справка и выбрать пункт меню Показать на английском языке — рисунок 4. Рисунок 4. Смена языка в Colab Следующее рекомендуемое изменение настроек по умолчанию — это смена фона с белого на черный, чтобы не уставали глаза — рисунок 5, пункт меню Tools/Settings. 10 Рисунок 5. Смена фона В браузере Google Chrome для этих же целей можно установить надстройку Dark Reader, которая будет отображать открываемые сайты на темном фоне, сберегая глаза. 1.2. Язык программирования Питон. Основы Питона При описании основ языка программирования Питон необходимо сделать важное замечание: аналитик и инженер по данным data scientist (дата-сиенсист) — не программисты. Использование Питона определяется не желанием научиться на нём программировать, но тем фактом, что на этом достаточно почтенном по возрасту (язык был создан в 1969 году) языке программирования создано огромное количество библиотек, уже готовых программ, с помощью которых можно выполнять свои задачи. Таким образом, для аналитика Питон представляет собой интерфейс, где вместо кнопок и пунктов меню — команды и правила их написания в определённых языком последовательностях. Выбирая для нужных целей кусочек уже созданного кода, меняя определённые параметры в нём, аналитик решает свои собственные задачи. При таком взгляде на Питон он представляет собой платформу, содер11 жащую набор готовых программ, и вся задача аналитика — научиться их правильно и эффективно использовать. Если в командную строку Питона начать вводить операции, они сразу выполняются в программе — рисунок 6. Рисунок 6. Выполнение простейших команд в Colab Конечно, этим работа программы не ограничивается. Для усложнения операций вводятся переменные. Переменные — символьные обозначения для удобства создания формул. При этом формула — универсальное расчётное представление закреплённых в формуле закономерностей. В каждую из переменных подставляется значение для осуществления в дальнейшем определённых в формуле действий. При программировании на Питоне переменные лучше не называть односложными буквами и буквенными сочетаниями, несущими определённую смысловую нагрузку. Пример создания переменной и простейшей операции (умножение) с созданной переменной — на рисунке 7. Рисунок 7. Создание переменной и умножение созданных переменных 12 При изменении значения переменной оператор, использующий её значение, пересчитается — рисунок 8. Рисунок 8. Пересчёт оператора при изменении переменной Чем содержательнее названы переменные, тем легче затем понимать код, созданный с их использованием. Помимо чисел Питон работает с другими типами данных, а именно: строка — сочетания буквенных символов. Задаваемую переменную лучше помещать в двойные кавычки, тогда внутри строки можно использовать одинарные кавычки, как показано на рисунке 9. Рисунок 9. Определение строки Создание строк при помощи трёх точек — расширение возможностей по представлению данных (рисунок 10). 13 Рисунок 10. Создание строк при помощи трёх точек Любое число можно перевести в строку — рисунок 11: Рисунок 11. Превращение числа в строку Использовав эту команду можно создавать строки с добавлением переменных — рисунок 12: Рисунок 12. Создание строки с добавлением переменных Другой способ сделать то же самое — применить оператор f (рисунок 13): Рисунок 13. Применение оператора f 14 При изменении значения переменной num изменится значение строки. При работе со строкой можно задать получение любого её символа, нумерация начинается с нуля — рисунок 14: Рисунок 14. Возвращение первой переменной из строки Bloomberg Или в начале работы с ноутбуком, или когда уже становится понятно, какие цели он решает, следует переименовать его, как показано на рисунке 15: Рисунок 15. Переименование ноутбука Для аккуратного стильного наименования файлов не следует использовать знак минус и пробелы, символы помимо латиницы. Тоже самое рекомендуется делать с переменными и со строками: вместо знака минус следует использовать нижнее подчеркивание. В названии переменной вместо пробела следующее слово можно начать с большой буквы (CamelCase). Код в Питоне приобретает профессио- нальный вид, когда при обозначении переменных используется snake case — слова разделяются нижним подчеркиванием. Ò¹ąÈÓÓ©²½°¹Ò°º} При указании курсором на нужный оператор зайти в пункт меню Текстовая ячейка и выбрать Создание текстовой ячейки. Набрать — Списки. Рисунок 16. Рисунок 16. Создание списка Зайдя в оператор переменных выбрать Создание текстовой ячейки и создать раздел «Переменные» — рисунок 17. При этом справа в меню отобразятся созданные разделы оглавления. Список содержит в себе ряд переменных. Создание списка — рисунок 18. В списке хранятся несколько чисел, и они могут быть вызваны обращением к их порядковому номеру, также как в случае со строкой — рисунок 19. 16 Рисунок 17. Создание оглавления Рисунок 18. Рисунок 19. Работа со списком В списках хранятся однотипные переменные. Работа с каждым элементом списка уже осложняется, так как их много. Для того чтобы не работать с каждым элементом списка отдельно, при работе со списками применяются циклы. Цикл в Питоне позволяет делать повторяющиеся действия, например умножить все элементы списка на 3 — рисунок 20. 17 Рисунок 20. Умножение всех элементов списка на 3 с помощью цикла в Питоне Оператор range в данном случае указывает на длину обрабатываемого списка. При использовании в отдельности он позволяет генерировать список в соответствии с указаниями команды. Работа команды range и представление её в виде списка — на рисунке 21. Рисунок 21. Работа с range Таким образом в Питоне генерируются последовательные числа. Генерацию чисел при помощи этой команды можно проводить с разным шагом, как указано на рисунке 22: генерация чисел от 0 до 100 с шагом 5. Рисунок 22. Пошаговая генерация чисел Генерация чисел от 10 до 0 на рисунке 23. Чтобы распечатать каждый элемент списка, команду на рисунке 20 можно преобразовать следующим образом — рисунок 24. 18 Рисунок 23. Обратная генерация чисел Другой способ перебора списка — рисунок 25. Главное в работе этой команды — ставить в скобки то же самое слово, которое указано после оператора for, причем оно может быть любым. Внутри скобок можно добавить любой оператор действий с элементами списка. На рисунке 26 указано умножение на 10. Важный и полезный при работе с большими списками финансово-экономических показателей оператор позволяет при переборе данных списка выводить их вместе с их порядковыми номерами — рисунок 27. Вторая форма записи этого же действия с помощью команды enumerate — рисунок 28. В Питоне данные можно представлять не только в виде списка, но и в виде кортежа. При создании кортежа данные заключают в круглые скобки. С точки зрения логики опера- Рисунок 24. Распечатка каждого элемента списка Рисунок 25. Перебор списка Рисунок 26. Действия с элементами списка при переборе Рисунок 27. Вывод данных списка с порядковыми номерами Рисунок 28. Вывод данных списка с порядковыми номерами 19 ций, не существует различий между ними над этими двумя формами представления данных. Главное отличие кортежа от списка состоит в том, что из кортежа добавление элеРисунок 29. Добавление элемента ментов списка производится списка командой append, как показано на рисунке 29. На рисунке цифра 4 была добавлена четыре раза последовательным обновлением команды append. Для обновления и запуска команды надо нажать на стрелочку в кружочке. Удаление из списка последнего элемента осуществляется командой pop — рисунок 30. С кортежем эта команда работать не будет. Создание кортежа — команда nums_tuple = (1, 2, 3) и попытка добавления в него Рисунок 30. Удаление элемента нового элемента 4 — рисусписка нок 31. Рисунок 31. Создание кортежа и попытка добавления в него элемента В кортеже хранят данные, имеющие определённый формат, например координаты. Тогда это будет особенно удобно, так как если координат может быть только две, то их нельзя будет изменить. 20 vãÈ®°ÒÓĄ ÓȯËÏ}È При помощи слайсинга из списка можно «вырезать» те или иные элементы. На рисунке 32 показано, как из созданного списка: берётся первый элемент списка, отбор первых двух элементов (при этом ноль может не прописываться в коде), отбор последнего элемента списка, отбор всех элементов кроме первого: Рисунок 32. Слайсинг списка — часть 1 На рисунке 33 изображены следующие операции слайсинга — отбор всех элементов кроме последнего, отбор элементов списка через один, транспонирование списка в обратном порядке. 21 Рисунок 33. Слайсинг списка — часть 2 Также слайсинг работает и со строкой. Демонстрация на рисунке ниже. Создание строки, отбор всех элементов кроме последнего, транспонирование в обратном порядке — рисунок 34. Все операторы аналогичны вышеописанным. Рисунок 34. Слайсинг строки Слайсы позволяют экономить усилия программиста при создании кода. Операторы условий if / then. Действие оператора показано на рисунке 35. Задаются условия и вывод результата при его выполнении, затем моделируется ситуация его невыполнения — вывода на печать заданного при выполнении условия текста нет, задание текста для распечатки при невыполнении условия оператором else — вывод результата. Оператор else включает ветвление. 22 Рисунок 35. Условные операторы jããĊ°¯ÈĆÒ«äÓºĄº¯ºmÓËmºĄºmËmãËÓÒ« Задается переменная. Затем ей определяется многоуровневая система условий, как представлено на рисунке 36. Написание условия — важнейший элемент любого программирования. List comprehensions (список включений, или правила подстановок) — сокращённая заРисунок 36. Многоуровневая пись циклов. система условий Создаётся список, содержащий значения с названием nums. Ставится задача, создать новый список с названием new, все элементы которого состоят из элементов первоначального списка, умноженные на два — рисунок 37. Действия над каждым элементом списка для создания нового — частая операция, для которой был создан функционал list comprehensions. Это работает Рисунок 37. Создание списка следующим образом. Открытием из нового перемножением на два квадратных скобок создаётся новый список. При описании исходного списка сразу в начале командной строки в квадратных скобках указывается, что надо делать с исходным списком — Рисунок 38. List comprehensions рисунок 38. Так операторы, занимавшие в предыдущем примере три строки, теперь умещаются в одну. Самое главное преимущество этих правил подстановок — они легко интуитивно воспринимаются и составляются. 23 В правилах подстановок можно использовать условия. Например, при создании подстановок выбираются только Рисунок 39. Операции при подстановке с элементами те элементы исходного списка по заданным условиям nums, которые больше 2 — рисунок 39. Проверка каждого из элементов списка на определённые условия осуществляется Рисунок 40. Условные операции следующей последовательнопри подстановке стью команд при подстановке. В данном случае необходимо написать, больше ли элемент 2 — рисунок 40. Вложенные подстановки. Рисунок 41. Последовательная С помощью этой операции генерация можно создавать списки списков, или матрицы. Генерация последовательного списка из трёх элементов — рисунок 41. Генерация одного и того же элемента: единицы — рисунок 42. Рисунок 42. Генерация одинакового элемента Если в операторе не идёт речь об определённой переменной, в данном случае i, то и обозначать её не надо, а вместо неё можно просто подставить нижнее подчеркивание, как пока- Рисунок 43. Нижнее подчеркивание вместо буквенного обозначения зано на рисунке 43. При переборе значений в цикле так делается часто. Для повторения действия на рисунке 43 три раза запись Рисунок 44. Трёхкратный цикл оператора такая, как на рисунке 44 с выводом результата — матрицы 3×3, таблицы с тремя строками и тремя столбцами. 24 cÈ­ºÈ°­ãËm©äÒ¹ºäąÈÓÓ©²7UXH)DOVH Иллюстрации булевых значений True False — на рисунке 45. Здесь видно следующее: сами по себе операторы представляют значения, имеющие числовые характеристики — True — один, False — ноль, и их можно складывать с соответствующим результатом. Булевые данные True False генерируются при проведении сравнения, как показано на рисунке 46. True False могут использоваться для создания «флага» в программе. Флаг — назначенная переменная в программе. При его появлении в ходе выполнения кода показываРисунок 45. Введение в операторы True False ется достижение какой-либо точки, после которой необходимо сделать какие-либо действия — рисунок 47. Так как True имеет значение 1, а False — 0, это также можно использовать при назначении флага, как показано Рисунок 46. Генерация на рисунке 48: при единице булевых данных флаг включается, при 0 — нет — рисунок 48. Рисунок 47. Флаг в Питоне Рисунок 48. Числовое присвоение значений флага 25 nÓ}ĆÒÒ Назначение функций — сделать из фрагмента программы повторяющиеся действия. Это предотвращает постоянное копирование части кода. Создание функций иллюстрируется следующим примером. Для умножения каждого элемента списка на множитель создаются тексты программы. Первой последовательностью команд из списка nums создаётся список new, каждый элемент которого равен элементу списка nums, умноженному на 2. Затем создаётся новая последовательность, которая также умножается на 2 — рисунок 49. Рисунок 49. Последовательное выполнение команд При возникновении проиллюстрированной выше ситуации, когда требуется повторение аналогичных действий к разным объектам и разным данным, то создаётся функция. Для этого исполняемый код вставляется в функцию, как показано на рисунке 50. 26 Рисунок 50. Функция умножения списка (массива) на 2 vãºmȯĉ Словарь — это тип данных, который в программировании называют хэш таблицами. Иллюстрация работы словарей. Создается массив данных. Каждому элементу — кортежу массива — соответствует свое значение. Требуется найти значение, соответствующее обозначению «b» — рисунок 51. Рисунок 51. Поиск значения в элементах кортежа массива «b». Хэш таблица, словарь в Питоне обеспечивает поиск элемента в словаре за определённое время, то есть независимо от размера самого словаря. Словарь создаётся в фигурных скобках — рисунок 52. Рисунок 52. Создание словаря 27 Рисунок 53. Поиск элемента в словаре Рисунок 54. Вызов элемента словаря через переменную Поиск любого элемента в словаре осуществляется прямым указанием на него в командной строке, как показано на рисунке 53. Вызов элемента словаря с использованием переменной — рисунок 54. В случае, если в словаре ищется элемент, которого в нём не существует, надо составить такой код — рисунок 55. Рисунок 55. Код для выдачи текста при отсутствии поискового элемента словаря vË Работа с сетом. Сет создается в фигурных скобках — рисунок 56. Рисунок 56. Создание сета Главная отличительная черта сета — это то, что он содержит в себе уникальные элементы. Поэтому он часто используется для того, чтобы избавиться от дубликатов. Для этого созданный список, который необходимо очистить 28 от повторяющихся элементов, «прогоняется» через сет командой set — рисунок 57. Рисунок 57. Очистка списка от повторяющихся элементов командой set В сете доступ к элементам осуществляется по индексу, поэтому работа с ним происходит быстрее, чем со списком. На рисунке 58 определяется новый сет. Затем в коде задаются вопросы, есть ли в сете тот или иной элемент. Программа отвечает в зависимости от наличия элемента: Сравнение сетов друг с другом на предмет поиска несовпадающих элементов — рисунок 59. Поиск несовпадающего элемента из сета 1 в сете 2, в сете 2 относительно сета 1, вывод пересекающихся элементов. Объединение сетов. Создаются два сета. Затем командой union они объединяются. В итоговом сете находятся все элементы без их повторения — рисунок 60. Рисунок 58. Создание нового сета и поиск элемента в нем Рисунок 59. Сравнение сетов 29 Рисунок 60. Объединение сетов Конкатенация. В общем виде конкатенацию можно определить как операцию склеивания объектов, имеющих линейную структуру, например, строк, списков, очередей, массивов. Склеивать можно как строки (рисунок 61), так и списки (рисунок 62). Рисунок 61. Склеивание строк Рисунок 62. Склеивание списков Списки можно умножать. Например — рисунок 63. С помощью такой конкатенации можно генерировать и моделировать данные. Также можно умножать и строки — рисунок 64. Рисунок 63. Умножение списка Рисунок 64. Умножение строк 30 Цикл While. Чаще всего этот оператор используется как LeetCode для решения алгоритмических задач. Для созданного массива nums применяется команда pop, которая выделяет из массива последний элемент, удаляя его — рисунок 65. Допустим, что перед программистом поставлена задача последовательно удалить Рисунок 65. Удаление последнего все элементы массива, оставив элемента массива только два первых. Проще всего эту задачу решить с помощью слайсинга («нарезки»), как показано на рисунке 66. Те же самые действия с помощью команды While и оператора pop проделываются до тех пор, пока в массиве не остаРисунок 66. Сайсинг массива нется два элемента. Для индикации этого события используется оператор len, измеряющий длину. При этом массив создаётся достаточно большой — к созданному ранее массиву прибавляется 1000 элементов, как указано в начале кода — рисунок 67. Рисунок 67. Создание массива Таким образом, операи удаление из него всех элементов, тор While используется тогда, кроме первых двух когда программист не знает с самого начала, когда следует остановиться. Команды выполняются до тех пор, пока не выполняется определённое условие. 31 zãÈ°°© Класс — в объектно-ориентированном программировании модель для создания объектов определённого типа, описывающая их структуру (набор полей и их начальное состояние) и определяющая алгоритмы (функции или методы) для работы с этими объектами. Иными словами, класс служит средством для введения абстрактных типов данных в программный проект. Другие описатели абстрактных типов данных — метаклассы, интерфейсы, структуры, перечисления, — характеризуются какими-то своими особенностями. Суть отличия классов состоит в том, что при задании типа данных, класс определяет одновременно как интерфейс, так и реализацию для всех своих экземпляров (т.е. объектов), поэтому вызов методаконструктора обязателен. Классы — это следующий уровень в программировании при переходе к работе с фреймворками, с программными платформами, определяющими структуру программной системы; программным обеспечением, облегчающим разработку и объединение разных компонентов большого программного проекта. Такая реализация программного кода очень удобна при использовании уже готовых программных текстов, при их вставке в свой код. Ниже приводится иллюстрация перехода от обычного программного кода к классу. На рисунке 68 создаётся список, представляющий собой таблицу. По столбцам таблицы расположены название информационной системы, страна происхождения и стоимость использования в месяц за терминал. Эти обозначения столбцов не указаны. Такую формализацию созданной таблицы можно сделать при помощи классов. При создании класса в первой строчке кода используются два нижних подчеркивания, что сразу же задействует функционал Питона, предназначенный для работы этого вида операций — класса. Работающий внутри класса метод описывается оператором self. Этот оператор присваивает свойство внутри класса. 32 Таким образом, классы напоминают анкету, форму для заполнения. То есть, класс может быть описан как шаблон для заполнения анкеты. Такой заполненный бланк будет являться объектом с точки зрения задач программирования. Если ввести и описать элемент, то Питон идентифицирует его, как показано в конце кода. Рисунок 68. Создание класса В процессе кодирования создан структурированный объём данных. Таким образом это можно описать и как пример простейшего моделирования информационной системы на компьютерном языке Питон. После этого по созданному объекту можно посмотреть все его Рисунок 69. Получение характеристик характеристики, как покаобъекта зано на рисунке 69. Главный функционал классов в Питоне заключается в хранении не только информации об объектах, но и о действиях с ними. Это происходит при добавлении функций или методов, которые будут обрабатывать инфор33 мацию. Рисунок 70 иллюстрирует такую возможность. В программном коде каждая информационная система представляется и описывает себя, используя для своей презентации информацию, уже введённую в систему. Обратите внимание на разрыв текста обратным флэшем (эскейпом) для того, чтобы можно было поставить кавычку в заковыченном тексте. Рисунок 70. Создание функции описания объекта Теперь если вызвать объект, например Блумберг, и попросить программу его описать, получится следующее. Пишется объект и к нему добавляется метод, созданный для его описания. Чтобы он заработал в конце командной строчки, надо поставить двойные круглые скобки для вызова функции, так как метод вызывается как функция. Рисунок 71. Создание метода класса 34 Наследование классов Наследование классов позволяет расширять функционал уже существующих классов. Это происходит при помощи обработки уже имеющегося шаблона класса, добавления в него собственных созданных элементов. Наследование класса продемонстрировано на рисунке 72. Класс ItSpecialist расширяется. В него добавляется класс DataScientist. Затем описывается объект этого класса Gleb. Вводится дополнительная функция (метод), в соответствии с которым демонстрируется доход. Рисунок 72. Расширение класса При создании классов и при наследовании классов возникает ситуация, когда для заполнения данных требуется повторять один и тот же элемент. Чтобы избежать повторения, можно автоматизировать процедуру заполнения. В случае с унаследованием класса ItSpecialist для DataScientist, для того чтобы не повторять каждый раз DS, создается такой код, как показано на рисунке 73. Рисунок 73. Автоматизация заполнения при наследовании класса 35 Таким образом переписан метод, инициализирующий класс с указанными на рисунке параметрами. Тогда DS уже может не вписываться в строчку с определением элемента класса. Проверка специальности отдельной командой Gleb. speciality даёт нужный результат, показывает DS. Создание и наследование классов помогает сделать проще работу с крупным программным кодом. 1.3. Работа с библиотеками в Пандас. Pandas Пандас — это библиотека. Это набор программного кода, созданного многочисленными программистами, объединёнными под Пандасом. Если Питон представить смартфоном, то Пандас — это одно из его приложений, в котором для решения почти любой задачи анализа данных найдётся библиотека с решением необходимых проблем. Пандас и является популярным собранием таких библиотек для анализа данных. На сленге программистов Пандас нужен для того, чтобы «шатать таблички». На основе загруженного Data set проводится EDA — exploratory data analysis (исследовательский анализ данных). Этот анализ на сленге программистов описывается так: «разъедашить датасет». Для работы в Пандас загружается массив данных из Kaggle. Кагл хранит много различных наборов данных, которыми обмениваются между собой программисты. Для анализа загружается набор данных DataSet по анализу смены работы программистами. По этим данным на основе характеристик, описывающих программистов, машина должна научиться делать ввод о том, как эти характеристики связаны с желанием сменить работу. Рисунок 74. После скачивания файла лучше всего доставить его в Collab через google drive. Файл загружается в гуглдрайв, и ему делается доступ ко всем пользователям, имеющим ссылку, как показано на рисунке 75. Ссылка копируется и вставляется в новый ноутбук на колабе, подготовленный под анализ данных, как показано на рисунке 76. 36 Рисунок 74. Набор данных для анализа Рисунок 75. Расшаривание загруженного файла Рисунок 76. Копирование ссылки в новый ноутбук 37 Также можно добавить ссылку на материалы, по которым проводится анализ. Для скачивания и загрузки файла в пандас необходимо выделить номер id и вставить его в специальную команду для скачивания, как показано на рисунке 77. Если открыть меню слева и зайти в значок папки, то можно увидеть, что файл скачан. Рисунок 77. Скачивание файла в Пандас Файлы загружаются только на время сессии. При новом открытии ноутбука на новой сессии файл будет необходимо скачать заново. Для этого достаточно будет перезапустить ячейку с кодом скачивания. Разархивация происходит, как показано на рисунке 78. Рисунок 78. Разархивация дата сета После нажатия клавиши refresh слева разархивированные файлы появляются в перечне файлов. Горячие клавиши работы в colab. Удаление ячейки. Процесс удаления лучше упростить. Искать и нажимать кнопку «корзина» справа в меню долго. Также полезны следующие «горячие» клавиши, упрощающие и ускоряющие работу с системой. 38 CTRL M A — вставить кодовую ячейку выше; CTRL M B — вставить кодовую ячейку ниже; CTRL M D — удалить ячейку; CTRL M — разбить ячейку; CTRL V — вставить скопированную ячейку; CTRL F8 — выполнить все ячейки выше; CTRL F9 — выполнить все ячейки; CTRL F10 — выполнить ячейки от текущей и ниже; CTRL M — перезапустить kernel; CTRL SHIFT P — показать палитру команд; CTRL M H — показать сочетания клавиш; Z — отмена последней манипуляции с ячейками (надо выйти из режима редактирования ячейки посредством нажатия ESC); CTRL M M — преобразовать в текстовую ячейку; CTRL M Y — преобразовать в кодовую ячейку; SHIFT ENTER — запустить ячейку с переходом в следующую ячейку; CTRL SHIFT ENTER — запустить ячейку с тем, чтобы остаться в ячейке, команда которой исполняется; CTRL ENTER — исполнить активную ячейку; SHIFT ENTER — исполнить активную ячейку с перемещением курсора на следующую. Еще полезные команды, для которых сочетание потребуется задать самому (CTRL M H): CTRL SHIFT U — объединить выделенную ячейку с предыдущей (курсор в активной ячейке); CTRL SHIFT D — объединить сфокусированную ячейку со следующей; CTRL SHIFT C — скопировать ячейку или выделенный текст; CTRL SHIFT X — вырезать ячейку. ËÓÒËÏÈĄ¯ÎËÓÓ©²ąÈÓÓ©²mÈÓąÈ° В начале для этого набирается команда import pandas as pd. Затем применяется команда data frame, после которой в строчку вставляется путь до файла, как показано на ри39 сунке 79. После запуска команды df программа выводит загруженный файл. Рисунок 79. Загрузка и распаковка файла для анализа ȼ ɞɚɧɧɨɦ ɫɥɭɱɚɟ ɮɚɣɥ ² ɜ ɮɨɪɦɚɬɟ FVY — FRPPD VHSDUDWHG YDOXHV²ɡɧɚɱɟɧɢɹɪɚɡɞɟɥɺɧɧɵɟɡɚɩɹɬɨɣ Если при загрузке данных программа выдает ошибку, то необходимо проверить, совпадает ли кодировка файла с содержащимися в нём значениями. Часто речь идет о том, что файл содержит в себе информацию на кириллице. Тогда необходимо проверить кодировку файла. В данном случае должна быть кодировка cp1251. Для того чтобы убедиться в этом, можно записать это при загрузке в строку: Рисунок 80. Обеспечение необходимой кодировки файла при загрузке Как можно заметить, при EDA, при исследовательском анализе данных работа с таблицей идёт при присвоении основной таблице названия df, не содержащего названия первоначального файла. Это упрощает и написание кода, и последующую работу, и весь анализ. Вместо того, чтобы вбивать многочисленные имена загружаемых таблиц, работа идет с df. Это упрощает работу аналитика данных. 40 Также это сокращает время при копипасте материалов из интернета, чем в большинстве времени и занимается аналитик. При наименовании дополнительных таблиц можно добавлять нужные маркеры в имя. |°Óºmө˺¹Ë¯ÈĆÒÒ °ąÈÈÁ¯Ë®äºä Отображаемая в Пандасе таблица не проецируется полностью. Она слишком большая для этого. На экране видно ограниченное число столбцов и строк. Нажатие на волшебную палочку внизу даёт возможность работать с таблицей как в обыкновенном Экселе. При этом включаются все присущие этому пакету электронных таблиц функции: сортировка, применение фильтров и другие — рисунок 81 (см. с. 40–41). Такая визуализация не поддерживает более 20 000 строк, поэтому такую работу при визуализации лучше проводить для сводных таблиц. Для сокрытия такого большого количества строк при выводе таблицы на экран можно применить команду df.head(), тогда программа выведет только первые пять строк. При ограничении количества выводимых строк программа выведет любое количество df.head(1). Аналогично можно посмотреть только последние строки, их любое заданное оператором количество — команда df.tail(): запуск команды — рисунок 82, результаты работы команды — рисунок 83. Рисунок 82. Запуск команды df.tail() 41 42 43 Рисунок 81. Работа с таблицей дата сета в режиме электронных таблиц Рисунок 83. Вывод на экран начальных и конечных строк дата сета. Рисунок 84. Вывод столбца Также можно обрезать при выводе на экран и столбцы, выводя только выбранный столбец — рисунок 84. Рисунок 85. Вывод столбца В данном случае вывод столпроизошел в виде отдельной бца произошёл в виде серии, сотаблицы ставной части дата фрейма. Если из столбца требуется сделать отдельную таблицу, то команда преобразуется следующим образом — рисунок 85. Дополнительно через запятую можно добавить дополнительные столбцы в такую таблицу. Для просмотра количества строк в дата фрейме используется Рисунок 86. Просмотр количества строк команда len — рисунок 86. 44 Удаление столбцов происходит через команду drop, добавляемую через точку к df. При этом удаление столбцов происходит только в реплике дата фрейма. Если надо удалить столбец из исходного дата сета, надо применить оператор inplace=True, перезаписать таблицу без ненужного столбца. При новых операциях с дата сетом надо не забывать его перезагружать. При анализе дата сета не обязательно удалять столбцы, можно выбрать нужные для анализа столбцы. Для этого в начале необходимо получить список всех столбцов — рисунок 87. Рисунок 87. Загрузка списка всех столбцов таблицы дата сета Columns — это свойство таблицы, в котором хранятся все столбцы. Если взять все выделенные столбцы и вставить их в команду df, то будет выбран весь дата фрейм — рисунок 88. Выбранные поля можно откорректировать — удалить ненужные. Столбцы из исходного дата фрейма можно не только удалять, можно и добавлять столбцы. Не надо бояться удалять столбцы. Исходный файл всегда можно прочитать из файла csv. Добавление новых столбцов в таблицу — рисунок 89. С уже имеющимися столбцами можно осуществлять действия, как показано на рисунке 90 — деление столбца на 3. Команда assign позволяет создать столбец, но во временном файле, для решения текущих задач, не изменяя исходный файл — рисунок 91. Обычно эта команда применяется для решения промежуточных, временных задач. 45 46 Рисунок 88. Загрузка всего дата фрейма 47 Рисунок 89. Создание нового столбца в таблице 48 Рисунок 90. Создание нового столбца из старого делением на 3 49 Рисунок 91. Команда assign создание столбца во временном файле, не изменяя исходный файл 50 Фильтрация и предупреждения (warning) Выбор необходимых элементов из таблицы проводится, как указано на рисунке 92. 51 Рисунок 92. Выбор необходимых элементов таблицы 52 Рисунок 93. Выбор необходимых элементов таблицы с помощью команды «запрос» Второй способ сделать эту же операцию — команда «запрос» — рисунок 93. 53 Рисунок 94. Двойной фильтр Усиление фильтрации — установка второго фильтра — рисунок 94. 54 Рисунок 95. Установка второго фильтра в query Установка второго фильтра в query происходит, как на рисунке 95. 55 Рисунок 96. Запрос для выборки Female Такой же запрос для выборки Female — рисунок 96. 56 Рисунок 97. Создание переменной на основе списка с Female На основе списка с Female создается переменная — рисунок 97. Следует обратить внимание на то, что при создании переменной — нового дата фрейма, новой таблички в конце кода пишется copy(). Это указывает на то, что создается новый фрагмент и все команды, применяемые к переменной city_40_female, будут применяться к нему, а не к исходному дата сету. Без указания этой команды, при применении команд по добавлению столбцов система будет выводить ошибку, так как будет применять команды к исходному дата сету. После знакомства с вышеописанными командами работы с дата фреймом можно переходить к анализу дата сетов. ¯º¹°}Ò Первая важная операция при анализе дата сета — поиск незаполненной информации по какому-либо из объектов данных — рисунок 98. В распечатке указаны доли пропущенных данных. Например, по строке gender пропущено 23,53% данных. Для удобства анализа можно отсортировать данные следующим образом, как указано на рисунке 99. Рисунок 98. Поиск пропусков Рисунок 99. Сортировка таблицы 57 Бывают ситуации, когда пропущенные данные препятствуют работе алгоритма машинного обучения. Другая команда для просмотра пропусков — команда info — рисунок 100. Рисунок 100. Команда info В результате её выполнения программа выводит непустые ячейки. Тип данных ячеек можно посмотреть и другой командой — рисунок 101. Рисунок 101. Типы данных дата фрейма Ò¹©¹Ë¯ËäËÓÓ©² Различают непрерывные и категориальные переменные. Непрерывные переменные принимают разные значения. В примере на рисунке 102 — это поле «city_development_ index». 58 59 Рисунок 102. Типы переменных дата фрейма Категориальные переменные принимают только определённые значения. На рисунке 102 — это поле gender. Анализ переменных проводится следующим образом. Непрерывные переменные анализируются при помощи гистограммы. Строится гистограмма по полю, как показано на рисунке 103. Рисунок 103. Построение гистограммы для непрерывной переменной Гистограмма показывает распределение для непрерывной переменной. Непрерывные переменные можно описать с помощью команды describe — рисунок 104. Рисунок 104. Статистическое описание переменных Действие команды аналогично пакету статистики в Excel. По категориальной переменной программа предоставляет возможность просмотра значений того или иного вида. К описанию заполненных полей можно добавить информацию о пропущенных значениях — рисунок 105. Рисунок 105. Добавление к описанию категориальной переменной пропущенных значений. nÒãĉ¯ÈĆÒ«¹º}mÈÓÒãĊ Фильтрация по квантилю применяется для удаления из анализируемого набора данных выбросов — слишком больших или слишком маленьких значений. В машинном обучении это нужно для достижения большей надёжности работы обучающей модели и лучшего качества результата обучения. Оператором задается 25% квантиль по переменной city_ development_index. Этому оператору присваивается переменная q, для удобства использования в дальнейших формулах. Подстановкой в следующий оператор выводятся все значения меньше этого квантиля — рисунок 106. 61 62 Рисунок 106. Отбор значений по критерию Чтобы проверить, что это действительно 25% всего набора данных, можно произвести следующие действия — рисунок 107. Рисунок 107. Проверка полученной выборки По отфильтрованным данным можно построить гистограмму. vmºąÓ©ËÈ­ãÒĆ© Построение сводной таблицы для категориальных переменных. Ключевой элемент анализируемого дата фрейма — желание сменить работу у участников, внесённых в список. Доля этих участников определяется по команде на рисунке 108. Построение сводной таблицы с группировкой по какому-либо признаку по целевому значению — рисунок 109. В полученный результат необходимо добавить количество значений — рисунок 110. В данный момент анализа пропущенные данные уже начинают искажать результаты исследования. Необходимо включить в анализ пропущенные данные. Рисунок 108. Определение доли желающих сменить работу Рисунок 109. Группировка по признаку Рисунок 110. Добавление количества значений в группировку по признаку 63 Это происходит включением оператора drop, как показано на рисунке 111. Рисунок 111. Включение незаполненных по полю gender полей в анализ Этот элемент анализа значительно влияет на результаты. Видно, что доля желающих сменить работу у большой части заполнивших анкету велика. Чтобы не упустить этот элемент анализа по каждому из результатов анализа можно проверить количество данных и сравнить его с общим количеством данных (строк) в первоначальном дата сете. Запуск аналогичной команды по полю education_level дает следующий результат — рисунок 112. Рисунок 112. Анализ по полю education_level По полученным данным можно построить график — рисунок 113. 64 Рисунок 113. Результаты построения графика. Линию на графике можно изменить на бар — рисунок 114. Рисунок 114. Изменение вида графика 65 Количество значений, выведенное в таблице, необходимо для того, чтобы представлять себе значимость полученных результатов. При его малом значении это снижает значимость результата, указывает на то, что это может быть статистический «шум». Построение сводной таблицы для непрерывных переменных. Перед построением сводной таблицы для непрерывных переменных диапазон, содержащий непрерывные переменные, надо разделить командой cut. При этом отрезки, на которые разбивается диапазон, будут равной длины — рисунок 115. Рисунок 115. Разделение диапазона с непрерывной переменной Произведённое выше действие можно сохранить в виде отдельной переменной, а затем — подставив её в оператор (рисунок 116). Рисунок 116. Сводная таблица непрерывной переменной 66 Измерение желания сменить работу — в последнем столбце — mean. Для уточнения анализа данные можно разбить не по длине интервала переменной поле, но по количеству значений в первоначальном дата сете, количеству людей, принявших участие в опросе, удалив при этом повторяющиеся элементы — рисунок 117. Рисунок 117. Группировка с удалением повторяющихся элементов Уточнение группировки, разделение по количеству людей, удаление нулевых значений привело к более рельефным и отчётливым результатам: связь развитости города и желания сменить работу выглядит более чётко. После запуска команды для проверки правильности вычислений следует запустить счёт количества значений и проверить, равно ли оно первоначальному размеру дата сета. Обозначим разработанный оператор переменной t, посчитаем количество её строк, сравним с первоначальным (рисунок 118) и построим по ней график (рисунок 119). Рисунок 118. Количество строк переменной 67 Рисунок 119. Построение графика переменной ¯¹¹Ò¯ºm}È}ÈËĄº¯ÒÈãĉÓ©²¹Ë¯ËäËÓÓ©² В этом параграфе описываются действия для перегруппировки категориальных значений по новым категориям. Команды будут применяться к полю education_level — рисунок 120. Рисунок 120. Начальные данные для перегруппировки 68 Для перегруппировки не стоит запускать цикл по строкам. Следует запустить следующие операторы — рисунок 121. Рисунок 121. Перегруппировка категориальных переменных В начале запускаются команды по новой группировке, затем им присваивается новое имя переменной, переменная подставляется в уже известную команду, которая даёт свой результат — категориальные переменные имеют новую группировку. Можно переименовать категории командой replace — рисунок 122. Рисунок 122. Переименование при помощи команды replace 69 Другой способ изменении категоризации — создать словарь, в котором переименовываются названия категорий, как указано на рисунке 123. Рисунок 123. Изменение категорий при помощи словаря Создается переменная, переименовывающая категорию. Указывается, какая категория и как должна быть переименована. Как видно из результата, переименовывается только та категория, о переименовании которой было сказано. Остальные категории не переименовались. Таким образом, в команде должно быть указание на переименование каждой категории — рисунок 124. Рисунок 124. Расширение словаря 70 °ãºmө˺¹Ë¯ÈĆÒÒ°ÓË°}ºãĉ}ÒäÒ°ºã­ĆÈäÒ nÓ}ĆÒÒ¹ºº­¯È­º}ËÓË°}ºãĉ}Ò²°ºã­Ćºm В этом параграфе объясняется, как создать функцию обработки данных какого-либо столбца при определённом условии, затрагивающем другие поля, для создания нового столбца на базе имеющегося. В создаваемой функции обрабатываемое оператором значение уже не просто один элемент массива данных, как в предыдущем случае x, а целая строка — row. В примере на рисунке 125 у всех PhD специалистов, по которым имеются данные в анализируемом дата фрейме, к указанным в столбце часам на подготовку прибавляется 1000 часов. Рисунок 125. Функции по обработке нескольких столбцов В окне результата работы команды видно все строки дата сета. Чтобы убедиться, что команда сработала, надо отфильтровать и вывести только специалистов с Phd — рисунок 126. 71 72 Рисунок 126. Прибавление часов переквалификации Phd специалистов 73 Рисунок 127. Проверка Вызов дата сета командой df и сравнение других строк показывает, что у других специалистов количество часов в новой колонке осталось тем же — рисунок 127. Также для этих операций в Пандас могут использоваться команды loc и iloc. loc выбирает строки и столбцы с определёнными метками. iloc выбирает строки и столбцы в определенных целочисленных позициях. Так как эти команды изменяют структуру дата сета, ими надо пользоваться осторожно и со вниманием. 3LYRWWDEOH Благодаря командам этого параграфа можно выполнять операции, аналогичные операциям, описанным в предыдущем разделе — рисунок 128. Рисунок 128. Перегруппировка категориальных переменных при помощи команды pivot_table Отличие от ранее использованного способа состоит в том, что нет строки с респондентами с отсутствующими данными. Если добавить в оператор функцию dropna=False, то оператор исключит все данные с пропущенными значениями — рисунок 129. Рисунок 129. Добавление функции dropna=False 74 Как можно заметить, при работе pivot_table столбцы стали двухэтажными. Это значит, что таблица отображает индекс. Чтобы его исключить, производятся следующие операции: модернизируемая табличка присваивается переменной t, и над ней проводятся следующие операции — рисунок 130. Рисунок 130. Преобразование таблицы в таблицу без индекса Reset_index не позволяет убрать мультииндекс в столбцах. Основное отличие pivot_table от group_by в том, что этот оператор позволяет добавлять переменные в столбцы — рисунок 131: в таблицу добавили переменную по полу. Рисунок 131. Добавление переменной по полу в таблицу при помощи оператора pivot_table Теперь количество значений и среднее выводятся для комбинаций по полу для показателя «сменить работу». 75 При применении оператора groupby так сделать нельзя. Эта же задача решается с помощью оператора groupby таким образом — рисунок 132. Рисунок 132. Добавление переменной по полу в таблицу при помощи оператора groupby Как видно из таблицы, оператор groupby подставляет новую переменную в строки, а не в столбцы, как pivot_table. +HDWPDS Heatmap является разновидностью условного форматирования в Экселе, когда специальным цветом в таблице выделяются важные данные. Для демонстрации работы Heatmap создаётся следующая таблица — рисунок 133: Рисунок 133. Таблица для демонстрации работы Heatmap 76 Для загрузки библиотеки для форматирования происходит импортирование библиотеки для визуализации Питона, которая хорошо работает с Пандас, а затем запуск в ней нашей таблички t — рисунок 134. Рисунок 134. Импорт библиотеки форматирования и её запуск на табличке t Для того чтобы сделать выводы о выявленных закономерностях, необходимо посмотреть, на каком объёме был получен результат. Для этого надо запустить оператор count, который покажет количество значений — рисунок 135. Рисунок 135. Проверка значимости результатов Из сопоставления цветовой диаграммы и количества в группе видно, что малозначительный результат (чёрный 77 78 Рисунок 136. Дата фрейм для расчета корреляции цвет по группе Phd) не так важен, так как получен на относительно малой выборке Phd респондентов — всего 31 человек. Heatmap используется для визуализации корреляции между переменными. zº¯¯Ëã«ĆÒ«ÒSKLN Вызывается дата фрейм, с которым мы работаем — рисунок 136. Запуск расчёта корреляции между полями таблицы — рисунок 137. В таблице рассчитан коэффициент корреляции, показывающий силу линейной связи между двумя разными переменными таблицы. По данным таблицы на рисунке 140 продуктивно построить Heatmap. Для этого необходимо удалить ненужные столбцы: те, которые были созданы для демонстрации возможностей команд, и служебный столбец с номерами строк. Для этого сначала вызывается весь список столбцов, а затем в оператор построения таблицы копируются нужные столбцы — рисунок 138. Как видно из таблицы, программа сама отклонила включенные в список столбцы с нечисловыми данными. Визуализация результатов корреляции при помощи загруженной библиотеки — рисунки 139, 140. Phik. Описание работы этого коэффициента приведено на ресурсе towardsdatascience.com в статье — Phik (Ik) — get familiar with the latest correlation coefficient. Коэффициент корреляции Phik устанавливает связь при нелинейном характере взаимосвязи исследуемых переменных. Различие коэффициента Phik от используемого для характеристики линейной корреляции коэффициента Пирсона в том, что в отличие от коэффициента Пирсона коэффициент Phik не меняет знак, но лишь только показывает силу связи. Отличительные особенности коэффициента корреляции Phik проиллюстрированы на рисунке 141 (c. 79). 80 Рисунок 138. Расчёт корреляции по выбранным столбцам Рисунок 137. Расчёт корреляции 81 Рисунок 140. Результат применения визуализации Рисунок 139. Применение визуализации корреляции Рисунок 141. Иллюстрация отличия коэффициента Phik от других традиционных коэффициентов корреляции Как видно из рисунка, Phik является единственным средством измерения корреляции, когда исследуемые переменные изменяются не линейно, а параболически и по другим видам. Установка phik — рисунок 142. После установки надо загрузить необходимые библиотеки, как показано на рисунке 143: А потом запустить соответствующую команду, которая после установки позволяет посчитать матрицу корреляций полей таблицы — df.phik_matrix() — рисунки 144 — импорт, 145 — запуск команды, 146 — результат. 82 83 Рисунок 144. Импорт phik Рисунок 143. Загрузка необходимых библиотек. import phik from phik.report import plot_correlation_matrix from phik import report Рисунок 142. Установка phik 84 Рисунок 146. Результат запуска phik для расчета корреляции Рисунок 145. Запуск команды Все преимущество расчёта корреляции при помощи коэффициента phik в том, что он позволяет рассчитывать корреляцию между категориальными переменными. Созданную таблицу можно визуализировать при помощи seaborn — рисунок 147: Рисунок 147. Визуализация таблицы при помощи seaborn ВАЖНО: Если вы используете пакеты, библиотеки, как например seaborn, не забывайте, что они должны быть загружены в ваш colab google, с которым вы работаете. Иначе программа выдаст ошибку. Если вы пользовались в своём ноутбуке пакетом днём ранее, его необходимо заново прогрузить, повторить ранее обозначенные в коде действия. Для анализа только интересующего нас поля — target, измеряющего силу желания сменить работу, следует построить отдельную таблицу — рисунок 148. 85 Рисунок 148. Расчет коэффициента корреляции phik для поля target Для того, чтобы выделить первоначально самые значимые факторы — поля, влияющие на target, следует отсортировать данные в таблице (рисунок 149). Рисунок 149. Выделение наиболее влияющих на желание сменить работу (target) факторов ¯ºm˯}È°m«ÏË® Для проверки связей строятся страты — рисунок 150. Рисунок 150. Проверка полученного коэффициента корреляции с помощью дополнительных средств 86 Из данных таблицы следует, что существует сильная связь между желанием сменить работу — среднее по полю target данных страты и неразвитостью города. Видна сильная линейная связь. Наиболее сильная корреляция после индекса развитости города видна по полю «город» — “city”. Для её доРисунок 151. Сводная таблица по таргету полнительной проверки в разрезе городов и исследования проделываются аналогичные первому анализу операции: строится новая сводная таблица путём группировки значений по полю «город» — рисунок 151. Для лучшей визуализации строится табличка с сортировкой по убыванию, сначала создаётся переменная t, к которой применяются команды — рисунок 152. Рисунок 152. Создание переменной и сортировка по убыванию 87 Теперь для проведения анализа отсечём первые 10 городов, поставив их в «шапку» сверху — рисунок 153. Рисунок 153. Топ 10 по населению городов по таргету Чтобы сделать графический анализ полученного результата, программе задаётся расчёт среднего значения по анализируемому полю — target и строится график — рисунок 154. Рисунок 154. Графический анализ 88 Изменение типа графика на ленточную вертикальную диаграмму — рисунок 155. Рисунок 155. Изменение типа графика В построенной диаграмме видно, что у выбранных городов, проранжированных по количеству населения, более сильным желанием сменить работу выделяется второй город. Выдвинем гипотезу о том, что это связанно с тем, что его индекс развитости city_development_index меньше, чем у остальных городов, и проверим эту гипотезу. При написании кода обращайте внимание на синтаксис и пунктуацию написания. Частые ошибки при программировании на Питон и Пандас: 1. Работая в Колабе, вы не обновляете ранее загруженный дата фрейм, библиотеки и команды не выполняются. 2. Вы ставите круглые скобки вместо квадратных. Программа выдает ошибку: ‘DataFrameGroupBy’ object is not callable. На рисунке 156 показана проведенная группировка. 89 Рисунок 156. Группировка для проверки гипотезы В построенной таблице используется мультииндекс. Следует избавиться от него — рисунок 157. Рисунок 157. Удаление мультииндекса из таблицы Индекс city остается, так как это поможет построить график. 90 Затем проводится сортировка — рисунок 158. Рисунок 158. Сортировка Наша гипотеза подтвердилась: действительно у второго города в списке индекс развития города самый маленький, при этом желание сменить работу выше, чем у остальных десяти городов в выборке. Коэффициент корреляции phik показывает сильную взаимозависимость желания сменить работу и опыта работы (в годах). Проверим эту взаимосвязь следующими действиями. К полю experience применяется группировка Рисунок 159. Группировка по среднему по среднему значению тарзначению таргета по полю experience гета — рисунок 159. Для удобной сортировки таблицы необходимо заменить значения в полях <1 на 0 и >20 на 999 — рисунок 160. 91 Рисунок 160. Замена значений А затем конвертировать значения в полученном столбце из категориальных (какими они были из-за наличия операторов больше и меньше) в числовые, при этом пропуски данных заполняются отрицательными значениями — рисунок 161. Рисунок 161. Конвертация категориальных значений в числовые с заполнением пропусков отрицательными значениями Для того чтобы не смешивать новый созданный массив с прежним, выделим отдельное название полученному новому дата сету — рисунок 162. Рисунок 162. Наименование нового дата сета Затем проводится деление данных на 5 групп и построение новой группировки — рисунок 163: Рисунок 163. Группировка по 5 группам Сводная таблица иллюстрирует отмеченную индексом phik корреляцию — чем меньше опыт работы, тем сильнее у респондентов желание сменить работу. nÓ}ĆÒÒÈĄ¯ËĄÈĆÒÒ Для демонстрации работы функции агрегации создаётся демонстрационная таблица — рисунок 164. Тестирование функции агрегации «сумма» — рисунок 165. Функция сработала, сумма посчиталась, значения NaN были превра- Рисунок 164. Создание демонстрационной таблицы щены в пропуск данных. Следующая проверка — расчёт среднего (рисунок 166). Рисунок 165. Сумма по столбцам таблицы Рисунок 166. Расчёт среднего 93 Функция сработала. Среднее значение было рассчитано по имеющимся элементам данных, пропущенное значение в расчёте Рисунок 167. Расчёт количества не приняло участия. элементов Запуск функции подсчета элементов подтверждает расчёт среднего — рисунок 167. Количество элементов равно 3, пропуск в расчёт не был включён. Измерение длины всего дата Рисунок 168. Длина data frame фрейма даёт результат 4 — рисунок 168. Длина совпадает с количеством строк, включая пропуск в данных. Функции агрегации помогают проверить имеющиеся данные в дата сете перед тем, как запускать код по ним, чтобы выявить, можно ли запускать более сложные команды для далеко идущих выводов на основе этих данных. Скатер плот. Применение скатер плот позволяет проанализировать связь между двумя переменными. Применение оператора демонстрируется на тестовых данных созданной таблицы — рисунок 169. Рисунок 169. Создание таблицы для тестирования скатер плот 94 Построение графика с помощью скатер плот — рисунок 170. Рисунок 170. Скатер плот по тестовой табличке Для лучшей визуализации графика можно добавить сетку — рисунок 171. Рисунок 171. Добавление сетки на график 95 Проанализируем взаимосвязь данных таблицы по желающим сменить работу между city_development_index и данными по опыту работы респондентов. Для того чтобы использовать данные по опыту работы, их надо преобразовать в целочисленные значения. Построение графика — рисунок 172. Рисунок 172. График взаимосвязи city_development_index и опыта работы График не выглядит иллюстративным. Скорее, наоборот. Если вспомнить порядок заполнения таблицы, то в крайних значениях была подстановка отрицательных значений или 999 лет в опыт работы. Эти данные и искажают картину. Есть два способа исправить картину: 1. Заменить значения крайним пределом; 2. Вообще избавиться от этих значений. Реализация второго варианта — на рисунке 173. 96 Рисунок 173. Новое построение графика без крайних значений Несмотря на предпринятые действия, построенный график не иллюстративный. Теперь это происходит из-за дублирования точек, перекрытия их плотности в одном месте. Для того чтобы сделать эту ситуацию контрастнее, у оператора скатер плот есть возможность управлять яркостью — «подсветить» ярче ту зону графика, в которой много точек, и «убавить яркость» в той зоне, где точек мало управляющим параметром альфа — рисунок 174. Увеличение контрастности на порядок даёт такой результат — рисунок 175. Визуально начинает угадываться связь: чем выше индекс городского развития city_development_index, тем больше опыт. Для подтверждения данного предположения строится сводная таблица. Для этого данные по city_ development_index делятся на группы, для каждой из которых рассчитывается среднее или медиана по полю experience — рисунок 176: 97 Рисунок 174. Улучшение иллюстративности графика Рисунок 175. Увеличение контрастности на порядок 98 Рисунок 176. Сводная таблица по city_development_index для experience Данные сводной таблицы подтверждают предположение: чем более развит город, тем больше опыт работы респондентов, проживающих в нём. Для закрепления этого наблюдения его можно визуализировать — рисунок 177. Рисунок 177. График по данным сводной таблицы Для лучшей картинки следует задать начало графика с нулевого значения по оси y. Это делается, как показано на рисунке 178. 99 Рисунок 178. Применение команды ylim к графику Так график выглядит более иллюстративным. iκ®Ó© Часто при обработке дата сетов возникают ситуации, когда к основной таблице надо добавить таблицу, содержащую дополнительные данные. Объединение таблиц происходит по ключевому полю базы данных. В случае с рассматриваемым примером — это идентификационный номер респондента опроса. Для учебных целей таблица с данными по возрасту создаётся на основе имеющегося дата фрейма, как показано на рисунке 179. Теперь надо объединить эти две таблицы. Команда объединения — merge. В характеристике опера100 Рисунок 179. Создание дополнительной таблицы с данными для объединения с общей таблицей тора необходимо указать «left». Это значит, что сохраняются все поля левой таблицы (в данном случае df — основного дата фрейма). Также необходимо указать ключевое поле для идентификации данных на объединение. В данном случае это enrollee_id — рисунок 180. Рисунок 180. Объединение таблиц командой merge В конце столбцов появилась колонка age. Команда merge не изменяет исходный дата фрейм, но создаёт новый. Поэтому дата фрейм лучше перезаписать. Рисунок 181. Перезапись дата фрейма 101 После создания нового дата фрейма путем объединения двух таблиц необходимо проверить дублирование данных по ключевому полю. Это можно сде- Рисунок 182. Проверка лать применением команды len — рисудублирования данных нок 182. Второй способ — удалить дублирующиеся данные по ключевому полю и проверить длину строк таблицы (рисунок 183). Рисунок 183. Удаление дубликатов данных и проверка длины таблицы 1XPS\ — библиотека данных для простых математических операций над данными. Пандас работает на основе Numpy. Красноречивая иллюстрация этого факта демонстрируется вызовом следующей команды — рисунок 184. Рисунок 184. Запрос типа данных На запрос типа данных значений индекса городского развития программа пишет о нумпае. Импортирование нумпая осуществляется, как пока- Рисунок 185. Импортирование numpy зано на рисунке: Без импортирования numpy нельзя посчитать среднее по массиву. Поэтому надо делать расчёт через биРисунок 186. Расчет среднего блиотеку numpy — рисупо массиве библиотекой numpy нок 186. 102 Генерация случайного значения в numpy по различным законам распределениям — рисунок 187: Рисунок 187. Генерация случайного числа С помощью пакета numpy можно сгенерить диапазон случайных значений — рисунок 188. Рисунок 188. Генерация массива чисел np.linspace(-10,10,100) — в команде задается, от какого по какое число происходит генерация и какое количество значений надо сгенерировать. Такой массив может использоваться для построения графика какой-либо функции. Numpy позволяет сгенерировать шум: значения от 0 до 1 — рисунок 189. Рисунок 189. Генерация шума в Numpy 103 Рисунок 190. Операции с массивами Рисунок 191. Преобразование таблицы в Пандас Numpy позволяет производить операции с массивами. Отличие операций с массивами, которые поддерживаются Питоном от тех, которые можно проводить с использованием Numpy — на рисунке 190. В любом случае, массив можно преобразовать в Пандас — рисунок 191. Вопросы и задания к главе 1 1. Тип данных «список»: описание, команды, результат выполнения. 2. Слайсинг: описание, команды, результат выполнения. 3. Работа с булевым типом данных. True False: описание, команды, результат выполнения. 4. Функции: описание, команды, результат выполнения. 5. Работа с Pandas: основные операции с дата фреймом. 6. Heatmap в Пандас. 7. Расчёт корреляция по phik в Пандас. 8. Джойны в Пандас. 104 Гл а в а 2. ИНСТРУМЕНТЫ МАШИННОГО ОБУЧЕНИЯ: ПРИМЕНЕНИЕ В ФИНАНСАХ 2.1. Питон для обработки финансовой информации Для хранения больших объёмов информации у себя на компьютере, интеграции работы с информационными системами, используемыми финансистом в работе Bloomberg, Refinitive (бывшая Thomson Reuters). Установка Питона на компьютер осуществляется с сайта: https://www.python.org/ Надо выбрать меню загрузки — рисунок 192: Рисунок 192. Сайт Питона 105 Выбрать подходящую для вашего компьютера версию установки — рисунок 193. Рисунок 193. Выбор версии Питона для установки И запустить установку — рисунок 194. Рисунок 194. Установка Питона После установки появляется окно — рисунок 195. 106 Рисунок 195. После установки Питона Запустить Питон можно из командной строки внизу — рисунок 196. Рисунок 196. Запуск Питона 107 После установки Питона необходимо установить программное обеспечение с сайта anaconda.com — рисунок 197: Рисунок 197. Установка Анаконды 108 После установки Анаконды для запуска программирования на Питоне надо вызвать Jupyter Notebook — рисунок 198. Рисунок 198. Меню с Jupyter Notebook j乺¯Ò¯ºmÈÓÒË­Ò­ãÒºË}ąã«¯È­º© °ÁÒÓÈÓ°ºm©äÒ­ÈÏÈäÒąÈÓÓ©² Импортирование библиотек в колабе — рисунок 199. Рисунок 199. Загрузка в колабе Для загрузки библиотек при работе с Питоном на компьютере надо сначала загрузить их в среде Питона. В ходе выполнения следующих действия с базой данных Yahoo Finance при программировании задаётся диапазон дат и за этот диапазон выгружаются котировки выбранных акций. 109 При определении диапазона дат используется пакет datetime — рисунок 200. Рисунок 200. Определении диапазона дат После дня — 29 числа месяца июля указываются минуты и секунды. Создание списка акций для выгрузки — рисунок 201. Для загрузки выбирается акция Микрософта, одного из индексов S&P и одного из фондов индекса Насдак — QQQ. По ним загружается информация и рассматриваются итоги загрузки. Рисунок 201. Загрузка из Yahoo Finance 110 Из построенного массива выбирается нужный столбец с данными — рисунок 202: Рисунок 202. Выбор нужного столбца с данными cÈ°ć£ąÓËmÓº®ąº²ºąÓº°Ò¹ºm©Ą¯ÎËÓÓ©ä ąÈÓÓ©ä Для программирования используется загруженная библиотека numpy, действия с этой библиотекой и её возможности уже были описаны в выше. Расчёт — на рисунке 203: Рисунок 203. Расчёт дневной доходности по выгруженным данным Расчёт накопленной доходности производится, как показано на рисунке 204. Рисунок 204. Код для расчёта накопленной доходности 111 º°¯ºËÓÒËĄ¯ÈÁÒ}ÈÓÈ}º¹ãËÓÓº®ąº²ºąÓº°Ò На рисунке 205 показано программирование с целью построения графиков накопленной доходности по выбранным акциям. Рисунок 205. Построение графиков накопленной доходности 2.2. Работа с финансовой информацией в Питоне: продвинутый уровень Среда для работы — Colabresearch, с помощью которой можно работать с языком Python. Colabresearch — это онлайн-платформа для проведения исследований и разработки в области машинного обучения и анализа данных. Она предоставляет возможность создавать и запускать Jupyter-ноутбуки, которые объединяют код, текстовую документацию, графики и другие элементы в одном интерактивном документе. Colabresearch основана на платформе Google Colaboratory (Colab), которая предоставляет бесплатный доступ к вычи112 слительным ресурсам, включая процессоры и графические процессоры (GPU), а также предустановленные библиотеки для машинного обучения, такие как TensorFlow и PyTorch. Основные возможности Colabresearch включают: 1. Использование облачных ресурсов: Colabresearch позволяет использовать мощные вычислительные ресурсы Google для выполнения сложных вычислений, обучения моделей машинного обучения и анализа данных. 2. Интерактивную среду разработки: Colabresearch предоставляет интерактивную среду разработки, которая позволяет писать и выполнять код, просматривать результаты и взаимодействовать с данными в режиме реального времени. 3. Поддержку различных языков программирования: Colabresearch поддерживает не только Python, но и другие языки программирования, такие как R и Julia, что делает платформу универсальной для различных исследовательских задач. 4. Совместную работу и обмен данными: Colabresearch позволяет совместно работать над проектами с коллегами, обмениваться данными и результатами исследований, а также интегрировать её с другими сервисами Google, такими как Google Drive и Google Sheets. Colabresearch является удобным инструментом для проведения исследований и разработки в области машинного обучения и анализа данных, обеспечивая доступ к вычислительным ресурсам и предустановленным библиотекам, а также возможность совместной работы и обмена данными. Основные библиотеки Для удобной работы с данными разработан ряд библиотек. Библиотека pandas является одной из основных библиотек для работы с данными в Python. Она предоставляет удобные и эффективные структуры данных, такие как DataFrame, которые позволяют легко и гибко работать с табличными данными. Благодаря pandas можно выполнять операции по фильтрации, сортировке, агрегации и прео113 бразованию данных. Она также обеспечивает функциональность для чтения и записи данных из различных форматов, таких как CSV, Excel, SQL, JSON и других. Библиотека numpy предоставляет возможность для работы с многомерными массивами и матрицами в Python. Она предоставляет множество функций для выполнения математических операций, таких как линейная алгебра, статистика, преобразования Фурье и другие. Numpy также обеспечивает эффективные алгоритмы для выполнения операций над массивами, что делает её особенно полезной для вычислений в машинном обучении и анализе данных. Библиотека matplotlib.pyplot позволяет создавать различные графики и визуализации данных в Python. Она предоставляет функции для создания линейных графиков, гистограмм, диаграмм рассеяния, контурных графиков и других типов графиков. Matplotlib.pyplot также обеспечивает возможность настройки внешнего вида графиков, добавления подписей и легенды, а также сохранения графиков в различных форматах. Библиотека statsmodels.api предоставляет статистические модели и функции для выполнения различных статистических тестов и анализа данных. Она включает в себя модели линейной регрессии, временных рядов, анализа дисперсии и другие. Statsmodels.api также предоставляет функции для выполнения статистических тестов, таких как t-тесты, анализ дисперсии, корреляционный анализ и другие. Библиотека scipy.stats предоставляет возможность для выполнения статистических операций и расчётов в Python. Она включает в себя функции для работы с различными распределениями вероятностей, такими как нормальное распределение, биномиальное распределение, распределение Пуассона и другие. Scipy.stats также предоставляет функции для выполнения статистических тестов, таких как t-тесты, анализ дисперсии, корреляционный анализ и другие. Все эти библиотеки являются основными инструментами для работы с данными, анализа данных и построения моделей машинного обучения в Python. Они предоставляют широкий спектр функциональности и возможностей, 114 что делает их неотъемлемой частью работы исследователей и разработчиков в области машинного обучения и анализа данных. Загрузка файлов Для загрузки данных в Colabresearch можно использовать различные способы, включая следующие: 1. Загрузка данных из локального компьютера: – используйте функцию files.upload() для загрузки файла с вашего компьютера; – после загрузки файла вы можете использовать его в коде, например, с помощью библиотеки pandas для создания объекта DataFrame. Метод files.upload возвращает словарь загруженных файлов. Для словаря используется доступ по ключу в виде названия файла, а в качестве значений выступают загруженные данные. Пример кода: from google.colab import files uploaded = files.upload() for fn in uploaded.keys(): print(‘User uploaded file “{name}” with length {length} bytes’.format( name=fn, length=len(uploaded[fn]))) 2. Загрузка данных из URL: – используйте функцию pd.read_csv() и передайте URLадрес файла в качестве аргумента; – это позволит загрузить данные прямо из интернета и создать объект DataFrame. 3. Загрузка данных из Google Drive: – если данные находятся в Google Drive, вы можете использовать API Google Drive для доступа к ним; – примеры кода и инструкции по настройке доступа к Google Drive можно найти в документации Colabresearch1. 1 URL: https://colab.research.google.com/notebooks/io.ipynb#scrollTo= RWSJpsyKqHjH (дата обращения: 02.08.2023). 115 4. Загрузка данных из других источников: – в Colabresearch вы также можете загружать данные из других источников, таких как Dropbox или GitHub; – для этого вы можете использовать соответствующие API или библиотеки, предоставляемые этими сервисами. Пример подобных бесплатных сервисов мы рассмотрим позднее. Самый простой способ загрузки файла в среду Colabresearch: 1. В левом контекстном меню выбираем значок в виде папки. Откроется контекстное меню Файлы, где нас будет интересовать папка sample_data (рис. 206): 2. Файлы загружаем в папку sample_data нажатием на три точки. В открывшемся контекстом меню нажать «Загрузить» (рис. 207). 3. Для просмотра видимых файлов, мы можем воспользоваться командой !ls (ls означает to list, т.е. «перечислить»). Пример кода: !ls Подобным образом мы можем заглянуть внутрь папки sample_data: !ls /content/sample_data/ После загрузки файла необходимо указать скопировать путь к файлу (рисунок 208). Далее добавить ссылку при чтении файла при помощи pandas: Data = pd.read_csv(‘/content/sample_data/msft_3.csv’) В качестве примера была сделана выгрузка котировок акций компании Microsoft с ресурса Yahoo finance2 (рисунок 209). 2 URL: https://finance.yahoo.com/quote/PLTR/history?p=PLTR (дата обращения: 02.08.2023). 116 Рисунок 206. Папка sample_data Рисунок. 207. Загрузка в меню 117 Рисунок. 208. Копирование пути к файлу 118 Рисунок. 209. Выгрузка котировок акций компании Microsoft с ресурса Yahoo finance После загрузки файла, содержимое файла можно прочитать с помощью следующего кода: Информация, которая выведена в формате таблицы DataFrame в Colab можно конвертировать в интерактивную таблицу (рисунок 210). Рисунок 210. Конвертация в интерактивную таблицу 119 120 Рисунок 211. Интерактивная таблица В результате появляется интерактивная таблица (рисунок 211). Также рядом с кнопкой создания интерактивной таблицы находится пиктограмма для визуализации данных (рисунок 212). Рисунок 212. Пиктограмма для визуализации данных Изучение информации о файле Для вывода информации о структуре и типах данных в объекте DataFrame воспользуемся кодом: data_msft.info() Результат работы данного кода показывает информацию о каждом столбце в DataFrame: – Column: название столбца, – Non-Null Count: количество непустых значений в столбце, – Dtype: тип данных в столбце. <class ‘pandas.core.frame.DataFrame’> RangeIndex: 9415 entries, 0 to 9414 Data columns (total 7 columns): # Column Non-Null Count Dtype 121 --- ------ -------------- ----0 Date 9415 non-null object 1 Open 9415 non-null float64 2 High 9415 non-null float64 3 Low 9415 non-null float64 4 Close 9415 non-null float64 5 Adj Close 9415 non-null float64 6 Volume 9415 non-null int64 dtypes: float64(5), int64(1), object(1) memory usage: 515.0+ KB В данном случае, результаты работы кода показывают, что в DataFrame data_msft есть 7 столбцов с названиями «Date», «Open», «High», «Low», «Close», «Adj Close» и «Volume». Количество непустых значений в каждом столбце равно 9415, что означает, что в каждом столбце есть данные для всех строк в DataFrame. Тип данных в столбцах определён следующим образом: – Столбец «Date» имеет тип object, что означает, что он содержит строки. – Столбцы «Open», «High», «Low», «Close» и «Adj Close» имеют тип float64, что означает, что они содержат числа с плавающей запятой. – Столбец «Volume» имеет тип int64, что означает, что он содержит целочисленные значения. Эта информация полезна для понимания структуры данных и типов, которые нужно учитывать при анализе или обработке данных. Выгрузка данных фондового рынка с помощью библиотеки yfinance Yfinance3 — инструмент для получения финансовых данных из Yahoo Finance. Она предоставляет простой и удобный способ получить доступ к различным финансовым 3 URL: https://pypi.org/project/yfinance/ доступны к загрузке все иностранные публичные компании. Российские компании не доступны. Рекомендуется загружать данные с cbonds.ru, investing.com 122 данным, включая исторические цены акций, данные о дивидендах, данные о корпоративных событиях и другую финансовую информацию. С помощью yfinance можно получить данные о ценах акций за определённый период времени, включая открытие, закрытие, наивысшую и наименьшую цену, объём торгов и т. д. Также можно получить информацию о дивидендах, включая даты выплаты и размер выплаты. Библиотека также предоставляет доступ к другим финансовым данным, таким как данные об индексах, валютах и сырьевых товарах. Yfinance обеспечивает простой интерфейс для получения данных. Она позволяет загружать данные по одной или нескольким акциям, индексам или другим финансовым инструментам. Также можно настроить параметры запроса, такие как интервал времени и период данных. Библиотека yfinance написана на языке программирования Python и может быть использована в различных финансовых исследованиях, анализе данных и создании торговых стратегий. Она является открытым исходным кодом и поддерживается сообществом разработчиков. Для установки библиотеки воспользуемся командой: pip install yfinance Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/ dist-packages (from requests>=2.26->yfinance) (3.4) После установки библиотеки ее необходимо импортировать import yfinance as yf С помощью тикеров компаний в данной библиотеке возможно выгружать финансовую информацию. Рассмотрим пример выгрузки котировок акций компании Microsoft. msft = yf.Ticker(“MSFT”) msft hist = msft.history(period=”max”) hist 123 Сначала создаётся объект «msft» класса Ticker из модуля yfinance, который предоставляет возможность получать данные о финансовых инструментах с использованием API Yahoo Finance. В данном случае мы указываем символ тикера «MSFT»4 для акций Microsoft. Затем вызывается метод «history» объекта «msft», который позволяет получить исторические данные о ценах акций. В данном случае мы указываем аргумент «period» со значением «max», чтобы получить данные за всю доступную историю. Результатом выполнения кода будет объект «hist», содержащий исторические данные о ценах акций Microsoft (рисунок 213). Рисунок 213. Исторические данные о ценах акций Microsoft Визуализация информации (построение графиков) Рассмотрим простые инструменты построения графиков в Python, например библиотеку Matplotlib: hist[‘Close’].plot(figsize=(30, 8)) plt.show() 4 Тикеры компаний можно посмотреть на официальном сайте https:// finance.yahoo.com 124 Сначала вызывается метод «plot» для объекта «hist[‘Close’]». Этот метод позволяет построить график на основе данных о ценах закрытия акций, которые содержатся в столбце «Close» объекта «hist». Аргумент «figsize=(30, 8)» указывает размеры графика — ширина 30 и высота 8. Затем вызывается функция «plt.show()», которая отображает построенный график. В результате выполнения кода будет показан график, отображающий изменение цен закрытия акций Microsoft на протяжении всей доступной истории (рисунок 214, см. с. 124). Можно выгрузить котировки нескольких компаний: tickers_list = [‘AAPL’, ‘MSFT’, ‘IBM’] data = pd.DataFrame(columns=tickers_list) for ticker in tickers_list: data[ticker] = yf.download(ticker,’2016-01-01’,’2023-02-01’)[‘Close’] data.head() Код создаёт список tickers_list, содержащий тикеры акций, которые будут использоваться для загрузки данных. В данном случае используются тикеры ‘AAPL’, ‘MSFT’ и ‘IBM’. Затем создаётся пустой DataFrame с именами столбцов, соответствующими тикерам акций из списка tickers_list. Для этого используется функция pd.DataFrame(columns=tickers_list). Затем в цикле for происходит загрузка данных для каждого тикера акции из списка tickers_list. Для этого используется функция yf.download(ticker,’2016-01-01’,’2023-02-01’) [‘Close’], которая загружает данные о закрытии цены акции для указанного тикера и указанного временного периода. Загруженные данные добавляются в столбец соответствующего тикера акции в DataFrame data. Наконец, вызов функции data.head() выводит первые 5 строк DataFrame data, чтобы проверить правильность загрузки данных (рисунок 215). 125 126 Рисунок 214. Изменение цен закрытия акций Microsoft. Рисунок 215. Вызов функции data.head() Расчёт доходности акций Доходность акций представляет собой процентное изменение стоимости акции за один торговый день. Оно не учитывает дивиденды и комиссии. Его легко рассчитать, используя функцию pct_change () из пакета Pandas. Как правило, используют лог доходность, так как она позволяет лучше понять и исследовать изменения с течением времени5. Рассмотрим на другом примере расчёт доходности акций6: sber = yf.download(‘SBER.ME’,’2016-01-01’, ‘2023-02-01’) sber[‘Adj Close’].plot(figsize=(20, 8)) plt.show() # Скорректированая цена закрытия daily_close = sber[[‘Adj Close’]] # Дневная доходность daily_pct_change = daily_close.pct_change() # Заменить NA значения на 0 daily_pct_change.fillna(0, inplace=True) print(daily_pct_change.head()) # Дневная лог доходность daily_log_returns = np.log(daily_close.pct_change()+1) print(daily_log_returns.head()) 5 6 URL: https://habr.com/ru/post/492364/ (дата обращения: 02.08.2023). Акции российских компаний доступны к загрузке до 01.02.2023. 128 Рисунок 216. Результатом работы кода будет график скорректированной цены закрытия акций (рисунок 216) и таблица с дневным логом доходности. È­ãÒĆÈiÓËmÓº®ãºĄąº²ºąÓº°ÒÈ}ĆÒ®k|v­Ë¯ Adj Close Date 2016-01-04 0.000000 2016-01-05 0.008979 2016-01-06 -0.020629 2016-01-11 -0.060093 2016-01-12 0.007470 Adj Close Date 2022-05-18 -0.020802 2022-05-19 0.003829 2022-05-20 0.000000 2022-05-23 0.000000 2022-05-24 0.000000 Функция pct_change () удобна для использования, но в свою очередь скрывает то, как получается значение. Схожее вычисление, которое поможет понять механизм, можно выполнить при помощи shift() из пакета Pandas. Дневная цена закрытия делится на прошлую (сдвинутую на один) цену, и из полученного значения вычитается единица. Но есть один незначительный минус — первое значение в результате получается NA. Например, вычисление доходности с помощью shift() будет выглядеть следующим образом: daily_pct_change = daily_close / daily_close.shift(1) — 1 print(daily_pct_change.head()) Результат выполнения кода: Adj Close Date 2016-01-04 NaN 129 2016-01-05 0.008979 2016-01-06 -0.020629 2016-01-11 -0.060093 2016-01-12 0.007470 Вывод диаграммы доходности возможен с помощью стандартной библиотеки matplotlib. # Диаграмма `daily_pct_c` daily_pct_change.hist(bins=50, figsize=(10, 5)) plt.show() # Общая статистика print(daily_pct_change.describe()) Результат выполнения кода (рисунок 217). Рисунок 217. Гистограмма доходности акций ПАО Сбер È­ãÒĆÈ|¹Ò°ÈËãĉÓÈ«°ÈÒ°Ò}Èąº²ºąÓº°ÒÈ}ĆÒ® k|v­Ë¯ Adj Close count 1586.000000 mean 0.000801 std 0.023736 130 min 25% 50% 75% max -0.466825 -0.008786 0.000333 0.011196 0.160000 Из описательной статистики доходности акций ПАО Сбер можно сделать следующие выводы: 1. Среднее значение доходности акций составляет 0.000801, что означает, что в среднем доходность акций ПАО Сбер является положительной и небольшой. 2. Стандартное отклонение доходности акций равно 0.023736, что говорит о высокой изменчивости доходности акций ПАО Сбер. 3. Минимальное значение доходности акций составляет 0.466825, что указывает на возможность появления значительных отрицательных доходностей. 4. Значение первого квартиля (25%) доходности акций составляет 0.008786, что означает, что 25% значений доходности акций ниже этого значения. 5. Значение медианы (50%) доходности акций составляет 0.000333, что означает, что половина значений доходности акций выше этого значения, а другая половина — ниже. 6. Значение третьего квартиля (75%) доходности акций составляет 0.011196, что означает, что 75% значений доходности акций ниже этого значения. 7. Максимальное значение доходности акций составляет 0.160000, что указывает на возможность появления значительных положительных доходностей. Таким образом, описательная статистика доходности акций ПАО Сбер позволяет сделать вывод, что доходность акций является небольшой и изменчивой с возможностью появления как значительных положительных, так и отрицательных значений. Расчет меры систематического риска акций Коэффициент бета является мерой систематического риска акции или портфеля акций относительно рыночного риска. Он показывает, насколько изменяется доходность ак131 ции (или портфеля акций) при изменении доходности рыночного индекса. Коэффициент бета можно рассчитать с помощью регрессионного анализа, где доходность акции (или портфеля акций) является зависимой переменной, а доходность рыночного индекса — независимой переменной. Регрессионный анализ позволяет определить наклон линии тренда (коэффициент наклона), который и является коэффициентом бета. Значение коэффициента бета может быть положительным или отрицательным. Положительное значение указывает на положительную корреляцию между доходностью акции (или портфеля акций) и доходностью рыночного индекса, то есть акция движется в том же направлении, что и рынок в целом. Отрицательное значение указывает на отрицательную корреляцию, то есть акция движется в противоположном направлении по отношению к рынку. Коэффициент бета позволяет инвесторам оценить, насколько акция или портфель акций будет реагировать на изменения рыночной ситуации. Более высокий коэффициент бета указывает на более чувствительную акцию (или портфель акций) к рыночным факторам, что может повлечь за собой как большие потенциальные доходности, так и большие потенциальные потери. Рассмотрим подробнее на примере расчет коэффициента бета7: #Загрузка данных ticker = [‘SBER.ME’,’IMOEX.ME’] stock = yf.download(ticker) # Выделение скорректированной цены закрытия all_adj_close = stock[[‘Adj Close’]] # Вычисление доходности all_returns = np.log(all_adj_close / all_adj_close.shift(1)) # Выделение доходности по акциям sber_returns = all_returns[‘Adj Close’][[‘SBER.ME’]].fillna(0) 7 Источник: 02.08.2023). 132 https://habr.com/ru/post/496810/ (дата обращения: # Выделение доходности по индексу МосБиржи moex_returns = all_returns[‘Adj Close’][[‘IMOEX.ME’]].fillna(0) moex_returns.dropna(inplace=True) sber_returns.dropna(inplace=True) # Создание нового DataFrame return_data = pd.concat([sber_returns, moex_returns], axis=1)[1:] return_data.columns = [‘SBER.ME’, ‘IMOEX.ME’] # Добавляем столбец единиц и определяем X и y X = sm.add_constant(return_data[‘IMOEX.ME’]) y = return_data[‘SBER.ME’] # Создание модели model_moex = sm.OLS(y,X).fit() # Вывод результатов print(model_moex.summary()) Сначала в коде определяем список тикеров, в данном случае [‘SBER.ME’,’IMOEX.ME’]. Затем с помощью функции yf.download() загружаются данные по акциям из указанных тикеров. В переменной all_adj_close сохраняются только значения скорректированной цены закрытия. Затем с помощью функции np.log() рассчитывается логарифмическая доходность для каждой акции. В переменных sber_ returns и moex_returns сохраняются только значения доходности акции SBER.ME и доходности рыночного индекса IMOEX.ME соответственно. Далее удаляются строки с пропущенными значениями и объединяются данные в один DataFrame return_data. Далее создается матрица X, состоящая из столбца с константой и столбца с доходностью рыночного индекса IMOEX.ME. В переменной y сохраняются значения доходности акции SBER.ME. С помощью функции sm.OLS() строится модель линейной регрессии, где зависимая переменная — доходность акции SBER.ME, а независимая переменная — доходность ры133 ночного индекса IMOEX.ME. Метод.fit() применяется для подгонки модели к данным. Наконец, с помощью функции .summary() выводится сводка результатов регрессионного анализа, включая значение коэффициента бета и другие статистические показатели модели. Вывод результатов работы кода: [*********************100%***********************] 2 of 2 completed OLS Regression Results ========================================================================== ==== Dep. Variable: SBER.ME R-squared: 0.160 Model: OLS Adj. R-squared: 0.160 Method: Least Squares F-statistic: 554.3 Date: Sat, 29 Jul 2023 Prob (F-statistic): 2.41e-112 Time: 04:26:05 Log-Likelihood: 5301.3 No. Observations: 2914 AIC: 1.060e+04 Df Residuals: 2912 BIC: 1.059e+04 Df Model: 1 Covariance Type: nonrobust ========================================================================== ==== coef std err t P>|t| [0.025 0.975] ----------------------------------------------------------------------------const 0.0001 0.001 0.184 0.854 -0.001 0.002 IMOEX.ME 1.1782 0.050 23.544 0.000 1.080 1.276 ========================================================================== ==== Omnibus: 1494.845 Durbin-Watson: 3.252 Prob(Omnibus): 0.000 Jarque-Bera (JB): 25132982.790 Skew: 0.249 Prob(JB): 0.00 Kurtosis: 457.970 Cond. No. 68.8 Коэффициент бета (beta) можно найти в таблице результатов регрессии. В данном случае, коэффициент бета для акции SBER.ME относительно доходности рыночного индекса IMOEX.ME равен 1.1782. Это означает, что при изменении доходности рыночного индекса на 1%, доходность акции SBER.ME ожидает изменения примерно на 1.1782%. 134 Подбор оптимального портфеля Для подбора оптимального портфеля акций воспользуемся библиотекой PyPortfolioOpt. PyPortfolioOpt с это библиотека на языке Python, которая предоставляет инструменты для оптимизации и анализа портфелей инвестиций. Она разработана для помощи инвесторам и финансовым аналитикам в принятии решений о распределении активов в портфеле с целью достижения максимальной доходности или минимального риска. Основные возможности библиотеки PyPortfolioOpt включают: 1. Оптимизация портфеля: PyPortfolioOpt предоставляет различные методы оптимизации, такие как максимизация доходности при заданном уровне риска или минимизация риска при заданной доходности. Эти методы позволяют найти оптимальное распределение активов в портфеле, учитывая ограничения, такие как минимальный или максимальный вес каждого актива. 2. Анализ риска: предоставляет инструменты для анализа риска портфеля, такие как вычисление волатильности и коэффициента Шарпа. Это позволяет оценить потенциальную доходность и риск портфеля и сравнить его с другими инвестиционными стратегиями. 3. Управление ограничениями: PyPortfolioOpt позволяет задавать различные ограничения для портфеля, такие как минимальный или максимальный вес актива, ограничения на сумму инвестиций или наличие ограничений на корреляцию между активами. Это помогает учитывать различные факторы и ограничения при оптимизации портфеля. 4. Визуализация результатов: библиотека предоставляет инструменты для визуализации результатов оптимизации портфеля, такие как построение эффективного фронтара (efficient frontier), графиков доходности и риска, а также графиков распределения активов в портфеле. 5. Интеграция с другими библиотеками: PyPortfolioOpt может быть легко интегрирована с другими популярными 135 библиотеками Python, такими как pandas (для работы с данными), numpy (для вычислений) и matplotlib (для визуализации). Библиотека PyPortfolioOpt является мощным инструментом для оптимизации и анализа портфелей инвестиций, который может быть использован как начинающими инвесторами, так и профессиональными финансовыми аналитиками. Она предоставляет широкий набор функций и возможностей для оптимизации портфеля и анализа риска, что помогает принимать более обоснованные инвестиционные решения. Для подбора портфеля необходимы уже знакомые нам библиотеки: import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm Установка модуля yfinance для быстрой загрузки котировок акций. pip install yfinance import yfinance as yf Установка PyPortfolioOpt. pip install PyPortfolioOpt Создаем список тикеров-перспективных акций компаний, которые отобраны по результатам фундаментального анализа. Анализ фин. отчетности рассмотрим в следующем разделе. tickers_list = [‘AAPL’, ‘MSFT’, ‘AMZN’, ‘BRK-A’, ‘META’, ‘NVDA’, ‘GOOG’, ‘TSLA’, ‘IBM’] Затем создаем пустой DataFrame (data) с колонками, соответствующими акциям из списка. data = pd.DataFrame(columns=tickers_list) Далее происходит загрузка данных по каждой акции с помощью функции yf.download() из библиотеки yfinance. for ticker in tickers_list: data[ticker] = yf.download(ticker,’2014-01-01’,’2023-06-01’)[‘Adj Close’] data.tail() 136 Результат работы кода: Получаем информацию о сформированном датафреме: data.info() Результат работы кода <class ‘pandas.core.frame.DataFrame’> DatetimeIndex: 2369 entries, 2014-01-02 to 2023-05-31 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----0 AAPL 2369 non-null float64 1 MSFT 2369 non-null float64 2 AMZN 2369 non-null float64 3 BRK-A 2369 non-null float64 4 META 2369 non-null float64 5 NVDA 2369 non-null float64 6 GOOG 2369 non-null float64 7 TSLA 2369 non-null float64 8 IBM 2369 non-null float64 dtypes: float64(9) Смотрим описательную статистику data.describe() 137 Результат работы кода: После считывания исторических цен в pandas dataframe df нужно выбрать один из доступных методов оценки ожидаемой доходности и ковариационной матрицы. Разумными по умолчанию являются :py:func:expected_ returns.mean_historical_return() и оценка ковариационной матрицы по методу Ледойта-Вольфа, найденная в :py:class:risk_models.CovarianceShrinkage. from pypfopt.expected_returns import mean_historical_return from pypfopt.risk_models import CovarianceShrinkage Сначала вычисляются ожидаемые доходности (mu) и матрица ковариации (s) с помощью функций mean_historical_return() и CovarianceShrinkage() из библиотеки PyPortfolioOpt. mu = mean_historical_return(data) s = CovarianceShrinkage(data).ledoit_wolf() Затем ожидаемые доходности сортируются по убыванию и выводятся на экран. mu.sort_values(ascending=False) Результат выполнения кода: NVDA 0.634367 TSLA 0.378233 MSFT 0.283688 AAPL 0.280464 AMZN 0.211345 META 0.182680 GOOG 0.172187 BRK-A 0.114428 IBM 0.008057 dtype: float64 138 Матрица ковариации портфеля выглядит следующим образом: print(s) Оптимизация средней дисперсии Оптимизация средней дисперсии основана на классической работе Гарри Марковица 1952 года8, которая положила начало превращению управления портфелем из искусства в науку. Основная идея заключается в том, что, комбинируя активы с различной ожидаемой доходностью и волатильностью, можно выбрать математически оптимальное распределение. Если w — это весовой вектор акций с ожидаемой доходностью \mu, то доходность портфеля равна весу каждой акции, умноженному на её доходность, т.е. w^T \mu. Риск портфеля в терминах ковариационной матрицы \Sigma дается w^T \Sigma w. Оптимизация портфеля может рассматриваться как выпуклая оптимизационная задача, и решение может быть найдено с помощью квадратичного программирования. Если обозначить целевую доходность как \mu^*, то точная постановка задачи оптимизации долгосрочного портфеля выглядит следующим образом9 (рисунок 218). 8 Markowitz H.M. Portfolio Selection: Efficient Diversification of Investment. Wiley. New York, 1959. 9 URL: https://habr.com/ru/articles/561980/ (дата обращения: 02.08.2023). 139 Рисунок 218. Эффективная граница рынка Если мы варьируем целевую доходность, мы получим другой набор весов (т.е. другой портфель) — набор всех этих оптимальных портфелей называется эффективной границей. Каждая точка на этой диаграмме представляет различные возможные портфели, причем более тёмный синий цвет соответствует «лучшим» портфелям (с точки зрения коэффициента Шарпа). Пунктирная чёрная линия — это сама эффективная граница. Треугольные маркеры представляют лучшие портфели для различных целей оптимизации. Коэффициент Шарпа — это доходность портфеля, превышающая безрисковую ставку, на единицу риска (волатильности). SR \frac{R_P R_f}{\sigma} Он особенно важен, поскольку измеряет доходность портфеля с поправкой на риск. Поэтому на практике, вместо того чтобы пытаться минимизировать волатильность при 140 заданной целевой доходности (как Марковиц 195210), часто имеет смысл просто найти портфель, который максимизирует коэффициент Шарпа. Это реализовано в виде метода :py:meth:max_sharpe в классе :py:class:EfficientFrontier. Используем серию mu и S. Далее создается объект EfficientFrontier, который используется для оптимизации портфеля. С помощью метода max_sharpe() вычисляются оптимальные веса активов в портфеле, которые сохраняются в переменную weights. from pypfopt.efficient_frontier import EfficientFrontier ef = EfficientFrontier(mu, s) weights = ef.max_sharpe() print(weights) Результат работы кода: OrderedDict([(‘AAPL’, 0.1544112607559805), (‘MSFT’, 0.1714762274220133), (‘AMZN’, 0.0), (‘BRK-A’, 0.0), (‘META’, 0.0), (‘NVDA’, 0.6523621436165018), (‘GOOG’, 0.0), (‘TSLA’, 0.0217503682055044), (‘IBM’, 0.0)]) Веса, которые вывелись, выглядят разрозненно, поскольку это будет необработанный вывод оптимизатора. Поэтому рекомендуется использовать метод clean_ weights, который усекает крошечные веса до нуля и округляет остальные: cleaned_weights = ef.clean_weights() print(cleaned_weights) Результат работы кода: OrderedDict([(‘AAPL’, 0.17951), (‘MSFT’, 0.14369), (‘AMZN’, 0.0), (‘BRK-A’, 0.0), (‘META’, 0.0), (‘NVDA’, 0.62789), (‘GOOG’, 0.0), (‘TSLA’, 0.0489), (‘IBM’, 0.0)]) 10 Markowits Harry M. Portfolio Selection // Journal of Finance. 1952. 7. № 1. Р. 71–91. 141 Результаты подбора весов можно сохранить в файл «weights.txt» ef.save_weights_to_file(“weights.txt”) Если мы хотим узнать ожидаемую доходность портфеля с оптимальными весами w, мы можем использовать метод portfolio_performance: ef.portfolio_performance(verbose=True) Результат работы кода: Expected annual return: 48.1% Annual volatility: 36.3% Sharpe Ratio: 1.27 (0.48063238461834884, 0.3634910806673925, 1.2672453579124934) Также возможно преобразовать веса в фактическое распределение, указав, сколько акций каждого актива следует приобрести. Рассмотрим на примере. Создается объект DiscreteAllocation, который используется для распределения дискретных активов в портфеле. С помощью метода lp_portfolio() происходит распределение активов и выводится результат на экран. from pypfopt.discrete_allocation import DiscreteAllocation, get_latest_prices latest_prices = get_latest_prices(data) da = DiscreteAllocation(cleaned_weights, latest_prices, total_portfolio_ value=20000) allocation, leftover = da.lp_portfolio() print(allocation) Результат работы кода: {‘MSFT’: 11, ‘AMZN’: 5, ‘META’: 2, ‘NVDA’: 46, ‘GOOG’: 5, ‘TSLA’: 6, ‘IBM’: 4} Таким образом, в рамках оптимального портфеля с учётом текущих цен при портфеле в 20 000 долларов возможно купить 46 акций NVDA, 11 — MSFT, 6 — TSLA, 5 — GOOG, 4 — IBM, 2 — META. 142 Работа с финансовой отчетностью c использованием библиотеки yfinance11 Рассмотрим на конкретном примере Microsoft работу с фин. отчетностью. После установки всех необходимых библиотек, которые вы уже умеете устанавливать и импортировать, загружаем данные для акции MSFT с помощью библиотеки yfinance. Объект msft представляет собой экземпляр класса Ticker, который предоставляет различные методы для работы с данными акции. msft = yf.Ticker(“MSFT”) info = msft.info Получить общую и часто используемую информацию о компании мы можем с помощью метода info, который возвращает словарь. info.keys() dict_keys([‘address1’, ‘city’, ‘state’, ‘zip’, ‘country’, ‘phone’, ‘fax’, ‘website’, ‘industry’, ‘industryDisp’, ‘sector’, ‘longBusinessSummary’, ‘fullTimeEmployees’, ‘companyOfficers’, ‘auditRisk’, ‘boardRisk’, ‘compensationRisk’, ‘shareHolderRightsRisk’, ‘overallRisk’, ‘governanceEpochDate’, ‘compensationAsOfEpochDate’, ‘maxAge’, ‘priceHint’, ‘previousClose’, ‘open’, ‘dayLow’, ‘dayHigh’, ‘regularMarketPreviousClose’, ‘regularMarketOpen’, ‘regularMarketDayLow’, ‘regularMarketDayHigh’, ‘dividendRate’, ‘dividendYield’, ‘exDividendDate’, ‘payoutRatio’, ‘fiveYearAvgDividendYield’, ‘beta’, ‘trailingPE’, ‘forwardPE’, ‘volume’, ‘regularMarketVolume’, ‘averageVolume’, ‘averageVolume10days’, ‘averageDailyVolume10Day’, ‘bid’, ‘ask’, ‘bidSize’, ‘askSize’, ‘marketCap’, ‘fiftyTwoWeekLow’, ‘fiftyTwoWeekHigh’, ‘priceToSalesTrailing12Months’, ‘fiftyDayAverage’, ‘twoHundredDayAverage’, ‘trailingAnnualDividendRate’, ‘trailingAnnualDividendYield’, ‘currency’, ‘enterpriseValue’, ‘profitMargins’, ‘floatShares’, ‘sharesOutstanding’, ‘sharesShort’, ‘sharesShortPriorMonth’, ‘sharesShortPreviousMonthDate’, ‘dateShortInterest’, ‘sharesPercentSharesOut’, ‘heldPercentInsiders’, 11 URL: https://pypi.org/project/yfinance/; https://analyzingalpha.com/ yfinance-python (дата обращения: 02.08.2023). 143 ‘heldPercentInstitutions’, ‘shortRatio’, ‘shortPercentOfFloat’, ‘impliedSharesOutstanding’, ‘bookValue’, ‘priceToBook’, ‘lastFiscalYearEnd’, ‘nextFiscalYearEnd’, ‘mostRecentQuarter’, ‘earningsQuarterlyGrowth’, ‘netIncomeToCommon’, ‘trailingEps’, ‘forwardEps’, ‘pegRatio’, ‘lastSplitFactor’, ‘lastSplitDate’, ‘enterpriseToRevenue’, ‘enterpriseToEbitda’, ‘52WeekChange’, ‘SandP52WeekChange’, ‘lastDividendValue’, ‘lastDividendDate’, ‘exchange’, ‘quoteType’, ‘symbol’, ‘underlyingSymbol’, ‘shortName’, ‘longName’, ‘firstTradeDateEpochUtc’, ‘timeZoneFullName’, ‘timeZoneShortName’, ‘uuid’, ‘messageBoardId’, ‘gmtOffSetMilliseconds’, ‘currentPrice’, ‘targetHighPrice’, ‘targetLowPrice’, ‘targetMeanPrice’, ‘targetMedianPrice’, ‘recommendationMean’, ‘recommendationKey’, ‘numberOfAnalystOpinions’, ‘totalCash’, ‘totalCashPerShare’, ‘ebitda’, ‘totalDebt’, ‘quickRatio’, ‘currentRatio’, ‘totalRevenue’, ‘debtToEquity’, ‘revenuePerShare’, ‘returnOnAssets’, ‘returnOnEquity’, ‘grossProfits’, ‘freeCashflow’, ‘operatingCashflow’, ‘earningsGrowth’, ‘revenueGrowth’, ‘grossMargins’, ‘ebitdaMargins’, ‘operatingMargins’, ‘financialCurrency’, ‘trailingPegRatio’]) Все эти ключи содержат важную информацию о компании, и мы можем получить доступ к этим данным с помощью словаря. info[‘freeCashflow’] Результат 42 964 873 216 Можно выгрузить все данные по ключам в одну таблицу: df_info = pd.DataFrame([info]) df_info = df_info[list(info.keys())] # Выбираем все ключи словаря df_info Результат работы кода: 144 Выгрузка финансовой отчётности. С помощью библиотеки yfinance можно выгружать основные формы отчётности: Баланс: balance_sheet = yf.Ticker(“MSFT”).get_balance_sheet() balance_sheet Результат работы кода: Отчёт о прибылях и убытках: msft.income_stmt Результат работы кода: 145 Отчёт о движении денежных средств: msft.cashflow Результат работы кода: Мы также можем объединить все финансовые отчёты для более простого расчёта коэффициентов. pnl = msft.income_stmt bs = msft.balance_sheet cf = msft.cashflow fs = pd.concat([pnl,bs,cf]) fs 146 Расчёт финансовых коэффициентов На основе построенной сводной таблицы по финансовой отчётности возможно рассчитать различные коэффициенты. Пример расчёта рентабельности продаж по чистой прибыли: net_income = fs.loc[“Net Income”] revenue = fs.loc[“Total Revenue”] profitability_ratio = net_income / revenue profitability_ratio Результат работы кода: Пример расчёта коэффициента финансовой независимости: equity = fs.loc[“Stockholders Equity”] total_assets = fs.loc[“Total Assets”] financial_autonomy_ratio = equity / total_assets financial_autonomy_ratio Результат работы кода: 147 Пример расчёта оборачиваемости активов: average_total_assets = (fs.loc[“Total Assets”] + fs.loc[“Total Assets”]. shift(1)) / 2 revenue = pnl.loc[“Total Revenue”] asset_turnover_ratio = revenue / average_total_assets asset_turnover_ratio Результат работы кода: Пример расчёта коэффициента текущей ликвидности: current_assets = fs.loc[“Current Assets”] current_liabilities = fs.loc[“Current Liabilities”] liquidity_ratio = current_assets / current_liabilities liquidity_ratio Результат работы кода: 2.3. Приложения NLP в управлении активами В настоящем параграфе приводятся примеры кода при работе алгоритмов NLP. NLP — natural language processing: технологии машинного обучения по обработке естественного языка. К 260 000 заголовкам новостной ленты Apple с октября 2019 г. по сентябрь 2022 г. применяется алгоритм BERTopic для вывода заголовков новостей — темы новости. Так как темы были созданы с применением программы, были определены их метки. Определены важные ключевые слова: «SP», «500», «Nasdaq» и «Dow». В теме «Covid» есть ссылки на «инфекцию», «контакт» и «отслеживание». Расшифровка интуитивно понятных и интерпретируемых тем из вывода BERTopic является важным шагом при использовании инструментов для моделирования. Ниже приводится код для экстракции ключевых слов. 148 Загрузка последовательности новостных заголовков Apple Расчет встроенных заголовков и создание временных кластеров. Визуализация пяти временных заголовков. ºÒ°}}ãĊćËm©²ËämË}°È² ÈãĄº¯ÒäÈäÒ1/3 Тематическое моделирование может дать хороший обзор множества документов, инвесторы могут быть заинтересованы в извлечении соответствующих разделов или целе149 вых точек данных из конкретных документов. Ниже приводится пример решения этих задач с использованием текстов по экологическим, социальным и управленческим (ESG) аспектам. Поскольку стратегии, ориентированные на ESG, стали сейчас мейнстримом, управляющие активами ищут способы оценивать деятельность своих инвестиционных компаний, связанную с ESG, и следить за их продвижением к поставленным целям. Используются отчёты о корпоративной и социальной ответственности (КСО) компаниями для информирования об их усилиях в области ESG и их воздействии на окружающую среду и общество. Эти отчеты описывают отношения компании со всем спектром заинтересованных сторон: сотрудниками, клиентами, сообществами, поставщиками, правительствами и акционерами. Хотя в настоящее время корпорации не обязаны публиковать отчёты о КСО, ежегодно более 90% компаний из S&P 500 Индекса делают это. В следующем примере анализируются предложения из отчета CSR в автомобильной промышленности и используется модель семантического поиска, которая использует предварительно определённые ключевые слова для ранжирования и выбора проанализированных предложений. В этом примере выполняется поиск предложений, связанных с «GHG» «Выбросы парниковых газов». Мы вставляем эту фразу в вектор и используем его для сравнения со встроенным представлением текста документа. В нашем примере используется только одно предложение сравнения (переменная text в примере кода ниже) для простоты, но мы можем применить тот же процесс для нескольких предложений-кандидатов. Происходит сортировка оценки сходства среди всех текстов, а затем выбираются наиболее похожие. ~ÈĄ¯Ï}ȹÈ}˺mÒ86(äºąËãÒ: 150 Спецификация ключевого слова и расчёт вложений: Расчёт косинусного сходства: Печать результатов: Хотя поиск релевантного и связанного текста улучшает как эффективность, так и компетентность исследователей, более прямые подходы к сужению ответов на вопросы могут быть ещё более эффектным. Ответ на вопрос разработан именно для этой цели. Цель количественного анализа — построить системы, которые автоматически извлекают ответы из заданного свода вопросов, придуманных людьми на естественном языке. В следующем примере мы озадачиваемся вопросом «Какова цель к 2035 году?» и используем репрезентативный подход из отчёта CSR в модели RoBERTa (Liu et al. 2019), которая является оптимизированной моделью, использующей BERT. Модель может извлекать точный ответ из отрывка — «источник 100% возобновляемой энергии во всем мире» — таким образом прямо отвечая на исходный вопрос. В реальных примерах, отрывках и документах тексты намного длиннее, но тот же подход можно использовать для поиска лучшего ответа на вопрос. 151 Эти методы имеют широкое применение в активе индустрии управления инвестициями, активно используются аналитиками, риск-менеджерами. Комплаенс-менеджеры и оперативный персонал постоянно проверяют документы на наличие ключевых цифр и конкретных показателей на эту тему внутри документов. Примеры включают анализ финансового отчёта, мониторинг нормируемой ESG отчётности. Хотя описанные инструменты могут быть чрезвычайно мощными, они нуждаются в тщательной калибровке и тонкой настройке, прежде чем их можно будет широко использовать в отрасли финансовых услуг. По нашему опыту, создание последовательности для извлечения соответствующих разделов перед процессом обеспечения качества, как и при предшествующем использовании, имеет важное значение для успеха. Этот шаг гарантирует удачный поиск в соответствующих разделах документа. ~ÈĄ¯Ï}ȹÈ}˺mÒ5R%(57DäºąËãË®: Уточнение запроса, текста, расчёт встроенных входящих параметров, токенизация: Заливка входных переменных в модель и поиск ответа на поставленный вопрос: 152 Печать результатов: ºÒ°}¯Ò°}ºm}ºä¹ÈÓÒÒmË}°È²ÁÈ®ãºm Ò°°ãËąË亮}ºä¹ÈÓÒÒ В нижеописанном коде анализируются фактические тексты и используемый в документах для раскрытия информации об инвестициях язык. С помощью кода мы сканируем корпоративные документы на наличие потенциальных рисков, используя методы анализа текста. Поскольку ценные бумаги и биржа Комиссия (SEC) требует от публично торгуемых компаний подавать отчёты, раскрывающие их финансовое положение, инвесторы могут анализировать эти отчёты на наличие существенной информации, изменения, тенденции. В статье 2019 года известных исследователей искусственного интеллекта Коэна, Маллоя и Нгуена было написано, что они обнаружили, что значительные изменения в последовательных 10-K отчёах, которые подаются в комиссию США по Фондовому рынку, содержится негативная информация о будущей деятельности фирмы. Файлы отчётности по форме 10-K, как правило, длинные и сложные, в них используются методы NLP для систематического извлечения информации, что может значительно улучшить сравнение годовых темпов прироста. Коэн с соавторами использовал несколько наборов слов, подходов к измерению изменений в документах, в том числе косинусное сходство между векторами, представляющими документы. В следующем коде используется doc2vec (обобщенная версия word2vec, представляет целые документы в виде векторов) для моделирования текстов изменений настрое153 ний руководства при обсуждении и анализе раздела MD&A в формах 10-К. Корпоративные документы, в том числе отчеты по форме 10-K, могут быть извлечены с сайта SEC. Извлекается текст из раздела MD&A, а doc2vec используется для представления текста в каждом из списков. В частности, слова в разделах MD&A представлены числовыми векторами с помощью алгоритма doc2vec. Чтобы оценить изменения в годовом исчислении, мы вычисляем косинусное сходство двух векторов, представляющих последовательные заявки. Высокое косинусное сходство предполагает текст из двух заявок. В основном то же самое, тогда как низкое косинусное сходство предполагает существенные различия в основных отчетах. |­¯ÈÏËĆ}ºąÈÛº¹¯ËąËãËÓÒËÒÏäËÓËÓÒ®m}º¯¹º¯È ÒmÓ©²ąº}äËÓȲ: Загрузка пакетов: Подготовка информации: Обучение модели doc2vec на обучающей выборке: 154 Получение результатов на входящих данных: Расчёт косинусного сходства и печать результатов: Типичный длинно-короткий бэктест можно использовать для определения предсказательной эффективности функции NLP. Нижеприведённый рисунок показывает выполнение ежемесячно ребалансируемой длинной и короткой стратегии с длинной стратегией, представленной компаниями с наиболее схожими год к году документами и короткой — с различающимися документами. Бэктест показывает убедительные результаты на протяжении всего периода обучения, с самыми сильными результатами за последние годы. Результаты показывают, что простые расчёты с использованием векторных представлений документов могут выявить риски и возможности, связанные с корпоративными документами. Процесс NLP в этом примере cчитывает документы и ищет отличия в тексте, подражая работе, обычно выполняемой исследователямианалитиками. Результаты работы алгоритма по поиску сходства для компаний с большой капитализацией в США (2004– 2019 гг.) представлены на рисунке 219. 155 Рисунок 219. Эффективность алгоритма по поиску сходства для компаний с большой капитализацией в США, 2004–2019 гг. Источник: AllianceBernstein. |­«mãËÓÒ«º¹¯Ò­©ã«²Û}È}Ò°ºćÓÒ}¯È°ĈÒ¯ËÓÒ« ÒÓÁº¯äÈĆÒÒºąº²ºąÈ²}ºä¹ÈÓÒ® Объявления о прибылях (earnings calls) — телеконференция или веб-трансляция, в ходе которой публичная компания обсуждает финансовые результаты отчётного периода. Стенограммы таких конференций — база для NLP анализа. Объявления о прибылях (earnings calls) предоставляют компаниям форму для передачи важной финансовой и деловой информации для инвестиционного сообщества и общественности. Аналитики изучают индивидуальные звонки в поисках информации о деятельности компании, но для широкого покрытия это требует много времени и подвержено ошибкам. Инструменты NLP-анализа могут быть результативно использованы в этом случае и эффективно решать эти проблемы. Звонки о доходах обычно состоят из раздела презентации и раздела вопросов и ответов (Q&A). Руководители компании являются единственными участниками первой секции, тогда как и корпоративные руководители, и аналитики из инвестиционного сообщества взаимодействуют во время ведения раздела вопросов и ответов. Инвестиционные сигналы можно полу156 чать на разных стадиях и от разного типа выступающих, а именно: от генеральных директоров, других руководителей и аналитиков, чтобы изучить потенциальные различия между ними. Различные подходы NLP могут быть использованы для генерации инвестиционных сигналов из расшифровок телефонных разговоров о прибылях и убытках. Распространены подходы «мешок слов» с использованием предопределённых словарей и языковых моделей, методы c управляемым контекстом. В коде в ходе анализа расшифровок описывается три категории функций: атрибуты документов, оценка удобочитаемости и оценки тональности. Атрибуты документа относятся к функциям, полученным из характеристик конференции. Примеры включают количество слов, предложения, вопросы и аналитику по участникам конференции. Для оценки удобочитаемости используются различные методы в зависимости от сложности текста и документа. Эти показатели имеют тенденцию сосредоточиться на двух областях: использование трудных для понимания слов и длина предложений. Легко понятные сообщения (тексты с низкими показателями удобочитаемости) могут быть быстро учтены в рыночных ценах и, следовательно, будут иметь незначительное значение и влияние на возможное неправильное ценообразование. Сложные сообщения (тексты с высокими показателями удобочитаемости) могут использоваться руководителями компаний для сокрытия плохих новостей или менее хороших результатов. Оценки настроений могут быть получены из лежащих в их основе текстах с использованием различных формулировок. Самый основной метод оценить настроение — это подсчитать количество положительных и отрицательных слов, основанных на определённом словаре, например таких как Гарвард IV-4, ВЕЙДЕР (Хатто и Гилберт, 2014 г.) и Логран-Макдональд (Loughran and McDonald 2011). Этот подход, обычно называемый «мешок слов» или словарем, интуитивно понятен и интерпретируем, но имеет ограниче157 ния. Например, он не может обрабатывать отрицание или слова, которые могут иметь разное значение в разных условиях. Языковые модели, управляемые контекстом, могут преодолеть проблемы подходов, основанных на словарях. С развитием передовых алгоритмов и улучшения вычислительной мощности трансформаторные модели, такие как BERT, доказали свою эффективность при кодировании и декодировании семантической и синтаксической информации естественных языков. Нижеприведённый пример кода применяет модель FinBERT (Huang, Wang, and Yang), основанную на BERT модели, предварительно обученную на финансовом тексте, для оценки настроения по серии входных предложений. ¯Òä˯ }ºąÈ º¹¯ËąËãËÓÒ« ªäºĆÒºÓÈãĉÓº® ºÓÈãĉ Óº°ÒË}°È Загрузка пакетов и модели FinBERT: Определение настроений в предложениях: 158 Проверка результатов: Для стабильной работы кода требуется распознавание именованных объектов (named entity recognition). Распознавание именованных объектов (named entity recognition) относится к задаче идентификации юридического лица (лицо, место, страна, компания, финансовый инструмент и т. д.) в документах. Для этого используется следующий код. В нём применяется простой пример использования spaCy для идентификации различных признаков в заголовке новости. Загрузка пакетов и модели: Определение реквизитов текста: 159 Оценка эффективности вышеописанных алгоритмов машинного обучения приведена на рисунках 220, 221. Рисунок 220. Количество показателей NLP в разрезе рейтинга информационных уровней Источник: AllianceBernstein. Рисунок 221. Сравнение производительности подходов, основанных на контекстном управлении и на словарном управлении за 2010–2021 годы Источник: AllianceBernstein. 160 Вопросы и задания к главе 2 1. Примените команды In [76]: to_index(trade_rets). plot() и постройте график индекса доходности стратегии динамичной торговли по тренду фонда SPY. 2. Вычислите и нарисуйте график скользящей корреляции между Apple и Microsoft на протяжении одного года по коду: In [86]: pd.rolling_corr(aapl_rets, msft_ rets, 250).plot(). 3. Рассчитайте и постройте график бета-коэффициента между Apple и Microsoft за один год. Примените код: In [88]: model.beta[‘MSFT’].plot(). Коэффициент регрессии рассчитывается обычным методом наименьших квадратов. 4. Что такое выравнивание данных в Pandas? 5. Какой метод объекта позволяет выравнивать данные вручную? 6. Временные последовательности разной дискретности. Какие методы автоматически выравнивают данные рядов, лишенных какой-либо регулярности и какие используются инструменты преобразования частоты и выравнивания при совершении арифметических операций? 7. Какие существуют способы слияния исходных данных разного происхождения в Pandas? Гл а в а 3. МАШИННОЕ ОБУЧЕНИЕ И ПРИМЕНЕНИЕ DATA SCIENCE В ИНВЕСТИЦИЯХ 3.1. Машинное обучение в работе современного финансиста В последние годы машинное обучение (Machine learning — ML) стало популярным способом обработки данных в различных областях, начиная от обработки видео и рекомендаций по покупкам в интернете, обработки картинок и заканчивая автопилотами беспилотных автомобилей. Ничем не ограничивается и желание финансистов применять машинное обучение в финансах. x «Глобальный рынок финтех-технологий с искусственным интеллектом по прогнозам будет расти со среднегодовым темпом прироста 25,3% в период с 2022 по 2027 год» (по оценкам Columbus 2020). x «Опрос ИТ-руководителей в банковской сфере показал, что 85% из них нацелены на стратегию внедрения ИИ в разработку новых продуктов и услуг» (исследования Надима 2018). В настоящий момент существует определённая путаница в понятиях «искусственный интеллект» (ИИ или AI Artificial Intelligence) и «Машиное обучение» — МО (рассматривается в работах Cao 2018 и Nadeem 2018); прогнозируется, что рост машинного обучения в финансах будет намного быстрее, чем превышать рост в отрасли в целом. Перед практиками рынка стоят следующие вопросы: x Что дает машинное обучение по сравнению с традиционными методами? x Как применить машинное обучение (МО или по-английски ML — Machine learning) в финансовой сфере? Есть 162 ли специальные способы для этого? Какие существуют препятствия для этого? Применение машинного обучения при принятии инвестиционных решений: побудительные стимулы и решения. Мотивы применения ИИ в инвестициях. Машинное обучение призвано на помощь при принятии основного инвестиционного решения: как обеспечить наиболее высокую доходность инвестиций с поправкой на риск? Так как методы машинного обучения предназначены для решения задач прогнозирования и основываются на многомерных данных без какой-либо спецификации функциональной формы, то считается, что они должны быть оптимальны в прогнозировании будущих доходов от капитала. Последние научные публикации и практика применения моделей МО подтверждают это. В последние годы специалисты-практики успешно применяют алгоритмы машинного обучения для прогнозирования доходности акций. Эти алгоритмы используются сейчас во всём мире как на развитых, так и на развивающихся рынках, для крупных и компаний и для компаний с малой капитализацией, для страновых и международных инвестиционных стратегий. В целом, специалисты-практики обнаружили, что альфа-модели (коэффициент Альфа измеряет доходность актива или портфеля активов в сравнении с рынком), полученные на основе машинного обучения, лучше моделей, созданных на основе традиционных линейных моделей прогнозировании доходности собственного капитала. В дополнение к прогнозированию доходности капитала, ML используется для прогнозирования финансовых показателей, доходности. Финансовые аналитики использовали ML для прогнозирования корпоративных доходов и обнаружили, что прогнозы с применением машинного обучения значительно более точны и информативны, чем другие традиционно используемые методы прогнозирования. Другое применение машинного обучения при инвестировании в акции было разработано в ходе проведения количественных исследований Robeco. В соответствии с ним 163 в общем объеме доходов отдельно рассматривались и предсказывались доходы тех акций, которые могли бы сильнее других упасть в цене. В ходе своих инвестиционных исследований Robeco обнаружил, что методы машинного обучения позволяют лучше прогнозировать ценовые обвалы по сравнению с линейными моделями, использующими традиционные показатели, такие как коэффициент левериджа или расстояние до дефолта. Преимущество ML над другими известными количественными методами обеспечивается за счёт следующего. По мнению практиков и ученых финансистов, положительная сторона применения машинного обучения состоит в том, что алгоритмы машинного обучения не задают заранее функциональную связь между прогнозируемыми переменными: доходностью собственного капитала, будущими доходами и другими и управляющими базовыми параметрами, на которых основывается прогнозирование: показатели финансовой отчетности, данные о доходности за прошлые периоды. Алгоритмы ML не ограничены линейной формой, типичной для большинства традиционных методов. Методы машинного обучения раскрывают взаимосвязи и нелинейные отношения между исходными и прогнозируемыми переменными. {ÏÈÒ亰m«Ïĉ¹È¯Èä˯ºm¹¯ºĄÓºÏÈÒÓËãÒÓË®Ó©Ë ªÁÁË}© При прогнозировании часто возникает ситуация, когда прогнозируемый параметр не может быть выражен как линейная комбинация отдельных управляющих, входных переменных. А между самими этими переменными существует взаимозависимость. Красноречивой иллюстрацией такой ситуации является прогнозирование стоимости акции при двух входящих переменных: прибыли по отчету о финансовых результатах и наличии манипуляций с отчетностью. Манипуляции с отчетностью измеряются с помощью индекса Бениша, описан в учебном пособии Корпоративные финансы: стоимостная оценка, учебное пособие С.Ю. Богатырева, изданное в из164 дательстве РИОР, ИНФРА-М в 2018 году. Если манипуляции имеются, «выбрасывается красный флаг» — переменная становится равной единице, если нет — переменная равна нулю. При составлении алгоритма в ситуации, когда прибыль большая и «красного флага» нет, стоимость имеет линейную зависимость от прибыли, если прибыль большая, но «выброшен красный флаг», то вероятность падения стоимости становится равной 50% — рисунок 222. Рисунок 222. Иллюстрация эффекта взаимодействия между красными флажками бухгалтерского учёта и доходностью капитала Источник: Handbook of Artificial Intelligence and Big Data Applications in Investments / CFA Institute Research Foundation / 1. ON MACHINE LEARNING APPLICATIONS IN INVESTMENTS Mike Chen, PhD Head, Alternative Alpha Research, Robeco Weili Zhou, CFA Head, Quant Equity Research, Robeco. Прогнозирование на основе машинного обучения также может превзойти результаты традиционного линейного прогнозирования за счет предсказаний по моделям, основанным на нелинейных эффектах. Существует много эмпирически наблюдаемых нелинейных эффектов, которые линейные модели не могут моделировать. Например, существует нелинейная связь между спредом кредитно-дефолтного свопа (CDS) фирмы и доходности её собственного капитала, поскольку собственный капитал можно представить как встроенный колл-опцион 165 на активы фирмы, что вносит нелинейность. Этот пример иллюстрируется на рисунке 223. Рисунок 223. Нелинейная связь между спредом кредитно-дефолтного свопа (CDS) фирмы и доходности её собственного капитала Источник: Handbook of Artificial Intelligence and Big Data Applications in Investments / CFA Institute Research Foundation / 1. ON MACHINE LEARNING APPLICATIONS IN INVESTMENTS Mike Chen, PhD Head, Alternative Alpha Research, Robeco Weili Zhou, CFA Head, Quant Equity Research, Robeco. Опытным путём учёные и практики установили, что эффект взаимовлияния управляющих параметров, базовых для прогноза, составляет большую часть успеха применения ML. В тоже время проводятся исследования влияния нелинейных эффектов на эффективность моделей. Известно исследование в этой области, проведенное Гу, Келли и Ксью. В нём авторы обнаружили, что «хорошая производительность алгоритмов машинного обучения указывает на преимущество, позволяющее учитывать потенциально сложные взаимодействия между управляющими параметрами». В исследовании, сравнивающем производительность чисто линейных моделей с обобщёнными линейными моделями, авторы отмечают, что «обобщённая линейная модель… не улучшает производительность чисто линейных методов (R2 0,19%). Факт того, что этот метод использует сплайн166 функции отдельных элементов, но не включает взаимодействия между функциями, предполагает, что одномерные расширения дают мало дополнительной информации за пределами чисто линейной модели». Однако другие исследования показали, что как взаимовлияние, так и нелинейные эффекты положительно влияют на эффективность моделей машинного обучения (Abe and Nakayama, 2018; Swinkels and Хугтейлинг, 2022; Чой, Цзян и Чжан, 2022). 3.2. Показатели, инструменты и технологии машинного обучения в финансовоинвестиционной деятельности Определение взаимосвязей в потоке данных Еще одна привлекательность применения машинного обучения на финансовых рынках заключается в том, что алгоритмы ML позволяют обнаружить взаимосвязи, которые необъяснимы с позиций учёных финансистов и практиков финансового рынка. Это и есть data mining — интеллектуальный анализ данных, который традиционно терпел насмешки аналитиков из сферы количественных финансов. В профессиональной среде используется другой термин, возможно, с более позитивным значением — «открытие знаний». С продолжающейся информационно-вычислительной революцией и ростом популярности количественных финансов количество финансовых данных растёт быстрыми темпами. При этом объём данных может включать или не включать релевантную информацию для инвестиционных целей. Поскольку многие типы данных и источники новые, инвесторы не имеют представления о том, могут ли они быть полезны и каким образом. Таким образом, алгоритмы машинного обучения помогают найти взаимосвязи, и поэтому они стали привлекательными для практиков и учёных в надежде на то, что даже без уточнения гипотезы об экономических взаимосвязях исследуемых параметров алгоритмы ML выяснят связи между входящими данными и прогнозом на основе их. 167 Хотя алгоритмы ML имеют встроенные механизмы для борьбы с избыточным объёмом или обнаружением ложных корреляций между входными и выходными характеристиками прогнозов, все же следует соблюдать осторожность, чтобы не обнаружить неповторяемые и невоспроизводимые отношения и закономерности. Уникальные возможности по применению технологий машинного обучения в финансах Применяя ML для инвестиций, необходимо проявлять большую осторожность, так как финансовые рынки отличаются от областей, где машинное обучение добилось огромных успехов. Эти различия могут нивелировать многие конкретные преимущества алгоритмов машинного обучения, делая их менее эффективными на практике при применении в реальных жизненных ситуациях. Ниже приведены некоторые из этих различий. Индикатор сигнал/шум и сложности построения системы Что такое шум в машинном обучении? Шум — это термин, впервые применённый к цифровым и аналоговым системам обработки сигналов. Чтобы понять, что такое шум в машинном обучении, нам сначала нужно понять это первоначальное значение. В обработке сигналов шум относится к нежелательным изменениям, внесённым в исходный сигнал во время захвата, хранения, передачи или обработки его информации. Эти искажения чаще всего измеряются с помощью отношения сигнал-шум — показателя, который сравнивает вклад полезного сигнала с вкладом фонового шума. Чем выше шум, тем ниже качество сигнала и отношение сигнал/шум. В машинном обучении шум аналогичным образом относится к нежелательному поведению в данных, которое обеспечивает низкое отношение сигнал/шум. В соответствии с представлениями о данных в машинном обучении, данные = сигнал + шум. 168 Хотя меньшая часть шума в данных неустранима, большинство случаев можно предотвратить, выяснив причины шума и исправив их. Эти причины многочисленны и довольно разнообразны, что также объясняет, почему этот термин имеет так много разных интерпретаций в сообществе специалистов по данным. Что такое шум? В машинном обучении шум определяется как нежелательное поведение в данных. В машинном обучении данные могут поступать в разных форматах и обычно делятся на структурированные (например CSV), полуструктурированные (например JSON) или неструктурированные (например JPG). Шум может присутствовать в любом формате данных, но стоит отметить, что для каждого из них он будет принимать несколько разные формы. Также важно различать шум в том, что в машинном обучении обычно называется набором признаков, т. е. входном сигнале, на котором можно учиться, и шумом в метке, т. е. сигналом, который нужно прогнозировать. Неустранимый шум, или случайность, тоже существует. Это естественная изменчивость, которая обязательно присуща сложным системам, которую нельзя уменьшить, что способствует смещению модели. Шум в наборе функций может быть вызван различными факторами, в том числе неправильным сбором информации от людей или инструментов, или от того и другого. Примерами результирующего шума здесь являются отсутствующие значения, выбросы и неправильные/несогласованные форматы. Однако это не двусторонняя связь. Хотя верно то, что эти эффекты могут быть вызваны неправильным сбором и, таким образом, рассматриваться как шум, также верно и то, что они могут отражать реальное поведение — возможно, исключения — и, таким образом, рассматриваться как сигнал. При выполнении исследовательского анализа данных крайне важно помнить об этом и не спешить с принятием любой из двух интерпретаций, поскольку это может вызвать серьёзные проблемы с эффективностью модели. 169 Неправильная обработка также способствует шуму набора функций. Это может быть либо чрезмерная фильтрация, когда реальное распределение данных изменяется, либо недостаточная фильтрация, когда избыточные значения могут запутать обучение модели, предоставляя нерелевантные сигналы. Наконец, еще одной причиной шума являются атаки. Они совершаются злонамеренными субъектами, которые намеренно добавляют шум к данным, чтобы манипулировать тем, что изучает модель и в конечном счете искажать прогнозы в свою пользу. Маркировка шума при разметке данных. Шум в обучающей выборке может возникать из-за неправильно маркированных примеров при разметке данных, что особенно важно, когда определение признака шума неоднозначно или его трудно обрисовать. Неполные наборы функций являются дополнительным фактором; на самом деле в сложных системах наборы функций почти всегда неполны. Это особенно актуально для реальных приложений, где невозможно смоделировать неизвестные или недоступные функции, например для прогнозирования цен на акции. Как следствие, метка не может быть полностью определена. Неполные наборы функций также являются причиной неустранимого шума в системе. Шум — это всегда плохо? Шум в данных — это всегда плохо. Несмотря на то, что существуют средства для устранения различных причин уменьшаемого шума, описанных выше, легко и часто можно спутать шум с сигналом и наоборот. Это приводит к неправильным интерпретациям во время анализа данных и обучения модели, так как в первом алгоритм может начать обобщать шум, введённый в качестве сигнала, а во втором алгоритму будет не хватать важной информации для правильного определения метки. Тем не менее, иногда действительно желательно добавить небольшое количество входного шума для повышения 170 обобщения и уменьшения переобучения при обучении модели. Дополнение данных для имитации различных сценариев реального мира типично для приложений компьютерного зрения, где гауссовские и негауссовские шумы обычно добавляются к изображениям во время обучения, чтобы усилить алгоритм по отношению к различным настройкам и возможностям камеры. Как справиться с шумом? Существуют средства для устранения шума в данных. При обнаружении шума с помощью машинного обучения стремятся либо удалить шум, либо компенсировать его. Удаление. Это наиболее распространённый подход к удалению зашумленных данных. Преобразование Фурье. Сигнал — это функция, которая отображает реальное пространство в действительное число. Этот подход переводит сигнал в частотную область как комбинацию синусов и косинусов с определёнными амплитудами. Хотя шум существует на всех частотах, сигнал имеет ограниченную полосу частот и может быть извлечен только путем сохранения соответствующих частот. Следует обратить внимание, что этот подход заимствован из области обработки сигналов. Конструктивное обучение. Сигнал и шум ведут себя по-разному. Этот подход обучает модель машинного обучения разделять чистые и зашумленные данные на разные группы. Автоэнкодеры. Автоэнкодер — это двухэтапная модель машинного обучения, которая сначала встраивает (или «кодирует») данные в более низкое измерение, а затем реконструирует (или «декодирует») исходные данные из представления более низкого измерения. Этот подход можно применить к шумоподавлению путём обучения модели восстановлению входного сигнала с одновременным снижением деградации. Анализ главных компонентов (PCA). PCA преобразует данные, проецируя их на N измерений с наибольшей дисперсией. Эти размеры содержат наиболее информативный сигнал, что снижает уровень шума. 171 Компенсация. Наиболее распространенными подходами к компенсации зашумленных данных являются следующие. Перекрестная проверка. Перекрестная проверка — это метод повторной выборки, который обучает более надежные модели машинного обучения, выполняя несколько итераций обучения на разных разбиениях данных. Этот подход сводит к минимуму влияние особенно зашумленного подмножества данных, а также позволяет избежать переобучения. Модели ансамбля. Ансамбльное обучение — это метод, который обеспечивает лучшую прогностическую эффективность машинного обучения за счёт объединения нескольких алгоритмов. Это сводит к минимуму влияние особенно шумной модели. Итак, важно отметить, что ни один из рассмотренных выше подходов не может идеально обрабатывать шум. Если возможно, стоит подумать о сборе дополнительных или новых данных, чтобы повысить соотношение сигнал/шум в источнике. «Мусор на входе, мусор на выходе» — известный закон науки о данных. Чем раньше будут внесены исправления в конвейер по обработке данных, тем лучше будет результат. Расчёт индикаторов сигнал/шум по финансовым данным даёт низкий результат. Любой управляющий показатель, как правило, не является определяющим фактором того, как это соотношение будет работать. Например, предположим, что компания XYZ объявила о больших доходах в этом квартале. Цена акции компании может снизиться после объявления, или потому, что прибыли оказались ниже ожиданий, или потому, что центральный банк повышает процентные ставки, или потому, что инвесторы сокращают длинные позиции. Эту ситуацию можно сравнить с применением индикатора сигнал/шум при подборе рекомендаций по просмотрам потокового видео. Если человек смотрит много фильмов в определённом жанре, высоки шансы того, что ему понра172 вятся и другие фильмы в этом же жанре. Снижается финансовая отдача. Она описывается многомерной информацией и управляется драйверами: специфические для компании, макро-, поведенческие, позиционирование на рынке. Они изменяются в одном измерении, положительном или отрицательном. При этом отношение сигнал/шум любого конкретного информационного элемента, как правило, низкое. Можно с уверенностью сказать, что финансовый рынок является одной из самых сложных искусственных систем в мире, созданных человеком. И эта сложность, и низкое отношение сигнал/шум могут вызвать проблемы неквалифицированного применения алгоритмов машинного обучения (ML). Хотя ML алгоритмы умеют выявлять сложные взаимозависимости параметров, сложность финансового рынка и характерное для него низкое отношение сигнал/шум создают проблему адекватного обнаружения взаимосвязи доходности ценной бумаги и исследуемого параметра. Small vs. big data Еще одна серьезная проблема в применении машинного обучения на финансовых рынках — это количество доступных данных. Количество финансовых данных, доступных для применения технологий машинного обучения, всё ещё относительно невелико по сравнению со многими областями, в которых машинное обучение активно применялось: интернет-торговля, естественные науки. Существует и специфика периодичности — данные, используемые датасиенсистами, как правило, генерируются ежеквартально или ежемесячно. Другая проблема в том, что даже для рынка США с самой глубокой ретроспективой имеющиеся достоверные данные за 100 лет таковы, что количество ежемесячных показателей по любой анализируемой ценной бумаге составляет не более 1 200. По сравнению с другими областями знаний, где количество показателей исчисляется миллиардами и триллионами, количество финансовых данных ничтожно мало. Эта проблема решается расширением диапазона показателей за счёт вовлечения информации из новых источни173 ков данных, «альтернативных данных», таких как социальные сети. Посты или новостные статьи на финансовые темы в них гораздо более многочисленны, чем традиционные финансовые данные. Однако в целом объем финансовых данных по-прежнему мал по сравнению с другими областями исследований и отраслями. Небольшой объём финансовых данных является проблемой для машинного обучения, потому что существенным фактором мощности алгоритма ML является количество доступных данных (см. Halevy, Норвиг и Перейра, 2009 г.). У простого алгоритма машинного обучения на большом наборе данных по сравнению со сложным машинным обучением, алгоритм, обученный на относительно меньшем наборе данных, более простой алгоритм часто превосходит результаты тестирования в реальных условиях. С большим набором данных инвесторы, применяющие машинное обучение, могут выполнять качественную перекрёстную проверку и тестирование вне выборки для минимизации усилий по разделению входных данных на разные сегменты. Инвестор может провести правильную настройку гиперпараметров, а надежность проверяется только в том случае, если объём данных достаточно велик. Небольшой объём финансовых данных добавляет новые проблемы к ранее упомянутым проблемам применения ML на финансовых рынках: высокая системная сложность финансовых рынков и низкое отношение сигнал/шум. Стационарные и самонастраиваемые рынки, иррациональность Тот факт, что рынки являются нестационарными, делает финансовые рынки сложными для применения машинного обучения. Здесь имеется в виду то, что финансовые рынки адаптируются и меняются через некоторое время после того, как происходят какие-либо события на рынках. Лучше всего алгоритмы машинного обучения применяются в статических системах. Например, правила, управляющие свёртыванием белка, скорее всего, останутся постоянными независимо от того, понимают ли их исследователи. В отли174 чие, например, от финансовых рынков, когда в зависимости от полученной доходности на рынке инвесторы со временем узнают, какие закономерности действуют, и меняют своё поведение, тем самым изменяя поведение всего рынка. Кроме того, за последние несколько десятилетий ученым удалось обнаружить и опубликовать движущие силы рыночной доходности — например, Фама и Френч (1993) — их исследования также расширили знания обо всех участниках рынка, и такие исследования меняют поведение участников рынка (Маклин и Понтифф (2016)). Адаптивный, самонастраиваемый характер финансовых рынков означает не только то, что алгоритмы машинного обучения, обученные для инвестиций, не имеют достаточно длинной истории для обучения модели и низкое отношение сигнал/шум, с которым нужно бороться, но также и то, что правила и динамика, определяющие результат модели, пытаются предсказать также изменения с течением времени. К счастью, многие алгоритмы машинного обучения являются адаптивными или могут быть спроектированы так, чтобы приспосабливаться к меняющимся условиям системы. Тем не менее, меняющаяся система ставит под сомнение достоверность и применимость исторических данных, которые могли бы использоваться для обучения алгоритмов — ряды данных, которые не были достаточно длительны. Что ещё больше усложняет задачу, так это то, что финансовые рынки являются искусственными системами. Их результаты представляют собой совокупность индивидуальных человеческих действий, а человеческие существа часто ведут себя иррационально — например, принимают решения, основанные на жадности или страхе. Эта характеристика иррациональности не существует во многих других областях, в которых применялись технологии ML, опыт использования которых мог бы быть задействован. Как избежать распространённых ошибок при применение машинного обучения в финансах Ранее отмечалась проблема скудности данных о финансовых показателях, особенно по сравнению с массивами 175 данных в других отраслях. Поэтому переобучение — серьезная проблема при применении методов ML в финансах. Эта проблема проявляет себя даже сильнее, чем при применении традиционных количественных методов, таких как линейная регрессия, из-за больших степеней свободы, присущих алгоритмах машинного обучения. Результатом переобучения является то, что можно получить прекрасный бэктест, но вне выборки результаты не будут оправдывать ожидания. Есть несколько распространённых методов, используемых в ML во всех областях для борьбы с переобучением. Они включают перекрёстную проверку, выбор и удаление функций, регуляризацию, раннюю остановку. Из-за более низкой доступности выборочных данных в области финансов, некоторые из этих стандартных методов могут быть неприменимы или работать в финансовой сфере не так хорошо, как в других. Однако есть и преимущества работы в финансовой отрасли. Самое главное преимущество — человеческая интуиция и знания в экономической области. Имеется в виду то, что инвесторы и исследователи, применяющие машинное обучение, могут проводить тесты, чтобы увидеть, соответствуют ли отношения, обнаруженные алгоритмами ML, между входными признаками, а прогнозы кода тестируемы по интуитивному экономическому смыслу. Например, чтобы изучить взаимосвязь между входными данными и исходами, можно посмотреть аддитивное объяснение Шепли (SHAP), введенное Лундбергом и Ли (2017). Значение SHAP рассчитывается как среднее предельного распределения функции предсказывающей цели. Предельное распределение рассчитывается путём сравнения результатов после удаления этой переменной из данных для построения функции при сравнении с функцией, построенной на массиве, содержащем эту переменную. На рисунке 224 показаны значения SHAP, полученные в работе Robeco по применению машинного обучения для прогнозирования разрушения стоимости акций. Для прогнозирования вероятности финансовых трудностей исполь176 Рисунок 224. Значения SHAP между входными параметрами функции результатами прогнозирования машинным обучением финансовых проблем Обозначение на рисунке: SHAP Value (Impact on model output) — значение SHAP — влияние на входные параметры. Feature value — значение функции. Источник: Swinkels and Hoogteijling (2022). зуются различные входные данные по разным акциям в инвестиционной среде. Цвет каждой точки указывает на знак и величину признака, где красный сигнализирует о высоком значении показателя функции, а синий обозначает низкую значимость показателя. Возьмем, к примеру, функцию 25. По мере увеличения значения признака (обозначенного красным цветом) алгоритм машинного обучения предсказывает более высокую ве177 роятность финансовых проблем. А по мере уменьшения значения показателя (выделено синим цветом), алгоритм машинного обучения предсказывает более низкую вероятность финансовых проблем. Обладая этой информацией, опытные инвесторы могут применить свои знания, чтобы увидеть наличие связи по алгоритму машинного обучения. Например, если показатель функции № 25 — это коэффициент кредитного плеча, а показатель 1 — это расстояние до значения по умолчанию, тогда отношение имеет смысл. Однако если функции перевёрнуты: функция 25 — это расстояние до значения по умолчанию, а функция 1 — это коэффициент кредитного плеча, то вполне вероятно, что алгоритм ML сделал ошибку, которая является следствием переобучения. Другой подход к смягчению последствий переобучения, когда при использовании машинного обучения алгоритмы находят ложные корреляции, для того, чтобы попытаться устранить это с самого начала. Объяснение постфактум через значения SHAP и другие методы полезны, но инвесторы также могут применять знания из инвестиционной области для отбора показателей входного набора так, чтобы выбрать те входные данные, которые, вероятно, будут иметь отношение к предсказываемым целям. Например, когда мы пытаемся предсказать вероятность биржевого краха, фундаментальные финансовые показатели, такие как маржа прибыли и коэффициент покрытия долга, являются разумными входными характеристиками для алгоритма ML, но первая буква фамилии генерального директора, вероятно, не является разумной входной функцией. Воспроизводимость (Replicability) Ведутся споры о том, существуют ли сейчас проблемы с воспроизводимостью при применении машинного обучения кризиса при проведении финансовых исследований. Эти проблемы касаются: различий протестированных выборок и “P-hacking”. P-hacking — это слэнговый термин, введенный для описания недобросовестного процесса отбора и выборочной 178 описи только «удобных» результатов. Такие «многообещающие» результаты приводят к ложному превышению статистически значимых результатов. Обычно так поступают предвзятые учёные. Воспроизводимость результатов машинного обучения также сталкивается со следующими проблемами: 1. Количество настраиваемых переменных в алгоритмах ML может оказаться большим, чем при применении традиционных статистических методов; 2. Алгоритмы машинного обучения легко доступны в Интернете. Инвесторы могут часто загружать алгоритмы с открытым исходным кодом из интернета, не зная специфики алгоритма. При этом в исходном коде могут использоваться такие элементы программирования, например генерация случайных чисел, о которых новый пользователь программы не может ничего знать. Кроме того, если не быть осторожным, разные реализации одного и того же алгоритма могут иметь тонкие нюансы и различия, приводящие к разным результатам. Чтобы избежать проблем с воспроизводимостью, инвесторам, применяющим машинное обучение, предлагается сначала потратить время на создание надёжной инфраструктуры данных и кода для проведения исследований и экспериментов в области машинного обучения. Это включает в себя, но не ограничивается следующим: 1. Создание надёжной системы контроля версий кода, разработка способов идентификации и фиксации всех параметров, используемых в алгоритме, включая номер версии алгоритма ML, тщательный отбор выборки по данным об инвестициях, тщательная работы с параметрами, используемыми наборами функций. 2. Документирование всех проверенных итераций и гипотез, в том числе тех, которые не показали хороших результатов (демонстрация research graveyards). Такое перечисленное выше документирование может быть невозможно для публичной информации, но оно, по крайней мере, должно быть предпринято при обсуждении и проверке результатов в рамках одной и той же организации. 179 Упреждающая предвзятость (отклонение при просрочке данных ‒ Lookahead bias). Утечка данных (data leakage) Сдвиг данных (data shift) означает, что данные, на которых модель будет применяться, среднестатистически отличаются от тех, на которых модель обучалась и тестировалась, то есть распределение входных данных отличается при тестировании и применении. Двумя вариантами сдвига данных являются: 1. Сдвиг в распределении исходных данных. 2. Сдвиг в условном распределении целевой переменной. Упреждающая предвзятость — еще одна широко известная проблема при применении технологий машинного обучения инвесторами, основывающими свои инвестиционные решения на количественных методах. Пример упреждающей предвзятости. Если бы квартальные результаты были доступны только 40 дней после окончания квартала, то следует использовать квартальные данные только при их наличии в ближайшем прошлом, а не на дату окончания квартала. Другие случаи могут быть более тонкими. Например, если кто-то проводит исследования в течение периода, который включает технологический пузырь и его последующий крах (2000–2002 гг.), и выборка инвестиционных данных не включает компании информационных технологий (ИТфирмы), то дата-сиенсист обязан предоставить разумную причину, почему ИТ-фирмы не включены в выборку. С вышеописанным отклонением по упреждающей предвзятости в машинном обучении связана проблема утечки данных. Данная утечка происходит, когда данные, используемые в обучающей выборке, содержат информацию, которая может быть использована для подтверждения выводимого дата-сиенсистом прогноза. Иначе эта информация была бы недоступна для машинного обучения. Поскольку финансовые данные представляют собой временные ряды, они часто разделены в хронологическом порядке по этапам: обучение, валидация и тестирование. Прогностическое моделирование ML направлено на прогнозиро180 вание результатов, которые модель не видела раньше. Одна из форм утечки данных может происходить, если информация, которая должна быть в одном этапе, оказывается в другом из трех наборов данных по этапам (обучение, проверка и тестирование). Когда это происходит, алгоритм ML оценивает данные, которые до сих пор он видел. В таких случаях результаты могут быть чрезмерно оптимистичными и разочаровать их производительностью вне выборки. Это явление называется «утечкой данных». Другой тип утечки данных называется «функциональной утечкой». Функциональная утечка происходит, когда созданная предсказательная модель кажется лучше, чем она работает на самом деле. Например, предположим, ключевой руководитель компании испытывает серьезные проблемы со здоровьем, но PR служба не сообщает об этом факте широкой публике. В этом случае включение этой информации в набор функций машинного обучения может обеспечить высокую производительность бэктеста, но это будет пример утечки функций. Для сведения к минимуму возможности утечки данных могут применяться различные методы. Одним из основных является введение достаточного по длительности промежутка между обучающими и проверочными этапами обработки данных и между этапами проверки и тестирования. Например, вместо ситуации, когда этапы проверки начинаются сразу после окончания тренировочного этапа, разумно ввести временной разрыв от нескольких месяцев до нескольких кварталов для обеспечения полного разделения данных. Чтобы предотвратить утечку данных, инвесторы, применяющие ML, должны тщательно подумать о том, что доступно, а что нет на время этапов разработки и тестирования модели. Короче говоря, как всегда, разумность и наличие общего смысла должно превалировать при применении алгоритмов машинного обучения. Пробелы реализации Еще одна ловушка, подстерегающая дата-сиенсистов при применении алгоритмов машинного обучения в фи181 нансах — это так называемый пробел в реализации. Он заключается в том, что протестированные на обучающей выборке данные по торговым инструментам оказываются бесполезными, так как эти торговые финансовые инструменты не могут торговаться в реальных условиях. Пример пробела в реализации. Созданный алгоритм машинного обучения демонстрирует превосходную производительность при тестировании на исторических данных акций компаний с малой или микрокапитализацией. Однако в реальности торговля такими акциями слишком накладна из-за трансакционных издержек. Также может быть, что количество таких акций в обращении недостаточно для применения торговой стратегии, созданной с применением алгоритма машинного обучения. Выше уже говорилось про то, что реализация оборачивается проблемами для всех количественных стратегий, не только тех, которые были созданы с применением технологий машинного обучения. Но алгоритмы ML, как правило, имеют более высокую оборачиваемость, что увеличивает торговые издержки по торговле ценными бумагами с малой рыночной капитализацией. Подобно акциям с малой и микрокапитализацией, еще один пример пробела в реализации — это продажа ценных бумаг в краткосрочной и долгосрочной перспективе. На практике бывает невозможно шортить акции из-за их недостаточного количества, также могут возникать заградительные, чрезмерные расходы по займам. Объяснимость и атрибуция производительности Основная критика применения машинного обучения в финансах состоит в том, что, по мнению пользователей, модели машинного обучения трудно понять. По мнению ученого по искусственному интеллекту Гу, модели машинного обучения часто называют “черными ящиками” — в некотором смысле неоднозначным термином, так как модели легко проверить. Однако они сложны, и в этом, с одной стороны, источник их силы, а с другой стороны — непрозрачность. Модели могут быть исследованы, они имеют обшир182 ные возможности и позволяют определить функционирующий аппарат и предсказательные переменные. Для многих сфер деятельности машинное обучение может не понадобиться, так как исследуемые переменные могут быть полностью объяснимы в любое время. Например, алгоритм машинного обучения может предлагать неправильные видеорекомендации на основе прошлых просмотров зрителей, при этом последствия не катастрофичны. Однако когда на карту поставлены миллиарды долларов инвестиций, владельцы активов требуют менеджеров, которые используют алгоритмы на основе машинного обучения и объясняют, как принимаются на основе их инвестиционные решения. В последнее время приемлемое для понимания финансовых менеджеров машинное обучение появилось в финансовая сфера в качестве основной темы как для практиков, так и для ученых. Фундаментальный подход к объяснению работы алгоритмов машинного обучения в финансовой сфере представлен на рисунке 225. Частичное предсказывание — слева. Линейный эффект — посередине. Нелинейный эффект — справа. Рисунок 225. Линейная и нелинейная декомпозиция алгоритма машинного обучения входящих и результирующих параметров функции Fi Источник: Li, Turkington, and Yazdani (2020). Аналогично можно оценить демонстрацию парного взаимодействия алгоритма ML, созданного с использованием совместного частичного предсказания признаков fi и fj путем независимого вычитания частичного предсказания каждого признака. Пример результата парного взаимодействия показан на рисунке 226: Рисунок 226. Пример эффекта парного взаимодействия Источник: Li, Simon, and Turkington (2022). Примеры на рисунках с 3 по 5 демонстрируют инвесторам, использующим машинное обучение, как входные функции влияют на итоговый прогноз. Построив распределение результатов инвестирования по модели определённого портфеля, а затем проведя его декомпозицию на несколько частей: линейную, интерактивную, нелинейную, дата-сиенсист может выделить выявленные зависимости и построить на их основе эффективный инвестиционный портфель. С таким подходом инвестор может сформировать распределение доходности, указанное на рисунке 227: Рисунок 227. Распределение доходности Источник: Robeco. 3.3. Практические приложения машинного обучения в инвестициях Примеры приложений машинного обучения в области финансов взяты из разных сегментов инвестиционной деятельности. Выше были продемонстрированы распространённые ловушки при применении технологий машинного обучения в финансовой сфере и способы их преодоления. Рассмотрим примеры машинного обучения применительно к финансовым инвестициям. ¯Ëą°}ÈÏÈÓÒË}¯º°°°Ë}ĆÒºÓÓº®ąº²ºąÓº°ÒÈ}ĆÒ® &URVV6HFWLRQDO6WRFN5HWXUQV Предсказание кросс-секционной доходности акций (Cross-Sectional Stock Returns) — классическая задача современной финансовой теории, наиболее красочно и ёмко описывающая основную проблематику финансовых рынков, описывалась в работах классиков современных финансов (Фама, Френч, Блэк, Шоулз и многие другие финансисты с семидесятых годов прошлого века вплоть до наших дней). Проблема инвестора. Самая распространённая задача при применении машинного обучения в финансах — предсказать движение цены акции и действия с ней: покупка или продажа. Многочисленные практики финансового рынка и учёные-финансисты применяют алгоритмы машинного обучения именно для этого. В этой связи используются алгоритмы машинного обучения, решающие задачу кросс-секционного доходности акций в сфере инвестиций. То есть, определяются взаимосвязанные доходности, но не абсолютные значения доходности акций. Алгоритмы машинного обучения позволяют отбирать именно акции, но не осуществлять выбор между странами, отраслями, сегментами инвестирования. Выбор акций — задача более простая, чем выбор времени инвестирования или сегмента рынка. Именно для этой задачи имеются данные для машинного обучения. 185 Методология. Начальные установки. 1. Инвестиционная среда: США, международные рынки, развивающиеся рынки. 2. Алгоритмы машинного обучения: (усиленные) деревья/случайные леса (boosted trees/random forests), нейронные сети с l слоями (neural networks with l layers). 3. Набор функций: типичные финансовые показатели, которые используются в линейных моделях, таких как различные соотношения цен (стоимости), прибыльность (качество) и ранее достигнутая доходность (моментум). Следует обратить внимание, что для пункта 3, используется очень ограниченный набор функций. Дата-сиенсист инвестор, по сути, применяет свои знания в предметной финансовой области. Происходит наложение профессиональной структуры на алгоритм ML, что сказывается на противодействии проблеме ограниченных данных, которая обсуждалась в предыдущем разделе. Полученные результаты. В результате работ по этому направлению практики и учёные достигли результатов по пяти направлениям. Прежде всего, обнаружено статистически значимое и экономически значимое преимущество предсказательной силы алгоритма ML по сравнению с результатами, полученными при применении традиционного линейного подхода. Например, при формировании портфеля длинно-коротких децилей спреда из (четырёхслойного) нейронного сгенерированного сетью прогноза доходности акций в соответствии с хорошо известным исследованием по прогнозированию доходности акций (Gu et al. 2020) стратегия имеет годовой коэффициент Шарпа вне выборки 1,35 при стоимостном взвешивании и 2,45 при равном взвешивании. Для сравнения: тот же портфель, построенный по обычному прогнозу методом наименьших квадратов (OLS) с теми же входными данными функции дал коэффициент Шарпа 0,61 и 0,83 для стоимостного и равного взвешивания соответственно. На рисунке 228 показаны результаты взвешивания значений. 186 Второй результат заключается в определении эффективности предсказаний алгоритмов машинного обучения по сравнению с линейными методами прогнозирования. Алгоритмы машинного обучения не только ограничены линейными комбинациями наборов функций, но могут сформулировать более высокий порядок функциональной зависимости. Рисунок 228. Вневыборочная производительность эталонного портфеля OLS по сравнению с различными портфелями машинного обучения: взвешивание по стоимости (Начало) Источник: Gu et al. (2020). 187 Рисунок 228. Вневыборочная производительность эталонного портфеля OLS по сравнению с различными портфелями машинного обучения: взвешивание по стоимости (Окончание) Источник: Gu et al. (2020). Чтобы проверить, могут ли быть достигнуты эффекты более высокого порядка при прогнозировании стоимости акций, можно сравнить результаты линейного моделирования (например, LASSO и RIDGE) с моделями, которые учитывают нелинейные и сложные эффекты взаимодействия (такие как деревья и нейронные сети). 188 Инвесторы Robeco обнаружили, что модели машинного обучения более высокого порядка превосходят своих более простых линейных конкурентов. Превосходство моделей машинного обучения более высокого порядка также было подтверждено учёными. Если сравнивать между нелинейными моделями и моделями взаимодействия interactions, то можно утверждать, что модели взаимодействия отличаются большей производительностью. Это также видно из рисунка 225, где производительность обобщенной линейной модели с потерями Хубера (GLM+H) уступает моделям, учитывающим взаимодействие (усиленные деревья и нейронные сети). В-третьих, инвесторы МО обнаружили, что функции, определяющие результаты прогнозирования, работают на удивление стабильно независимо от конкретных алгоритмов машинного обучения. Этот результат несколько неожиданный, потому что различные алгоритмы машинного обучения, такие как форсированные деревья и нейронные сети, используют разные подходы к получению результатов. Однако аналогичная важность, придаваемая определённым входным функциям, подтверждает, что это существенные характеристики, которые управляют перекрёстной доходностью акций. Исходя из собственного опыта Robeco и различных опубликованных исследований, характеристики, которые преобладают в перекрестной доходности, указывают на краткосрочные развороты, моментум доходности акций и секторов, волатильность доходности и размер фирмы. В-четвертых, простые алгоритмы машинного обучения превосходят более сложные алгоритмы машинного обучения. Этот результат весьма вероятен, так как существует не так много данных для обучения, и более простые модели из-за своей меньшей затратности по данным с меньшей вероятностью «переусердствуют» и, тем самым, работают лучше. Это подтверждается на рисунке 225, где лучший коэффициент Шарпа достигается с помощью нейронной сети с четырьмя слоями. 189 В-пятых, чем больше данных, тем лучше прогноз машинного обучения. Это фундаментально для природы алгоритмов ML, как заметили Halevy et al. (2009) для общего применения машинного обучения, и подтверждено Чоем, Цзяном и Чжан (2022) в финансовом контексте. ¯ºĄÓºÏÒ¯ºmÈÓÒ˺­mÈãÈ°ºÒ亰ÒÈ}ĆÒ® VWRFN FUDVKHV Описание проблемы инвестора. Вместо того чтобы предсказывать порядок будущих доходов, другое применение алгоритмов машинного обучения может заключаться в том, чтобы прогнозировать акции с наихудшими показателями, то есть те, стоимость которых с наибольшей вероятностью может быть разрушена. Результаты этого прогноза могут быть применены в консервативных стратегиях, где ценные бумаги с наибольшей вероятностью разрушения стоимости исключаются из портфеля инвестора со стратегией «выигрывать, не проигрывая». Методология. Обвал стоимости акций определяется как значительное падение цены акции по отношению к аналогам; таким образом, скорее это носит уникальный, а не системный характер, когда обваливается группа акций или целый сегмент рынка. Входные данные для составления прогноза машинного обучения: 1. Данные с рынков: США, международных рынков развитых стран, развивающихся рынков; 2. Алгоритмы машинного обучения: логистическая регрессия (logistic regression), случайный лес (random forest), дерево с градиентным усилением (gradient boosted tree) и совместное использование всех трёх способов; 3. Функциональный набор включает в себя: различные индикаторы финансовой нестабильности: рок до дефолта, волатильность и рыночная бета в дополнение к традиционным фундаментальным финансовым показателям. Как видно, постановка задачи очень похожа на ранее описанную задачу прогноза кросс-секционной доходности 190 акций. Основные отличия заключаются в целевой функции алгоритма машинного обучения — цель прогнозирования машинного обучения, и наборе входных параметров — разработка признаков. Следует соблюдать осторожность при определении обоих компонентов, чтобы гарантировать, что алгоритм прогнозирования решает поставленную задачу и стабильно работает вне обучающей выборки. Результаты. Эффективность портфеля акций с наивысшей вероятностью разрушения стоимости по сравнению с рынком показана на рисунке 226. Мы видим, что производительность алгоритма ML больше, чем при использовании традиционных подходов как для развитых, так и для развивающихся рынков. Глядя на секторный состав вероятно проблемных акций, показанных на рис. 229, мы видим, что алгоритм ML вполне может быть объяснен на исторических примерах. Во время лопнувшего пузыря доткомов в начале 2000-х годов на рисунке по результатам работы алгоритма машинного обучения доминируют технологические акции. Во время глобального финансового кризиса 2008 года в выборке проблемных акций доминируют финансовые акции. Рисунок 229. Рыночная доходность по сравнению с доходностью портфеля, состоящего из проблемных акций, оценённых с использованием различных подходов к прогнозированию Источник: Swinkels and Hoogteijling (2022). 191 В целом, мы видим большую секторальную дисперсию по акциям с наибольшей вероятностью разрушения стоимости, что указывает на то, что предсказываемая доходность зависит более всего от выбора акции, чем от размещения инвестиций по секторам. Рисунок 230. Секторальный состав наиболее вероятно проблемных акций, прогнозируемых с помощью машинного обучения Источник: Swinkels and Hoogteijling (2022). ¯ºĄÓºÏ© ÁÓąÈäËÓÈãĉÓ©² ¹º}ÈÏÈËãË® }ºä¹È ÓÒ®ÓȺ°ÓºmËË²ÓºãºĄÒ®äÈĈÒÓÓºĄºº­ćËÓÒ« Описание инвестиционной задачи. Предсказать доходность акций, как известно, сложно. Как уже упоминалось ранее, потенциально существуют тысячи параметров, которые могут повлиять на доходность акций. Это настроения инвесторов, зависимость от траектории предшествующего развития и другие. Различные факторы, эндогенные и экзогенные, в конечном счете транслируются в одном измерении — измерении прибыльности более высокой или низкой. Более легкой может показаться задача использования алгоритмов машинного обучения для прогнозирования основных показателей компании, рентабельности активов и прибыли. Фундаментальные показатели компании имеют 192 положительные для машинного обучения качества: они более стабильны, чем доходность акций, что делает их более подходящими для прогнозов машинного обучения. По этим причинам прогнозирование основных показателей компании — еще одно популярное применение алгоритмов машинного обучения в финансовой сфере. В этом параграфе мы рассмотрим результаты популярного исследования, в котором прогнозы доходов, предсказанные алгоритмом ML, сравниваются с более традиционными подходами. Методология. Входные данные. Рыночные данные были собраны с фондового рынка США, за исключением данных по компаниям финансового и коммунального секторов. Исследование было проведено за период 1975–2019 гг. Были протестированы шесть различных моделей машинного обучения. Были применены три линейные модели машинного обучения (OLS, LASSO и гребневая регрессия — ridge regression). Ридж-регрессия или гребневая регрессия (англ. ridge regression) – это один из методов понижения размерности. Часто его применяют для борьбы с переизбыточностью данных, когда независимые переменные коррелируют друг с другом (т.е. имеет место мультиколлинеарность). Были применены три нелинейных модели машинного обучения: случайный лес — random forest, регрессия с градиентным усилением — gradient boosting regression, и нейронные сети — neural networks. Использовались шесть традиционных моделей в качестве эталона для сравнения с моделями ML: случайная прогулка — random walk, авторегрессионная модель — autoregressive model, модели Хоу, ван Дейк, и Zhang (2012; HVZ) и So (2013; SO), модель постоянства доходов (the earnings persistence model) и модель остаточной доходности (residual income model). Также были протестированы различные комбинации этих моделей. В состав исследуемых параметров были включены 28 основных показателей финансовой отчетности. Общее количество переменных модели — 56. 193 Результаты. Результаты представлены на рисунке 231. Рисунок 231. Показатели предсказательной точности исследования Cao and You (2021) Как и по результатам исследований перекрестной доходности акций, Cao и You (2021) в своих исследованиях обнаружили, что модели машинного обучения дают более точные прогнозы доходов. Линейные модели ML более точны, чем эталонные традиционные модели (benchmark traditional models) — точность выше примерно на 6%. А нелинейные модели ML более точны чем линейные модели ML — примерно на 1–3% точность выше, чем у линейной модели. 194 Мало того, что модели машинного обучения более точны, оказалось, что традиционные модели: авторегрессия, HVZ, SO, модель постоянства доходов (the earnings persistence model) и модель остаточной доходности (residual income model) не более точны, чем наивная модель случайных блужданий (naive random walk model). Комбинирование традиционных моделей с моделями машинного обучения принесло большую точность прогнозов, чем применение отдельных моделей. Комбинирование моделей машинного обучения дало результат, превзошедший результат применения традиционных методов. И комбинирование нелинейных моделей показало результат лучший, чем комбинирование линейных методов. Более высокая результативность моделей машинного обучения связана со следующим: 1. Модели не придают значение и не тратят ресурс на малозначимые входящие переменные. Такой вывод можно сделать на основе изучения значения функции Шепли (Shapley value). 2. Эффекты нелинейности (nonlinearity effects) и взаимодействия (interaction effects) увеличивают точность прогнозов будущих доходов. Об этом свидетельствует более высокая производительность нелинейных моделей машинного обучения по сравнению с линейными моделями машинного обучения. Вывод по применению моделей машинного обучения, который можно сделать из этого исследования, такой же, что и в предыдущих двух примерах: модели машинного обучения создают стоимость, превышающую стоимость традиционных моделей, особенно это достигается за счет нелинейного вида моделей. Комбинирование методов машинного обучения позволяет добиться дополнительного эффекта, аналогичного эффекту, который предоставляет возможность достигнуть диверсификация при инвестировании. 195 |­¯È­º}È«Ï©}ºm©²ąÈÓÓ©² 1/3 ÓÈÓË°}ºãĉ}Ò² «Ï©}Ȳ Обработка естественного языка (natural language processing – NLP) – это технология машинного обучения, которая даёт компьютерам возможность интерпретировать, манипулировать и понимать человеческий язык. В предыдущих параграфах описывалось решение проблем прогнозирования параметров на основе технологий машинного обучения. Другая важная сфера применения машинного обучения — это чтение текста на языке, понимание и анализ, который называется «обработкой естественного языка». Современные техники NLP используют нейронные сети для улучшения значительных достижений в этой области в последние годы. Исследуемая проблема. Инвестирование — это глобальный бизнес, и большая часть соответствующих материалов, помогающих принимать инвестиционные решения, написана на местном языке. В целом глобальный инвестиционный портфель может состоять из инвестиций в 20–30 разных странах, при этом типичный инвестор может понимать только два-три языка. Этот факт представляет собой проблему, но, к счастью, это проблема может быть решена с помощью алгоритмов машинного обучения. При устойчивом интересе западных инвесторов к инвестициям на китайском рынке большим спросом пользуется сейчас китайский язык. Китайский рынок А-акций — большой и ликвидный. Понимание китайских текстов об инвестициях в акции класса А осложнено тем, что китайцы используют не алфавитный язык, у него совсем другие грамматические конструкции, чем в английском языке. Кроме того, поскольку на китайском рынке акций класса А доминируют розничные инвесторы, на рынке сложилась субкультура инвестиционного сленга, где используемые термины часто не являются стандартными китайскими словами, что усугубляет проблему для инвесторов, не имеющих сильных разговорных навыков на местном языке. 196 В статье Чена, Ли и Муссалли (2020 г.) авторы применили методы NLP на основе машинного обучения, чтобы попытаться понять инвестиционный сленг постов, написанных на китайском языке в процессе розничной торговли акциями инвесторами на биржевых онлайн-форумах. Методология. 1. Загружаются и обрабатываются инвестиционные блоги, в которых активно участвуют китайские розничные инвесторы в A-акции. 2. Применяются и тренируются встроенные функции обучения NLP на загруженных блогах об инвестициях. 3. Начиная со стандартных китайских словарей настроений, ищутся слова, окружающие эти стандартные китайские слова, оцененные в словаре эмоционально. По своей конструкции в результате работы модели оказывается, что эти окружающие слова часто имеют одинаковое контекстуальное значение, как слова в стандартном словаре настроений, независимо от того, являются ли они стандартными китайскими словами или сленгом. Пример работы алгоритма продемонстрирован на рисунке 232: Рисунок 232. Обработка китайских слов из блогов инвесторов рынка А-акций, спроецированная в 3Д пространстве Результаты. Используя разработанную программу, мы можем определить инвестиционные слова, используемые в стандартном китайском языке и сленге розничных инвесторов. На рис. 232 красная точка обозначает китайское слово «центральный банк». Колонна с правой стороны выводит слова, наиболее близкие к этому слову, а ближе всего слово, которое переводится как «центральная мать» на китайском языке. Это жаргонное слово, часто используемое китайскими розничными инвесторами как заменитель слова «центральный банк», потому что центральные банки часто принимают меры, чтобы успокоить рынок. В отличие от большинства мировых рынков на китайском фондовом рынке прибыль окрашена в красный цвет, а убытки — в зеленый. Обработка слов демонстрирует известную по работам Mikolov, Yih, and Zweig (2013) векторную арифметику. В работе Mikolov, Yih, and Zweig (2013) были обнаружены следующие последовательности слов: King — Man + Женщина ≈ Королева. На рисунке 233 продемонстрированы следующие аналогичные закономерности обработанных китайских слов. Рисунок 233. Сохранение текстовой векторной арифметики при обработке китайских слов блогов инвесторов на китайском рынке А-акций Работа по машинному обучению на китайском рынке показывает, что методы машинного обучения полезны не только для решения численных задач прогнозирования результатов, но могут также быть полезными при решении других задачах, например, для понимания иностранного языка для инвестиционных целей. Описанные в данной главе способы применения машинного обучения в финансах являются лишь небольшим подмножество того, что ML может сделать в финансовой сфере. Другие возможные задачи включают очистку данных, обна198 ружение мошенничества, кредитный скоринг и оптимизацию торговли. Машинное обучение — это мощный набор инструментов для инвесторов, и мы только в начале пути применения ML в сфере финансовых инвестиций. Как и любые методики применения, методики машинного обучения эффективны только в том случае, если они применяются в правильных ситуациях при чётком определении ограничений их применения. Вопросы и задания к главе 3 1. Опишите, как машинное обучение может применяться в финансовой сфере. 2. Чем применение машинного обучения на финансовом рынке отличается от других областей, в которых применение машинного обучения достигло огромных успехов в последние годы? 3. Прокомментируйте утверждение: применение машинного обучения на финансовом рынке отличается от применения машинного обучения в других областях тем, что финансовый рынок не имеет столько данных, рынок нестационарен, рынок часто может вести себя иррационально, потому что эмоции инвесторов часто являются большой движущей силой рыночной доходности. 4. Назовите распространенные ошибки и потенциальные стратегии смягчения последствий при применении машинного обучения в финансовой сфере. 5. Почему методы машинного обучения могут обеспечить производительность выше и выходят за рамки традиционных подходов, если применять их правильно? 6. Почему источником преимущества алгоритмов машинного обучения является возможность учёта нелинейных эффектов и эффектов взаимодействия среди входных признаков? 7. Почему объединение алгоритмов машинного обучения часто обеспечивает лучшую производительность, чем та, которая обеспечивается отдельными алгоритмами машинного обучения? 199 Гл а в а 4. ЭТИЧЕСКИЕ ПРАВИЛА ПРИМЕНЕНИЯ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ПРИ УПРАВЛЕНИИ ИНВЕСТИЦИЯМИ 4.1. Общие понятия этики финансиста при применении искусственного интеллекта 11-е издание Справочника по стандартам практики Института CFA 2014 года издания определяет этику как набор моральных принципов или правил поведения, которые служат руководством для нашего поведения, когда оно затрагивает других. Финансовые рынки лучше всего функционируют, когда участники рынка выносят суждения и принимают план действий, основанные на этике, потому что этика порождает доверие и уверенность — основы эффективных рынков капитала. Инструменты искусственного интеллекта (ИИ, или artificial intelligence — AI), описанные в этом параграфе учебника, не могут пока думать и действовать аналогично людям, что одновременно является и сильной, и слабой стороной их использования. Потому что ИИ-алгоритмы по своей сути не обладают фундаментальными этическими качества честности, справедливости, лояльности и уважения к другим, этими качествами должны быть проникнуты профессионалы, ответственные за разработку и использование алгоритмов ИИ. Этот алгоритм подчеркивает важность парадигмы AI + HI, где человеческий интеллект (HI) обеспечивает дополнительные когнитивные возможности, которые в сочетании с ИИ обеспечивают более эффективное и надежное общее решение. 200 В более общем плане следующие принципы применимы к этическим установкам при разработке и внедрении ИИ при управлении инвестициями. Целостность данных. Данные должны быть проверены и очищены, потому что они пригодны для использования в программе ИИ. Компании должны уважать и соблюдать конфиденциальность данных законов и средства защиты конфиденциальности личных данных при поиске и использовании данных. Несколько юрисдикций по всему миру имеют принятые законы о защите данных, что особенно важно там, где разработчики используют неструктурированные и альтернативные данные. Пользователи также должны знать об ограничениях данных, в том числе о наличии систематических ошибок. Предвзятость может возникать, например, в категориальных данных, где информация классифицируется по определённым категориям, на которых обучается программа машинного обучения, чтобы определить отношения в данных или классифицировать результаты. Важно избегать дискриминации определенных групп людей. При этом может возникнуть результат, который основывается на результате классификации, основанной на неполном или смещённом обучающем наборе данных. Известные примеры того, как может возникать предвзятость данных, включает адаптацию клиента и способы оценки риска. В этих случаях программисты могут классифицировать группы клиентов или потенциальных клиентов в категории риска на основе ограниченной истории данных, которая может недооценивать определенные социально-демографические группы. Эта ситуация может иметь следствием потенциально предвзятые результаты, что приводит к неправильной классификации клиентов. Другие случаи потенциальной систематической ошибки данных включают использование NLP в фундаментальном анализе, в котором входные данные включают альтернативные и неструктурированные данные из таких источников, как социальные сети. В этом случае предвзятость может 201 возникнуть из-за того, что алгоритмы фильтруют каналы социальных сетей для новостей или социальных контактов, при этом способы программирования ставят в невыгодное положение некоторые диалекты или языки. Профессионалы и специалисты по данным должны обеспечить исходные данные свободными от предвзятости или иным образом уменьшить предвзятость до минимального уровня путем понимания свойств данных при использовании подходов их тщательной выборки. В целом важно признать, что несмотря на то, что мы prima facie, по определению признаем объективность анализируемого ИИ набора данных, эти наборы данных содержат в себе предубеждения, и поэтому в алгоритмах ML, обучающихся на этих наборах данных, также существует предубеждение. Передача принятия решений от человека к машине не устраняет предвзятость. Специалисты, работающие с инструментами ИИ, должны осознавать этот факт и принимать соответствующие шаги для управления источниками для смягчения таких последствий предвзятости в процессах принятия решений ИИ. Путь для устранения предвзятостей при работе с ИИ — увеличение количества команд программистов, это разнообразие коллективов разработчиков поможет решить проблему предвзятости в рабочем процессе по применению ИИ. 4.2. Критерии добросовестного применения технологий машинного обучения и искусственного интеллекта в практике финансово-инвестиционного консультирования Точность. Система ИИ должна производить точные и надежные результаты, с хорошей производительностью за пределами выборки со стабильными обобщающими результатами. Проще говоря, приложение ИИ должно быть надежным и работать 202 по назначению. Построенная система должна защищать от распространённых проблем, связанных с перенастройкой и низким отношением сигнал/шум. Точность модели необходима для обеспечения того, чтобы ИИ приложение обеспечивало наилучший возможный результат для клиентов. Специалисты также должны оценивать сложность моделей так, чтобы обеспечивать баланс потребности в точности с необходимостью избегать чрезмерную сложность. Менее сложная модель даёт результаты, аналогичные результатам более комплексной модели. Это предпочтительнее, и фирмы должны оценить предельные затраты/выгоды от увеличения сложности модели. Прозрачность и интерпретируемость. Модель ИИ должна быть понятной, чтобы персонал фирмы мог интерпретировать и объяснить результаты её работы клиентам, супервайзерам по их запросам. Интерпретируемость важна, чтобы заинтересованные стороны понимали и доверяли работе приложения ИИ. Это требование находится в соответствии с требованиями по этике 2018 года Института деловой этики (Institute of Business Ethics). Специалисты по инвестициям должны иметь разумную основу для инвестиционных решений, для этого они должны понимать, как работают алгоритмы программ, формирующих их инвестиционные решения. Согласно стандартам института CFA «Справочник по практике» (CFA Institute Standards of Practice Handbook), профессионалы должны иметь понимание о параметрах, используемых в моделях количественных исследований, на которых они основывают свои инвестиционные рекомендации. Хотя от них не требуется становиться экспертами во всех технических аспектах, профессионалы должны понимать допущения и ограничения, присущие любой модели, и то, как формируются и используются в процессе принятия решений результаты. Интерпретируемость является ключевым этическим принципом в этом контексте. Интерпретируемые и объяснимые концепции ИИ становятся центральными при разработке инструментов и алгоритмов ИИ (Вайдьянатан, 2020; Филпс, 2021). 203 Объяснимый алгоритм ИИ включает в себя инструменты, которые объясняют, как определенная функция в программе ИИ способствовала результату, или чувствительность этой функции к результату, тем самым улучшая прозрачность и интерпретируемость. Это также может быть использовано для объяснения общей производительности модели. Интерпретация наиболее сложна в машинном алгоритме обучения, где функции и концепции изучаются на скрытых уровнях принятия решений, таких как нейронные сети. Это так называемая проблема чёрного ящика. Методы ансамбля (объединения, когда происходит смешивание нескольких моделей) также создают проблемы с интерпретируемостью. Профессионалы должны оценить возможные компромиссы между точностью модели и интерпретируемостью. Более сложные модели (такие как нейронные сети или ансамблевые методы) могут обеспечивать превосходную производительность, но понимание, как такая модель дала свои результаты, может быть сложным или даже невозможным для персонала. Эти модели также являются вычислительно- и ресурсоемкими. Напротив, более простые модели, основанные на линейных регрессионных или классификационных подходах, снижают проблемы интерпретируемости, потому что можно напрямую наблюдать вклад функции в результат модели (например в случае линейной регрессии, предельный вклад входной переменной X в вариацию результата Y можно измерить по коэффициенту регрессии X). Такой прямой путь наблюдения обычно не может быть сделан с помощью нелинейных методов, таких как нейронные сети. Для всестороннего учёта проблемы интерпретируемости алгоритмов ИИ и объяснения методов машинного обучения следует руководствоваться работами Molnar (2020). Независимые от модели методы включают локальные интерпретируемые объяснения, не зависящие от модели (LIME), которые используют суррогатные модели для аппроксимации предсказания более сложных моделей возмущения данных и значения Шепли, которые измеряют средний ожидаемый 204 предельный вклад функции после всех возможных рассмотренных комбинаций признаков. На рисунке 234 приводится иллюстрация интерпретируемости с использованием параметра Шепли (Shapley value). XYZ-анализ — анализ, который позволяет произвести классификацию ресурсов компании в зависимости от характера их потребления и точности прогнозирования изменений в их потребности в течение определенного временного цикла. Рисунок 234. Значения параметров Шепли для XYZ-анализа акций Рассмотрим пример построения модели машинного обучения для выбора акций по методике Молнара — Molnar (2020). В методике используются как методы интерпретируемости, не зависящие от модели, так и специальные методы для нейронных сетей (такие как алгоритмы визуализации и рассечения сети). Для получения дополнительной информации об интерпретируемости и объяснении работы алго205 ритмов ИИ можно обратиться к работам Миттельштадта, Рассела, Вахтера (2019), Липтона (2016) для распределённого международного портфеля акций. Модель обучается на множестве входных переменных, чтобы прогнозировать доходность, и выбирает акции с ожидаемой избыточной доходностью выше 6% для включения в портфель. Предположим, модель оценивает, что средняя ожидаемая избыточная доходность международных акций составляет 5% (акции зарабатывают премию за рыночный риск). Теперь предположим, что для запаса XYZ модель предсказывает избыточную доходность в размере 6,5%, что делает её подходящей для включения в инвестиционный портфель. Отбираются значения функций Шепли, влияющих на разницу в избыточной отдаче, как это проиллюстрировано на рисунке 231. Значения функций показаны упрощённо для простоты иллюстрации. Значение Шепли — это средний предельный вклад данного показателя в прогноз (усреднённый по различным комбинациям показателей). На этой упрощённой иллюстрации показатель, имеющий наибольшее положительное значение по Шепли, — это отношение балансовой стоимости к цене (0,004), а наибольшее отрицательное значение — средняя оборачиваемость активов (значение Шепли –0,0015). Сумма значений Шепли равна 0,015 — разница между фактическим прогнозом (6,5%) и средним прогнозом (5%). Соображения интерпретируемости и применяемые для объяснения работы моделей инструменты являются ключевыми элементами этической разработки ИИ. Специалисты по инвестициям, работающие с данными, дата-сиенсисты, которые строят модели ИИ, должны оценивать потенциальные компромиссы между точностью модели и её объяснимостью при выборе наиболее подходящей модели для того или иного вида инвестиционной деятельности. Ответственность. С помощью установления достаточного надзора над человеческими усилиями и управлением должны быть созданы механизмы подотчетности для обеспечения точных и надлежащих результатов работы программ ИИ и для 206 управления рисками. Подотчётность также включает постоянную оценку преимуществ программы ИИ в соотношении затрат и рисков. Регулярная отчетность и информирование клиентов о том, как модель ИИ была использована и выполнена, позволяет клиентам дисциплинировать менеджеров. Ответственность начинается с высшего руководства при формировании стратегического видения и этической культуры для развития ИИ внутри организации. Учитывая сложность проектов ИИ и необходимость сотрудничества руководства для развития бизнес-функций, для успеха применения технологий искусственного интеллекта необходимы этика, культура и коллективная ответственность. 4.3. Регуляторная база применения технологий искусственного интеллекта в финансово-экономической сфере Профессиональная ответственность в соответствии с Кодексом института CFA и Стандартами (CFA Institute Code and Standards) Кодекс этики и стандартов Института CFA (The CFA Institute Code of Ethics and Standards of Professional Conduct — CFA Institute 2014) устанавливает этические принципы поведения, требуемые от сертифицированных финансовых аналитиков, членов института CFA и кандидатов на участие в программе CFA. Специалисты по инвестициям, использующие ИИ в инвестиционном процессе, должны тщательно оценивать свои этические обязанности в соответствии с Кодексом и Стандартами в части применения ИИ-технологий. Кодекс и стандарты охватывают принципы и положения о сферах, включая индивидуальный профессионализм; целостность рынков капитала; обязанности перед клиентами и работодателями; инвестиционный анализ, рекомендации и действия и конфликты. Применение ИИ в инвестиционном процессе имеет последствия для этих положений. Описано в работах Bonafede and Cook (2019). 207 В этом параграфе рассматриваются основные положения, связанные с применением ИИ. В соответствии со Стандартом II: Целостность рынков капитала, специалистам по инвестициям запрещено действовать с закрытой информацией. Это требование также включено во многих юрисдикциях. Для обеспечения этого стандарта специалисты, занимающиеся программированием и продвижением его результатов в финансовой сфере, должны гарантировать, что данные, полученные и обработанные инструментами ИИ, соблюдают эти требования. Это вполне распространённая ситуация при использовании альтернативных данных, таких как социальные сети, которые могут быть ограничены определёнными группами пользователей, а также в использовании NLP, инструментов парсинга на основе альтернативных или закрытых источников данных, где оценка существенности данных может быть неочевидна. Важно, чтобы специалисты по инвестициям сотрудничали с теми, кто отвечает за поиск данных, и такие специалисты по данным гарантировали, что соблюдаются местные нормативные требования. Стандарт II: Целостность рынков капитала также исключает деятельность по искажению цен или ситуации, когда искусственно завышаются объёмы торговли с намерением ввести в заблуждение участников рынка. Это называется также манипулированием рынком, что является регулятивным требованием в большинстве юрисдикций. Модели ИИ, используемые при исполнении сделок, должны периодически проверяться, чтобы гарантировать, что торговые решения не приведут к рыночным искажениям или другим последствиям, которые могут быть истолкованы как манипулятивные. В этом отношении человеческий надзор и возможность вмешаться или отменить алгоритмы, когда это уместно, представляют собой важный элемент управления. Интерпретируемость особенно важна в контексте целостности рынка, когда неконтролируемые методы, такие как обучение с подкреплением, используются в торговле на фондовом рынке. 208 Методы интерпретации могут позволить практикам соблюдать стандартные и местные правила. Как отмечали Bonafede and Cook (2019), методы ИИ также должны соблюдать конфиденциальность данных клиента. Это требование рассматривается в Стандарте III: Обязанности перед клиентами и фирмами: должны тестировать свои модели на потенциально ненадлежащее включение конфиденциальных данных, а также существенную непубличную информацию. Эти соображения должны быть частью обеих моделей разработки и постоянного мониторинга. Стандарт III: Обязанности перед клиентами, также, касаются вопросов соответствия. Что является еще одним нормативным требованием на многих рынках. Профессионалы, в том числе с фидуциарными обязанностями, несут ответственность за обеспечение того, чтобы инвестиции подходили для нужд клиентов, учитывая финансовое положение, цели и ограничения клиента. А при управлении портфелем — к конкретному поручению клиента брокеру. Специалисты по инвестициям должны давать только соответствующие рекомендации или предпринимать действия, соответствующие поручению. В связи с этим, если инвестиционные компании используют алгоритмы для выбора инвестиций и если в рекомендациях участвуют роботизированные системы, то они должны периодически проверять эти алгоритмы на соответствие клиентским запросам и данным клиентами поручениям, чтобы избежать любого возможного несоответствия нуждам клиента. Профессионалы также должны проявлять усердие и иметь разумное основание, подкреплённое соответствующими исследованиями, для инвестиционного анализа, выдачи рекомендаций и производства определённых действий. Стандарт V: Инвестиционный анализ. Рекомендации и действия. Применение этого стандарта имеет основополагающее значение для инвестиционного процесса и, следовательно, охватывает многие варианты использования ИИ в управлении инвестициями, такие как управление портфелем, биржевая торговля финансовыми инструментами и ав209 томатизированные консультации. С применением этого стандарта связаны основные соображения по целостности данных, точности модели, прозрачности и интерпретируемости. Профессионалам рынка инвестиций нужно понимать существенность исходных данных, достоверность выводов, сделанных программой, как генерируются торговые сигналы, насколько они достоверны и обобщаемы. При использовании моделей машинного обучения инвестиционные специалисты должны знать, где и кем разработана модель, используется ли она по аутсорсингу, является ли она готовым решением. Инвестиционные компании и брокеры должны проявить должную осмотрительность, чтобы убедиться, что купленные приложения подходят их инвестиционному профилю и роду деятельности и позволяют их компании соблюдать эти этические принципы. Стандарт V также касается связи с клиентами. Специалисты обязаны раскрывать клиентам ключевые элементы инвестиционного процесса, изменения, которые могут существенно повлиять на процесс, и существенные ограничения и риски. Когда профессионалы предоставляют таким образом клиентам соответствующий уровень раскрытия информации о том, как ИИ внедряется в инвестиционный процесс, они создают, улучшают и поддерживают доверие как к технологии, так и к общей эффективности инвестиционной деятельности. Чтобы сохранить доверие, специалисты по инвестициям должны уметь решать вопросы клиентов о том, когда и где применение ИИ дало положительные и отрицательные результаты. Прозрачность и интерпретируемость моделей ИИ — ключ к эффективному общению. Специалисты по инвестициям также должны вести соответствующий учёт записей для поддержки своих аналитических выкладок по инвестициям, рекомендациям и действиям. Использование больших данных в приложениях машинного обучения может содержать огромные петабайты данных, и модели могут пройти множество итераций, прежде чем можно будет их окончательно использовать в клиентских портфелях. 210 Фирмы должны обеспечить установление соответствующих рамок и сопутствующих систем для поддержки хранения записей. Это регламентируется Европейским законодательным актом по искусственному интеллекту — Proposal for a Regulation of The European Parliament And of The Council Laying Down Harmonized Rules on Artificial Intelligence (Artificial Intelligence Act) And Amending Certain Union Legislative Acts): (https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=CELEX%3A52021PC0206). При хранении данных включаются описания используемых наборов данных, спецификации моделей и результаты тестирования и применения данных. Соответствующие записи позволяют осуществлять надзор и дают возможность проводить аудит инструментов ИИ. Согласно Стандарту VI: Конфликты интересов. Специалисты должны предоставить полное и достоверное раскрытие процесса начисления вознаграждений частных брокеров и компании в целом, которые они получают за инвестиционные рекомендации. Также они должны обеспечить, чтобы клиентские сделки имели приоритет над любыми личными транзакциями. В случае автоматизированного консультирования инвестиционные профессионалы должны убедиться, что они понимают источники любого возможного конфликта, включая вопросы начисления вознаграждения. Они должны убедиться, что генерируемые с использованием алгоритмов системы для клиентских инвестиций не включают ненадлежащим образом оформленные предложения о вознаграждении при генерировании инвестиционных рекомендаций. Первостепенной на всех этапах обслуживания клиента должна быть задача, чтобы клиент не был скомпрометирован. Новации в сфере регулирования ИИ Несколько регулирующих ИИ органов по всему миру изучают вопросы разработки нормативно-правовой базы для использования ИИ в ряде отраслей, включая финансовые услуги. Среди наиболее заметных событий — Европейская комиссия в 2021 году опубликовала предложение по Закону об искусственном интеллекте (Artificial Intelligence Act). Предлагаемый закон является частью горизонтального законодательства, применимого ко всем отраслям и секторам, включая финансовые услуги. Это касается таких вопросов, как защита основных прав, безопасности и благополучия граждан, прозрачность требований и некоторые запреты. Анализу Закона об искусственном интеллекте и оценке его последствий для рынка финансовых услуг посвящена работа Buczynski (2022). Регламент Европейского союза об общей защите данных (GDPR), вступивший в силу в 2018 году, — еще один пример горизонтального законодательства. Он устанавливает законы, регулирующие обращение и защиту персональных данных, права физических лиц при обработке данных, согласие на маркетинг по электронной почте, конфиденциальность и другие вопросы. GDPR имеет широкий охват и практику применения. Это делает его актуальным по этическим соображениям при обработке данных. В 2018 году Денежно-кредитное управление Сингапура (Monetary Authority of Singapore — MAS) опубликовало набор принципов для продвижения справедливости, этики, подотчётности и прозрачности (fairness, ethics, accountability, and transparency — FEAT) при использовании искусственного интеллекта и аналитики данных в финансовом секторе Сингапура. Затем последовал запуск Veritas — инициативы по сотрудничеству между MAS и промышленностью для установления принципов, практики и исследования, чтобы помочь фирмам, предоставляющим финансовые услуги, в их оценке использования искусственного интеллекта и анализа данных в контексте Принципов FEAT. Инициатива Veritas также направлена на укрепление механизмов управления и защиты данных, связанных с использованием AI. Другие инициативы национальных регуляторов ценных бумаг и наднациональных органов проверяются Ме212 ждународной организацией комиссий по ценным бумагам (International Organization of Securities Commissions — IOSCO, 2021). Примечательно, что IOSCO включает обзор нормативных мер в юрисдикциях, таких как Соединенное Королевство (по вопросам управления и управляющим инвестициями, режиму сертификации); Франция (относительно распределения активов, надёжности алгоритмов и управлению); Китай (меры по совершенствованию управления данными и интеграция управления ИТ с корпоративным управлением); США (создание Комиссии Стратегического центра инноваций и финансовых технологий по ценным бумагам и биржам). Вопросы и задания к главе 4. 1. Дайте определение этики в финансовой сфере в соответствии со справочником по стандартам практики Института CFA. 2. В чем состоит важность парадигмы AI + HI? 3. Что такое целостность данных, и как её достичь? 4. Назовите критерии добросовестного применения технологий машинного обучения и искусственного интеллекта в практике финансово-инвестиционного консультирования. 5. Какие основные законы, инструкции и положения составляют современную регуляторную базу применения технологий искусственного интеллекта в финансово-экономической сфере? Заключение В результате изучения материала учебника «Машинное обучение в финансах» читатель получил навыки по работе с основными используемыми большинством аналитиков инструментами машинного обучения: языком программирования Питон и сборником библиотек для машинного обучения Пандас. По материалам учебника читатели изучили, как установить среду программирования, какие основные команды используются в коде Питона, как работать с многочисленными и разнообразными библиотеками Пандас, чем они отличаются и для каких задач используются. Так как учебник посвящён применению машинного обучения именно в финансовой сфере, у читателя теперь есть обширный практический, рабочий инструментарий, апробированный и разработанный отечественными профессорами и исследователями. Теперь читатель учебника знает, как обрабатывать финансовую информацию с помощью Питона и Пандаса, какие для этого существуют библиотеки, имеет примеры кода, сориентирован, какими ресурсами пользоваться и как. Так как технологии NLP сейчас активно продвигаются на всех направлениях, где применяется машинное обучение, в учебнике изучен код для непосредственного машинного обучения для этих целей. Так как материалы учебника могут использоваться для подготовки к экзамену на получение сертификата CFA Data Science for Investment Professionals Certificate, в соответствии с программой экзамена в учебнике раскрыты основное содержание разделов использования искусственного интеллекта при инвестировании: описано машинное обучение и применение Data Science в инвестициях, детально с примерами описаны модели машинного обучения для приме214 нения в работе современного финансиста, раскрыты показатели, инструменты и технологии машинного обучения в финансово-инвестиционной деятельности, даны характеристики практических приложений машинного обучения в инвестициях, дан свод этических правил применения искусственного интеллекта при управлении инвестициями. Программирование — динамичное направление деятельности. Каждый день происходят новые открытия, появляются новые программно-технические решения, устанавливаются новые нормативы по альфа — для управляющих инвестициями, создаются новые алгоритмы торговли, и новые роботы бьют новые рекорды по обеспечению доходности на рынке для своих клиентов. Поэтому читателю надо постоянно совершенствовать свои знания, следить за обновлениями программных продуктов и инвестиционных решений на финансовом рынке. Следует следить и за обновлением издания настоящего учебника и сайта c учебными материалами по машинному обучению на финансовых рынках: www.titmouse.ru, странички научного редактора издания https://vk.com/id238064872. Подписавшись на обновления на страничке в ВК, читатель будет в курсе всех последних тенденций финансового рынка и научной аналитики по событиям, происходящим на рынках. И не забывайте девиз учебника: &RGHILUVWWKLQNDIWHU vÓÈćÈãȹ¯ºĄ¯ÈääÒ¯®¹ººäąäÈ® Список литературы Аристов А.М. Роль цифровых технологий в повышении эффективности управления бизнес-процессами предприятия / А.М. Аристов, В.М. Аристов // Ученые записки Международного банковского института. — 2023. — № 2(44). — С. 7–18. — EDN TUZXFC. Горбатиков А.А. Применение новых технологий на основе искусственного интеллекта для безопасности данных в киберпространстве и в финансовом секторе / А.А. Горбатиков, А.С. Микуленков, С.А. Васильев // Ученые записки Международного банковского института. — 2021. — № 4(38). — С. 24–38. — EDN MZIQSW. Горбатиков А.А. Применение технологий цифровых двойников в предсказательной аналитике и решении бизнес-задач / А.А. Горбатиков, А.С. Микуленков // Ученые записки Международного банковского института. — 2022. — № 2(40). — С. 57–71. — EDN GSONPR. Затевахина А.В. Финансовая безопасность, финансовая устойчивость, финансовая стабильность социальноэкономических систем на мезоуровне: общее и особенное / А.В. Затевахина, С.А. Васильев // Ученые записки Международного банковского института. — 2021. — № 3(37). — С. 119–131. — EDN XEYMUG. Ключников О.И. Big Data в прогнозной аналитике банков / О.И. Ключников // Ученые записки Международного банковского института. — 2021. — № 1(35). — С. 43–60. — EDN NQJITF. Ключников И.К. Инвестиционная динамика энергоперехода с позиции теории игр / И.К. Ключников, И.А. Никонова, О.И. Ключников // Ученые записки Международного банковского института. — 2022. — № 4(42). — С. 76–93. — EDN DEZMJP. 216 Микуленков А.С. Искусственный интеллект: драйвер цифровой трансформации и источник экономических угроз / А.С. Микуленков // Ученые записки Международного банковского института. — 2022. — № 1(39). — С. 129– 146. — EDN JGYIUN. Abe M. and Nakayama H. 2018. “Deep Learning for Forecasting Stock Returns in the Cross-Section.” In Advances in Knowledge Discovery and Data Mining, edited by D. Phung, V. Tseng, G. Webb, B. Ho, M. Ganji and L. Rashidi, 273–84. Berlin: Springer Cham. Alberg J. and Lipton Z. 2017. “Improving FactorBased Quantitative Investing by Forecasting Company Fundamentals.” Cornell University, arXiv:1711.04837 (13 November). — URL: https://arxiv.org/abs/1711.04837 Arnott R., Harvey C. and Markowitz H. 2019. A Backtesting Protocol in the Era of Machine Learning // Journal of Financial Data Science 1 (1): 64–74. Avramov D., Cheng S. and Metzker L. 2022. “Machine Learning vs. Economic Restrictions: Evidence from Stock Return Predictability.” Management Science (29 June). Avramov D., Chordia T. and Goyal A. 2006. Liquidity and Autocorrelations in Individual Stock Returns // Journal of Finance 61 (5): 2365–94. Ayling J. and Chapman A. 2022. “Putting AI Ethics to Work: Are the Tools Fit for Purpose?” AI and Ethics 2: 405– 29. Bartram S., Branke J. and Motahari M. 2020. Artificial Intelligence in Asset Management // Literature review, CFA Institute Research Foundation. — URL: www.cfainstitute.org/ research/foundation/2020/ rflr-artificial-intelligence-in-asset-management (дата обращения: 02.08.2023). Birge J. and Zhang Y. 2018. Risk Factors That Explain Stock Returns: A Non-Linear Factor Pricing Model // Working paper (9 August). 217 Bonafede J. and Cook C. 2019. “Artificial Intelligence and Its Potential Impact on the CFA Institute Code of Ethics and Standards of Professional Conduct: A Consultation.” CFA Institute. — URL: www.cfainstitute.org/ethics-standards/ codes/standards-of-practice-guidance/ artificial-intelligence-a-consultation (дата обращения: 02.08.2023). Buczynski W. 2022. “The EU Artificial Intelligence Act and Financial Services.” Enterprising Investor (blog), CFA Institute (6 April). — URL: https://blogs.cfainstitute.org/ investor/2022/04/06/the-eu-artificial-intelligence-act-and-financial-services/ (дата обращения: 02.08.2023). Cao K. and You H. 2021. Fundamental Analysis via Machine Learning // Emerging Finance and Financial Practices eJournal. Cao Larry. 2018. “Artificial Intelligence, Machine Learning, and Deep Learning: A Primer.” Enterprising Investor (blog; 13 February). — URL: https://blogs.cfainstitute.org/ investor/2018/02/13/artificial-intelligence-machinelearning-and-deep-learning-in-investment-managementa-primer/ (дата доступа: 02.08.2023). Cao L. 2019. “AI Pioneers in Investment Management.” CFA Institute. — URL: www.cfainstitute.org/-/media/ documents/survey/AI-Pioneers-in-Investment Management.pdf (дата обращения: 02.08.2023). Cao L. T-Shaped Teams: Organizing to Adopt AI and Big Data at Investment Firms. CFA Institute. — URL: www.cfainstitute.org/research/ industry-research/t-shapedteams (дата обращения: 02.08.2023). Chen M., Lee J. and Mussalli G. 2020. Teaching Machines to Understand Chinese Investment Slang // Journal of Financial Data Science 2 (1): 116–25. Choi D., Jiang W. and Zhang C. 2022. Alpha Go Everywhere: Machine Learning and International Stock Returns // Working paper (29 November). — URL: https://papers.ssrn. 218 com/ sol3/papers.cfm?abstract_id=3489679 (дата обращения: 02.08.2023). Columbus Louis. 2020. “The State of AI Adoption In Financial Services.” Forbes (31 October). — URL: www.forbes. com/sites/ louiscolumbus/2020/10/31/the-state-of-ai-adoption-infinancial-services/?sh=1a4f7be62aac (дата обращения: 02.08.2023). Daul S., Jaisson T. and Nagy A. 2022. Performance Attribution of Machine Learning Methods for Stock Returns Prediction // Journal of Finance and Data Science 8 (November): 86–104. Fama E. and French K. 1993. Common Risk Factors in the Returns on Stocks and Bonds // Journal of Financial Economics 33 (1): 3–56. Fender R. and Munson R. 2022. “Enhancing Investors’ Trust: 2022 CFA Institute Investor Trust Study.” CFA Institute. URL: https://trust.cfainstitute.org/wp-content/ uploads/2022/04/Enhancing-Investors-Trust. Report_2022_Online.pdf (дата обращения: 02.08.2023). Goodfellow I., Bengio Y. and Courville A. 2016. Deep Learning. Cambridge, MA: MIT Press. Grinold R. and Kahn R. 1999. Active Portfolio Management: A Quantitative Approach for Producing Superior Returns and Controlling Risk. New York: McGraw Hill. Gu S., Kelly B. and Xiu D. 2020. Empirical Asset Pricing via Machine Learning // Review of Financial Studies 33 (5): 2223–73. Hagendorff T. 2020. “The Ethics of AI Ethics: An Evaluation of Guidelines.” Minds and Machines 30: 99–120. Halevy A., Norvig P. and Pereira F. 2009. “The Unreasonable Effectiveness of Data.” IEEE Intelligent Systems 24 (2): 8–12. Hanauer M. and Kalsbach T. 2022. Machine Learning and the Cross-Section of Emerging Market Stock Returns // Working paper (5 December). 219 Harvey C., Liu Y. and Zhu H. 2016. …and the Cross-Section of Expected Returns // Review of Financial Studies 29 (1): 5–68. Hastie T., Tibshirani R. and Friedman J. 2009. The Elements of Statistical Learning: Data Mining, Inference, and Prediction, 2nd ed. New York: Springer. Hong Kong Institute for Monetary and Financial Research. 2021. “Artificial Intelligence and Big Data in the Financial Services Industry: A Regional Perspective and Strategies for Talent Development.” HKIMR Applied Research Report № 2/2021. Hou K., Dijk M. van and Zhang Y. 2012. The Implied Cost of Capital: A New Approach // Journal of Accounting and Economics 53 (3): 504–26. Hou K., Xue C. and Zhang L. 2020. Replicating Anomalies // Review of Financial Studies 33 (5): 2019–133. Institute of Business Ethics. 2018. “Business Ethics and Artificial Intelligence.” Briefing, Issue 58 (January). IOSCO. 2021. “The Use of Artificial Intelligence and Machine Learning by Market Intermediaries and Asset Managers: Final Report.” FR06/2021 (September). Jessen C. and Lando D. 2013. “Robustness of Distanceto-Default.” 26th Australasian Finance and Banking Conference 2013 (16 August). Jobin A., Ienca M. and Vayena E. 2019. “The Global Landscape of AI Ethics Guidelines.” Nature Machine Intelligence 1: 389–99. KPMG. 2021. Algorithmic Bias and Financial Services. — URL: www.finastra.com/sites/default/files/ documents/2021/03/market-insight_algorithmic-bias financial-services.pdf (дата обращения: 02.08.2023). Leippold M., Wang Q. and Zhou W. 2022. Machine Learning in the Chinese Stock Market // Journal of Financial Economics 145 (2): 64–82. 220 Leung E., Lohre H., Mischlich D., Shea Y. and Stroh M. 2021. The Promises and Pitfalls of Machine Learning for Predicting Stock Returns // Journal of Financial Data Science 3 (2): 21–50. Li Y., Simon Z. and Turkington D. 2022. Investable and Interpretable Machine Learning for Equities // Journal of Financial Data Science 4 (1): 54–74. Li Y., Turkington D. and Yazdani A. 2020. Beyond the Black Box: An Intuitive Approach to Investment Prediction with Machine Learning // Journal of Financial Data Science 2 (1): 61–75. Lipton Z. 2016. “The Mythos of Model Interpretability.” Cornell University, arXiv:1606.03490 [cs.LG] (10 June). — URL: http://arxiv.org/abs/1606.03490. Lo Andrew W. 2021. The Financial System Red in Tooth and Claw: 75 Years of Co-Evolving Markets and Technology // Financial Analysts Journal 77 (3): 5–33. Lo A., Repin D. and Steenbarger B. 2005. Greed and Fear in Financial Markets: A Clinical Study of Day-Traders // NBER Working Paper № w11243. López de Prado M. 2018. The 10 Reasons Most Machine Learning Funds Fail // Journal of Portfolio Management 44 (6): 120–33. López de Prado M. 2019. Ten Applications of Financial Machine Learning // Working paper (22 September). Lundberg S. and Lee S.. 2017. “A Unified Approach to Interpreting Model Predictions.” NIPS 17: Proceedings of the 31st Conference on Neural Information Processing Systems: 4768–77. McLean R. and Pontiff J. 2016. Does Academic Research Destroy Stock Return Predictability? // Journal of Finance 71 (1): 5–32. 221 Mikolov T., Yih W. and Zweig G. 2013. “Linguistic Regularities in Continuous Space Word Representations.” Proceedings of NAACL-HLT 2013: 746–51. www.aclweb.org/ anthology/N13–1090.pdf (дата обращения: 02.08.2023). Nadeem, Monisa. 2018. “Clearing the Confusion: AI vs. Machine Learning vs. Deep Learning.” Global Tech Council (25 November). — URL: www.globaltechcouncil.org/artificial-intelligence/clearing-the-confusion-ai-vs-machine-learning-vsdeep-learning/ (дата обращения: 02.08.2023). Mittelstadt B., Russell C. and Wachter S. 2019. “Explaining Explanations in AI.” FAT* ‘19: Proceedings of the Conference on Fairness, Accountability, and Transparency (January): 279–88. Molnar C. 2020. “Interpretable Machine Learning: A Guide for Making Black Box Models Explainable. — URL: https:// christophm.github.io/interpretable-ml-book/ (дата обращения: 02.08.2023). Philps D. 2021. “Machine Learning: Explain It or Bust.” Enterprising Investor (blog), CFA Institute (26 November). — URL: https://blogs.cfainstitute.org/investor/2021/11/26/ machine-learning-explain-it-or-bust/ (дата обращения: 02.08.2023). Rasekhschaffe K. and Jones R. 2019. Machine Learning for Stock Selection // Financial Analysts Journal 75 (3): 70– 88. So E. 2013. A New Approach to Predicting Analyst Forecast Errors: Do Investors Overweight Analyst Forecasts? // Journal of Financial Economics 108 (3): 615–40. Robeco Tobek O. and Hronec M. 2021. Does It Pay to Follow Anomalies Research? Machine Learning Approach with International Evidence // Journal of Financial Markets 56 (November). Standards of Practice Handbook, 11th edition. Charlottesville, VA: CFA Institute. — URL: www. cfainstitute.org/-/me222 dia/documents/code/code-ethics-standards/standards-practice-handbook-11th-ed-eff-July-2014-corr-sept-2014.pdf (дата обращения: 02.08.2023). Swinkels L. and Hoogteijling T. 2022. Forecasting Stock Crash Risk with Machine Learning // White paper. (дата обращения: 02.08.2023). Vaidyanathan N. 2020. “Explainable AI: Putting the User at the Core.” ACCA (12 February). Zetzsche D.A., Arner D., Buckley R. and Tang B. 2020. Artificial Intelligence in Finance: Putting the Human in the Loop // CFTE Academic Paper Series, University of Hong Kong Faculty of Law Research Paper № 2020/06. Учебное издание lkbjss|p|r psjp {njsksvkt Учебник для магистратуры Под редакцией С.Ю. Богатырева Публикуется в авторской редакции Верстка Челюканов А.В. Дизайн обложки Вершинина И.А. Издательство «Прометей» 119002 Москва, ул. Арбат, д. 51, стр. 1 Тел.: +7 (495) 730-70-69 E-mail: [email protected] Подписано в печать 15.09.2023 Формат 60×84/16. Объем 14,0 п. л. Тираж 500 экз. Заказ № 1742