2017-02-16 5 views
0

Предположим, что у нас есть журналы доступа в Интернет.кластеризация по метке времени

timestamp     page_visted 
====================================== 
2017-01-02 10:00:02   /xxx/a.html 
2017-01-02 10:00:06   /xxx/b.html 
2017-01-02 10:01:03   /xxx/c.html 
2017-01-02 10:02:02   /xxx/d.html 
2017-01-02 15:00:02   /xxx/a.html 
2017-01-02 15:01:10   /xxx/b.html 
2017-01-02 15:03:05   /xxx/c.html 

Пользователь посетил наш веб-сайт 2 раза и посетил 7 страниц. Мой вопрос: «Каков наилучший способ узнать, сколько раз он посетил наш веб-сайт, а не сколько страниц он посетил?»

Поскольку пользователь может получать различное количество страниц и проводить разное время для каждого посещения, трудно установить фиксированное число или интервал для группировки этих записей. Есть ли какой-либо алгоритм для группировки (кластеризации) этих записей на основе их метки времени? Благодарю.

+0

В вашем журнале доступа также содержится идентификатор пользователя Я предполагаю? – mtoto

+0

Если у вас есть страница входа или любая страница, которая дает аутентификацию, вы можете считать только те. – Knight71

+0

@ Knight71 это хорошая идея, если нет опции «запомнить меня» – ImDarrenG

ответ

0

начало сеанса/конец

Простой подход просто выбрать номер, который указывает на сеанс закончился, я видел 20 минут бездействия, используемых для просмотра сеанса закончилась.

Более надежный подход включает в себя обработку этого как probabilistic problem с учетом отсутствия фиксированной длины сеанса или фиксированного количества времени между сеансами.

Первое, что вам нужно сделать, это посмотреть на данные. В частности, время между приемами. У вас есть список событий, посвященных странице. Вам нужно будет рассчитать распределение времени между приемами в секундах (время, прошедшее между посещениями страниц).

Справедливое допущение состоит в том, что распределение будет выглядеть Poisson-like, или это будет похоже на Пуассон, но additional humps, если межсессионные времена действительно сгруппированы.

Если данные показывают хороший Poisson distribution, простой подход заключается в использовании распределения времени посещения напрямую.

Принимая percentile, который подходит вашему прецеденту из распределения времени между приемами, вы можете определить довольно полезный порог, выше которого время начала прибытия предполагает начало нового сеанса.

В качестве альтернативы, если это более полезно, вы можете использовать распределение, чтобы получить вероятность наблюдения за временем прибытия, с низкой вероятностью, указывающей начало/конец нового сеанса.

Более сложным является то, что распределение является бимодальным, скажем, потому что люди склонны размещать свои сеансы аналогичным образом. Если это так, может быть проще исследовать простой алгоритм кластеризации, такой как k-средства, в моменты времени между приходами, где вы ожидаете, что один кластер для сессионных посещений и один кластер для межсеансовых посещений.

граф сеансы

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

+1

Возможно, вы могли бы проиллюстрировать свои подходы с помощью кода, так как это то, для чего SO.Однако, помимо первого абзаца, все перечисленные вами опции излишне сложны для существенно простой проблемы. – mtoto

+0

О, хорошо. Сожалею. Я взволновался. – ImDarrenG

+0

Использование идентификатора сеанса, такого как sessionId, должно быть самым простым решением. К сожалению, у нас нет такого идентификатора сеанса, и его сложно сгенерировать. Я проверю алгоритмы, о которых вы упомянули. Благодарю. – Scott2000

Смежные вопросы