About Data
-
BigQueryML로 유저 세그먼트 클러스터링하기About Data 2023. 10. 27. 08:29
BigQueryML? 구글 빅쿼리 콘솔에서 SQL 쿼리로 간편하게 머신러닝 모델을 만들고, 실행할 수 있는 서비스입니다. 기본적인 회귀 모델부터 K-means 클러스터링, 시계열 분석, DNN, 랜덤 포레스트, XGBoost 등 다양한 모델을 활용할 수 있습니다. 유저 세그먼트? 서비스를 이용하는 고객을 임의의 기준으로 분류한 결과를 의미합니다. 주로 User Persona라고 해서 하나의 모델로 유저를 정의하는 경우도 있지만, 사용자 집단의 동질성이 낮은 경우는 하나의 페르소나보다 각각의 군집으로 유저를 분류하는 것이 유리합니다. 이렇게 유저를 분류하는 것이 중요한 이유는 각 분류마다 원하는 것과 행동 양식이 다르기 때문에 만족도를 느끼는 지점 역시 다르고, 이는 곧 기능 개발과 캠페인 메시지 전달 방..
-
Airflow로 마케팅 데이터 파이프라인 관리하기About Data 2021. 7. 9. 14:20
아래 이미지는 현 회사에서 관리하고 있는 ETL 파이프라인 중 마케팅 Summary data에 관한 Airflow DAG 그래프입니다. 마케팅 데이터 파이프라인의 구성 1. 소스 데이터 입수 위의 DAG에는 포함되어있지 않지만, 광고 매체의 보고서 API를 호출하거나 서비스 DB에서 소스를 추출하는 스케줄도 에어플로우로 관리합니다. 2. 가공 및 적재 위의 DAG에서 가장 처음으로 실행되는 두 개의 Task인 userid_mapping >> userid_mapped_logs에 해당합니다. 이 Task는 log 데이터에서 로그인 전 생성되는 anonymous_id와 로그인 후 기록되는 user_id를 매핑해서 특정 유저가 로그인하기 전의 로그까지 해당 유저의 기록으로 연결해 주는 역할을 합니다. 다음으로 ..
-
Google Spreadsheet 데이터 DB화 하기About Data 2021. 7. 3. 20:39
1. 도입 배경 마케팅, 비즈니스, 물류, 콘텐츠 등.. 수많은 유저들이 구글 스프레드시트에 데이터를 기록합니다. DB 데이터와 연결하여 분석하기 위해서 기존에는 Re:dash의 스프레드시트 커넥터를 사용했습니다. Tableau 등 시각화에 대한 니즈가 커지면서 Re:dash에서 데이터를 보는 것만으로는 부족하게 되었습니다. 2. 작업 내역 GCP에서 프로젝트를 만들고, 서비스 계정을 생성합니다. api 접속을 위한 키를 발급 받고, auth 코드를 작성합니다. def gs_auth() : # 구글 API 인증 scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] credentials = Serv..
-
Segment -> AWS Glue, S3, Kinesis, Lambda를 이용한 클라이언트 로그 스트림 구축About Data 2021. 7. 3. 20:00
1. 배경 기존 클라이언트 로그 환경 : Segment 서비스에서 Redshift로 바로 적재, 1시간 간격 문제점 1시간 이내 로그 조회 불가 파티셔닝이 되어 있지 않아 조회 속도 느림 이벤트 소스, 유형 별로 각각 테이블이 생성되어 유저의 행동 흐름을 파악하기 어려움 2. 작업 내역 Segment에서 Kinesis로 로그 전송하도록 설정 Kinesis에서 S3로 로그 적재하는 Firehose 데이터 전송 스트림 생성 S3 전송 시 디폴트로 연/월/일/시 4depth의 파티션이 구성됨 Lambda에서 S3에 로그가 적재될 때마다 특정 디렉토리 하나로 이동시키는 함수 생성 Kinesis에서 보내 주는 24시간 분량의 데이터만 파티션 없이 모아 두기 Glue Crawler로 테이블을 생성한 후 스키마를 일..
-
Terraform을 활용한 EMR Presto 도입기About Data 2021. 6. 5. 06:16
현 회사에서 EMR Presto를 도입한 과정에 대해 간략히 정리해 봅니다. 1. 기존의 환경 메인 서비스 DB : Mongodb Analytics Node를 활용한 MQL 데이터 분석 기타 서비스 DB : MariaDB RDS Replica를 활용한 SQL 데이터 분석 Data Warehouse : Redshift1 위의 서비스DB들을 원본으로 PySpark & Glue Metastore를 통한 1일 주기의 ETL 진행 Data Lake : S3 Service Log : Redshift2 Segment 플랫폼을 통한 1시간 주기의 원본 업데이트 기타 Summary Data : Postrgesql DB 데이터 소비자들이 위의 원천 데이터들을 가공하여 별도로 저장하는 공간 2. 문제점 DW 업데이트 주기가..
-
사이즈가 큰 csv데이터 S3 -> redshift DB로 Copy하기About Data 2020. 12. 18. 17:27
약 7만 row, 40mb정도 되는 파일을 redshift로 올리기 위해 가장 먼저 아래와 같은 python 코드를 사용했었습니다. df.to_sql(tablename, if_exists = 'replace', con=engine, schema = schema, index=False) 그런데 이렇게 하고 redshift 쿼리 로그를 보니 무려 한 줄씩 일일히 insert로 들어가고 있던..... 한 줄마다 평균 0.5초씩만 계산해도 9시간이 넘게 소요되는 속도입니다. 이건 아니다 싶어서 방법을 찾다가 S3 버킷에 파일을 올리고 redshift copy문을 찾아서 적용해 봤습니다. 먼저 내용이 있는 데이터프레임을 csv형식으로 S3에 올리기 위해 사전 작업을 합니다. csv_buffer = StringIO..
-
수학으로만 답할 수 없는 데이터들About Data 2020. 10. 19. 19:29
회사 동료 A와의 대화 중, 데이터를 단순한 숫자로 보았을 때 해결할 수 없는 문제들에 대해 이야기를 나누었습니다. 일례로, '오렌지' 라는 단어가 검색된 데이터 하나만으로 유저의 의도를 파악할 수 있을까요? 유저의 검색 목적은 '오렌지 주스'일 수도 있고, '오렌지 티셔츠'일 수도 있고, '오렌지 나무'일 수도 있습니다. 그래서 데이터를 볼 때 문맥(Context)를 파악하는 것이 중요합니다. 유저의 의도에 보다 부합하는 결과를 제공하기 위해 그들의 행동을 따라 분석하고, 그룹화하는 작업이 필요합니다. 1. 문맥과 그룹화 '오렌지 주스'라는 단어는 다음 중 어느 단어 다음에 검색될 가능성이 높을까요? - 오렌지 티셔츠 - 아침 식사 만약 이 단어들을 수학적으로 분류한다면 같은 '오렌지'라는 단어가 들어..