Введение:

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

Понимание концепции ранжирования:

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

Введение в LambdaMART:

LambdaMART — это мощный алгоритм, который произвел революцию в области обучения для ранжирования. Разработанный на основе повышения градиента и LambdaRank, LambdaMART сочетает в себе сильные стороны обоих подходов для создания высокоточных и эффективных моделей ранжирования. Благодаря способности обрабатывать крупномасштабные наборы данных и напрямую оптимизировать показатели ранжирования, LambdaMART стал популярным выбором для решения сложных задач ранжирования. Используя ансамблевое обучение и деревья решений, LambdaMART учится принимать обоснованные решения об относительном порядке элементов, что позволяет создавать персонализированные и контекстуально релевантные рейтинги. Будь то страницы результатов поисковых систем, рекомендательные системы или другие приложения ранжирования, понимание LambdaMART открывает мир возможностей для профессионалов, стремящихся улучшить поиск информации и взаимодействие с пользователем.

Импорт библиотеки

import snowflake.connector
import csv
import pandas as pd
from google.cloud import bigquery
from sklearn.model_selection import train_test_split

Подготовка данных:

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

#Reading data file into data
data = pd.read_csv("data.csv")
data.head()

Здесь у меня есть несколько категориальных столбцов. Мне нужно одно горячее кодирование столбцов

# columns to encode
columns_to_encode = ['device_type', 'language', 'currency','is_internal_trip', 'country', 'destination_country']

# Perform one-hot encoding
encoded_cols = []
for column in columns_to_encode:
    encoded = pd.get_dummies(data[column], prefix=column)
    encoded_cols.append(encoded)

# Drop the original columns from the DataFrame
data.drop(columns_to_encode, axis=1, inplace=True)

# Concatenate the encoded columns with the original DataFrame
data = pd.concat([data] + encoded_cols, axis=1)
train_df = data[:80000]  # first 80%
validation_df = data[20000:]  # remaining 20%
# here I am taking 1st 80000 entries for train but you can use train_test_split
qids_train = train_df.groupby("query_id")["query_id"].count().to_numpy()
X_train = train_df.drop(["query_id", "interaction_action_number"], axis=1)
y_train = train_df["interaction_action_number"]

qids_validation = validation_df.groupby("query_id")["query_id"].count().to_numpy()
X_validation = validation_df.drop(["query_id", "interaction_action_number"], axis=1)
y_validation = validation_df["interaction_action_number"]

Данный код отвечает за подготовку наборов данных для обучения и проверки для алгоритма LambdaMART. Вот разбивка каждого шага:

Группировка по идентификатору запроса:

  • train_df DataFrame группируется по столбцу 'query_id' с использованием функции groupby().
  • Функция count() применяется к сгруппированному кадру данных для определения количества экземпляров для каждого запроса.
  • Метод to_numpy() преобразует значения счетчика в массив NumPy.
  • Полученный массив присваивается переменной qids_train, представляющей идентификаторы запросов в обучающем наборе данных.

Подготовка данных для обучения:

  • X_train DataFrame создается путем удаления столбцов «query_id» и «interaction_action_number» из train_df.
  • Остальные столбцы в X_train содержат функции, используемые для обучения модели LambdaMART.
  • Столбец «interaction_action_number» в train_df назначается переменной y_train, представляющей метки релевантности для обучающих данных.

Группировка по идентификатору запроса (набор проверки):

  • Как и в обучающем наборе, validation_df DataFrame группируется по столбцу 'query_id', и рассчитывается количество экземпляров для каждого запроса.
  • Полученные значения счетчика преобразуются в массив NumPy и присваиваются переменной qids_validation.

Подготовка данных для проверки:

  • X_validation DataFrame создается путем исключения столбцов «query_id» и «interaction_action_number» из validation_df.
  • Остальные столбцы в X_validation содержат функции, используемые для оценки модели LambdaMART.
  • Столбец «interaction_action_number» в validation_df назначается переменной y_validation, представляющей метки релевантности для данных проверки.

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

Обучение модели LambdaMART:

Теперь мы готовы обучить нашу модель LambdaMART с помощью LightGBM. Вот пример фрагмента кода для демонстрации процесса обучения:

model = lgb.LGBMRanker(
    objective="lambdarank",
    metric="ndcg",
)
model.fit(
    X=X_train,
    y=y_train,
    group=qids_train,
    eval_set=[(X_validation, y_validation)],
    eval_group=[qids_validation],
    eval_at=10,
    verbose=10,
)

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

Инициализация модели:

Начнем с инициализации модели LambdaMART с помощью класса lgb.LGBMRanker. Мы указываем цель как «лямбдаранг», а метрику оценки как «ndcg» (нормализованный дисконтированный кумулятивный прирост). Эти настройки указывают на то, что наша модель будет обучена оптимизации цели ранжирования LambdaMART и оценке ее производительности с использованием показателя NDCG.

Обучение моделей:

Далее мы обучаем модель с помощью метода fit. Мы предоставляем обучающие данные X_train (матрица признаков) и y_train (целевые метки) вместе с аргументом group, представляющим группы запросов. Аргумент group имеет решающее значение для LambdaMART, поскольку он помогает обрабатывать сгруппированный характер данных. Кроме того, мы указываем данные проверки, используя eval_set в виде списка, содержащего матрицу признаков проверки X_validation и метки цели проверки y_validation. Аргумент eval_group представляет группы запросов для данных проверки. Мы установили eval_at=10, чтобы оценить производительность модели на первых 10 позициях. Наконец, для аргумента verbose установлено значение 10, чтобы отображать прогресс обучения каждые 10 раундов бустинга.

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

Прогнозы модели:

import numpy as np

