이벤트나 사용자 속성을 기준으로 이벤트를 그룹화할 때, 일부 결과가 (none)
이라는 그룹으로 분류된 것을 보았을 수 있습니다. Amplitude에서 (none)
은 null 값을 나타냅니다.
하지만 일부 사용자에 대해 null 이벤트나 사용자 속성 값이 나타나는 이유는 무엇일까요?
이 문서에서는 사용자에 대해 null 및 예기치 못한 속성 값이 나타나는 일반적인 이유를 알아보겠습니다.
이벤트 속성
Amplitude는 이벤트 기반의 분석 플랫폼으로, 모든 차트와 코호트는 이벤트 수준에서 쿼리합니다. 차트는 이벤트 당시의 이벤트 속성 값을 반환합니다.
이벤트 속성은 이벤트의 구성 요소이기 때문에, 이벤트 속성 값은 이벤트 수준에서 고유할 수 있습니다. 이벤트 당시에 null 값이 있는 이벤트를 전송할 경우, 해당 이벤트 속성을 기준으로 그룹화하면 일부 이벤트나 사용자를 (none)
버킷으로 분류하게 됩니다.
예시를 들어 보겠습니다. 사용자 A는 1월 1일에 한 번, 2월 1일에 한 번 Send Message
를 트리거했습니다. Audience
이벤트 속성은 1월 15일에 계측되었으므로, 사용자가 1월 1일에 Send Message
를 트리거했을 때는 사용 가능한 상태가 아니었습니다. Audience
속성은 Default
및 Mentioned_Contacts.
와 같은 값만 가질 수 있고, 사용자 A가 Send Message
를 2월 1일에 실행했을 때 이벤트 속성은 Audience = Default.
였습니다.
이러한 정보를 기반으로 했을 때 사용자 A는 아래 차트에서 어떻게 계산될까요?
사용자 A는 Default
버킷에서 한 번, (none)
버킷에서 한 번 계산됩니다. 2월 1일 이벤트 시점에 Audience = Default
, 1월 1일 이벤트 시점에 Audience = (none)
이었기 때문입니다.
이벤트와 사용자는 이벤트 시점에 전송된 속성 값에 따라 분류됩니다.
사용자 속성
이벤트 속성과 유사하게 차트는 이벤트 당시의 사용자 속성 값을 반환합니다.
사용자 속성은 여기에서 설명하는 프로세스에 따라 별도의 표에 저장되고 이벤트에 적용됩니다. 사용자 속성 값이 업데이트되어도 과거 이벤트에 연결된 사용자 속성 값은 변경되지 않습니다.
맞춤 속성
사용자 이벤트에 연결된 맞춤 사용자 속성은 이벤트 시점의 사용자 속성 값을 반영합니다.
또 다른 예시를 들어 보겠습니다. 1월 15일에 Account_Type
이라는 사용자 속성 유형을 계측했습니다. 사용자 A는 Shopper
유형의 계정을 보유한 등록 사용자이며 1월 1일에 한 번, 2월 1일에 한 번 Add Item to Cart
를 트리거했습니다.
이러한 정보를 기반으로 했을 때 사용자 A는 아래 차트에서 어떻게 계산될까요?
Account_Type
사용자 속성은 1월 15일까지 계측되지 않았으므로, 1월 15일 전에 트리거된 모든 이벤트는 Account_Type.
에 대해 null 값을 갖습니다. 따라서 사용자 A는 (none)
버킷에서 한 번, Shopper
버킷에서 한 번 계산됩니다.
고유 값으로 결과를 측정하면 중복되는 사용자는 각 고유 버킷에서 제거됩니다. 즉, 사용자 A는 2월 1일과 2월 2일에 Add Item to Cart
를 트리거해도 위의 Shopper
버킷에서 한 번만 계산됩니다.
null이 아닌 사용자 속성 값을 전송할 때도 같은 로직이 적용됩니다. 이벤트와 사용자는 이벤트 시점에 적용된 속성 값에 따라 분류됩니다.
Amplitude는 사용자 속성이 시간에 따라 변할 수 있다는 점을 고려하여 이러한 로직을 구현했습니다. 예를 들어 City
는 사용자가 다른 도시로 여행하며 이벤트를 트리거할 경우 시간에 따라 변할 수 있는 속성입니다. 이벤트 당시 사용자가 어디에 있었는지 이해하는 것이 가장 최근의 사용자 위치를 이해하는 것보다 더 중요할 수 있습니다.
위치 속성
위치 사용자 속성(예:
, City
, DMA
, Region
)은 GeoIP에 따라 결정됩니다. Amplitude는 MaxMind 데이터베이스를 사용합니다. 이는 가장 신뢰도 높은 디지털 매핑 소스로 널리 사용되며, 사용자의 IP 주소를 기반으로 위치 정보를 검색합니다.Country
클라이언트측 이벤트의 경우, MaxMind가 해당 IP 주소에 대해 null을 반환하면 위치 속성은 (none)
값을 가질 수 있습니다. MaxMind는 신뢰도 높은 소스지만, 국가에 따라 도시/지역 정보의 정확성과 가용성은 달라질 수 있습니다(자세한 정보는 여기에서 확인).
서버측 이벤트의 경우, 위치 속성은 GeoIP(location_lat
사용, 불가능한 경우 location_long
사용)에 따라 결정되거나 API 호출에서 명시적으로 정의됩니다. Amplitude의 HTTP API는 이벤트와 함께 맞춤 City
, DMA
, Region
및 Country
값을 보내도록 합니다. 이러한 값을 보내기로 선택한 경우 Amplitude는 GeoIP를 반영하도록 이를 수정하지 않습니다. 4개 필드를 모두 업데이트하세요. 하나의 필드만 설정해도 나머지 필드가 모두 자동으로 재설정됩니다(여기에서 각주 3 참조).
기기 속성
Amplitude는 device_brand
, device_manufacturer
, device_model
문자열을 사용자 기기에서 바로 가져오고 이러한 문자열을 기기 유형 저장소에 매핑하여
및 Device family
을 결정합니다.Device type
글로벌로 출시되는 신규 휴대폰 모델의 경우 아직 매핑되지 않은 기기 유형이 있을 수 있습니다. 이러한 경우
은 Device type
(none)
이 됩니다.
기기 매핑과 별개로 이러한 필드(platform
, os_name
, os_version
, device_brand
, device_manufacturer
, device_model
, carrier
)가 함께 업데이트되지 않은 경우 서버측 이벤트의 기기 정보는 null일 수 있습니다. 이러한 필드 중 하나만 설정해도, 동일한 이벤트에 대해 명시적으로 설정되지 않은 경우 다른 모든 속성 값이 자동으로 null로 재설정됩니다(여기에서 각주 2 참조).