Вопрос или проблема
У меня есть данные о покупках клиентов, в которых каждая строка указывает на товар, купленный клиентом. Проблема в том, что даже если клиент одновременно покупает пять товаров, то для этого будет пять разных строк, и в результате общее количество строк в данных стало слишком большим для обучения. Что я могу сделать, чтобы уменьшить объем данных, чтобы я мог эффективно их обучать. Просто для контекста проблемы, я хочу рекомендовать товары клиентам на основе их данных о покупках.
Размер набора данных: (7981262, 16)
Описание данных:
Переменная Описание
customerID уникальный ID клиента
DOB дата рождения клиента
Gender пол
State штат клиента
PinCode почтовый индекс района, где живет клиент
transactionDate дата транзакции
store_code уникальный код магазина
store_description описание магазина
till_no номер кассы в магазине
transaction_number_by_till уникальный номер транзакции по кассе,
transactionDate, store_code
promo_code если использован промокод (предложение) в транзакции
promo_description описание предложения
product_code уникальный код купленного товара
product_description описание купленного товара
sale_price_after_promo цена продажи товара после применения
акции
discountUsed после акции клиент применил эту скидку(-и) на транзакцию
Если общий размер вашего набора данных слишком велик, возьмите случайную выборку в n%. Я предлагаю взять выборку из n% пользователей, а затем использовать все строки для каждого из этих выбранных пользователей. Если у вас есть временные метки, я дополнительно предлагаю разделить ваш набор для обучения/тестирования на основе времени. Например, для пользователя с 10 купленными товарами, обучайтесь на первых 8 товарах и пытайтесь предсказать последние 2 товара.
Думаю, вы могли слышать о том, что называется Ассоциационным майнингом, даже если не знаете, пожалуйста, пройдите по ссылке.
Причина, по которой я это предлагаю, заключается в том, что перед тем, как передать сырые транзакции модели. Нам нужно преобразовать их в корзины, т.е. если клиент купил 3 товара, то все они будут относиться к одной и той же корзине, используя ID клиента (любой уникальный идентификатор).
Это можно сделать с помощью команды,
transDat <- as (myDataFrame, "transactions") # преобразовать в класс 'transactions'
Таким образом, вы получите корзины, которые напрямую являются вашим желаемым результатом. После этого вы можете напрямую применить Ассоциационный майнинг, чтобы получить желаемые рекомендации и выбрать Лучшие рекомендации.
Дайте знать, если у вас есть еще какие-либо сомнения.
Вы можете проверить различные решения рекомендательных систем на Github или аналогичных платформах, которые используют фильтрацию на основе товаров или пользователей, которые будут учитывать такие наборы данных.
Ответ или решение
Сложная задача обработки данных, обширный набор которых включает 7 981 262 строки, требует продуманного подхода для эффективного обучения моделей рекомендаций. Основная проблема в вашем случае заключается в том, что множественные транзакции одного клиента фиксируются в отдельных строках. В данном ответе мы рассмотрим несколько методов, которые помогут вам сократить размер данных и повысить эффективность их анализа.
1. Преобразование данных в «корзины» покупок
Одним из наиболее эффективных методов снижения сложности данных является агрегация трансакций по уникальному идентификатору клиента. Каждая корзина будет содержать все товары, купленные одним клиентом за одну транзакцию. Это можно выполнить с помощью инструмента агрегации, который объединит все продукты, купленные одним клиентом в рамках одной покупки:
import pandas as pd
# Пример кода для агрегации данных
basket = (df.groupby(['customerID', 'transactionDate'])['product_code']
.apply(list).reset_index())
Такой подход позволит вам сократить количество строк в таблице и представит каждую покупку в виде списка товаров, что упростит модель рекомендаций.
2. Снижение размера с помощью случайной выборки
Если вы имеете дело с очень объемным набором данных, еще одним подходом является отбор случайной выборки. Вы можете выбрать случайные n% пользователей и использовать все их транзакции для обучения. Это будет гарантировать, что данные представляют всю популяцию пользователей, при этом уменьшая общий размер данных:
sampled_users = df['customerID'].sample(frac=0.1).unique()
sampled_data = df[df['customerID'].isin(sampled_users)]
Это также может помочь вам упростить дальнейшие действия с данными, не теряя при этом важной информации.
3. Временное разбиение на тренировочные и тестовые выборки
Чтобы получить более эффективную модель, важно учитывать, что данные имеют временную зависимость. Разделение данных на тренировочные и тестовые выборки на основе временной метки превращает вашу задачу в предсказание будущих покупок. Например, для клиентов с десятью завершёнными покупками вы можете использовать первые восемь для обучения модели, а последние два — для тестирования.
4. Применение методов Ассоциации
Для создания рекомендаций вы можете воспользоваться методами ассоциаций, которые идентифицируют паттерны и зависимости между товарами. Это можно сделать с помощью специализированных библиотек, таких как mlxtend
для Python. Преобразование данных в формát «корзин» позволяет эффективно применять алгоритмы, такие как Apriori или FP-Growth.
from mlxtend.frequent_patterns import apriori, association_rules
# Применение алгоритма ассоциации к преобразованным данным
frequent_itemsets = apriori(basket, min_support=0.01, use_colnames=True)
rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1)
5. Использование систем рекомендаций
Рассмотрите возможность интеграции систем рекомендаций, таких как Collaborative Filtering или Content-Based Filtering. Эти подходы способны обрабатывать большие объемы данных и предоставляют персонализированные рекомендации на основе прошлых покупок клиентов.
Заключение
Формирование корзин покупок, сокращение размера данных с помощью случайной выборки и временного разбиения, а также использование методов ассоциации и систем рекомендаций — все эти шаги помогут вам наладить эффективное обучение модели с использованием вашего набора данных. Этот подход не только сократит объем обрабатываемых данных, но также улучшит качество и точность рекомендаций для ваших клиентов. Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться.