세조목

실전 프로젝트 8일차(24.03.07) 본문

데이터 분석 공부/프로젝트

실전 프로젝트 8일차(24.03.07)

세조목 2024. 3. 7. 22:29

1. 문제 풀기

실전 프로젝트 8일차입니다.

금일은 지옥 난이도 문제와 대시보드 작업을 진행했습니다.

 

지옥 난이도 문제

 

지옥 난이도의 문제는 앞선 고급-2 문제의 연장선으로,

고급-2에서 세션의 간격이 30분이 넘어가는 경우가 차지하는 비중이 어느정도인지 확인했다면

지옥 난이도에서는 30분이 넘어가는 이유에 대해서 확인해야했습니다.

 

우선 세션의 간격이 30분이 넘어가는 session_id들만을 별도로 확인해보았는데요,

event_type에 하나의 패턴을 발견할 수 있었습니다.

department-product-cart가 반복되는 패턴입니다.

여러가지 가설들을 세워보긴했으나 이렇다할 가설은 찾을수 없었습니다.

하지만 created_at 컬럼을 보았을때 각각의 event들간 간격이 짧은건 초 단위, 조금 긴건 분 단위인것으로 미루어보아

department-product-cart 한 쌍의 패턴이 여러 번 반복되는 것은 시스템상의 오류일수도 있겠다고 생각했습니다.

 

그리고 다시 한 번 created_at 컬럼을 보면 거의 대부분

장바구니(cart)담기부터 구매(purchase)까지 몇 일 이상씩 소요되는 것을 확인할 수 있습니다.

이는 session 간격이 30분을 넘어가지 않는 경우에도 마찬가지였기때문에

저희는 '고객들이 구매 의사결정을 내리기까지 꽤 오랜 시간을 고민하는구나' 하는 생각을 했습니다.

 

참고로 department-product-cart 한 쌍이 하나의 session_id에 두 번 이상 나타나며

각각의 product-id는 동일하면 안 된다는 로직에 대한 코드는 아래와 같이 작성했습니다.

# 패턴이 2개 이상이고, 모든 product_id가 같은 session id 빈 리스트 만들어놓기
over2_pattern_same_product_sessions = []

# 패턴이 2개 이상인 세션 아이디 찾기
for session_id, i in final.groupby('session_id'):
    event_types = ''.join(i['event_type'])
    
    # 패턴이 2개 이상인 경우
    if event_types.count('departmentproductcart') >= 2:
        # product_id의 고유값 수가 1인 경우 (=product id가 모두 같음)
        product_id_countd = i[i['event_type'] == 'product']['product_id'].unique()
        if len(product_id_countd) == 1:
            over2_pattern_same_product_sessions.append(session_id)

# 해당하는 세션 아이디들의 데이터프레임 행을 뽑기
df_over2pattern_sameproduct = final[final['session_id'].isin(over2_pattern_same_product_sessions)]

# session 간격이 30분을 넘어가는 session_id 中 department-product-cart 한 쌍이 두 번 이상 반복되는 경우의 비중
total_sessionid = final['session_id'].nunique()
over2pattern_sameproduct_sessionid = df_over2pattern_sameproduct['session_id'].nunique()
ratio = over2pattern_sameproduct_sessionid / total_sessionid

print('True가 한 개 이상 있는 (세션 만료가 있는) session_id 그룹')
print('전체 세션 아이디 카운트(고유):', total_sessionid)
print('패턴 2회 이상 반복 및 product_id가 같은 세션 아이디 카운트(고유)', over2pattern_sameproduct_sessionid)
print('비율', ratio)

이렇게 코드를 돌렸을때의 결과값은 아래와 같았습니다.

 

session 간격이 30분을 넘어가지 않는 경우는 어땠을까요?

 

session 간격이 30분을 넘어갔을때 패턴이 2번 이상 반복되는 경우가 99%였던 것과는 달리

30분을 넘어가지 않을때 패턴이 2번 이상 반복되는 경우는 3%에 불과했습니다.

 

이같은 결과를 통해서도 department-product-cart 한 쌍이 두 번 이상 반복되는 경우가 많은 것이

session 간격이 30분을 넘어가는데 충분히 영향을 줄 것이라고 생각해볼 수도 있을 것입니다.

 

2. 대시보드 작업

모든 데이터 품질 검사를 마치고 대시보드 작업에 들어갔는데요,

금일은 큰 틀 정도만 잡아놓았고, 나머지는 내일 오전에 팀원들과 함께 다듬을 예정입니다.