Автор - Равиндра Шукла (практик AI / ML)

Аннотация. Матричная факторизация - это очень мощный алгоритм с множеством ценных вариантов использования в различных отраслях. Некоторые из хорошо известных приложений матричной факторизации - это приз Netflix в 1 миллион долларов за рекомендацию фильмов и онлайн-приложение Amazon (значительно усовершенствованная версия) для рекомендации книг различным читателям. Хотя это очень популярный метод, у него есть некоторые ограничения. Наша цель в данной статье - понять скрытые факторы и то, как сделать их более предписывающими. Алгоритм работает хорошо, когда у нас есть продукты в наборе, уже оцененные несколькими пользователями, ИЛИ каждый пользователь оценил несколько продуктов. Однако, если мы включаем в набор новые продукты, которые не были оценены каким-либо пользователем, или новых пользователей в набор, чьи предпочтения в отношении продуктов неизвестны, будет сложно создать рекомендацию для продуктов без рейтинга и новых пользователей. Существуют проблемы, связанные с установлением взаимосвязи между основными характеристиками продуктов и предпочтениями пользователей на основе ключевых характеристик. В приведенном ниже документе рассматривается проблема интерпретации скрытых факторов, связанных с продуктом и пользовательскими функциями. Как только у нас появится ясность в отношении продуктов и пользовательских функций, мы можем перейти к предписывающему пути. Это поможет в разработке будущих продуктов с более популярными функциями ИЛИ в поиске рынка для определенного продукта.

Предыстория - я обычно цитирую Википедию, чтобы понять основные термины и предысторию.

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

Https://en.wikipedia.org/wiki/Matrix_factorization_(recommender_systems)

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

Примеры использования матричной факторизации -

· Маркетинговая стратегия

· Перекрестные продажи и дополнительные продажи

· Рассчитайте предпочтения продукта и покупателя

· Механизм рекомендаций / Персонализация

· Запуск новых продуктов

· Понимание customer360

· Фильтрация и рекомендации на сайтах вакансий

· Фильтрация и рекомендации на сайтах супружеских пар и знакомств

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

Новаторское использование. Фактически в одном из наших предыдущих проектов мы использовали факторизацию матрицы для заполнения недостающих значений в наборе данных. Упражнение заключалось в подсчете оценки состояния здоровья (концепция, очень похожая на кредитную оценку - где более высокая оценка состояния здоровья свидетельствует о лучшем состоянии здоровья). Допустим, нам не хватает показаний A1C для одного пациента (P1), мы можем сопоставить - какие другие пациенты имеют схожие характеристики (возраст, пол, ИМТ, демография, артериальное давление, холестерин, образ жизни и т. Д.) С пациентом P1 и оценить A1C. чтение P1 соответственно.

Основы машинного обучения - использование матриц и векторов

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

