Эта статья нацелена на то, чтобы сделать анализ основных компонентов, в основном сокращенно сокращенно PCA, простым для понимания и иметь ментальную модель, чтобы знать, когда его использовать и как использовать эту прекрасную технику. Я чувствую, что необходимо подходить к этому с подхода сверху вниз, а не снизу вверх, который погружается прямо в определение PCA, а затем объясняет его использование, прежде чем приводить проблемы и варианты использования. Таким образом, я начну с вариантов использования PCA в современных приложениях, которые окружают нас ежедневно, и использую аналогию с лесом, чтобы донести мысль, звучит интересно! Держитесь крепче, нам предстоит долгая поездка.

Если после прочтения аналогии с лесом для объяснения PCA вы сможете понять основную концепцию, то вы можете пропустить оставшуюся часть статьи и перейти к части реализации PCA, используя финансовый пример для реализации портфеля акций, который может превзойти S&P500 возвращается, но сначала давайте посмотрим на некоторые случаи в нашей жизни, когда мы столкнулись или использовали PCA.

Варианты использования PCA в реальных приложениях

  1. Распознавание лица: Гота! О да, каждый раз, когда вы смотрите фильм со сценой ФБР, используя камеры видеонаблюдения, чтобы обнаружить преступника или похожего на героя персонажа, такого как профессор в популярном шоу Netflix Casa the Papel, PCA был в игре. Поскольку PCA уменьшает размеры данных, связанных с чертами лица, это позволяет легко распознавать лица в видео и новостях.
  2. Визуализация сетевого трафика: Гота второй раз! Мы все используем карты Google и другие навигационные приложения на своих телефонах, когда опаздываем на работу, в школу или на свидание. Итак, PCA в действии, помогая вам легко визуализировать сетевой трафик за счет уменьшения размерности сетевого трафика и шума.
  3. Сжатие изображения: Гота в третий раз! Вы помните, когда в последний раз вам приходилось загружать свое изображение на веб-сайт, требующий максимального размера, или в первые дни большинства приложений для обмена сообщениями, когда вам приходилось сжимать изображения для отправки другу? Что ж, PCA за кулисами сделал это волшебство, поэтому вы уменьшаете размер изображения без потери качества. Это делается путем уменьшения размеров изображения с реалистичного примера 4096 размеров до 100 и гула.

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

Некоторые из вас, ребята, заметили это, и да, это сокращение размерности, сформулированное по-другому с гудением в конце таких фраз.

Так что же такое уменьшение размерности?

Это лежит в основе PCA и объясняет, почему и что такое PCA. Если вы встречались со многими специалистами по данным с большим математическим опытом, вы, должно быть, сталкивались с модной фразой «проклятие размерности», и она звучала как какой-то другой жаргон науки о данных, в который вы не хотели вникать. Ну, не пытаясь утомить вас тяжелым объяснением размерности и векторного пространства, все сводится к тому факту, что слишком много функций в вашем наборе данных создает много шума, влияя на точность и время обучения модели машинного обучения.

Чтобы довести мысль до конца, давайте воспользуемся аналогией с лесом, где мы идем в большой лес, и вертолет используется для полета над лесом, и нам говорят отделить деревья от леса. Ну, я знаю, что вы слышали об этом термине «отделение деревьев от леса». Тем не менее, было важно иметь это визуальное понимание, чтобы, когда вы думаете об этом и понимаете, как трудно вашей лобной доле обрабатывать эту информацию и почти падать во сне, это та же логика, которая применяется к компьютеру при попытке обрабатывать слишком много функций, чтобы определить выходную переменную. Таким образом, пытаясь разобраться в сложной ситуации, которая на самом деле не сложна сама по себе, но со многими атрибутами, которые делают ее сложной, PCA приходит на помощь, подобно нашему любимому супергерою Тору, чтобы мы могли иметь ясность и смысл в определении основных компонентов и того, как основные компоненты влияют на целевую переменную, тем самым отделяя деревья от леса. Если вы дочитали до этого места, я думаю, теперь мы можем погрузиться в некоторые технические подробности того, что такое PCA, когда его использовать и как его использовать, но прежде давайте подведем итоги, почему PCA.

Зачем использовать PCA?

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

Что такое PCA?

Анализ основных компонентов — это неконтролируемая задача предварительной обработки для уменьшения размерности, которая извлекает основные функции с использованием «ортогонального линейного преобразования», которое представляет собой причудливое математическое слово, используемое для обозначения того, что эти данные преобразуются из пространства высокой размерности в пространство низкой размерности, что позволяет преобразовать данные. чтобы сохранить некоторые основные свойства исходных данных. Таким образом, используя PCA, «мы применяем ортогональное преобразование, которое делает коррелированные переменные некоррелированными», имейте это в виду, когда мы будем двигаться дальше. Давайте попробуем углубиться для ясности, изучив двумерный набор данных, где каждая функция представлена ​​​​столбцом.

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

