로그데이터 설계 과정(feat.GA4)

Uno·2022년 11월 1일
0

데이터분석

목록 보기
1/2
post-thumbnail

원문) https://brunch.co.kr/@seongminyoo/134
참고자료)


로그데이터를 쌓기로 마음을 먹게되는 이유는 여러가지가 있다고 생각합니다. 몇 개만 써보겠습니다.

  • 직관과 감으로 의사결정하는 것이 너무 프레질한 의사결정 방법이니 이것을 개선하자.
  • 데이터를 기반으로 사용자를 이해하자
  • 경쟁사가 뭔가 하니까, 따라가기만 하는 것은 우리 서비스에 부적합한 기능이 추가될지 모른다. 우리만의 기준을 세우자.

이러한 이유들로 데이터 기반 의사결정을 하고자 하실거라고 봅니다. 그리고 도구들을 알아보면, 일단 초창기니까 무료로 가볍게 해볼 수 있는 "GA4" 를 선택하게 되구요.

데이터를 단순히 수집하는 수단을 고민하시기 전에, 데이터를 수집하는 목적을 명확히 하고, 그 목적을 달성하기 위한 로그 데이터를 쌓으면 원하는 결과에 좀더 빨리 다가가지 않을까 생각됩니다.

로그를 적재하기 전까지 활동; 문제정의

로그 데이터 설계하기 전에 가장 중요한 것은 "문제" 를 정의하는 일 입니다. 왜냐하면, 문제에 대한 정의 없이는 데이터를 적재해도 활용할 수 없습니다. 데이터 그 자체는 아무런 가치판단을 하지 않는 객체 그 자체이니까요.

그래서 글쓴이는 데이터 적재하기 전에 문제라는 말 대신 "스스로 무엇이 궁금한지를 열거해 보는 것" 이 우선이라고 이야기 합니다.

원문에서는 블로그를 예시로 들었습니다. 저는 원두 이커머스 앱이라고 가정하겠습니다.

원두 이커머스 앱을 관리하다보니, 방문자들이 어떤 마음으로 이 앱을 이용하는지 그리고 어떤 패턴이 있는지 궁금했습니다 - 문제 인식

그래서 문제를 정의했습니다.

나의 앱에서 어떤 부분에 가장 큰 흥미(혹은 관심) 을 느끼는 것일까?

이렇게 정의하고 나니, 어떤 앱 동작(이벤트) 가 흥미를 느끼는지 정의를 하면 될 것 같았습니다. 그래서 몇 개 열거해보겠습니다.

<관심이 있다고 판단되는 이벤트 리스트>

  • 특정 상품을 장바구니에 추가하는 행위
  • 상품 리스트를 스크롤 하는 비율
  • 이벤트 팝업을 클릭하고, 90% 이하로 스크롤 하는 행위
  • 상품에 대한 Q&A 작성 행위

이러한 이벤트들을 정의했으면, 지표로 만들어 볼 수 있을 듯 합니다.

<지표>

  • 장바구니 추가 버튼 횟수
  • Q&A 추가 횟수
  • 스크롤 비율
  • 이벤트 팝업 클릭
  • 이벤트 팝업 클릭 후, 스크롤 비율

이제 이 데이터를 계속 로그를 쌓으면서, 그 추이를 보면 방문자들을 좀더 잘 이해할 수 있을 겁니다. 저는 이를 위해서 GA4 를 선택했습니다.

참고: 로그(Log) 어원

