
이제 6시에 해가 다 뜬다 !
오늘도 힘내보자.
SQL
LENGTH() : Byte 수 조회 (한글의 정확한 글자 수를 알기가 어렵다.)CHAR_LENGTH() : Byte 수가 아닌 단순히 문자의 수 조회 (한글의 글자 수를 알기 위해 사용)UNIONPYTHON
answer = [alp[0].upper() + alp[1:].lower() if alp else "" for alp in splits]if alp 조건 평가 :alp[0].upper() + alp[1:].lower()를 실행alp[0].upper() :alp[1:].lower() :코호트 리텐션을 구하는 문제들을 풀어보고 정리해봤는데,
WITH 문을 활용해 원하는 기간의 유저나 활동을 조회하는 CTE 를 만들고,
각 테이블을 조인하거나 테이블과 테이블 관계를 이어지게 조회하여 원하는 데이터를 출력하는 형태로 리텐션을 구할 수 있었다.
특정 월에 첫 주문을 한 고객 중에서
다음 달에도 주문한 고객의 비율을 백분율로 계산하는
쿼리 중 일부를 자세히 뜯어서 살펴보면,
ROUND(
(
COUNT(DISTINCT CASE
WHEN DATE_FORMAT(DATE_ADD(first_order_date, INTERVAL 1 MONTH), '%Y-%m') = order_month
THEN f_cn
ELSE NULL
END) / COUNT(DISTINCT f_cn)
) * 100,
2
) AS month1
DATE_ADD(first_order_date, INTERVAL 1 MONTH) :
DATE_ADD 함수는 first_order_date에 1개월을 더한 날짜를 계산한다.
예를 들어, first_order_date가 2023-06-01이면, 이 부분은 2023-07-01 이 된다.
DATE_FORMAT(..., '%Y-%m') :
DATE_FORMAT 함수는 날짜를 'YYYY-MM' 형식의 문자열로 변환해준다.
위의 DATE_ADD 결과가 2023-07-01이라면, 이 부분은 2023-07이 된다.
CASE WHEN ... THEN ... ELSE NULL END :
DATE_FORMAT으로 변환된 날짜가 order_month와 같은지 확인하여
order_month가 2023-07이라면 f_cn (고객 번호)를 반환하고,
그렇지 않으면 NULL을 반환한다.
COUNT(DISTINCT ...):
다음 달에 주문한 고유한 고객의 수를 센다.
CASE 문에서 조건이 참인 경우의 f_cn을 세므로,
특정 월에 첫 주문한 고객 중 다음 달에도 주문한 고객 수를 구할 수 있게 된다.
COUNT(DISTINCT f_cn) :
첫 주문 월에 주문한 고유한 고객의 수를 센다.
(COUNT(DISTINCT CASE ... END) / COUNT(DISTINCT f_cn)) :
다음 달에 주문한 고객 수를 첫 주문 월의 전체 고객 수로 나눠
다음 달에도 주문한 고객의 비율을 구한다.
(... * 100) :
비율에 100을 곱해 백분율로 변환
ROUND(..., 2) :
최종 결과를 소수점 두 자리로 반올림하여 출력
피벗(PIVOT) 테이블 만들기
+) 퍼널 분석, 코호트 리텐션 분석 과제 리뷰
퍼널 분석에서 제출했던 과제에 큰 결점이 있었다는 것을 알게 되었다.
요약하자면,
A 이벤트 다음 B 이벤트로 전환되는 행동에 대한 전환율을 구하는 것인데,
내가 짠 쿼리는 이벤트의 전, 후 순서에 상관없이 전환이 되는 경우도 포함했고,
이벤트의 전, 후 시간을 AND 조건으로 비교하는 쿼리를 포함해야
순서에 맞는 전환율을 구할 수 있었다.
*퍼널 조건을 명시했기 때문에
선행되는 단계가 후행 단계보다 먼저 진행되었어야 한다는 조건이 필요하다.
예시 : AND ei.info_time <= cs.signup_time
하이퍼 파라미터 튜닝 (랜덤포레스트, xgboost)
랜덤 포레스트의 하이퍼 파라미터 튜닝은
max_depth (트리의 깊이)와 n_estimators (트리의 갯수)를 조절할 수 있다.
평균적인 조절값 :
max_depth =3~12
n_estimators =100~1000
xgboost 의 하이퍼 파라미터 튜닝은
max_depth (트리의 깊이), n_estimators (트리의 갯수), learning_rate (학습률)을 조절할 수 있다.
평균적인 조절값 :
max_depth =3~12
n_estimators =100~1000
learning_rate =0.1~0.01
XGB는 n_estimators에 반비례하여 learning_rate 를 조절해줘야 함.
datapane 라이브러리를 활용하여 데이터 분석 및 시각화 대시보드 만들어보기데이터 정하기
코로나 데이터로 대시보드 만들기 ?
다음 회의까지 코로나 데이터 및 대시보드 레퍼런스 체크하기
오늘의 한 줄.
진짜.. 시간 도둑이 따로 없군 !