Mahout: пользователь, который купил XX, также купил XX

Я нашел похожие вопросы, но ответ меня не удовлетворил. По сути, я хотел бы реализовать в mahout предложение предметов на основе покупок (или даже рейтингов). В mahout кажется, что у вас есть модель пользовательского элемента, и рекомендация касается пользователя. Теперь я понимаю, что мы можем заменить термин «пользователь» на «предмет» и «предмет» — рекомендацию по предмету, но я думаю, что это не сработает, как ожидалось. Например, если у нас есть эти данные:

User Item
1    1
1    2
1    3
2    1
2    3
3    1

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

Спасибо


person Matroska    schedule 22.01.2012    source источник


Ответы (1)


Это не тот случай, когда вы рекомендуете товар за товаром, нет.

Вы имеете в виду, что, например, на странице товара вы хотите показать товары, которые покупают чаще всего? На самом деле это проще, чем проблема с рекомендациями, поскольку ответ не является персонализированным; это не зависит от пользователя. Это хорошо.

Конечно, вам все еще нужны пользовательские данные. В нераспределенной среде Mahout этого проще всего добиться с помощью одного из «логических префиксов» DataModels, GenericItemBasedBooleanPrefDataModel и соответствующей метрики ItemSimilarity, например LogLikelihoodSimilarity. Просто позвоните Recommender.mostSimilarItems().

На самом деле это более разумный ответ, чем просто сообщение о том, что чаще всего покупают с помощью этого предмета, — это, как правило, отдает предпочтение предметам, которые просто часто покупают, и точка. Эта метрика будет выделять те, которые необычно часто покупают, учитывая их общую популярность.

person Sean Owen    schedule 22.01.2012
comment
может ли он работать в реальном времени с относительно небольшой мощностью и оперативной памятью? Товары находятся в категориях, и мне нужны только те, которые находятся в той же категории - person Matroska; 22.01.2012
comment
Это зависит от того, насколько велики ваши данные и насколько малы ваши ресурсы, но, конечно, да. - person Sean Owen; 22.01.2012
comment
но извините, если я спрошу вас об этом, моя модель данных находится в mongoDb, поэтому мне интересно, нужно ли мне каждый раз создавать память GenericItemBasedBooleanPrefDataModel и запускать на ней рекомендатор (когда страница отображается) или я должен просто записывать изменения модели (например, новые покупки)? Если я создам MongoDbDataModel, то он будет обновляться каждый раз с небольшой мощностью, верно? (Я совсем запутался в mahout) - person Matroska; 22.01.2012
comment
Я бы периодически считывал все ваши данные в память и строил из них модель. Я бы не стал пытаться получить доступ к экземпляру Mongo в режиме реального времени. Если вы сделаете это, это должно быть быстро и просто. - person Sean Owen; 22.01.2012
comment
Но можно ли создать модель в памяти из экземпляра mongodb, а затем обновить модель памяти и mongodb? - person Matroska; 23.01.2012