def ndcg(labels, predictions):
    # Calculate Normalized Discounted Cumulative Gain (NDCG)
    labels = np.asarray(labels)
    predictions = np.asarray(predictions)
    
    # Sort the predictions in descending order
    sorted_indices = np.argsort(predictions)[::-1]
    
    # Retrieve the corresponding labels
    sorted_labels = labels[sorted_indices]
    
    # Calculate the Discounted Cumulative Gain (DCG)
    dcg = np.sum((2 ** sorted_labels - 1) / np.log2(np.arange(2, len(labels) + 2)))
    
    # Sort the labels in descending order to calculate the ideal DCG
    ideal_labels = np.sort(labels)[::-1]
    ideal_dcg = np.sum((2 ** ideal_labels - 1) / np.log2(np.arange(2, len(labels) + 2)))
    
    # Calculate NDCG by normalizing DCG by the ideal DCG
    ndcg = dcg / ideal_dcg if ideal_dcg != 0 else 0
    
    return ndcg

pred_validation = model.predict(X_validation, raw_score=False)
ndcg(y_validation, pred_validation)

code определяет функцию Python ndcg, которая вычисляет метрику нормализованного дисконтированного совокупного дохода (NDCG) с учетом набора меток и соответствующих прогнозов. Вот объяснение кода:

  1. Определение функции: код начинается с определения функции с именем ndcg, которая принимает два параметра: labels и predictions. Эти параметры представляют собой наземные метки истинности и прогнозируемые баллы или ранжирование соответственно.
  2. Преобразование входных данных в массивы Numpy: код преобразует входные данные labels и predictions в массивы NumPy для выполнения эффективных вычислений.
  3. Прогнозы сортировки: код сортирует массив predictions в порядке убывания и извлекает соответствующий labels на основе отсортированных индексов.
  4. Расчет дисконтированной совокупной прибыли (DCG): код вычисляет DCG путем суммирования дисконтированной прибыли каждого ранжированного элемента по формуле (2^label - 1) / log2(rank).
  5. Вычисление идеального DCG: для расчета идеального DCG код сортирует массив labels в порядке убывания и применяет ту же формулу, что и для расчета DCG.
  6. Расчет NDCG: код вычисляет NDCG путем нормализации DCG по идеальному DCG. Если идеальный DCG равен 0 (чтобы избежать деления на ноль), NDCG устанавливается равным 0.
  7. Возврат значения NDCG: Наконец, функция возвращает вычисленное значение NDCG.
  8. Чтобы вычислить NDCG для набора проверки, код использует обученную модель для прогнозирования оценок для матрицы признаков проверки X_validation. Затем прогнозы передаются вместе с фактическими метками y_validation в функцию ndcg для вычисления значения NDCG.
  9. Вы можете использовать эту функцию для оценки производительности ранжирования вашей модели LambdaMART, сравнивая прогнозируемые оценки с истинными метками и получая значение NDCG.

NDCG (нормализованная дисконтированная совокупная прибыль):

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

NDCG сочетает в себе два важных понятия: дисконтированная совокупная прибыль (DCG) и идеальная дисконтированная совокупная прибыль (IDCG). DCG вычисляет кумулятивный выигрыш, присваивая элементам уменьшающийся вес в зависимости от их положения, в то время как IDCG представляет собой максимально достижимый кумулятивный прирост для идеального ранжирования. Нормализуя DCG с помощью IDCG, NDCG обеспечивает значение от 0 до 1, где 1 указывает на наивысшее качество ранжирования.

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

Преимущества НДЦГ:

  1. Оценка релевантности: NDCG учитывает градуированную релевантность элементов, что позволяет проводить более точную оценку эффективности ранжирования. Он отражает тот факт, что не все соответствующие элементы имеют одинаковый уровень важности или воздействия.
  2. Чувствительность позиции: NDCG учитывает позицию элементов в рейтинге. Он признает, что элементы, расположенные вверху списка, имеют большее влияние, и придает им больший вес, подчеркивая важность правильного упорядочения.
  3. Гибкость в оценке: NDCG не навязывает строгие бинарные суждения о релевантности (релевантные или нерелевантные), но допускает различные уровни релевантности. Эта гибкость делает его подходящим для доменов, где релевантность элементов субъективна или имеет несколько уровней.
  4. Нормализация и сопоставимость: NDCG нормализует DCG по идеальному DCG, предоставляя нормализованную меру, которая позволяет проводить содержательное сравнение различных рейтингов и наборов данных. Эта нормализация позволяет объективно оценивать и сравнивать модели в различных сценариях.
  5. Стандартизированная метрика: NDCG — хорошо зарекомендовавшая себя и широко принятая метрика в сообществах, занимающихся поиском и ранжированием информации. Он предоставляет исследователям и практикам общий язык для обсуждения и оценки эффективности алгоритмов ранжирования.

Используя NDCG в качестве оценочной метрики в своем блоге, вы можете продемонстрировать надежность и эффективность LambdaMART с LightGBM в создании высококачественных рейтингов. Его релевантность, чувствительность к положению и нормализация делают NDCG ценным инструментом для оценки и сравнения различных алгоритмов и моделей ранжирования.

Заключение:

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

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

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

Чтобы оценить производительность модели LambdaMART, мы ввели понятие нормализованного дисконтированного кумулятивного выигрыша (NDCG), широко используемого показателя оценки для ранжирования задач. Мы объяснили преимущества NDCG, такие как осведомленность о релевантности, чувствительность к положению, гибкость в оценке, нормализация и сопоставимость. Используя NDCG, специалисты-практики могут оценивать и сравнивать различные алгоритмы ранжирования, демонстрируя эффективность LambdaMART с LightGBM в обеспечении высококачественного ранжирования.

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