Рекомендательная система для товаров с неявными рейтингами на основе алгоритмов ALS и коллаборативной фильтрации (user-based и item-based)
- data_learn_thread - товары, открытые для покупки в момент тестирования, проведена фильтрация недоступных товаров.
thread_uid - идентификатор товара
post_date - дата появления товара (временная метка unix)
last_post_date - дата последней активности в карточке товара
bill_date - дата начала продаж
thread_date - служебный столбец
- data_learn_user - пользователи, проявившие активность в ≥ 10 товарах в момент обучения, т.е. отфильтрованы случайные пользователи.
user_uid - идентификатор пользователя
- data_learn_match - интересы пользователей (data_learn_user) к товарам (data_learn_thread) в момент обучения
user_uid - идентификатор пользователя
thread_uid - идентификатор товара
join_date - дата интереса к товару, если пользователь купил, нулевое значение, если просто отслеживает
match_date = MAX (join_date, thread_date) - производная, от дат выше, которую использовали для пессимизации по времени, момент, на который скорей всего данный товар актуален данному пользователю
- data_target_thread - товары, созданные 7-14 дней назад от момента обучения, открытые для покупки в момент тестирования (подмножество data_learn_thread).
thread_uid - идентификатор товара
- data_target_user - пользователи, для которых строятся рекоммендации (подмножество data_learn_user), отфильтрованы неактивные
user_uid - идентификатор пользователя
- data_test_match - новые интересы пользователей data_target_user к товару data_target_thread в момент тестирования, которых еще не было в момент обучения
user_uid - идентификатор пользователя
thread_uid - идентификатор товара
CF (IB_cos_sim) - CF item-based, основанная на косинусном сходстве
CF (IB_dice) - аналогично, но с метрикой dice
CF (IB_jaccard) - аналогично, но с jaccard
CF (UB) - CF user-based
ALS - Alternating Least Squares алгоритм
Во всех алгоритмах, кроме ALS использовалась также пессимизация по времени, основанная на формуле 180days/(180days + now_date - match_date), чтобы хоть как-то учесть изменение интересов пользователей со временем (вещь спорная). В коллаборативной фильтрации использовались различные фильтрации результатов после расчета матрицы сходства (отсечение по значению, отсечение по квантилю, отсечение по числу схожих).
Любые замечания, предложения, улучшения по коду и подходам - приветствуются!