useragent, ip, session_id로 고유 방문자 클러스터링


15

session_id, ip, user_agent아래 조건 에 따라 웹 사이트 액세스 데이터 형식 과 시간 소인 (선택 사항)이 제공되면 세션을 순 방문자수로 가장 잘 클러스터링하는 방법은 무엇입니까?

session_id:는 모든 새로운 방문자에게 부여 된 아이디입니다. 만료되지는 않지만 사용자가 쿠키를 허용하지 않거나 쿠키를 지우거나 브라우저를 변경하거나 장치를 변경하면 더 이상 인식되지 않습니다.

IP 여러 사용자가 공유 할 수 있으며 (무료 Wi-Fi 카페 또는 ISP의 IP 재 할당을 상상해보십시오) 최소 2 명의 집과 직장이있을 것입니다.

User_agent브라우저 + OS 버전으로 장치를 구별 할 수 있습니다. 예를 들어 사용자는 휴대 전화와 랩톱을 모두 사용하지만 Windows + 애플 랩톱을 사용하지는 않습니다. 동일한 세션 ID에 여러 개의 useragent가있을 가능성은 없습니다.

데이터는 여기에서 바이올린처럼 보일 수 있습니다 : http://sqlfiddle.com/#!2/c4de40/1

물론 우리는 가정에 대해 이야기하고 있지만 가능한 현실에 가까워지는 것에 관한 것입니다. 예를 들어, session_id가 다른 제한된 시간 프레임에서 동일한 ip 및 useragent가 발생하는 경우, 일부 예외를 제외하고는 동일한 사용자라고 가정합니다.

편집 : 문제가 해결되는 언어는 중요하지 않으며 대부분 구현이 아닌 논리에 관한 것입니다. 의사 코드는 괜찮습니다.

편집 : 바이올린의 느린 특성으로 인해 mysql을 읽거나 실행할 수 있습니다.

select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id
from 
    (select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr
    from
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a
    join
        (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
        union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b
        order by 1
    )d
inner join
    (select 1 as nr union all select 2 union all select 3   union all select 4 union all select 5
    union all select 6 union all select 7 union all select 8 union all select 9 )e
    on d.nr>=e.nr

답변:


9

여기에서 한 가지 가능성은 (션 오언이 게시 한 것의 확장입니다) "안정적인 사용자"를 정의하는 것입니다.

주어진 정보에 대해 ip의 해시 인 user_id와 일부 사용자 에이전트 정보 (의사 코드)를 만드는 것을 상상할 수 있습니다.

uid = MD5Hash(ip + UA.device + UA.model)

그런 다음 사용자에 대해 관찰 한 사용량 추론에 따라이 ID에 "stable"또는 "stable"을 표시합니다. 특정 기간 동안의 방문 횟수, 쿠키가 지속되는 기간, 사이트에서의 일부 종료 작업 (원래 로그에 명시되지 않은 것으로 알고 있음) 등의 임계 값이 될 수 있습니다.

여기서 아이디어는 쿠키를 삭제하지 않는 사용자와 쿠키를 삭제하지 않는 사용자를 분리하는 것입니다.

여기에서 session_ids를 로그의 안정적인 uid로 지정할 수 있습니다. 그런 다음 비교적 확신이없는 불안정한 사용자를 위해 "남은"session_id를 갖게됩니다. 세션이 너무 많거나 적을 수 있으며, 한 명만있을 때 여러 사람에게 행동을 유발할 수 있습니다. 그러나 이것은 현재 "확실하지 않은"사용자로 제한됩니다.

그런 다음 안정적인 그룹에서 분석을 수행하고 불안정한 그룹으로 분석합니다. 예를 들어 총 세션 수를 알고 있지만 해당 세션을 생성 한 사용자 수는 확실하지 않습니다. # 개의 세션 / 고유 한 안정적인 사용자를 찾아서이 그룹을 사용하여 불안정한 그룹의 "고정 된"순 사용자 수를 예상 할 수 있습니다.

projected_num_unstable_users = num_sess_unstable / num_sess_per_stable_uid

이는 불안정한 사용자에 대한 사용자 수준별 조사에는 도움이되지 않지만 일정 시간 동안 지속되는 안정적인 사용자 집단으로부터 최소한의 마일리지를 얻을 수 있습니다. 다양한 방법으로 프로젝트 동작과 불안정한 그룹을 계산할 수 있습니다. 위의 내용은 알고 싶은 간단한 예입니다. 일반적인 아이디어는 다시 확신하는 사용자 집합을 정의하고, 측정 할 대상을 측정하고, 특정 기본 정보 (검색 횟수, 방문수, 클릭 수 등)를 사용하여 알 수없는 사용자 공간으로 투영하고 추정하는 것입니다. 그들을 위해 계산합니다.

이것은 로그인이 필요없는 서비스의 고유 사용자 수, 로깅 등에서 오랫동안 문제가되고 있습니다.


아주 좋은 답변입니다! 독서를 위해 제 3 자 쿠키의 경우 많은 사파리 모바일 버전이 기본적으로이를 사용하지 않으며 다른 브라우저는 파이프 라인에서 동일하다고 덧붙이고 싶습니다. 사람들을 염두에두고 별도로 취급하십시오.
AdrianBR

1
쿠키 이탈은 로그인이 필요없는 서비스의 경우 상당히 문제가됩니다. 많은 사용자는 쿠키를 이해하지 못하기 때문에 상당한 시간 동안 따라갈 수있는 코호트가있을 수 있습니다.
cwharland 2014 년

6

이 데이터만으로는 할 수있는 것이 많지 않지만 기계 학습에 의존하지 않는 것은 아닙니다.

예, 동일한 IP이지만 다른 User-Agent의 세션은 거의 다른 사용자입니다. 프록시 / Wi-Fi 액세스 포인트의 경우를 제외하고 동일한 IP 및 User-Agent를 가진 세션은 일반적으로 동일한 사용자입니다. IP 당 세션 수의 분포를보고 식별 가능한 '집계'IP를 식별하여 식별 할 수 있습니다. 시간이 겹치는 동일한 IP / User-Agent의 세션은 거의 확실합니다.

사용자를 더 구별하려면 더 많은 정보가 필요합니다. 예를 들어, 사용자가 연결하는 사이트 또는 IP 주소는 세션을 차별화하기위한 매우 강력한 기반이됩니다. 그런 다음 세션이 동일하거나 다른 사용자 인 경우를 파악하기 위해보다 정교한 학습을 ​​시작할 수 있습니다.


컨텍스트는 iframe을 통해 타사 쿠키를 사용하여 단일 사이트 내에서 정보를 추적 할 수 있습니다. 이 사이트는 전자 상거래입니다. Google 애널리틱스는 주로 IP, 때로는 useragent를 봅니다. 시간대별로 IP 만 볼 때 비슷한 숫자를 얻을 수 있습니다. 그러나 Google
웹 로그

방문한 제품 페이지를 살펴보면 상점 구조가 사용자를 미리 정해진 경로로 안내하여 매우 유사한 동작을
유발할

1
또한 ML 이이 질문의 맥락에 적합하지 않다는 것을 알고 있습니다. 오히려 하드 코딩 된 알고리즘은 합리적인 결과를 제공하는 대부분의 추적 솔루션에서 사용됩니다. ML로 달성 할 수있는 마지막 몇 가지 정확도는이 정보가 추세를 관찰하는 데 사용되기 때문에 관련성이 떨어집니다.
AdrianBR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.