Машинное обучение основано на математике, которая включает в себя итеративную оптимизацию на основе градиентного спуска (https://en.wikipedia.org/wiki/Gradient_descent) для минимизации ошибки прогнозирования. Данные, которые хранятся в базе данных, не могут быть переданы в качестве входных данных для алгоритмов, они должны быть представлены в виде матрицы. Матрица - это комбинация различных векторов, которая полезна при определении математических операций.

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

Точно так же мы можем определить основные характеристики пациента на основе его биометрических показаний.

Такие продукты, как ноутбук, будут иметь такие функции, как сенсорный экран, оперативная память, процессор, марка, цвет, стоимость (диапазон) и т. Д. Такие продукты, как книга, будут иметь такие функции, как: автор, тема, период написания, жанр, поэзия или проза. , Художественная литература и научная литература, Длинные и короткие, твердый или мягкий переплет, бумажная копия или электронная книга, технические книги и т. Д.

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

Представление экземпляра объекта в математическом выражении - Давайте посмотрим, как представить пациента в N-измерении с ключевыми характеристиками -

У пациента могут быть следующие ключевые особенности (пример) -

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

· Имя - аналогично идентификатору пациента, не имеет значения в ML.

· Другая демографическая информация (раса, этническая принадлежность, семейное положение, доход, образование и занятость)

· Возраст - от 0 до 120 лет

· Пол - мужской или женский

· Местоположение (штат, страна)

· Биометрические показатели (артериальное давление - систолическое (диапазон - 0–200, диастолическое - 0–200), уровень сахара в крови 0–400, A1C (0–10), холестерин (0–400), курение - да или нет, Хроническое состояние - Да или Нет, Коморбидность - Да или Нет)

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

Запись пациента в базе данных Epic System -

Экземпляр пациента (запись) будет храниться в обычной базе данных, как показано ниже -

Чтобы представить пациента в N измерениях в виде вектора (P), чтобы мы передавали его в качестве входных данных в алгоритм ML -

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

Вышеупомянутое представление экземпляра пациента называется вектором P. Мы объединяем все экземпляры вектора пациента для создания матрицы пациента P.

Что означает умножение векторов -

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

A = a1.i + a2.j + a3.k - вектор A в трех измерениях (скажем - это вектор характеристик пользователя)

B = b1.i + b2.j + b3.k - вектор B в трех измерениях (скажем, это вектор характеристик продукта)

A x B = a1.b1 + a2.b2 + a3.b3 - Умножение векторов A и B

Допустим, i представляет безопасность / защищенность, j представляет семейный автомобиль, а k представляет коэффициент производительности продукта и вектора пользователя. Значение (AxB) будет выше для пользователя, который предпочитает более производительный семейный автомобиль с хорошими функциями безопасности. Для пользователя, который предпочитает спортивный автомобиль с высокими затратами на обслуживание, будет более низкое значение AxB для того же автомобиля. Мы ясно видим, что более высокое значение AxB будет указывать на большую близость пользователя A к продукту B. Давайте рассмотрим пример, чтобы понять - каково значение умножения двух векторов.

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

Если мы умножим два вектора -

P1 (экземпляр пользователя Neeru) x Q1 (семь самураев - экземпляр продукта) = (.8x1 + .1x.2 + .3x.5 + .9x.8 + 1x1 + .4x0 + .4x.8 +. 2x,2 + 0,7x1) = 3,75

P1 (экземпляр Neeru пользователя) x Q2 (Blair Witch - экземпляр продукта) = (.8x.2 + .1x.8 + .3x.3 + .9x.4 + 1x0 + .4x.2 + .4x .6 + .2x.6 + .7x0) = 1,13

Это ясно указывает на то, что Ниру предпочитает смотреть «Семь самураев», а не «Ведьму из Блэр».

Интерпретация скрытых факторов -

Факторизация матрицы основана на следующем уравнении -

R = P x QT

· R - это матрица продуктов, оцененных разными пользователями

· P - матрица пользователя

· Q - матрица продуктов

· QT - транспонированная матрица Q

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

Те же уравнения с размерами, приведенными выше, можно записать как -

R [M, N] = P[M, K] x QT[K, N]

R [i, j] - Стоимость оцененного продукта j (Qj) от пользователя i (Pi)

Q [i] [1, 2, 3,… .k] = вектор продукта Qi с k ключевыми характеристиками
P [j] [1, 2, 3,… .k] = вектор пользователя Pi, определяемый k ключами Особенности

Мы предполагаем, что в приведенном выше уравнении есть K скрытых функций.

Каковы скрытые факторы?

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

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

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

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

Фактически, когда я увеличил значение K и попробовал несколько интеграций - я начал получать разные комбинации коэффициентов матрицы P и Q.

Расшифровка разложения матрицы -

Разберем детали на примере.

R Matrix - рейтинг 4 разных товаров 8 пользователями.

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

R [8x4] = P[8x4] X Q[4x4]

P (матрица пользователей) - расширена для четырех скрытых функций

QT (транспонирование матрицы продуктов - Q) - расширено для четырех скрытых факторов

Это чисто математическое упражнение, в котором нам известны значения матрицы - R (известны не все рейтинги). Мы начинаем с инициализации матрицы пользователя и матрицы продукта случайными значениями.

Пользовательский рейтинг U4 для продукта P2 (u4p2) - это произведение двух векторов - User (u4) и Product (p2).

u4p2 = u41.p21 + u42.p22 + u43.p23 + u44.p24

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

Давайте снова посмотрим на уравнение матричной факторизации -

R = P x Q

Здесь P и Q неизвестны. Известны лишь некоторые коэффициенты значений R (продукты, оцениваемые пользователями).

Существует несколько пар решений (P, Q) для R, когда оба P и Q - переменные.

u4p2 = u41.p21 + u42.p22 + u43.p23 + u44.p24

Оригинальная матрица R -

Выделенные ячейки - это те ячейки, которые не были оценены пользователями. Они становятся тестовыми клетками.

Неосвещенные ячейки - это то место, где мы уже знаем рейтинги продуктов.

Я пробовал несколько итераций для решения значений матриц P и Q и каждый раз получал разные результаты Q.

Итерация-1:

X - прогнозируемые значения для рейтинга продукта пользователя (R - исходная матрица)

P - Пользовательская матрица после де-факторизации

Q - Матрица продуктов после де-факторизации

Итерация-2: результат итерации-2

Итерация-3: результат итерации-3

Итерация-4: результат итерации-4

Проще говоря - у нас есть 8x4 + 4x4 = 48 переменных, но меньше 32 уравнений. Итак, очевидно - у нас будет несколько пар для матриц P и Q.

Это борьба только за то, чтобы получить согласованное значение P и Q, помимо интерпретации того, что означают k1, k2, k3, k4? Если у нас нет последовательности в получении сходящихся значений P и Q, наши прогнозы для продуктов без рейтинга будут продолжать колебаться.

Проблемы с текущей моделью -

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

1. Количество скрытых факторов неизвестно.

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

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

Решение -

Когда у нас есть только одно уравнение R = P x Q, один из способов решить это - исправить переменную Q (характеристики продукта), чтобы нам приходилось иметь дело только с одной переменной (P - характеристики пользователя).

Эмпирическое мышление - неплохой вариант. Если мы продаем определенные продукты, нам лучше знать, каковы их функции и сколько ключевых функций у нас есть.

Давайте поймем, как фиксация значения K и матрицы Q поможет в получении согласованных результатов для P и сходящемся прогнозе для значения R.

Когда мы проанализировали приведенное выше уравнение -

Рейтинг продукта (u4p2) = u41.p21 + u42.p22 + u43.p23 + u44.p24

Вектор характеристик пользователя - u4 = u41.i + u42.j + u43.k + u44.t

Вектор характеристик продукта - p2 = p21.i + p22.j + p23.k + p24.t

где i, j, k, t - четыре различных размерности вектора. Каждому измерению соответствует уникальная особенность.

Когда мы фиксируем значение Q равным -

Мы начинаем получать согласованность значения P и прогнозируемых значений рейтинга (X) и пользовательской матрицы - P -

Итерация-1:

Пользовательская матрица (P) начинает сходиться. См. Значения для итераций 2, 3 и 4.

Итерация-2:

Итерация-3:

Итерация-4:

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

Теперь остается главный вопрос - как исправить товарную матрицу?

Вариант-1:

Количество функций - K - должно быть оценено на основе понимания характеристик продукта.

Значения коэффициентов для матрицы продукта - могут варьироваться от 0 до 1 (0 означает, что функция не влияет на продукт, 1 означает, что функция оказывает наибольшее влияние на продукт).

Как только мы узнаем, что означают характеристики (k1, k2,… .Kn), мы можем назначить коэффициенты в диапазоне от 0 до 1 в зависимости от их вклада в качество продукта.

И бизнес-МСП, и технические группы должны работать вместе, чтобы определить начальные ключевые характеристики и определить вес коэффициентов.

Вариант-2:

Количество характеристик - K - должно быть оценено на основе понимания характеристик продукта (аналогично варианту-1).

Теперь де-факторизуйте матрицу R и определите матрицы P и Q за пару итераций. Сделайте наилучшее предположение на основе двух итераций значений Q и понимания характеристик продукта.

Зафиксируйте значение Q и решите матрицу P. Коэффициенты матрицы P сойдутся, как только матрица Q будет зафиксирована.

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

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

Краткое изложение основных шагов -

1. Предположим, K - на основе понимания характеристик продукта.

2. Начните со случайных значений коэффициентов P и Q.

3. Выполните итерации и определите первый набор значений P и Q.

4. Просмотрите коэффициенты Q - постарайтесь согласовать Q с характеристиками продукта (характеристики продукта / предметов должны быть известны).

5. Зафиксируйте значение Q и количество ключевых характеристик (K - скрытые факторы)

6. Настройте матрицу Q (характеристики продукта).

7. Используйте скорректированное значение Q, чтобы определить значение P

Важные моменты, о которых следует помнить -

Я проигнорировал предвзятость пользователя в оценке продукта (просто чтобы упростить расчет).

Характеристики продукта соответствуют индивидуальному измерению. Размеры перпендикулярны друг другу. В векторе признаков не должно быть коллинеарности.

Пока мы определяем характеристики продукта, скажем, k1, k2, k3, k4… мы можем интерпретировать исходное значение, придаваемое различным скрытым факторам, на основе относительных значений коэффициентов (более высокие доминирующие характеристики будут иметь более высокий коэффициент).

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

Заключение -

Недавно я смотрел выступление генерального директора Google (Сундар Пичаи) на конференции Google 2018 I / O, где он говорил о прогнозировании сердечно-сосудистых событий на основе сканированного изображения глаза.

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

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

Измеряя изменения / условия сканирования глаз, мы можем определить вероятность остановки сердца.

Точно так же мы можем найти много других применений - корреляцию болезней и качества воды в разных местах.

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

Объект 1 (E) - различные типы сканированных изображений глаз

Объект 2 (H) - Различные типы сердечных заболеваний.

Скрытые факторы - векторами признаков являются различные виды деятельности, предыдущая история болезни, демография и т. Д. Они выступают в качестве входных данных в моделях глубокого обучения. Мы можем собирать различные данные о пациентах: сканирование глаз и сердечные заболевания. Используя матричную факторизацию - мы можем определить корреляцию между двумя сущностями.

Недавно я узнал - рак простаты очень распространен в Восточной UP. Нам просто нужно собрать данные о разных местах и ​​заболеваниях, распространенных в этой области, понять, каковы возможные скрытые факторы, и углубиться в рецептную медицину. Это может быть очень полезно в контексте управления здоровьем населения (ACO).

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

Аудитория. Для реализации проекта по науке о данных требуется сотрудничество как бизнес-команды, так и технической группы (группы инженерии и обработки данных). Группа по науке о данных разрабатывает алгоритм для моделирования данных и оценки производительности, в то время как бизнес-группа помогает понять особенности продукта и собрать соответствующие данные для моделирования.

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

Ссылки -

Https://www.youtube.com/watch?v=MSpF84kevyU

Http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/

Https://en.wikipedia.org/wiki/Matrix_factorization_(recommender_systems)

Https://www.youtube.com/watch?v=XkY2DOUCWMU&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab&index=5&t=0s

Http://infolab.stanford.edu/~ullman/mmds/ch9.pdf