Вопрос или проблема
Я работаю с набором данных, который содержит более 100 000 записей. Вот как выглядят данные:
email_id cust_id campaign_name
123 4567 World of Zoro
123 4567 Boho XYz
123 4567 Guess ABC
234 5678 Anniversary X
234 5678 World of Zoro
234 5678 Fathers day
234 5678 Mothers day
345 7890 Clearance event
345 7890 Fathers day
345 7890 Mothers day
345 7890 Boho XYZ
345 7890 Guess ABC
345 7890 Sale
Я пытаюсь понять последовательность кампаний и ищу следующую возможную кампанию для клиентов.
Предположим, я обработал свои данные и сохранил их в ‘camp’.
С использованием Word2Vec –
from gensim.models import Word2Vec
model = Word2Vec(sentences=camp, size=100, window=4, min_count=5, workers=4, sg=0)
Проблема с этой моделью заключается в том, что она принимает токены и возвращает текстовые токены с вероятностями в ответ, когда ищет сходства.
Word2Vec принимает этот формат ввода –
['World','of','Zoro','Boho','XYZ','Guess','ABC','Anniversary','X'...]
И выдает этот формат вывода –
model.wv.most_similar('Zoro')
[Guess,0.98],[XYZ,0.97]
Поскольку я хочу предсказать последовательность кампаний, которая чаще всего встречается в сочетании с целевым словом, мне интересно, есть ли способ, которым я могу передать нижеуказанный ввод модели и получить название кампании на выходе.
Мой ввод будет следующим –
[['World of Zoro','Boho XYZ','Guess ABC'],['Anniversary X','World of
Zoro','Fathers day','Mothers day'],['Clearance event','Fathers day','Mothers
day','Boho XYZ','Guess ABC','Sale']]
Вывод –
model.wv.most_similar('World of Zoro')
[Sale,0.98],[Mothers day,0.97]
Я также не уверен, есть ли какая-либо функциональность в Word2Vec или других аналогичных алгоритмах, которые могут помочь в поиске следующей возможной кампании для отдельных пользователей.
-
Word2Vec работает со словами, а вы хотите сравнить ‘тексты’ (серии слов разной длины). Для этого doc2vec может быть более подходящим.
-
У вас очень короткие ‘тексты’ (названия кампаний), поэтому генерирование эмбеддинга только из них не даст больших эффектов. Вы могли бы начать с некоторых предобученных векторов, но в любом случае, вероятно, вы хотите достичь гораздо большего. Но вопрос в следующем:
-
Неясно из ваших примеров и объяснений, какова природа текстов, с которыми вы хотите найти наиболее похожее название кампании. С одной стороны, вы пишете о том, чтобы найти наиболее частое с данным словом – тогда вы могли бы просто создать статистику слов и кампаний. С другой стороны, в вашем примере вы передаете весь текст – тогда вышеупомянутое применимо, находя наиболее похожий текст, используя текстовые векторы.
Ответ или решение
Вопрос о использовании моделей последовательности, таких как Word2Vec, для анализа данных кампаний требует детального рассмотрения, так как стандартные методы могут не полностью удовлетворять вашим потребностям. Давайте подробно разберем этот процесс и предложим возможные решения.
Понимание вашей задачи
Вы работаете с набором данных, содержащим множество записей, в котором представлена информация о кампаниях и клиентах. Ваша цель – предсказать следующую кампанию для конкретных клиентов на основе предыдущих взаимодействий.
Проблема с Word2Vec
Модель Word2Vec, как вы верно заметили, работает на уровне токенов (слов), а не на уровне целых текстовых единиц (таких как названия кампаний). Исходя из вашей структуры данных, вы пытаетесь использовать модель для обработки последовательностей, что приводит к проблемам с входными данными и выходными результатами.
Предложенные подходы
-
Использование Doc2Vec:
Ваша текущая задача напоминает задачу представления текстовых документов. Вместо Word2Vec, который обучает вектора для отдельных слов, рассмотрите возможность использования Doc2Vec, который предназначен для работы с целыми документами. Doc2Vec сможет создать вектора для названий кампаний, учитывая контекст их использования в последовательностях.Пример использования:
from gensim.models import Doc2Vec from gensim.models.doc2vec import TaggedDocument # Подготовка данных в формате TaggedDocument documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(camp)] model = Doc2Vec(documents, vector_size=100, window=4, min_count=5, workers=4) # Получение похожих кампаний similar_campaigns = model.dv.most_similar('World of Zoro')
-
Анализ частотности:
Если ваша основная цель – найти следующую наиболее частую кампанию после заданной, можно рассмотреть методы, основанные на статистическом анализе. Вы можете подсчитать количество повторений кампаний после каждой кампании для каждого клиента и затем использовать эти статистические данные для предсказаний.Пример:
import pandas as pd # Создание датафрейма из ваших данных df = pd.DataFrame(camp, columns=['campaign']) # Подсчет частоты next_campaigns = df.groupby('campaign')['next_campaign'].value_counts().unstack().fillna(0) # Выбор кампании с наибольшей частотой recommendations = next_campaigns.idxmax(axis=1)
-
Комбинирование методов:
Для более точного предсказания вы также можете комбинировать методы, используя как Doc2Vec для создания векторов кампаний, так и частотный анализ для нахождения наиболее вероятных "следующих шагов".
Заключение
Word2Vec может оказаться неподходящим инструментом для вашей задачи, так как вы работаете с последовательностями кампаний, а не с отдельными словами. Рекомендуется использовать Doc2Vec или методы, основанные на анализе данных, чтобы выявить закономерности в поведении клиентов. Оба подхода предоставляют мощные инструменты для анализа текстовых данных, и использование их в комбинации может значительно повысить эффективность предсказания будущих кампаний.
Если у вас есть дополнительные вопросы, не стесняйтесь обращаться!