여기 단어에서 "로그(Log)" 는 통나무를 의미합니다. 과거 항해일지를 통나무에 기록했다 하여 그것을 "Log book" 이라고 불렀고, 지금은 기록하는 그 객체 자체를 "로그" 라고 칭한다고 합니다.
(꺼무위키 : https://namu.wiki/w/로그)

같은 맥락으로 블로그라는 단어도 있는데, World Wide Web + Log = WebLog 로 불리다가 특정 블로거가 줄여서 부르다가 blog 가 되었다는 설이 있습니다.
(블로그를 설명하는 블로그글: https://blog.naver.com/PostView.naver?blogId=mskim566&logNo=222288830118&from=search&redirect=Log&widgetTypeCall=true&topReferer=https%3A%2F%2Fwww.google.com%2F&directAccess=false)

로그의 구조

결론 먼저 말하면, 로그의 구조는 "대상(Object)" 와 "성질(Attribute)" 로 이뤄져 있습니다.

로그 = 대상 + 성질

그러면, 대상이 무엇이고 성질이 무엇인지 알면 되겠죠. 원문에서는 자동차를 통해 예시를 들고 있습니다. 저는 커피로 예시를 들겠습니다.

회사에 있는데, 누군가 탕비실에 있는 검정색 액체를 보고 "이것은 커피입니다." 라고 말했다고 칩시다. 옆에 있던 저는 이렇게 말합니다.

이것은 커피입니다.

  • 이 커피는 블루마운틴 원두야.
  • 가격은 3만원이야.
  • 3대 커피 원두야.

추가된 정보 3 가지(=TMI) 가 있죠. 이것들을 "성질" 이라고 합니다. 그리고 커피를 "대상" 이라고 합니다. 이것을 그대로 GA 로 보면 다음과 같습니다.

await FirebaseAnalytics.instance.logEvent(
	name: '커피',
	parameters: {
		'가격': '30000',
		'원두': '블루마운틴',
		...
	}
)

위 코드는 Dart 코드 입니다. 다른 언어들도 참조하길 희망하시면 아래 링크를 참조하시면 됩니다.
링크: https://firebase.google.com/docs/analytics/screenviews

내용을 보면, 커피라는 이름에 파라미터에 속성들이 들어가 있습니다. 그리고 이러한 이벤트들에 이름을 붙일 수도 있습니다.

여기서는 Object를 "Event" 라고 부릅니다. 그리고 그것에 대한 추가 정보를 "Parameter" 라고 칭하고 있네요. 또 다른 곳에서는 "Property" 라고 부르기도 합니다.

<정리>

  • Object = Event
  • Attribute = Parameter = Property

위에 코드를 잠시 다시 보겠습니다.

await FirebaseAnalytics.instance.logEvent(
	name: '커피',
	parameters: {
		'가격': '30000',
		'원두': '블루마운틴',
		...
	}
)

그 중에서 파라미터만 보면, 다음과 같습니다.

parameters: {
		'가격': '30000',
		'원두': '블루마운틴',
		...
}

여기서 '가격' 과 '원두' 하나하나는 "변수" 라고 부릅니다. 즉, 변수들이 모여서 파라미터가 됩니다. 부분집합 개념입니다.

GA 에서는 이를 Key 와 Value 로 칭합니다.

<관계>

'가격' : '30000' = Key : Value

변수를 추가하는 것은 데이터를 바라보는 관점

변수를 추가하는 행위의 목적은 "데이터를 00의 관점으로 보겠다." 입니다. 제가 이전 예시에서 아래와 같이 "가격" 과 "원두" 에 대해서 변수를 추가했습니다.

parameters: {
		'가격': '30000',
		'원두': '블루마운틴',
		...
}

가격을 추가한 이유는 간단합니다. 가격별로 얼마나 많은 사용자가 원두를 구매했는지 보고 싶기 때문입니다. 원두를 추가한 이유도 마찬가지로, 어떤 원두를 얼마나 많은 구매자의 선택을 받았는지 궁금하기 때문입니다.

  • 위 이미지는 GA의 메뉴 > 보고서 를 눌렀을 때, 하나의 보고서 화면입니다.
  • 좌측에 보라색 영역이 측정 기준입니다.
  • 상단에 갈색 영역이 측정 항목입니다.
  • 지금 측정기준은 이벤트 이름으로 구분되어 있습니다. 이곳에 제가 원하는 측정기준으로 변경할 수 있습니다.(아래 이미지 참조)

그러면 이 측정기준은 어떻게 만드느냐. 아래 이미지처럼 메뉴 > 구성 > 맞춤정의 > 맞춤 측정기준 만들기 로 이동하시면 됩니다.

(GA에서 맞춤 측정기준+맞춤 측정항목 = 맞춤정의 라고 불러서 헷갈립니다. 유의.)

그럼 맞춤 측정 기준이 파라미터니까, 제가 파라미터를 지정해주지 않으면, 제가 만든 측정기준이랑 매칭이 안될 수 있겠죠. 그래서 새롭게 생성할 때, 이벤트 매개변수를 넣어주어야합니다.(아래 이미지 참조)

여기까지 정리하면 다음과 같습니다.

파라미터를 추가하는 것은 내가 데이터를 바라보는 관점을 추가하는 것

소셜로그인 회원가입 로그 데이터 설계로 알아보는 이벤트 택소노미

  • 이벤트 택소노미

    택소노미란, 그리스어 '분류'를 뜻하는 Tassein 과 '규칙, 체계'를 의미하는 Nomos의 합성어입니다. 즉, 분류체계 를 의미합니다.

이벤트 택소노미라는 것은 이벤트를 어떻게 분류체계를 구성할지 고민하는 활동입니다. 소셜로그인 버튼을 예시로 이밴트 택소노미 과정을 설명할까합니다.

  • 위 이미지처럼, 소셜 로그인에 4 가지 방법이 있다고 가정해봅시다.

택소노미의 절차는 다음과 같습니다.
1. 질문 정의(원문에서는 "보고싶은 결과물 상상하기" 혹은 "궁금한 것을 열거하기" 라고 합니다.)
2. 이벤트 이름 정의
3. 이벤트 속성 정의

1단계: 질문 정의

소셜로그인 버튼 4 개를 보면 마케터라면 아마 이런 생각을 할지 모르겠습니다.

어떤 소셜 로그인으로 가장 많이 가입을 할까?

2단계: 이벤트 이름 정의

그러면 4 가지의 소셜로그인 방식을 포함하는 하나의 이벤트 이름을 결정해야합니다. 주제를 정한다고 생각하셔도 좋을 것 같습니다.

이전 코드를 다시 보겠습니다.

await FirebaseAnalytics.instance.logEvent(
	name: '커피',
	parameters: {
		'가격': '30000',
		'원두': '블루마운틴',
		...
	}
)

여기 중에서 "커피" 부분을 결정하는 단계입니다. 수정한 코드는 아래와 같습니다.

await FirebaseAnalytics.instance.logEvent(
	name: '회원가입',
	parameters: {
		
	}
)

3단계: 이벤트 속성 정의

4 개의 소셜로그인을 하나로 묶을 이름을 정했으면, 각각을 구분할 속성을 정의해야합니다. 아래 코드를 다시 보겠습니다.

await FirebaseAnalytics.instance.logEvent(
	name: '회원가입',
	parameters: {
		'sign_up_type': 'naver', // kakao, google, apple etc...
	}
)

이전에 "변수를 추가하는 것은 데이터를 바라보는 관점" 라고 이야기 했습니다. 지금 sign_up_type 이라고 변수를 추가했으므로 이제 해당 변수로 데이터를 구분해서 볼 수 있습니다.

마무리

"로그데이터를 설계하는 과정은 목적(가설) 이 먼저이고, 그것을 검증하기 위한 이벤트를 정의하는 것이 그 다음이다." 로 요약할 수 있을 것 같습니다.

profile
iOS & Flutter

0개의 댓글