일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 실전 데이터 분석 프로젝트
- 내일배움카드
- 프로그래머스
- 내일배움캠프
- MySQL
- 오블완
- 파이썬
- 파이썬 철저 입문
- SQL
- 파이썬 완벽 가이드
- 스파르타 코딩
- 미세먼지
- R
- hackerrank
- 프로젝트
- wil
- Cluster
- 파이썬 머신러닝 완벽 가이드
- 스파르타
- 파이썬 철저입문
- 텍스트 분석
- 중회귀모형
- 스파르타코딩
- 티스토리챌린지
- 웹 스크랩핑
- 내일배움
- 파이썬 머신러닝 완벽가이드
- 회귀분석
- harkerrank
- TiL
- Today
- Total
OkBublewrap
2025-01-16 TIL (마케팅 MMM 모델링, QCC 리뷰) 본문
아티클 # 22
마케팅 믹스 모델링 MMM
MMM의 정의, 역사, 특징, 단계, 장점과 한계까지 | 이전부터 중요했고, 최근에 다시 중요성이 부각되고 있는 마케팅 프레임이 있습니다. "Marketing Mix Modeling" 입니다. 마케팅 믹스 모델링이란 사용
brunch.co.kr
1. 아티클 주요 내용 요약
- 핵심 주제: 마케팅 프레임 Marketing Mix Modeling
- 주요 내용:
- 마케팅 기본 4가지 요소 Product, Price, Place, Promotion 별 성공을 거두었는지 파악
- 마케팅 비용, 매출을 인과관계로 보고 회귀분석을 통해 두 변인 간 상관성을 밝혀내는 기법
- 어트리뷰션 기법은 사용자 개인 정보 보호를 위한 앱 추정 투명성 정책이 도입되면서 데이터 수집이 매우 어려워지면서 한계를 맞음
- MMM - Collect - Model - Analyze - Optimize 순으로 진행
- 장점 : 성과 예측이 가능하다. 정량적으로 설명 가능
- 단점 : 과거 비즈니스 결과에 의존하여 미래를 예측하는 것이기 때문에 최근에 발생한 변화나 비즈니스의 요인을 반영한 애자일한 의사결정을 내리기 어렵다.
2. 인사이트 및 배운 점
- 배운 점 : 마케팅 분야에서 회귀 분석을 어떻게 활용하는지
- 활용 방안 : 다음 프로젝트나 마케팅 관련 광고 매출에 대해서 진행해보면 적용해볼만 한 것 같다.
QCC 4회차
1번 문제
지역별로 매출이 가장 높은 매장의 매출을 조회하는 SQL 문을 작성해주세요.
단, 해당 지역에 매장이 두 개 이상인 경우만 결과에 포함해주세요.
결과는 지역 이름을 기준으로 오름차순으로 정렬해주세요.
1. 지역별 매출이 가장 높은 매장의 매출
2. 해당 지역 매장이 두 개 이상인 경우
3. 지역 이름 오름차순
-- 1. 해당 지역 매장이 두개 이상인 경우의 REGION_NAME 가져오기
SELECT REGION_NAME
FROM stores
GROUP BY REGION_NAME
HAVING count(*) > 1
-- 2. REGION_NAME의 매출이 높은 값 가져오기
SELECT REGION_NAME, max(SALES) AS highest_sales
FROM stores
WHERE REGION_NAME IN
(
SELECT REGION_NAME
FROM stores
GROUP BY REGION_NAME
HAVING count(*) > 1
)
GROUP BY REGION_NAME
ORDER BY REGION_NAME asc -- 3. 지역 이름 오름차순 정렬
2번 문제
최근 특정 사용자들이 결제를 하지 않고 상품을 주문하거나, 결제를 하지 않은 시점에 이미 상품을 주문하는 버그가 발견되었습니다. 해당 버그를 악용한 사용자를 파악하기 위해 SQL 문을 작성해주세요.
다음 조건에 해당되는 사용자 수를 출력해주세요
1. 결제를 하지 않고 상품을 주문한 사용자
2. 첫 번째 결제일 보다 이전에 상품을 주문한 사용자
<payments> 테이블은 사용자의 결제 정보를 포함합니다.
컬럼명 | 타입 | 설명 |
ID | INT | 결제 ID (PK) |
USER_ID | VARCAHR | 사용자 ID |
AMOUNT | INT | 결제 금액 |
PAY_DATE | DATETIME | 결제 날짜 |
PAYMENT_TYPE | INT | 결제 유형 (0 : 현금, 1 : 카드) |
<order> 테이블은 사용자의 상품 배송 정보를 포함합니다.
컬럼명 | 타입 | 설명 |
ID | INT | 주문 ID (PK) |
USER_ID | VARCHAR | 사용자 ID |
ORDER_DATE | DATETIME | 주문 날짜 |
ITEM | VARCHAR | 주문한 상품명 |
출력값 예시
<payments>
ID | USER_ID | AMOUNT | PAY_DATE | PAYMENT_TYPE |
1 | user1 | 3000 | 2023-01-23 10:00:00 | 0 |
2 | user3 | 5000 | 2023-01-23 14:00:00 | 1 |
3 | user5 | 7000 | 2023-02-23 12:00:00 | 0 |
<orders>
ID | USER_ID | ORDER_DATE | ITEM |
1 | user1 | 2023-02-23 09:30:00 | Laptop |
2 | user2 | 2023-01-23 15:45:00 | Smartphone |
3 | user4 | 2023-01-23 17:20:00 | Headphones |
4 | user5 | 2023-01-23 08:00:00 | Monitor |
- user1은 결제 후 상품을 주문했으므로 버그와 무관
- user2은 결제를 하지 않고 상품을 주문 -> 버그 악용
- user4은 결제를 하지 않고 상품을 주문 -> 버그 악용
- user5은 첫 번째 결제일 이전에 상품을 주문 -> 버그 악용
[결과]
cnt : 3
풀이
-- 1. 각 유저 첫번째 결제일 구하기
select user_id, min(pay_date) as min_pay_date
from payments
group by user_id
-- orders, payments left join
WITH min_payment AS (
SELECT USER_ID, MIN(PAY_DATE) AS min_pay_date
FROM payments
GROUP BY USER_ID
)
SELECT count(DISTINCT o.USER_ID) AS cnt
FROM orders o
LEFT JOIN min_payment mp ON o.USER_ID = mp.USER_ID
WHERE o.ORDER_DATE < mp.min_pay_date OR mp.USER_ID IS NULL;
-- 최초 결제일 전 보다 주문을 빨리한 경우와
-- 결제하지 않았는데 주문이 있는 경우
-- 고유 user_id 추출
3번 문제
고객이 특정 상품 X를 구매했을 때 상품 Y도 함께 구매할 확률을 분석하고자 합니다.
이를 위해, 쇼핑 카트 데이터에서 서로 다른 두 제품 X와 Y가 같은 주문(CART_ID)에 포함된 주문수를 확인하려고 합니다.
- 제품 X와 Y가 같은 주문에 포함된 경우를 계산합니다.
- 두 제품은 서로 다른 이름이어야 하며, 한 쌍의 경우(예: Coffee와 Sausages)는 다른 순서(예: Sausages와 Coffee)로도 포함됩니다.
- 결과는 각 제품 쌍과 해당 제품이 함께 포함된 주문 수를 반환해야 합니다.
- 제품 이름 X와 Y를 기준으로 알파벳 순으로 오름차순 정렬합니다.
1. 모든 경우의 수 구하기
2. 같은 cart_id 일것
3. 제품 X, Y가 다른 이름
4. 제품 X, Y 기준으로 오름차순
-- 1. 모든 경우의 수 구하기
select c1.name as name_x, c2.name as name_y
from cart_products c1
join cart_products c2
where c1.cart_id = c2.cart_id -- 2. 해당 카트 장바구니 안에서의 경우의수 필터링
and c1.name <> c2.name -- 3. 같은 제품 이름이 아닌 것
-- 제품 쌍 갯수 세기
SELECT name_x, name_y, count(*) AS orders
FROM (
SELECT c1.name AS name_x, c2.name AS name_y
FROM cart_products c1
JOIN cart_products c2
WHERE c1.cart_id = c2.cart_id
AND c1.name <> c2.name
) a
GROUP BY name_x, name_y
ORDER BY name_x ASC, name_y ASC; -- 오름차순 정렬
회고
3번 문제 : c1.name <> c2.name을 안넣어줘서 틀림..
2번 문제 읽다가 시간을 너무 소비한 것 같다. 문제 이해 안가면 다른 문제 부터 풀어야겠다.
'Today I Learning' 카테고리의 다른 글
2025-01-17 TIL (일기) (3) | 2025.01.17 |
---|---|
WIL-8주차 (0) | 2025.01.17 |
2025-01-15 TIL (A/B Test) (0) | 2025.01.15 |
2025-01-14 TIL (A/B Test) (0) | 2025.01.14 |
2025-01-13 TIL (프로젝트 개요 작성법) (0) | 2025.01.13 |