Рекомендация на основе истории товара

У меня есть данные файла/таблицы csv в следующем формате,

UserId Item1 Item2                  
1      url1   url3                                                                                     
1      url4   url6            
2      url2   url3         
2      url2   url4      
2      url4   url6     
3      url4   url6     
3      url2   url3      

Итак, здесь я хочу предсказать item2 для конкретного пользователя, если известно значение item1. Можем ли мы использовать совместную фильтрацию для того же? Если да, подскажите :)


person Rahul Rajaram    schedule 20.04.2015    source источник
comment
То, что вы описали до сих пор, может быть простым запросом к базе данных. SELECT item2, count(*) FROM table WHERE item1 = '...' GROUP BY item2 ORDER BY COUNT(*). У вас есть еще данные? Пользователи голосуют/оценивают предметы?   -  person sisve    schedule 20.04.2015
comment
Никаких дополнительных данных :( Но может быть дополнительный столбец, который показывает количество посещений элемента 2 после элемента 1. Причина, по которой не используется простой запрос к базе данных, заключается в том, что я хочу найти похожих пользователей и соответственно рекомендовать элемент 2 (я просто хочу попробовать, не знаю, получится ли).   -  person Rahul Rajaram    schedule 20.04.2015


Ответы (1)


Я уверен, что это сработает, вам просто нужно выяснить, как вы решаете, похож пользователь или нет. Следующее дает вам поле предложения, основанное на том, какие значения item2 были соединены с item1 (и наоборот) - оно исключает элементы, которые уже есть у пользователя. Конечно, вы можете сделать намного сложнее, но вот кое-что для начала

select *, ISNULL((SELECT STUFF
            ((SELECT ', ' + CAST(ITEM2 AS VARCHAR(10)) [text()] from
                    ((select top 5 ISNULL(item2,'') item2, count(item2) as cnt from items as CountTable1 where item1=Res.item1 and item2 is not null and len(item2) > 0
                     and item2 not in (select item2 from items where id=Res.id UNION select item1 from items where id=Res.id)
                    group by item2 order by cnt desc)
                    UNION
                    /* Below includes suggestions from item1 */
                    (select top 5 ISNULL(item1,'') item1, count(item1) as cnt from items as CountTable2 where item2=Res.item1 and item1 is not null and len(item1) > 0
                     and item1 not in (select item1 from items where id=Res.id UNION select item2 from items where id=Res.id)
                    group by item1 order by cnt desc))
                as Suggs where item1=Res.item1 FOR XML PATH('')
                , TYPE)
            .value('.','NVARCHAR(MAX)'),1,2,' ')
        List_Output)
    ,'') as Suggestions from items as Res

Скрипка SQL

person 7usam    schedule 20.04.2015