이번 포스트에서는 Binary logistics Regressor를 이용한 Classification Model을 BigQuery ML을 이용하여 만들어 보고자 한다.
앞서 이야기한대로 BigQuery ML은 Linear Regression(선형 회귀), Binary logistic regression(이진 로지스틱 회귀)의 모델을 생성 할 수 있다.
Linear Regressor는 수치를 예측 하고자 할 때, Binary logistics regression은 분류 예측을 하고자 할때 사용한다.
이번 Post는 Google Merchandise Store의 구매 자료를 토대로 방문자의 구매 확률에 대해 예측 하는 모델을 생성 하고, 실제 생성된 모델을 기반으로 실제 구매 여부 및 모델 평가(Model Evaluation)까지 해볼 것이다.
1. 데이터 탐색 및 데이터 이해하기
우선 Machine Learning을 위해서는 데이터에 대한 이해 및 탐색. 그리고, 예측을 위해 필요한 데이터의 특성은 무엇인가에 대한 이해가 선행 되어야 한다. 우선 데이터의 이해를 위해 전체 방문자 대비 구매자의 비율을 구하는 쿼리를 수행 해보도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#standardSQL
WITH visitors AS(
SELECT
COUNT(DISTINCT fullVisitorId) AS total_visitors
FROM `data-to-insights.ecommerce.web_analytics`
),
purchasers AS(
SELECT
COUNT(DISTINCT fullVisitorId) AS total_purchasers
FROM `data-to-insights.ecommerce.web_analytics`
WHERE totals.transactions IS NOT NULL
)
SELECT
total_visitors,
total_purchasers,
total_purchasers / total_visitors AS conversion_rate
FROM visitors, purchasers
| cs |
`data-to-insights.ecommerce.web_analytics` 는 BigQuery ML을 Test 하기 위해 Merchandise Store의 데이터를 공개한 것이며, 위의 데이터는 전체 방문자 대비 실제 구매자를 구하는 데이터이다. 위의 with절의 visitor는 방문자의 ID를 Count 하는 데이터이고, purchasers는 전체 데이터중 transaction Flag가 있는 경우를 거래가 이루어진 것으로 보고, Count 한 데이터이다.
[그림1. 방문자 대비 구매자비율] |
전체 방문자 수는 741,721명이며(이는 전체 방문 횟수가 아닌 전체 방문자의 수이다.) 이 방문자들 중 실제 구매 한 사람의 수는 20015명이다. 즉 (20,015/741,721)*100 = 2.69%의 방문자가 Login 후 구매를 진행 하는 것을 알 수 있다.
두번째로는 매출과 수익에 대해 상위 5개를 구하는 Query이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#standardSQL
Select prod_name
, prod_cat_name
, Format("%'d",CAST(units_sold AS int64)) as unit_sold
, Format("%'.2f",CAST(revenue AS float64)) as revenue
From (
SELECT
p.v2ProductName prod_name,
p.v2ProductCategory prod_cat_name,
SUM(p.productQuantity) AS units_sold,
ROUND(SUM(p.localProductRevenue/1000000),2) AS revenue
FROM `data-to-insights.ecommerce.web_analytics`,
UNNEST(hits) AS h,
UNNEST(h.product) AS p
GROUP BY 1, 2
ORDER BY revenue DESC
LIMIT 5
);
| cs |
[그림 2. 상위 5개의 매출 및 수량] |
해당 쿼리는 전체 매출 중 가장 많이 팔린 상품 명과 수량을 구하는 쿼리이며, 상위 5개를 보여주는 쿼리이다.이때, From 절의 Inline View 쿼리 중 UNNEST(hits), UNNEST(h.product)를 볼 수 있는데, 이는 해당 Table의 Denormalize 된 테이블의 Reapeat Column을 사용하는 것이고, Target Table의 Dataset의 1개의 Row에 대응되는 Repeat 컬럼에 대해 배열로 나열 하여, 연산 하는데 사용하려는 것이다. 다시 말해 Unnest Keyword는 Denormalize 된 Table의 Row에 대해 하나의 배열 타입으로 바꿔서 하나의 테이블로 인식 하는 역할을 해주는 것이다. 즉, Query 상에서 Table의 Row에 대해 1:N의 형태로 풀어 주는 역할을 한다.
2. 예측하고자 하는 목표 확인
앞서 탐색한 데이터를 기반으로 Machine Learning Model을 통해 확인 할 수 있는 것은 새로운 방문자가 향후에 구매 할 가능성이 있는 가를 확인 할 수 있다. 이는 주요 타켓 고객을 확인 함으로써, 구매 할 확률이 높은 고객에 대해 마케팅이 가능 해진다.
우리는 앞서 첫 번째 쿼리를 통해 방문자 대비 방문자의 구매비율을 알 수 있고, 두번째 쿼리를 통해 가장 많이 판매 된 상품을 알아 보았다. 해당 DataSet에서 유입 Channel이 확인이 되고, 해당 사용자가 어떤 유입 경로를 통해 구매자에 대해 유입 및 구매 여부를 알 수 있었다.
해당 DataSet이 만들어 지는데 수집 경로가 되는 GA(Google Analytics)는 E-Commerce에서 사용자의 방문에 대한 특성 항목 및 측정 값을 수집한다. 우리는 유입되는 데이터 중에서 알아 봐야 할 부분은 사용자가 사이트에서 방문 후 얼마 만큼의 시간을 보냈는가와, 사용자가 바로 떠났는가에 대해 중점적으로 알아 볼 필요가 있다. 여기서는 totals.bounces [방문객이 거래를 일으키지 않고, 사이트를 바로 떠났는가에 대한 여부. 데이터는 (1 Or Null)로 표시], 그리고 totals.timeOnSite [방문객이 머문 시간 초 단위]로 확인 할 수 있다.
두가지의 컬럼 만을 이용 했을 시 정확한 Machine Learning 모델을 만들 수 있을지는 아직은 알 수 없다. 하지만, 두가지 데이터로 학습을 했을 때도 정확한 모델을 가질 수 있을지는 나중에 확인 해볼 수 있다. 아래의 쿼리를 통해 데이터를 검색 해보도록 하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#standardSQL
SELECT
* EXCEPT(fullVisitorId)
FROM
(SELECT
fullVisitorId,
IFNULL(totals.bounces, 0) AS bounces,
IFNULL(totals.timeOnSite, 0) AS time_on_site
FROM
`data-to-insights.ecommerce.web_analytics`
WHERE
totals.newVisits = 1)
JOIN
(SELECT
fullvisitorid,
IF(COUNTIF(totals.transactions > 0 AND totals.newVisits IS NULL) > 0, 1, 0)
AS will_buy_on_return_visit
FROM
`data-to-insights.ecommerce.web_analytics`
GROUP BY fullvisitorid)
USING (fullVisitorId)
ORDER BY time_on_site DESC
LIMIT 10;
| cs |
[그림 3. 예측을 위한 Query 수행] |
해당 쿼리 결과로 Model을 만들 것이다. 그렇다면 해당 쿼리에서 Feature(특성)은 무엇인가? 바로 bounces와 time_on_site이다. 그렇다면 정답인 Label은 무었인가? 바로 will_buy_on_return_visit. 즉 다시 돌아와서 구매 했는지 아닌지 여부이다. 우리는 방문자가 다시 돌아와서 구매를 진행 할 것인지 아닌지 여부를 Machine Learning을 통해 알아 보는 Model을 생성하여 예측 해볼 것이다.
하지만, 해당 데이터를 통해 우리는 해당 데이터를 가지고 좋은 Machine Learning모델을 얻을 수 있을 것인가에 대해서는 아직 모른다. 그리고 쿼리를 검색 해보면 알겠지만 예측에 대한 Accurancy는 단 1건만이 존재 하므로 좋은 지표는 아닐지도 모른다.
정말 좋은 Model이 생성이 될지 아닐지에 대해서는 다음 Post인 Model 생성에서 알아 보도록 하겠다.
댓글 없음:
댓글 쓰기