분류 전체보기 44

[AB 테스트] 통계적 유의성 검정 방법

자체적인 앱 서비스를 운영하는 대부분의 테크 기업들은 프로덕트에 대한 AB 테스트를 끊임없이 진행하며 서비스를 고도화한다. AB 테스트는 간단히 말해, 기존의 상태에서 뭔가에 변화를 주려고 하는데 이 변화된 것이 기존의 상태보다 더 나은지를 테스트 하는 과정이다. 여기서 기존의 것을 A, 변화된 것을 B라고 하는데 실험 설계 단계에서 핵심 지표와 가드레일 지표 등을 설정하고 실험 종료 후 이 지표들을 측정한다. 측정 결과에 따라 B군으로 롤아웃을 하거나 A군으로 롤백하게 된다. * 가드레일 지표(Guardrail metric) : 실험으로 인해 떨어져서는 안되는 지표* 롤아웃 : 기대했던 대로 실험 결과가 잘 나와서 B군으로 배포하는 경우. 반대로 A군으로 다시 원상복구 해야할 경우, 롤백. 단, 여기서..

Product Analytics 2024.12.05

UX 디자인에 대한 정의

UX 디자인이란 무엇인가.  간단히 말하면 제품과 서비스를 이용하는 사용자의 경험(User Experience, UX)을 디자인하는 것을 의미한다.User Experience란 용어는 90년대 Designing Everday Things의 저자인 Don Norman이 처음 사용하기 시작했다고 하는데, 그는 이에 대해 다음과 같이 설명했다. 제품이란 단순히 제품 그 자체를 말하는 것이 아닌, 여러 요소들이 한 곳에 응집되어 통합된 경험의 집합체이다.제품 또는 서비스의 모든 단계를 고려해야 한다. 초기에 의도한 내용이 최종적으로 어떻게 반영되는지, 첫 사용 단계에서 도움말, 서비스 유지 관리라는 단계에 이르기까지 모든 것을 고려해야 한다. 그리고 UX 디자이너의 일은 이 모든 요소가 원활하게 함께 작용할 수..

Dart 기초 (3) Dynamic Type

void main() { // 변수를 선언하고 거기에 어떤 값을 할당하지 않으면 dynamic // dynamic = 어떤 type의 변수인지 알 수 없는 상태 var animal; animal = 'cat'; animal = 45; animal = true; print(animal); // dynamic으로 직접 명시해줄 수 있음 dynamic animalAge; animalAge = 19; if(animalAge is String){ var ageLength = animalAge.length; print(ageLength); } if(animalAge is int){ int age = animalAge; print(age); } // 다만, dynamic은 정말 필요할 때만 사용 } dynamic 타..

Dart 기초 (2) Variables (변수)

void main() { // var (String) var animal = 'dog'; print(animal); // 변수 명시적 선언 String String anotherAnimal = 'cat'; print(anotherAnimal); // var로 변수 선언한 animal을 다른 값으로 대체 animal = 'elephant'; print(animal); // String으로 변수 선언한 anotherAnimal 다른 값으로 대체 anotherAnimal = 'snake'; print(anotherAnimal); } var 관습적으로 함수나 메소드 내부에 지역 변수를 선언할 때 사용

[백준] 브루트포스 - 덩치(7568)

백준 7568번: 덩치 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net wh = [] result = [] N = int(input()) for _ in range(N): w, h = map(int, input().split()) wh.append((w, h)) for i in range(N): rank = 0 for j in range(N): if (wh[i][0] < wh[j][0]) and (wh[i][1] < wh[j][1]): rank += 1 result.append(rank + 1) ..

[알고리즘] 브루트포스 알고리즘 brute force

브루트포스(Brute Force) 브루트포스 알고리즘은 문자열에서 특정 문자를 탐색하는 검색 알고리즘이며 선형 탐색이라고 보면 된다. 단순 무식하게 가능한 모든 경우의 수를 다 체크하는 가장 기본적인 알고리즘이다. 브루트포스로 알고리즘을 설계할 땐, 모든 경우의 수를 다 고려해야 한다. 대표적으로 for문, while문 등의 반복문을 통해 가능한 모든 경우의 수를 다 고려할 수 있다. 시간복잡도 역시 매우 크다는 게 단점이지만 암호학에선 가장 확실한 방법으로 많이 사용된다.

플러터(Flutter) 설치

참고 링크 https://brunch.co.kr/@mystoryg/114 플러터(Flutter) 개발 환경 구축 목적에 맞는 개발 환경 구축하기 플러터는 크로스 플랫폼 앱 개발을 위한 프레임워크인 만큼 다양한 목적으로 사용될 수 있다. 따라서 개발 환경도 목적에 따라 선택적으로 구축 가능하다. 플러 brunch.co.kr https://wenna.tistory.com/16 [Flutter] 플러터 시작하기 - 다운로드 및 설정 이번 글에서는 플러터를 설치하고 사용 가능하도록 설정하는 과정을 다루어보고자 한다(。・∀・) ノ゙ 필자 개인적으로 플러터 설정 때 애로사항이 많은 기억이 있어 필요하신 분이 있으시다 wenna.tistory.com

[업무기록] google appscript 활용한 구글 스프레드시트 자동화(이진 탐색 알고리즘)

최근 맡았던 업무 중에 쿼리문을 매주 한 번씩 주기적으로 돌린 다음, 구글 스프레드시트로 업데이트 하는 과정 전체를 자동화하는 일감이 있었다. 어제 최종 완료되었는데 사실 중간에 추가 요청이 들어와서 전체 코드를 갈아엎었다. (1) googleapiclient를 활용해 google bigquery와 연동하여 주피터 환경에서 데이터를 불러오기 (2) gspread를 활용해 구글 스프레드시트로 데이터 업데이트(매주 월요일에 최근 1주 데이터 업데이트) (3) 해당 워크시트에서 google appscript를 활용해 일정 기간 동안의 데이터 삭제하는 기능 구현(버튼 클릭하면 스크립트 실행) 이렇게 해서 전달했는데 추가적인 요청사항이 생겨서 전체 과정을 아예 수정했다. (1) googleapiclient를 활용..