Используя наш двумерный набор данных. Мы можем представить каждую функцию в следующей матрице со столбцами функций.

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

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

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

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

Что PCA позволяет нам делать, так это представлять исходные векторы признаков данных, представляя данные как линейные комбинации основных компонентов. Таким образом, главный компонент эквивалентен линейному преобразованию данных от оси feature1 x feature2 к оси PCA1 x PCA2.

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

Когда использовать PCA?

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

Как мы рассчитываем PCA?

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

  1. Стандартизация функций. Мы стандартизируем функции, чтобы иметь общую единицу измерения для функций, например набор финансовых данных, содержащий переменные с некоторыми единицами измерения 1000 (тысячи) и другой переменной в 10⁹ (миллиарды). большая переменная оказывает более доминирующее влияние на модель. Таким образом, мы стандартизируем, чтобы иметь единообразные и непротиворечивые данные с меньшим влиянием посторонних/несогласованных данных, и гарантируем, что наш алгоритм машинного обучения не чувствителен к масштабируемым данным. Используя стандартизацию, мы имеем среднее значение 0 и дисперсию 1.
  2. Рассчитайте ковариационную матрицу. Напомним, что в нашем наборе данных предполагается мультиколлинеарность, которая представляет собой производную ковариации, деленную на квадратный корень из стандартного отклонения двух признаков. Ковариационная матрица представляет собой квадратную матрицу размеров d x d, которая представляет столбцы функций, но мы используем d для других размеров. Это иллюстрирует попарную корреляцию между признаками.
  3. Вычисление собственных векторов и собственных значений из ковариационной матрицы:мы вычисляем собственные векторы и связанные с ними собственные значения ковариационной матрицы. Из-за того, что мы не делаем никаких математических расчетов и пытаемся абстрагировать математические уравнения, мы входим в уравнение здесь, так как хотим быть краткими, но было бы полезно пересмотреть основы алгебры .
  4. Сортировка собственных векторов в порядке убывания с использованием собственных значений.На этом этапе мы используем собственные векторы для определения главных компонентов, просто помещая собственный вектор с наибольшим собственным значением в качестве первого главного компонента, за которым следует следующий по величине собственный вектор с второе по величине собственное значение в качестве второго главного компонента и т. д. и т. д. до последнего. Таким образом, собственные значения используются для измерения количества общей дисперсии, и чем выше собственные значения, тем больше объясняется количество общей дисперсии, что является причиной сортировки по убыванию объяснимости общей дисперсии.
  5. Выберите количество основных компонентов: Здесь мы просто выбираем наибольшее количество компонентов, выбирая собственные векторы, которые будут представлять наши основные компоненты.

Практическое использование PCA в наборе финансовых данных.

Я предпочитаю финансовые данные, потому что их легко получить, а мое личное предпочтение в отношении финансов связано с тем, что у меня есть опыт работы в сфере финансов. Итак, мы стремимся построить портфель из индекса S&P 500. Ссылка на код будет предоставлена ​​в конце этой статьи.

Я буду использовать блокнот Jupyter, но вы можете просто использовать Google Collab для быстрой попытки.

  • Первая часть этого кода использует функцию save_500_ticker для извлечения списка S&P 500 из Википедии с помощью Beautiful Soup, а цены берутся из библиотеки Yahoo Finance.

Затем ежедневная доходность рассчитывается с использованием логарифмической доходности и наносится на график.

Затем мы приступаем к использованию PCA от SkLearn для расчета первого главного компонента ежедневной доходности. Это делается после обработки отсутствующих значений с помощью 0, потому что PCA не работает со значениями NaN.

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

Мы приступаем к построению кумулятивной доходности построенного портфеля PCA, который сравнивается с кумулятивной доходностью S&P 500.

Мы приступаем к построению графика акций с наибольшим и наименьшим весом в первом основном компоненте по сравнению с кумулятивной доходностью индекса S&P500 для 10 лучших акций в первом основном компоненте.

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

Бонус (для таких самопровозглашенных финансовых ботаников, как я).

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

Если вы находитесь на Mac после установки OpenBB

  • Нажмите cmd + пробел и введите OpenBB
  • Наберите в терминале «stock».
  • Введите «ca» в терминале
  • Наберите в терминале «set CZR,NCLH,CCL,RCL,LNC,APA,TRGP,MGM,UAL,DXC» [список акций из топ-10 портфеля PCA после использования print(pc1.nsmallest(10)].
  • Введите «денежный поток», чтобы увидеть отчет о движении денежных средств, или «доход», чтобы просмотреть отчет о прибылях и убытках.
  • Счастливого исследования!

Если вы используете терминал OpenBB, то у вас должно быть что-то похожее на это.

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

Ссылка на кодовую базу Github.

Свяжитесь со мной вLinkedIn